From d460aa076b3fd227cc64c66a92b7f769ab0464ce Mon Sep 17 00:00:00 2001 From: Kore Nordmann Date: Tue, 24 Jun 2014 10:26:49 +0200 Subject: [PATCH] Implemented generic __set_state --- src/Kore/DataObject/DataObject.php | 11 +++++++++++ tests/Kore/DataObject/DataObjectTest.php | 23 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/Kore/DataObject/DataObject.php b/src/Kore/DataObject/DataObject.php index dc54cfa..c15fb23 100644 --- a/src/Kore/DataObject/DataObject.php +++ b/src/Kore/DataObject/DataObject.php @@ -86,4 +86,15 @@ private function cloneArray(array &$array) } } } + + /** + * Restore object from var_export + * + * @param array $values + * @return DataObject + */ + public static function __set_state(array $values) + { + return new static($values); + } } diff --git a/tests/Kore/DataObject/DataObjectTest.php b/tests/Kore/DataObject/DataObjectTest.php index 414d3ba..4ac8a36 100644 --- a/tests/Kore/DataObject/DataObjectTest.php +++ b/tests/Kore/DataObject/DataObjectTest.php @@ -137,4 +137,27 @@ public function testCloneAggregateInDeepArray() $clone->property[0][0] ); } + + public function testSetState() + { + $struct = new TestDataObject(); + $struct->property = 42; + + $restored = eval("return " . var_export($struct, true) . ';'); + + $this->assertEquals($struct, $restored); + $this->assertNotSame($struct, $restored); + } + + /** + * @expectedException \OutOfRangeException + */ + public function testFailOnInvalidSetState() + { + TestDataObject::__set_state( + array( + 'invalid' => 42, + ) + ); + } }