[ 'scripts' => [ 'resources/lib/sinonjs/sinon.js', ], ], 'vue-test-utils' => [ 'localBasePath' => MW_INSTALL_PATH . '/resources/lib/vue-test-utils', 'remoteBasePath' => "$wgResourceBasePath/resources/lib/vue-test-utils", 'packageFiles' => [ [ 'name' => 'vue-test-utils.js', 'callback' => static function (): string { $contents = [ 'const Vue = require( "vue" );', 'const VueCompilerDOM = require( "./vue-compiler-dom.js" );', 'const VueServerRenderer = {};', file_get_contents( MW_INSTALL_PATH . '/resources/lib/vue-test-utils/vue-test-utils.browser.js' ), 'module.exports = VueTestUtils;' ]; return implode( "\n", $contents ); }, 'versionCallback' => static function () { return new FilePath( MW_INSTALL_PATH . '/resources/lib/vue-test-utils/vue-test-utils.browser.js' ); }, ], [ // NOTE: We use the global version of vue-compiler-dom rather than the CJS export, // because the latter would require us to manage additional dependencies // (@vue/shared) that the global version bundles. 'name' => 'vue-compiler-dom.js', 'callback' => static function (): string { $contents = [ file_get_contents( MW_INSTALL_PATH . '/resources/lib/vue-compiler-dom/compiler-dom.global.js' ), 'module.exports = VueCompilerDOM;' ]; return implode( "\n", $contents ); }, 'versionCallback' => static function () { return new FilePath( MW_INSTALL_PATH . '/resources/lib/vue-compiler-dom/compiler-dom.global.js' ); }, ], ], 'dependencies' => [ 'vue' ], ], 'mediawiki.qunit-testrunner' => [ 'scripts' => [ 'tests/qunit/data/testrunner.js', ], 'dependencies' => [ 'mediawiki.page.ready', 'sinonjs', ], ], // Test module exposing language-specific rules for mediawiki.language.test.js. 'mediawiki.language.testdata' => [ 'packageFiles' => [ [ 'name' => 'mediawiki.language.testdata.js', 'callback' => static function () { // Optimization: Only compute and load data for languages that we have tests for. /** @phpcs-require-sorted-array */ $langCodes = [ 'bs', 'dsb', 'fi', 'ga', 'he', 'hsb', 'hu', 'hy', 'ka', 'la', 'mn', 'os', 'ru', 'sl', 'uk', ]; $languageFactory = MediaWikiServices::getInstance()->getLanguageFactory(); $data = []; foreach ( $langCodes as $langCode ) { $data[$langCode] = $languageFactory->getLanguage( $langCode )->getJsData(); } return 'module.exports = ' . Html::encodeJsVar( $data ) . ';'; }, ] ], ], 'mediawiki.language.jqueryMsg.testdata' => [ 'localBasePath' => __DIR__ . '/data', 'packageFiles' => [ new FilePath( 'mediawiki.jqueryMsg.testdata.js', __DIR__ . '/data' ), new FilePath( 'mediawiki.jqueryMsg.data.json', __DIR__ . '/data' ), ], ], // Test module loading all language-specific convertGrammar() implementations. 'mediawiki.language.grammar.testdata' => [ 'localBasePath' => "{$GLOBALS['IP']}/resources/src/mediawiki.language/languages", // Automatically discover and load every language-specific convertGrammar() implementation. 'scripts' => ( static function () { $basePath = "{$GLOBALS['IP']}/resources/src/mediawiki.language/languages"; $scripts = []; foreach ( new DirectoryIterator( $basePath ) as $file ) { /** @var DirectoryIterator $file */ if ( $file->isFile() && $file->getExtension() === 'js' ) { $scripts[] = $file->getBasename(); } } return $scripts; } )(), 'dependencies' => [ 'mediawiki.language' ], ], 'test.MediaWiki' => [ 'scripts' => [ 'tests/qunit/resources/jquery.highlightText.test.js', 'tests/qunit/resources/jquery.lengthLimit.test.js', 'tests/qunit/resources/jquery.makeCollapsible.test.js', 'tests/qunit/resources/jquery.tablesorter.test.js', 'tests/qunit/resources/jquery.textSelection.test.js', 'tests/qunit/resources/mediawiki.api/mediawiki.api.category.test.js', 'tests/qunit/resources/mediawiki.api/mediawiki.api.edit.test.js', 'tests/qunit/resources/mediawiki.api/mediawiki.api.messages.test.js', 'tests/qunit/resources/mediawiki.api/mediawiki.api.options.test.js', 'tests/qunit/resources/mediawiki.api/mediawiki.api.parse.test.js', 'tests/qunit/resources/mediawiki.api/mediawiki.api.test.js', 'tests/qunit/resources/mediawiki.api/mediawiki.api.upload.test.js', 'tests/qunit/resources/mediawiki.api/mediawiki.api.watch.test.js', 'tests/qunit/resources/mediawiki.api/mediawiki.rest.test.js', 'tests/qunit/resources/mediawiki.base/errorLogger.test.js', 'tests/qunit/resources/mediawiki.base/html.test.js', 'tests/qunit/resources/mediawiki.base/mediawiki.base.test.js', 'tests/qunit/resources/mediawiki.base/track.test.js', 'tests/qunit/resources/mediawiki.cldr.test.js', 'tests/qunit/resources/mediawiki.cookie.test.js', 'tests/qunit/resources/mediawiki.DateFormatter/DateFormatter.test.js', 'tests/qunit/resources/mediawiki.deflate.test.js', 'tests/qunit/resources/mediawiki.experiments.test.js', 'tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignApi.test.js', 'tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignRest.test.js', 'tests/qunit/resources/mediawiki.inspect.test.js', 'tests/qunit/resources/mediawiki.jqueryMsg.test.js', 'tests/qunit/resources/mediawiki.language.test.js', 'tests/qunit/resources/mediawiki.messagePoster/factory.test.js', 'tests/qunit/resources/mediawiki.rcfilters/dm.FilterItem.test.js', 'tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js', 'tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js', 'tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js', 'tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js', 'tests/qunit/resources/mediawiki.router.test.js', 'tests/qunit/resources/mediawiki.special.block/AdditionalDetailsField.test.js', 'tests/qunit/resources/mediawiki.storage.test.js', 'tests/qunit/resources/mediawiki.String.test.js', 'tests/qunit/resources/mediawiki.template.mustache.test.js', 'tests/qunit/resources/mediawiki.template.test.js', 'tests/qunit/resources/mediawiki.Title.test.js', 'tests/qunit/resources/mediawiki.toc.test.js', 'tests/qunit/resources/mediawiki.Uri.test.js', 'tests/qunit/resources/mediawiki.user.test.js', 'tests/qunit/resources/mediawiki.util/accessKeyLabel.test.js', 'tests/qunit/resources/mediawiki.util/util.test.js', 'tests/qunit/resources/mediawiki.visibleTimeout.test.js', 'tests/qunit/resources/mediawiki.widgets/MediaSearch/mediawiki.widgets.APIResultsQueue.test.js', 'tests/qunit/resources/mediawiki.widgets/NamespaceInput/mediawiki.widgets.NamespaceInputWidget.test.js', 'tests/qunit/resources/mediawiki.widgets/Table/mediawiki.widgets.TableWidget.test.js', 'tests/qunit/resources/mediawiki.widgets/UserInputWidget/mediawiki.widgets.UserInputWidget.test.js', [ 'name' => 'tests/qunit/resources/startup/clientprefs.js', 'callback' => static function () { return 'mw.clientprefs = function ( document, $VARS ) { ' . strtr( file_get_contents( MW_INSTALL_PATH . '/resources/src/startup/clientprefs.js' ), [ '__COOKIE_PREFIX__' => '' ] ) . '};'; } ], 'tests/qunit/resources/startup/clientprefs.test.js', 'tests/qunit/resources/startup/jscompat.test.js', 'tests/qunit/resources/startup/mediawiki.test.js', 'tests/qunit/resources/startup/mw.loader.test.js', 'tests/qunit/resources/startup/mw.Map.test.js', 'tests/qunit/resources/startup/mw.requestIdleCallback.test.js', 'tests/qunit/resources/testrunner.test.js', ], /** @phpcs-require-sorted-array */ 'dependencies' => [ 'jquery.highlightText', 'jquery.lengthLimit', 'jquery.makeCollapsible', 'jquery.tablesorter', 'jquery.textSelection', 'mediawiki.api', 'mediawiki.cldr', 'mediawiki.cookie', 'mediawiki.DateFormatter', 'mediawiki.deflate', 'mediawiki.experiments', 'mediawiki.ForeignApi.core', 'mediawiki.inspect', 'mediawiki.jqueryMsg', 'mediawiki.language', 'mediawiki.language.grammar.testdata', 'mediawiki.language.jqueryMsg.testdata', 'mediawiki.language.testdata', 'mediawiki.messagePoster', 'mediawiki.qunit-testrunner', 'mediawiki.rcfilters.filters.ui', 'mediawiki.router', 'mediawiki.special.block.codex', 'mediawiki.storage', 'mediawiki.String', 'mediawiki.template', 'mediawiki.template.mustache', 'mediawiki.Title', 'mediawiki.toc', 'mediawiki.Uri', 'mediawiki.user', 'mediawiki.util', 'mediawiki.visibleTimeout', 'mediawiki.widgets.MediaSearch', 'mediawiki.widgets.Table', 'mediawiki.widgets.UserInputWidget', 'vue-test-utils', ], ] ];