diff options
| author | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2024-08-28 11:43:35 +0000 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2024-08-28 11:43:35 +0000 |
| commit | 09e2bf5ae199e147b55148f6aff22dba662198df (patch) | |
| tree | f47ff03e76a5f44b98de4a9ad837f7c6087568c0 /tests/unit/lib/classes/StudipArrayObjectTest.php | |
| parent | 353d62ab03aa9ce430da047afa4ff6797b065c44 (diff) | |
fix unserialization of StudipArrayObjects, remove deprecated Serializable...
Closes #4537
Merge request studip/studip!3333
Diffstat (limited to 'tests/unit/lib/classes/StudipArrayObjectTest.php')
| -rw-r--r-- | tests/unit/lib/classes/StudipArrayObjectTest.php | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/tests/unit/lib/classes/StudipArrayObjectTest.php b/tests/unit/lib/classes/StudipArrayObjectTest.php new file mode 100644 index 0000000..aa642fb --- /dev/null +++ b/tests/unit/lib/classes/StudipArrayObjectTest.php @@ -0,0 +1,131 @@ +<?php +/** + * @author Jan-Hendrik Willms <tleilax+studip@gmail.com> + * @license GPL2 or any later version + * + * @covers StudipArrayObject + */ +class StudipArrayObjectTest extends \Codeception\Test\Unit +{ + /** + * @covers StudipArrayObject::__construct + */ + public function testCreation() + { + $array = new StudipArrayObject(); + $this->assertCount(0, $array); + } + + /** + * @covers StudipArrayObject::__construct + */ + public function testCreationWithData() + { + $array = new StudipArrayObject(['foo' => 'bar', 42 => 23]); + $this->assertCount(2, $array); + return $array; + } + + /** + * @covers StudipArrayObject::__construct + */ + public function testCreationWithInvalidIteratorClass() + { + $this->expectException(InvalidArgumentException::class); + + $array = new StudipArrayObject([], StudipArrayObject::STD_PROP_LIST, 'DefinitelyNotAnIteratorClass'); + } + + /** + * @depends testCreationWithData + * @covers StudipArrayObject::offsetExists + * @covers StudipArrayObject::offsetGet + * @covers StudipArrayObject::offsetSet + * @covers StudipArrayObject::offsetUnset + */ + public function testArrayAccess(StudipArrayObject $array) + { + $this->assertTrue(isset($array['foo'])); + $this->assertFalse(isset($array['bar'])); + + $this->assertEquals('bar', $array['foo']); + $this->assertEquals(23, $array[42]); + + $array['bar'] = 'foo'; + + $this->assertCount(3, $array); + $this->assertTrue(isset($array['bar'])); + $this->assertEquals('foo', $array['bar']); + + unset($array['bar']); + $this->assertCount(2, $array); + $this->assertFalse(isset($array['bar'])); + } + + /** + * @depends testCreationWithData + * @covers StudipArrayObject::setFlags + * @covers StudipArrayObject::__isset + * @covers StudipArrayObject::__get + * @covers StudipArrayObject::__set + * @covers StudipArrayObject::__unset + */ + public function testObjectAccess(StudipArrayObject $array) + { + $array->setFlags(StudipArrayObject::ARRAY_AS_PROPS); + + $this->assertTrue(isset($array->foo)); + $this->assertFalse(isset($array->bar)); + + $this->assertEquals('bar', $array->foo); + + $array->bar = 'foo'; + + $this->assertCount(3, $array); + $this->assertTrue(isset($array->bar)); + $this->assertEquals('foo', $array->bar); + + unset($array->bar); + $this->assertCount(2, $array); + $this->assertFalse(isset($array->bar)); + + $array->setFlags(StudipArrayObject::STD_PROP_LIST); + + $this->expectException(InvalidArgumentException::class); + $test = isset($array->storage); + } + + public function testAppend() + { + $array = new StudipArrayObject(); + $this->assertCount(0, $array); + + $array->append('foo'); + $this->assertCount(1, $array); + } + + public function testContains() + { + $array = new StudipArrayObject([1, 2, 3]); + + $this->assertTrue($array->contains(1)); + $this->assertFalse($array->contains(0)); + } + + public function testSerialization() + { + $array = new StudipArrayObject(); + $array->foo = 'bar'; + + $serialized = serialize($array); + $unserialized = unserialize($serialized); + + $this->assertNotFalse($unserialized); + + $this->assertTrue(isset($unserialized->foo)); + $this->assertEquals('bar', $unserialized->foo); + + $this->expectException(InvalidArgumentException::class); + $test = isset($unserialized->storage); + } +} |
