getData(); $object = new HTMLPurifier_ArrayMock($array); $this->assertEqual(0, $object->getOffset()); $this->assertEqual($object->getHead(), $object->getOffsetItem()); $this->assertEqual(count($array), $object->getCount()); $this->assertEqual($array, $object->getArray()); } /** * Testing of offset & offsetItem properties while seeking/removing/inserting */ public function testFindIndex() { $array = array(1, 2, 3, 4, 5); $object = new HTMLPurifier_ArrayMock($array); for ($i = 0; $i < $object->getCount(); $i ++) { $object[$i]; $this->assertEqual($i, $object->getOffset()); $this->assertEqual($array[$i], $object->getOffsetItem()->value); } $object[2]; $this->assertEqual(2, $object->getOffset()); $this->assertEqual(3, $object->getOffsetItem()->value); $object->remove(2); $this->assertEqual(2, $object->getOffset()); $this->assertEqual(4, $object->getOffsetItem()->value); $object[1]; $this->assertEqual(1, $object->getOffset()); $this->assertEqual(2, $object->getOffsetItem()->value); $object->insertBefore(1, 'a'); $this->assertEqual(1, $object->getOffset()); $this->assertEqual('a', $object->getOffsetItem()->value); } /** * Testing that behavior of insertBefore the same as array_splice */ public function testInsertBefore() { $array = $this->getData(); $object = new HTMLPurifier_ArrayMock($array); $index = 0; array_splice($array, $index, 0, array('a')); $object->insertBefore($index, 'a'); $this->assertEqual($array, $object->getArray()); $index = 2; array_splice($array, $index, 0, array('a')); $object->insertBefore($index, 'a'); $this->assertEqual($array, $object->getArray()); $index = count($array) * 2; array_splice($array, $index, 0, array('a')); $object->insertBefore($index, 'a'); $this->assertEqual($array, $object->getArray()); } /** * Testing that behavior of remove the same as array_splice */ public function testRemove() { $array = $this->getData(); $object = new HTMLPurifier_ArrayMock($array); $index = 0; array_splice($array, $index, 1); $object->remove($index); $this->assertEqual($array, $object->getArray()); $index = 2; array_splice($array, $index, 1); $object->remove($index); $this->assertEqual($array, $object->getArray()); $index = count($array) * 2; array_splice($array, $index, 1); $object->remove($index); $this->assertEqual($array, $object->getArray()); } /** * Testing that object returns original array */ public function testGetArray() { $array = $this->getData(); $object = new HTMLPurifier_ArrayMock($array); $this->assertEqual($array, $object->getArray()); } /** * Testing ArrayAccess interface */ public function testOffsetExists() { $array = $this->getData(); $object = new HTMLPurifier_ArrayMock($array); $this->assertEqual(isset($array[0]), isset($object[0])); } /** * Testing ArrayAccess interface */ public function testOffsetGet() { $array = array(1, 2, 3); $object = new HTMLPurifier_ArrayMock($array); foreach ($array as $k => $v) { $this->assertEqual($v, $object[$k]); } } /** * Testing ArrayAccess interface */ public function testOffsetSet() { $array = array(1, 2, 3); $object = new HTMLPurifier_ArrayMock($array); foreach ($array as $k => $v) { $v = $v * 2; $object[$k] = $v; $this->assertEqual($v, $object[$k]); } } /** * Testing ArrayAccess interface * There is one difference: keys are updated as well, they are started from 0 */ public function testOffsetUnset() { $object = new HTMLPurifier_ArrayMock(array(1, 2, 3, 4)); unset($object[1]); $this->assertEqual(array(1, 3, 4), $object->getArray()); unset($object[0]); $this->assertEqual(array(3, 4), $object->getArray()); unset($object[1]); $this->assertEqual(array(3), $object->getArray()); unset($object[0]); $this->assertEqual(array(), $object->getArray()); } } /** * Mock for some protected properties of HTMLPurifier_Array */ class HTMLPurifier_ArrayMock extends HTMLPurifier_Array { /** * @return HTMLPurifier_ArrayNode|null */ public function getHead() { return $this->head; } /** * @return int */ public function getOffset() { return $this->offset; } /** * @return int */ public function getCount() { return $this->count; } /** * @return HTMLPurifier_ArrayNode|null */ public function getOffsetItem() { return $this->offsetItem; } }