diff --git a/core/metamodel.class.php b/core/metamodel.class.php index 60afe675f..7b7143a42 100644 --- a/core/metamodel.class.php +++ b/core/metamodel.class.php @@ -7627,14 +7627,12 @@ abstract class MetaModel // Build the list of available extensions // $aInterfaces = [ - 'iApplicationUIExtension', - 'iPreferencesExtension', - 'iApplicationObjectExtension', 'iLoginFSMExtension', - 'iLoginUIExtension', 'iLogoutExtension', - 'iQueryModifier', - 'iOnClassInitialization', + 'iLoginUIExtension', + 'iPreferencesExtension', + 'iApplicationUIExtension', + 'iApplicationObjectExtension', 'iPopupMenuExtension', 'iPageUIExtension', 'iPageUIBlockExtension', @@ -7648,10 +7646,12 @@ abstract class MetaModel 'iBackofficeDictEntriesExtension', 'iBackofficeDictEntriesPrefixesExtension', 'iPortalUIExtension', - 'ModuleHandlerApiInterface', - 'iNewsroomProvider', + 'iQueryModifier', + 'iOnClassInitialization', 'iModuleExtension', 'iKPILoggerExtension', + 'ModuleHandlerApiInterface', + 'iNewsroomProvider', ]; foreach ($aInterfaces as $sInterface) { self::$m_aExtensionClassNames[$sInterface] = array(); diff --git a/tests/php-unit-tests/phpunit.xml.dist b/tests/php-unit-tests/phpunit.xml.dist index 419e26538..70b3ba593 100644 --- a/tests/php-unit-tests/phpunit.xml.dist +++ b/tests/php-unit-tests/phpunit.xml.dist @@ -19,6 +19,10 @@ printerClass="\Sempro\PHPUnitPrettyPrinter\PrettyPrinterForPhpUnit9" > + + + + diff --git a/tests/php-unit-tests/postbuild_integration.xml.dist b/tests/php-unit-tests/postbuild_integration.xml.dist index df0cee5e0..8cc2825cd 100644 --- a/tests/php-unit-tests/postbuild_integration.xml.dist +++ b/tests/php-unit-tests/postbuild_integration.xml.dist @@ -19,6 +19,10 @@ printerClass="\Sempro\PHPUnitPrettyPrinter\PrettyPrinterForPhpUnit9" > + + + + diff --git a/tests/php-unit-tests/unitary-tests/application/applicationextension/ApplicationExtensionTest.php b/tests/php-unit-tests/unitary-tests/application/applicationextension/ApplicationExtensionTest.php new file mode 100644 index 000000000..58dc826df --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/application/applicationextension/ApplicationExtensionTest.php @@ -0,0 +1,164 @@ +assertGreaterThan(0, $iExtendingClassesCount, "Found no class extending the $sAPIFQCN API"); + } + + public function ExtensionAPIRegisteredAndCalledProvider(): array + { + // APIs not concerned by this test: + // * \iRestServiceProvider as it is discovered by iterating over declared classes directly + // * \iLoginUIExtension as it is not iterated directly, only its derived interfaces + + return [ + \iLoginFSMExtension::class => [ + \iLoginFSMExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iLogoutExtension::class => [ + \iLogoutExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iLoginUIExtension::class => [ + \iLoginUIExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iPreferencesExtension::class => [ + \iPreferencesExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iApplicationUIExtension::class => [ + \iApplicationUIExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iApplicationObjectExtension::class => [ + \iApplicationObjectExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iPopupMenuExtension::class => [ + \iPopupMenuExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iPageUIExtension::class => [ + \iPageUIExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iPageUIBlockExtension::class => [ + \iPageUIBlockExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iBackofficeLinkedScriptsExtension::class => [ + \iBackofficeLinkedScriptsExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iBackofficeEarlyScriptExtension::class => [ + \iBackofficeEarlyScriptExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iBackofficeScriptExtension::class => [ + \iBackofficeScriptExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iBackofficeInitScriptExtension::class => [ + \iBackofficeInitScriptExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iBackofficeReadyScriptExtension::class => [ + \iBackofficeReadyScriptExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iBackofficeLinkedStylesheetsExtension::class => [ + \iBackofficeLinkedStylesheetsExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iBackofficeStyleExtension::class => [ + \iBackofficeStyleExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iBackofficeDictEntriesExtension::class => [ + \iBackofficeDictEntriesExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iBackofficeDictEntriesPrefixesExtension::class => [ + \iBackofficeDictEntriesPrefixesExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iPortalUIExtension::class => [ + \iPortalUIExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iQueryModifier::class => [ + \iQueryModifier::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iOnClassInitialization::class => [ + \iOnClassInitialization::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iModuleExtension::class => [ + \iModuleExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iKPILoggerExtension::class => [ + \iKPILoggerExtension::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \ModuleHandlerApiInterface::class => [ + \ModuleHandlerApiInterface::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + \iNewsroomProvider::class => [ + \iNewsroomProvider::class, + static::ENUM_API_CALL_METHOD_ENUMPLUGINS, + ], + ]; + } +} diff --git a/tests/php-unit-tests/unitary-tests/application/applicationextension/Delta/application-extension-usages-in-snippets.xml b/tests/php-unit-tests/unitary-tests/application/applicationextension/Delta/application-extension-usages-in-snippets.xml new file mode 100644 index 000000000..edbae0d0d --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/application/applicationextension/Delta/application-extension-usages-in-snippets.xml @@ -0,0 +1,384 @@ + + + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + 'Foo is first', + 'Foo:Second' => 'Foo is second', + ]; + } +} + ]]> + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + core + 0 + + + + + core + 0 + + + + + core + 0 + + + + \ No newline at end of file