From 55e79ffdfdd7101825e20fb4585e98ab554bd006 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Tue, 9 Oct 2018 12:35:32 +0200 Subject: [PATCH] Add failing test to show that overloaded extensions are broken in Extensible --- tests/php/Core/Injector/InjectorTest.php | 24 +++++++++++++++++-- .../InjectorTest/SomeCustomisedExtension.php | 11 +++++++++ .../Injector/InjectorTest/SomeExtension.php | 13 ++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 tests/php/Core/Injector/InjectorTest/SomeCustomisedExtension.php create mode 100644 tests/php/Core/Injector/InjectorTest/SomeExtension.php diff --git a/tests/php/Core/Injector/InjectorTest.php b/tests/php/Core/Injector/InjectorTest.php index 1e54cc1de..47c428ceb 100644 --- a/tests/php/Core/Injector/InjectorTest.php +++ b/tests/php/Core/Injector/InjectorTest.php @@ -21,12 +21,13 @@ use SilverStripe\Core\Tests\Injector\InjectorTest\NeedsBothCirculars; use SilverStripe\Core\Tests\Injector\InjectorTest\NewRequirementsBackend; use SilverStripe\Core\Tests\Injector\InjectorTest\OriginalRequirementsBackend; use SilverStripe\Core\Tests\Injector\InjectorTest\OtherTestObject; +use SilverStripe\Core\Tests\Injector\InjectorTest\SomeCustomisedExtension; +use SilverStripe\Core\Tests\Injector\InjectorTest\SomeExtension; use SilverStripe\Core\Tests\Injector\InjectorTest\TestObject; use SilverStripe\Core\Tests\Injector\InjectorTest\TestSetterInjections; use SilverStripe\Core\Tests\Injector\InjectorTest\TestStaticInjections; use SilverStripe\Dev\SapphireTest; -use SilverStripe\Dev\TestOnly; -use stdClass; +use SilverStripe\Security\Member; define('TEST_SERVICES', __DIR__ . '/AopProxyServiceTest'); @@ -1047,4 +1048,23 @@ class InjectorTest extends SapphireTest Injector::unnest(); $this->nestingLevel--; } + + /** + * Tests that overloaded extensions work, see {@link Extensible::getExtensionInstance()} + */ + public function testExtendedExtensions() + { + Config::modify() + ->set(Injector::class, SomeExtension::class, [ + 'class' => SomeCustomisedExtension::class, + ]) + ->merge(Member::class, 'extensions', [ + SomeExtension::class, + ]); + + /** @var Member|SomeExtension $member */ + $member = new Member(); + $this->assertTrue($member->hasExtension(SomeExtension::class)); + $this->assertSame('bar', $member->someMethod()); + } } diff --git a/tests/php/Core/Injector/InjectorTest/SomeCustomisedExtension.php b/tests/php/Core/Injector/InjectorTest/SomeCustomisedExtension.php new file mode 100644 index 000000000..8599558e4 --- /dev/null +++ b/tests/php/Core/Injector/InjectorTest/SomeCustomisedExtension.php @@ -0,0 +1,11 @@ +