If a generated chunk is listed in the codexComponents array, an exception will be thrown informing the developer that the item is not an export of Codex and cannot be required. Text fixtures and expected values were updated to match recent changes to the manifest that made composables explict entries. Bug: T353191 Change-Id: Ie3e35501993b1ad5d29ebecbcc8203e7f4ea8c81
105 lines
3.1 KiB
PHP
105 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Tests\ResourceLoader;
|
|
|
|
use MediaWiki\ResourceLoader\CodexModule;
|
|
use ResourceLoaderTestCase;
|
|
|
|
/**
|
|
* @group ResourceLoader
|
|
* @covers \MediaWiki\ResourceLoader\CodexModule
|
|
*/
|
|
class CodexModuleTest extends ResourceLoaderTestCase {
|
|
|
|
public static function provideModuleConfig() {
|
|
return [
|
|
[ 'Codex subset',
|
|
[
|
|
'codexComponents' => [ 'CdxButton', 'CdxMessage', 'useModelWrapper' ],
|
|
'codexStyleOnly' => false,
|
|
'codexScriptOnly' => false
|
|
],
|
|
[
|
|
'packageFiles' => [
|
|
'codex.js',
|
|
'_codex/constants.js',
|
|
'_codex/useSlotContents2.js',
|
|
'_codex/useWarnOnce.js',
|
|
'_codex/useIconOnlyButton.js',
|
|
'_codex/_plugin-vue_export-helper.js',
|
|
'_codex/CdxButton.js',
|
|
'_codex/useComputedDirection.js',
|
|
'_codex/useComputedLanguage.js',
|
|
'_codex/Icon.js',
|
|
'_codex/CdxMessage.js',
|
|
'_codex/useModelWrapper.js'
|
|
],
|
|
'styles' => [ 'CdxButton.css', 'CdxIcon.css', 'CdxMessage.css' ]
|
|
]
|
|
],
|
|
[ 'Codex subset, style only',
|
|
[
|
|
'codexComponents' => [ 'CdxButton', 'CdxMessage' ],
|
|
'codexStyleOnly' => true,
|
|
'codexScriptOnly' => false
|
|
],
|
|
[
|
|
'packageFiles' => [],
|
|
'styles' => [ 'CdxButton.css', 'CdxIcon.css', 'CdxMessage.css' ]
|
|
]
|
|
],
|
|
[ 'Codex subset, script only',
|
|
[
|
|
'codexComponents' => [ 'CdxButton', 'CdxMessage', 'useModelWrapper' ],
|
|
'codexStyleOnly' => false,
|
|
'codexScriptOnly' => true
|
|
],
|
|
[
|
|
'packageFiles' => [
|
|
'codex.js',
|
|
'_codex/constants.js',
|
|
'_codex/useSlotContents2.js',
|
|
'_codex/useWarnOnce.js',
|
|
'_codex/useIconOnlyButton.js',
|
|
'_codex/_plugin-vue_export-helper.js',
|
|
'_codex/CdxButton.js',
|
|
'_codex/useComputedDirection.js',
|
|
'_codex/useComputedLanguage.js',
|
|
'_codex/Icon.js',
|
|
'_codex/CdxMessage.js',
|
|
'_codex/useModelWrapper.js'
|
|
],
|
|
'styles' => []
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideModuleConfig
|
|
*/
|
|
public function testCodexSubset( $testCase, $moduleDefinition, $expected ) {
|
|
$testModule = new class( $moduleDefinition ) extends CodexModule {
|
|
public const CODEX_MODULE_DIR = 'tests/phpunit/data/resourceloader/codexModules/';
|
|
};
|
|
|
|
$context = $this->getResourceLoaderContext();
|
|
$config = $context->getResourceLoader()->getConfig();
|
|
$testModule->setConfig( $config );
|
|
|
|
$packageFiles = $testModule->getPackageFiles( $context );
|
|
// Style-only module will not have any packageFiles.
|
|
$packageFilenames = isset( $packageFiles ) ? array_keys( $packageFiles[ 'files' ] ) : [];
|
|
$this->assertEquals( $expected[ 'packageFiles' ], $packageFilenames, 'Correct packageFiles added for ' . $testCase );
|
|
|
|
$styleFiles = $testModule->getStyleFiles( $context );
|
|
// Script-only module will not have any styleFiles.
|
|
$styleFilenames = [];
|
|
if ( count( $styleFiles ) > 0 ) {
|
|
$styleFilenames = array_map( static function ( $filepath ) use ( $testModule ) {
|
|
return str_replace( $testModule::CODEX_MODULE_DIR, '', $filepath->getPath() );
|
|
}, $styleFiles[ 'all' ] );
|
|
}
|
|
$this->assertEquals( $expected[ 'styles' ], $styleFilenames, 'Correct styleFiles added for ' . $testCase );
|
|
}
|
|
}
|