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); + } +}