aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/lib/classes/StudipArrayObjectTest.php
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2024-08-28 11:43:35 +0000
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2024-08-28 11:43:35 +0000
commit09e2bf5ae199e147b55148f6aff22dba662198df (patch)
treef47ff03e76a5f44b98de4a9ad837f7c6087568c0 /tests/unit/lib/classes/StudipArrayObjectTest.php
parent353d62ab03aa9ce430da047afa4ff6797b065c44 (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.php131
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);
+ }
+}