From 60dd5f288b557d27a3e511152ed8e87beabe9abc Mon Sep 17 00:00:00 2001 From: Harsh Chokshi Date: Thu, 2 Aug 2018 16:59:51 +1200 Subject: [PATCH] Implement __isset for ViewableData_Customised Resolves #8302. --- src/View/ViewableData_Customised.php | 5 ++ tests/php/View/ViewableDataCustomisedTest.php | 55 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 tests/php/View/ViewableDataCustomisedTest.php diff --git a/src/View/ViewableData_Customised.php b/src/View/ViewableData_Customised.php index cc14a3e24..7eefa4527 100644 --- a/src/View/ViewableData_Customised.php +++ b/src/View/ViewableData_Customised.php @@ -49,6 +49,11 @@ class ViewableData_Customised extends ViewableData $this->customised->$property = $this->original->$property = $value; } + public function __isset($property) + { + return isset($this->customised->$property) || isset($this->original->$property) || parent::__isset($property); + } + public function hasMethod($method) { return $this->customised->hasMethod($method) || $this->original->hasMethod($method); diff --git a/tests/php/View/ViewableDataCustomisedTest.php b/tests/php/View/ViewableDataCustomisedTest.php new file mode 100644 index 000000000..df60323ba --- /dev/null +++ b/tests/php/View/ViewableDataCustomisedTest.php @@ -0,0 +1,55 @@ +makeOuterOriginal(), $this->makeInnerViewableDataCustomised()); + $this->assertThat($outerCustomised, $this->makeTestConstraint()); + } + + public function testNestedViewableDataCustomisedAsOriginal() + { + $outerCustomised = ViewableData_Customised::create($this->makeInnerViewableDataCustomised(), $this->makeOuterOriginal()); + $this->assertThat($outerCustomised, $this->makeTestConstraint()); + } + + private function makeTestConstraint() + { + return new ViewableDataContains([ + 'outerOriginal' => 'foobar', + 'innerOriginal' => 'hello', + 'innerCustomised' => 'world', + ]); + } + + private function makeOuterOriginal() + { + return ArrayData::create([ + 'outerOriginal' => 'foobar', + ]); + } + + private function makeInnerViewableDataCustomised() + { + $original = ArrayData::create([ + 'innerOriginal' => 'hello', + ]); + + $customised = ArrayData::create([ + 'innerCustomised' => 'world', + ]); + + return ViewableData_Customised::create($original, $customised); + } +}