diff --git a/core/Object.php b/core/Object.php index 56ee9cac4..4f3f990b1 100755 --- a/core/Object.php +++ b/core/Object.php @@ -816,7 +816,9 @@ abstract class Object { } if(method_exists($extension, 'allMethodNames')) { + if ($extension instanceof Extension) $extension->setOwner($this); $methods = $extension->allMethodNames(true); + if ($extension instanceof Extension) $extension->clearOwner(); } else { if(!isset(self::$built_in_methods[$extension->class])) { diff --git a/tests/model/DataExtensionTest.php b/tests/model/DataExtensionTest.php index a2a8ccfda..8b8fb5c3a 100644 --- a/tests/model/DataExtensionTest.php +++ b/tests/model/DataExtensionTest.php @@ -166,6 +166,13 @@ class DataExtensionTest extends SapphireTest { $this->assertEquals("hello world", $do->testMethodApplied()); } + public function testExtensionAllMethodNamesHasOwner() { + /** @var DataExtensionTest_MyObject $do */ + $do = DataExtensionTest_MyObject::create(); + + $this->assertTrue($do->hasMethod('getTestValueWithDataExtensionTest_MyObject')); + } + public function testPageFieldGeneration() { $page = new DataExtensionTest_CMSFieldsBase(); $fields = $page->getCMSFields(); @@ -365,17 +372,31 @@ class DataExtensionTest_Faves extends DataExtension implements TestOnly { } -class DataExtensionTest_AppliedToDO extends DataExtension implements TestOnly { +class DataExtensionTest_AppliedToDO extends DataExtension implements TestOnly +{ - public function testMethodApplied() { + public function testMethodApplied() + { return "hello world"; } } +class DataExtensionTest_AllMethodNames extends DataExtension implements TestOnly +{ + public function allMethodNames() + { + return array( + strtolower('getTestValueWith'.$this->owner->ClassName) + ); + } + +} + DataExtensionTest_MyObject::add_extension('DataExtensionTest_Ext1'); DataExtensionTest_MyObject::add_extension('DataExtensionTest_Ext2'); DataExtensionTest_MyObject::add_extension('DataExtensionTest_Faves'); +DataExtensionTest_MyObject::add_extension('DataExtensionTest_AllMethodNames'); /** * Base class for CMS fields