This requires the path to the Codex modules directory to be configurable, so we can use static manifest and component files in tests. This is achieved by changing the constant storing the Codex modules dir from private to protected so it can be overridden when creating a test module. Bug: T350054 Change-Id: Icd3c6c5d2a82f5a5fb1c38b52e54893034e7375c
101 lines
3 KiB
PHP
101 lines
3 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/useModelWrapper.js',
|
|
'_codex/constants.js',
|
|
'_codex/useSlotContents.js',
|
|
'_codex/useWarnOnce.js',
|
|
'_codex/useIconOnlyButton.js',
|
|
'_codex/_plugin-vue_export-helper.js',
|
|
'_codex/CdxButton.js',
|
|
'_codex/Icon.js',
|
|
'_codex/CdxMessage.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/useModelWrapper.js',
|
|
'_codex/constants.js',
|
|
'_codex/useSlotContents.js',
|
|
'_codex/useWarnOnce.js',
|
|
'_codex/useIconOnlyButton.js',
|
|
'_codex/_plugin-vue_export-helper.js',
|
|
'_codex/CdxButton.js',
|
|
'_codex/Icon.js',
|
|
'_codex/CdxMessage.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 );
|
|
}
|
|
}
|