From b647ab89d05b0ce97296ec4ab34ceb098cfc12c1 Mon Sep 17 00:00:00 2001 From: Romans Malinovskis Date: Tue, 11 Feb 2020 22:54:18 +0000 Subject: [PATCH 1/5] Add POC for "CRUD::addTo($app)" syntax --- src/StaticAndToTrait.php | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/StaticAndToTrait.php diff --git a/src/StaticAndToTrait.php b/src/StaticAndToTrait.php new file mode 100644 index 00000000..b2df7da1 --- /dev/null +++ b/src/StaticAndToTrait.php @@ -0,0 +1,26 @@ +['name']]); + * + * is equivalent to + * + * + * // + * @param object $parent + * @param array $seed + * + * @return self + */ + public static function addTo(object $parent, $seed = [], ...$add_arguments) { + $object = new static($seed); + $parent->add($object, ...$add_arguments); + return $object; + } +} From d2f0c74bc7e1e6afe2ae9051dcf6c9f44264c337 Mon Sep 17 00:00:00 2001 From: Romans Malinovskis Date: Tue, 11 Feb 2020 22:55:05 +0000 Subject: [PATCH 2/5] Apply fixes from StyleCI --- src/StaticAndToTrait.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/StaticAndToTrait.php b/src/StaticAndToTrait.php index b2df7da1..3f65ae4d 100644 --- a/src/StaticAndToTrait.php +++ b/src/StaticAndToTrait.php @@ -2,10 +2,10 @@ namespace atk4\core; -trait StaticAddToTrait +trait StaticAndToTrait { /** - * A better way to initialize and add new object into parent - more typehinting-friendly + * A better way to initialize and add new object into parent - more typehinting-friendly. * * $crud = CRUD::addTo($app, ['displayFields'=>['name']]); * @@ -13,14 +13,17 @@ trait StaticAddToTrait * * * // + * * @param object $parent - * @param array $seed + * @param array $seed * * @return self */ - public static function addTo(object $parent, $seed = [], ...$add_arguments) { + public static function addTo(object $parent, $seed = [], ...$add_arguments) + { $object = new static($seed); $parent->add($object, ...$add_arguments); + return $object; } } From 5d02be4fa1006e399bb9699aad62dde50ebf1a4d Mon Sep 17 00:00:00 2001 From: Romans Malinovskis Date: Tue, 11 Feb 2020 23:55:09 +0000 Subject: [PATCH 3/5] Add unit tests --- src/StaticAddToTrait.php | 41 ++++++++++++++ tests/StaticAddToTest.php | 111 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 src/StaticAddToTrait.php create mode 100644 tests/StaticAddToTest.php diff --git a/src/StaticAddToTrait.php b/src/StaticAddToTrait.php new file mode 100644 index 00000000..42552589 --- /dev/null +++ b/src/StaticAddToTrait.php @@ -0,0 +1,41 @@ +['name']]); + * + * is equivalent to + * + * + * // + * @param object $parent + * @param array $seed + * + * @return self + */ + public static function addTo(object $parent, $seed = [], ...$add_arguments) { + if (isset($parent->_factoryTrait)) { + $object = $parent->factory(static::class, $seed); + } else { + $object = new static($seed); + } + $parent->add($object, ...$add_arguments); + return $object; + } +} diff --git a/tests/StaticAddToTest.php b/tests/StaticAddToTest.php new file mode 100644 index 00000000..4b65439c --- /dev/null +++ b/tests/StaticAddToTest.php @@ -0,0 +1,111 @@ +c = $name; + } +} +// @codingStandardsIgnoreEnd + +/** + * @coversDefaultClass \atk4\core\StaticAddToTrait + */ +class StaticAddToTest extends TestCase +{ + public function testBasic() + { + $m = new ContainerMock(); + $this->assertEquals(true, isset($m->_containerTrait)); + + // add to return object + $tr = StdSAT::addTo($m); + $this->assertNotNull($tr); + + // trackable object can be referenced by name + $tr3 = TrackableMockSAT::addTo($m, [], 'foo'); + $tr = $m->getElement('foo'); + $this->assertEquals($tr, $tr3); + } + + public function testUniqueNames() + { + $m = new ContainerMock(); + + // two anonymous children should get unique names asigned. + TrackableMockSAT::addTo($m); + $anon = TrackableMockSAT::addTo($m); + TrackableMockSAT::addTo($m, [], 'foo bar'); + TrackableMockSAT::addTo($m, [], '123'); + TrackableMockSAT::addTo($m, [], 'false'); + + $this->assertEquals(true, (bool)$m->hasElement('foo bar')); + $this->assertEquals(true, (bool)$m->hasElement('123')); + $this->assertEquals(true, (bool)$m->hasElement('false')); + $this->assertEquals(5, $m->getElementCount()); + + $m->getElement('foo bar')->destroy(); + $this->assertEquals(4, $m->getElementCount()); + $anon->destroy(); + $this->assertEquals(3, $m->getElementCount()); + } + + + public function testFactoryMock() + { + $m = new ContainerFactoryMockSAT(); + $m1 = DIMockSAT::addTo($m, ['a'=>'XXX', 'b'=>'YYY']); + $this->assertEquals('XXX', $m1->a); + $this->assertEquals('YYY', $m1->b); + $this->assertEquals(null, $m1->c); + + + $m2 = DIConstructorMockSAT::addTo($m, ['a'=>'XXX', 'John', 'b'=>'YYY']); + $this->assertEquals('XXX', $m2->a); + $this->assertEquals('YYY', $m2->b); + $this->assertEquals('John', $m2->c); + } +} + From a4e75c8f55de880f7c7b9a9c07b2a8f46f456260 Mon Sep 17 00:00:00 2001 From: Romans Malinovskis Date: Tue, 11 Feb 2020 23:55:25 +0000 Subject: [PATCH 4/5] Apply fixes from StyleCI --- src/StaticAddToTrait.php | 12 +++++++----- tests/StaticAddToTest.php | 29 +++++++++++++++-------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/StaticAddToTrait.php b/src/StaticAddToTrait.php index 42552589..c67d8dc3 100644 --- a/src/StaticAddToTrait.php +++ b/src/StaticAddToTrait.php @@ -3,8 +3,7 @@ namespace atk4\core; /** - * Trait StaticAddToTrait - * @package atk4\core + * Trait StaticAddToTrait. */ trait StaticAddToTrait { @@ -16,7 +15,7 @@ trait StaticAddToTrait public $_staticAddToTrait = true; /** - * A better way to initialize and add new object into parent - more typehinting-friendly + * A better way to initialize and add new object into parent - more typehinting-friendly. * * $crud = CRUD::addTo($app, ['displayFields'=>['name']]); * @@ -24,18 +23,21 @@ trait StaticAddToTrait * * * // + * * @param object $parent - * @param array $seed + * @param array $seed * * @return self */ - public static function addTo(object $parent, $seed = [], ...$add_arguments) { + public static function addTo(object $parent, $seed = [], ...$add_arguments) + { if (isset($parent->_factoryTrait)) { $object = $parent->factory(static::class, $seed); } else { $object = new static($seed); } $parent->add($object, ...$add_arguments); + return $object; } } diff --git a/tests/StaticAddToTest.php b/tests/StaticAddToTest.php index 4b65439c..727803db 100644 --- a/tests/StaticAddToTest.php +++ b/tests/StaticAddToTest.php @@ -1,6 +1,7 @@ c = $name; } @@ -81,9 +85,9 @@ public function testUniqueNames() TrackableMockSAT::addTo($m, [], '123'); TrackableMockSAT::addTo($m, [], 'false'); - $this->assertEquals(true, (bool)$m->hasElement('foo bar')); - $this->assertEquals(true, (bool)$m->hasElement('123')); - $this->assertEquals(true, (bool)$m->hasElement('false')); + $this->assertEquals(true, (bool) $m->hasElement('foo bar')); + $this->assertEquals(true, (bool) $m->hasElement('123')); + $this->assertEquals(true, (bool) $m->hasElement('false')); $this->assertEquals(5, $m->getElementCount()); $m->getElement('foo bar')->destroy(); @@ -92,7 +96,6 @@ public function testUniqueNames() $this->assertEquals(3, $m->getElementCount()); } - public function testFactoryMock() { $m = new ContainerFactoryMockSAT(); @@ -101,11 +104,9 @@ public function testFactoryMock() $this->assertEquals('YYY', $m1->b); $this->assertEquals(null, $m1->c); - $m2 = DIConstructorMockSAT::addTo($m, ['a'=>'XXX', 'John', 'b'=>'YYY']); $this->assertEquals('XXX', $m2->a); $this->assertEquals('YYY', $m2->b); $this->assertEquals('John', $m2->c); } } - From 197d1477e8e3cdc936c10d76b8830cc106fb7594 Mon Sep 17 00:00:00 2001 From: Romans Malinovskis Date: Tue, 11 Feb 2020 23:58:02 +0000 Subject: [PATCH 5/5] remove this weird file --- src/StaticAndToTrait.php | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 src/StaticAndToTrait.php diff --git a/src/StaticAndToTrait.php b/src/StaticAndToTrait.php deleted file mode 100644 index 3f65ae4d..00000000 --- a/src/StaticAndToTrait.php +++ /dev/null @@ -1,29 +0,0 @@ -['name']]); - * - * is equivalent to - * - * - * // - * - * @param object $parent - * @param array $seed - * - * @return self - */ - public static function addTo(object $parent, $seed = [], ...$add_arguments) - { - $object = new static($seed); - $parent->add($object, ...$add_arguments); - - return $object; - } -}