tests: Remove intermediary suites concept from /tests/qunit

I don't recall why I added this. Possibly in a confused effort
to match /tests/phpunit, except /tests/phpunit/suites is not
where test cases live, they live under /tests/phpunit/* directly,
mostly /tests/phpunit/includes named after the source directory.
The correct equivalent to that is /tests/qunit/resources for JS.

While at it, also remove mention of this concept from various other
places where it doesn't add value. It's one more word/concept to
learn, process, understand, or translate mentally. They're just tests,
or for the one or two places where we care about how they are
internally transmitted, a "test module".

Bug: T250045
Change-Id: I5ea22e4965d190357aa69883f29f9049ee8ebf13
This commit is contained in:
Timo Tijhof 2022-07-12 18:32:24 -07:00 committed by Krinkle
parent b24c10445a
commit 68d4fe68b9
65 changed files with 88 additions and 82 deletions

View file

@ -5955,7 +5955,7 @@ config-schema:
@deprecated since 1.30
EnableJavaScriptTest:
default: false
description: 'Allow running of javascript test suites via [[Special:JavaScriptTest]] (such as QUnit).'
description: 'Allow running of QUnit tests via [[Special:JavaScriptTest]].'
CachePrefix:
default: false
description: |-

View file

@ -9564,7 +9564,7 @@ class MainConfigSchema {
];
/**
* Allow running of javascript test suites via [[Special:JavaScriptTest]] (such as QUnit).
* Allow running of QUnit tests via [[Special:JavaScriptTest]].
*/
public const EnableJavaScriptTest = [
'default' => false,

View file

@ -13,20 +13,26 @@ use MediaWiki\ResourceLoader\ResourceLoader;
*/
interface ResourceLoaderTestModulesHook {
/**
* Use this hook to register ResourceLoader modules that are only available
* when $wgEnableJavaScriptTest is true. Use this for test suites and
* other test-only resources.
* Register QUnit tests to load on [[Special:JavaScriptTest]].
*
* @since 1.35
* @param array &$testModules One array of modules per test framework.
* The modules array follows the same format as `$wgResourceModules`.
* For example:
* $testModules['qunit']['ext.Example.test'] = [
* The tests files take the form of a ResourceLoader module that will only be registered
* when $wgEnableJavaScriptTest is true, and automatically discovered and loaded when
* visiting [[Special:JavaScriptTest]].
*
* The `$testModules` array follows the same format as $wgResourceModules, and is additionally
* keyed by test framework.
*
* For example:
*
* $testModules['qunit']['test.Example'] = [
* 'localBasePath' => __DIR__ . '/tests/qunit',
* 'remoteExtPath' => 'Example/tests/qunit',
* 'script' => [ 'tests/qunit/foo.js' ],
* 'script' => [ 'tests/qunit/foo.test.js' ],
* 'dependencies' => [ 'ext.Example.foo' ]
* ];
*
* @since 1.35
* @param array &$testModules
* @param ResourceLoader $rl
* @return void This hook must not abort, it must return no value
*/

View file

@ -138,8 +138,8 @@ class ResourceLoader implements LoggerAwareInterface {
private $modules = [];
/** @var array[] Map of (module name => associative info array) */
private $moduleInfos = [];
/** @var string[] List of module names that contain QUnit test suites */
private $testSuiteModuleNames = [];
/** @var string[] List of module names that contain QUnit tests */
private $testModuleNames = [];
/** @var string[] Map of (source => path); E.g. [ 'source-id' => 'http://.../load.php' ] */
private $sources = [];
/** @var array Errors accumulated during a respond() call. Exposed for testing. */
@ -320,26 +320,26 @@ class ResourceLoader implements LoggerAwareInterface {
$testModules = $testModulesMeta['qunit']
+ $extRegistry->getAttribute( 'QUnitTestModules' );
$testSuiteModuleNames = [];
$testModuleNames = [];
foreach ( $testModules as $name => &$module ) {
// Turn any single-module dependency into an array
if ( isset( $module['dependencies'] ) && is_string( $module['dependencies'] ) ) {
$module['dependencies'] = [ $module['dependencies'] ];
}
// Ensure the testrunner loads before any test suites
// Ensure the testrunner loads before any tests
$module['dependencies'][] = 'mediawiki.qunit-testrunner';
// Keep track of the test suites to load on SpecialJavaScriptTest
$testSuiteModuleNames[] = $name;
// Keep track of the modules to load on SpecialJavaScriptTest
$testModuleNames[] = $name;
}
// Core test suites (their names have further precedence).
// Core test modules (their names have further precedence).
$testModules = ( include MW_INSTALL_PATH . '/tests/qunit/QUnitTestResources.php' ) + $testModules;
$testSuiteModuleNames[] = 'test.MediaWiki';
$testModuleNames[] = 'test.MediaWiki';
$this->register( $testModules );
$this->testSuiteModuleNames = $testSuiteModuleNames;
$this->testModuleNames = $testModuleNames;
}
/**
@ -382,14 +382,14 @@ class ResourceLoader implements LoggerAwareInterface {
}
/**
* Get a list of module names with QUnit test suites.
* Get a list of modules with QUnit tests.
*
* @internal For use by SpecialJavaScriptTest only
* @return string[]
* @codeCoverageIgnore
*/
public function getTestSuiteModuleNames() {
return $this->testSuiteModuleNames;
return $this->testModuleNames;
}
/**

View file

@ -135,7 +135,7 @@ class SpecialJavaScriptTest extends SpecialPage {
. $rl->makeModuleResponse( $embedContext, [
'user.options' => $rl->getModule( 'user.options' ),
] )
// Load all the test suites
// Load all the test modules
. Xml::encodeJsCall( 'mw.loader.load', [ $modules ] )
);
$encModules = Xml::encodeJsVar( $modules );

View file

@ -44,65 +44,65 @@ return [
'test.MediaWiki' => [
'scripts' => [
'tests/qunit/suites/resources/startup/startup.test.js',
'tests/qunit/suites/resources/startup/mediawiki.test.js',
'tests/qunit/suites/resources/startup/mw.Map.test.js',
'tests/qunit/suites/resources/startup/mw.loader.test.js',
'tests/qunit/suites/resources/startup/mw.requestIdleCallback.test.js',
'tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js',
'tests/qunit/suites/resources/jquery/jquery.color.test.js',
'tests/qunit/suites/resources/jquery/jquery.colorUtil.test.js',
'tests/qunit/suites/resources/jquery/jquery.highlightText.test.js',
'tests/qunit/suites/resources/jquery/jquery.lengthLimit.test.js',
'tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js',
'tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js',
'tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js',
'tests/qunit/suites/resources/jquery/jquery.textSelection.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.errorLogger.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.messagePoster.factory.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.String.byteLength.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.String.charAt.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.String.lcFirst.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.String.ucFirst.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.String.trimByteLength.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.storage.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.template.mustache.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.base.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.html.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.inspect.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.toc.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.track.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.category.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.edit.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.messages.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.options.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.upload.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js',
'tests/qunit/suites/resources/mediawiki.api/mediawiki.rest.test.js',
'tests/qunit/suites/resources/mediawiki.ForeignApi/mediawiki.ForeignApi.test.js',
'tests/qunit/suites/resources/mediawiki.ForeignApi/mediawiki.ForeignRest.test.js',
'tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js',
'tests/qunit/suites/resources/mediawiki.rcfilters/dm.FilterItem.test.js',
'tests/qunit/suites/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js',
'tests/qunit/suites/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js',
'tests/qunit/suites/resources/mediawiki.rcfilters/UriProcessor.test.js',
'tests/qunit/suites/resources/mediawiki.widgets/MediaSearch/mediawiki.widgets.APIResultsQueue.test.js',
'tests/qunit/suites/resources/mediawiki.widgets/Table/mediawiki.widgets.TableWidget.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.cookie.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.deflate.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.experiments.test.js',
'tests/qunit/suites/resources/mediawiki/mediawiki.visibleTimeout.test.js',
'tests/qunit/resources/startup/startup.test.js',
'tests/qunit/resources/startup/mediawiki.test.js',
'tests/qunit/resources/startup/mw.Map.test.js',
'tests/qunit/resources/startup/mw.loader.test.js',
'tests/qunit/resources/startup/mw.requestIdleCallback.test.js',
'tests/qunit/resources/jquery/jquery.accessKeyLabel.test.js',
'tests/qunit/resources/jquery/jquery.color.test.js',
'tests/qunit/resources/jquery/jquery.colorUtil.test.js',
'tests/qunit/resources/jquery/jquery.highlightText.test.js',
'tests/qunit/resources/jquery/jquery.lengthLimit.test.js',
'tests/qunit/resources/jquery/jquery.makeCollapsible.test.js',
'tests/qunit/resources/jquery/jquery.tablesorter.test.js',
'tests/qunit/resources/jquery/jquery.tablesorter.parsers.test.js',
'tests/qunit/resources/jquery/jquery.textSelection.test.js',
'tests/qunit/resources/mediawiki/mediawiki.errorLogger.test.js',
'tests/qunit/resources/mediawiki/mediawiki.jqueryMsg.test.js',
'tests/qunit/resources/mediawiki/mediawiki.jscompat.test.js',
'tests/qunit/resources/mediawiki/mediawiki.messagePoster.factory.test.js',
'tests/qunit/resources/mediawiki/mediawiki.String.byteLength.test.js',
'tests/qunit/resources/mediawiki/mediawiki.String.charAt.test.js',
'tests/qunit/resources/mediawiki/mediawiki.String.lcFirst.test.js',
'tests/qunit/resources/mediawiki/mediawiki.String.ucFirst.test.js',
'tests/qunit/resources/mediawiki/mediawiki.String.trimByteLength.test.js',
'tests/qunit/resources/mediawiki/mediawiki.storage.test.js',
'tests/qunit/resources/mediawiki/mediawiki.template.test.js',
'tests/qunit/resources/mediawiki/mediawiki.template.mustache.test.js',
'tests/qunit/resources/mediawiki/mediawiki.base.test.js',
'tests/qunit/resources/mediawiki/mediawiki.html.test.js',
'tests/qunit/resources/mediawiki/mediawiki.inspect.test.js',
'tests/qunit/resources/mediawiki/mediawiki.Title.test.js',
'tests/qunit/resources/mediawiki/mediawiki.toc.test.js',
'tests/qunit/resources/mediawiki/mediawiki.track.test.js',
'tests/qunit/resources/mediawiki/mediawiki.Uri.test.js',
'tests/qunit/resources/mediawiki/mediawiki.user.test.js',
'tests/qunit/resources/mediawiki/mediawiki.util.test.js',
'tests/qunit/resources/mediawiki.api/mediawiki.api.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.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.ForeignApi/mediawiki.ForeignApi.test.js',
'tests/qunit/resources/mediawiki.ForeignApi/mediawiki.ForeignRest.test.js',
'tests/qunit/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js',
'tests/qunit/resources/mediawiki.rcfilters/dm.FilterItem.test.js',
'tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueryItemModel.test.js',
'tests/qunit/resources/mediawiki.rcfilters/dm.SavedQueriesModel.test.js',
'tests/qunit/resources/mediawiki.rcfilters/UriProcessor.test.js',
'tests/qunit/resources/mediawiki.widgets/MediaSearch/mediawiki.widgets.APIResultsQueue.test.js',
'tests/qunit/resources/mediawiki.widgets/Table/mediawiki.widgets.TableWidget.test.js',
'tests/qunit/resources/mediawiki/mediawiki.language.test.js',
'tests/qunit/resources/mediawiki/mediawiki.cldr.test.js',
'tests/qunit/resources/mediawiki/mediawiki.cookie.test.js',
'tests/qunit/resources/mediawiki/mediawiki.deflate.test.js',
'tests/qunit/resources/mediawiki/mediawiki.experiments.test.js',
'tests/qunit/resources/mediawiki/mediawiki.visibleTimeout.test.js',
],
'dependencies' => [
'jquery.color',