11:09:03INFO:quibble.commands:>>> Start: Start backends: <MySQL (no socket)>
11:09:03INFO:backend.MySQL:Starting MySQL
11:09:03INFO:backend.MySQL:Initializing MySQL data directory
11:09:04INFO:backend.MySQL:Waiting for MySQL socket
11:09:05INFO:backend.MySQL:Creating the wiki database and grant
11:09:05INFO:backend.MySQL:MySQL is ready
11:09:05INFO:quibble.commands:<<< Finish: Start backends: <MySQL (no socket)>, in 1.755 s
Run Post-dependency install
11:09:05INFO:quibble.commands:>>> Start: Run Post-dependency install, pre-database dependent steps in parallel (concurrency=2):
11:09:05* Install MediaWiki, db=<MySQL /workspace/db/quibble-mysql-uwh6rn59/socket>
11:09:05* npm install in /workspace/src
Install MediaWiki
11:09:08INFO:quibble.commands:>>> Start: Install MediaWiki, db=<MySQL /workspace/db/quibble-mysql-uwh6rn59/socket>
11:09:08php maintenance/install.php --scriptpath= --server=http://127.0.0.1:9413 --dbtype=mysql --dbname=wikidb --dbuser=wikiuser --dbpass=secret --dbserver=localhost:/workspace/db/quibble-mysql-uwh6rn59/socket --with-extensions --pass=testwikijenkinspass TestWiki WikiAdmin
11:09:08PHP 8.1.30 is installed.
11:09:08ICU 67.1 is installed (supports Unicode 13.0.0).
11:09:08Found ImageMagick: /usr/bin/convert. Image thumbnailing will be enabled if you enable uploads.
11:09:08Found the Git version control software: /usr/bin/git.
11:09:08Using server name "http://localhost".
11:09:08Using server URL "http://127.0.0.1:9413".
11:09:08Warning: Your default directory for uploads (/workspace/src/images/) is not checked for vulnerability to arbitrary script execution during the CLI install.
11:09:08Warning: Requests for images in your uploads directory should answer with the HTTP header X-Content-Type-Options: nosniff to protect browsers from potentially unsafe files. It is highly recommended to configure appropriate response headers on your webserver before enabling uploads.
11:09:08The environment has been checked. You can install MediaWiki.
11:09:08Including extensions
11:09:08done
11:09:08Setting up database
11:09:08done
11:09:08Creating tables
11:09:08done
11:09:08Initializing statistics
11:09:08done
11:09:08Populating default interwiki table
11:09:08done
11:09:08Prevent running unneeded updates
11:09:08done
11:09:08Restoring MediaWiki services
11:09:08done
11:09:08Creating tables for enabled extensions
11:09:08done
11:09:08Creating main page with default content
11:09:08done
11:09:08Creating administrator user account
11:09:08done
11:09:08Database was successfully set up
11:09:08MediaWiki has been successfully installed. You can now visit <http://127.0.0.1:9413> to view your wiki. If you have questions, check out our frequently asked questions list: <https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> or use one of the support forums linked on that page.
11:09:08Copying /workspace/src/LocalSettings.php to /workspace/log/LocalSettings.php
11:09:08Copying /workspace/src/LocalSettings-installer.php to /workspace/log/LocalSettings-installer.php
11:09:08No syntax errors detected in /workspace/src/LocalSettings.php
11:09:08php maintenance/addSite.php wikidb CI --filepath=http://127.0.0.1:9413/$1 --pagepath=http://127.0.0.1:9413/index.php?title=$111:09:08Done. Reload the web server and other long-running PHP processes to refresh the local-server cache of the sites table.
11:09:08php maintenance/update.php --quick
11:09:08MediaWiki 1.44.0-alpha Updater
11:09:0811:09:08Your composer.lock file is up to date with current dependencies!
11:09:08Going to run database updates for wikidb
11:09:08Depending on the size of your database this may take a while!
11:09:08Updating category collations...
11:09:08Selecting next 100 pages from cl_from = 0... processing... 0 done.
11:09:080 rows processed
11:09:08...done.
11:09:08Modifying rd_title field of table redirect...done.
11:09:08...pl_title field does not exist in pagelinks table, skipping modify field patch.
11:09:08...tl_title field does not exist in templatelinks table, skipping modify field patch.
11:09:08Modifying il_to field of table imagelinks...done.
11:09:08Modifying ll_title field of table langlinks...done.
11:09:08Modifying iwl_title field of table iwlinks...done.
11:09:08Modifying cat_title field of table category...done.
11:09:08Modifying qc_title field of table querycache...done.
11:09:08Modifying qcc_title field of table querycachetwo...done.
11:09:08Modifying wl_title field of table watchlist...done.
11:09:08Modifying user_last_timestamp field of table user_newtalk...done.
11:09:08Modifying pt_title field of table protected_titles...done.
11:09:08Removing 'protected_titles.pt_expiry' default value.
11:09:08Removing 'ip_changes.ipc_rev_timestamp' default value.
11:09:08Modifying ir_type field of table ipblocks_restrictions...done.
11:09:08...index wl_namespace_title already set on watchlist table.
11:09:08Modifying job_title field of table job...done.
11:09:08Modifying job_timestamp field of table job...done.
11:09:08Modifying job_token_timestamp field of table job...done.
11:09:08Modifying wl_notificationtimestamp field of table watchlist...done.
11:09:08Modifying role_id field of table slot_roles...done.
11:09:08Modifying model_id field of table content_models...done.
11:09:08Modifying cl_to field of table categorylinks...done.
11:09:08Modifying log_title field of table logging...done.
11:09:08Modifying us_timestamp field of table uploadstash...done.
11:09:08...index up_property already set on user_properties table.
11:09:08...index site_global_key already set on sites table.
11:09:08...index log_type_time already set on logging table.
11:09:08Modifying fa_name field of table filearchive...done.
11:09:08Removing 'filearchive.fa_deleted_timestamp' default value.
11:09:08Removing 'filearchive.fa_timestamp' default value.
11:09:08Modifying oi_name field of table oldimage...done.
11:09:08Removing 'oldimage.oi_timestamp' default value.
11:09:08Modifying exptime field of table objectcache...done.
11:09:08...index ar_name_title_timestamp already set on archive table.
11:09:08Modifying img_name field of table image...done.
11:09:08Removing 'image.img_timestamp' default value.
11:09:08Modifying img_timestamp field of table image...done.
11:09:08...index si_key already set on site_identifiers table.
11:09:08Modifying rc_title field of table recentchanges...done.
11:09:08Removing 'recentchanges.rc_timestamp' default value.
11:09:08Modifying rc_timestamp field of table recentchanges...done.
11:09:08Modifying rc_id field of table recentchanges...done.
11:09:08...index rc_new_name_timestamp already set on recentchanges table.
11:09:08Removing 'archive.ar_timestamp' default value.
11:09:08Modifying ar_title field of table archive...done.
11:09:08Modifying page_title field of table page...done.
11:09:08Removing 'page.page_touched' default value.
11:09:08Modifying user_name field of table user...done.
11:09:08...index rev_page_timestamp already set on revision table.
11:09:08...have modtoken field in objectcache table.
11:09:08Removing 'revision.rev_timestamp' default value.
11:09:08...index oi_timestamp already set on oldimage table.
11:09:08...index page_name_title already set on page table.
11:09:08...index ct_rc_tag_id already set on change_tag table.
11:09:08Converting djvu metadata...
11:09:08Finished refreshing file metadata for 0 files. 0 needed to be refreshed, 0 did not need to be but were refreshed anyways, and 0 refreshes were suspicious.
11:09:08...done.
11:09:08...page_restrictions table does not contain pr_user field.
11:09:08Modifying fa_id field of table filearchive...done.
11:09:08Modifying img_major_mime field of table image...done.
11:09:08...linktarget table already exists.
11:09:08...rev_page_id key doesn't exist.
11:09:08Modifying pr_page field of table page_restrictions...done.
11:09:08Modifying pp_page field of table page_props...done.
11:09:08Modifying ir_value field of table ipblocks_restrictions...done.
11:09:08...have tl_target_id field in templatelinks table.
11:09:08...user_autocreate_serial table already exists.
11:09:08Modifying ir_ipb_id field of table ipblocks_restrictions...done.
11:09:08...ipblocks table does not exist, skipping modify field patch.
11:09:08Modifying user_editcount field of table user...done.
11:09:08Running MigrateRevisionActorTemp...
11:09:08revision_actor_temp does not exist, so nothing to do.
11:09:08done.
11:09:08...revision_actor_temp doesn't exist.
11:09:08Running UpdateRestrictions...
11:09:08Migration is not needed.
11:09:08done.
11:09:08...page table does not contain page_restrictions field.
11:09:08Running migrateLinksTable.php on templatelinks...
11:09:08Old fields don't exist. There is no need to run this script
11:09:08done.
11:09:08...tl_namespace field does not exist in templatelinks table, skipping modify field patch.
11:09:08...templatelinks table does not contain tl_title field.
11:09:08...have el_to_path field in externallinks table.
11:09:08...have user_is_temp field in user table.
11:09:08Running MigrateRevisionCommentTemp...
11:09:08revision_comment_temp does not exist, so nothing to do.
11:09:08done.
11:09:08...revision_comment_temp doesn't exist.
11:09:08Running MigrateExternallinks...
11:09:08Old fields don't exist. There is no need to run this script
11:09:08done.
11:09:08...el_to field does not exist in externallinks table, skipping modify field patch.
11:09:08...have pl_target_id field in pagelinks table.
11:09:08...externallinks table does not contain el_to field.
11:09:08Running FixInconsistentRedirects...
11:09:08Fixing inconsistent redirects ...
11:09:08Estimated redirect page count: 1
11:09:080/0
11:09:08Done, updated 0 of 0 rows.
11:09:08done.
11:09:08Modifying img_size field of table image...done.
11:09:08Modifying fa_size field of table filearchive...done.
11:09:08Modifying oi_size field of table oldimage...done.
11:09:08Modifying us_size field of table uploadstash...done.
11:09:08...have uas_year field in user_autocreate_serial table.
11:09:08...block_target table already exists.
11:09:08...cl_collation_ext key doesn't exist.
11:09:08Running PopulateUserIsTemp...
11:09:08done.
11:09:08...site_type key doesn't exist.
11:09:08...iwl_prefix_from_title key doesn't exist.
11:09:08Running migrateLinksTable.php on pagelinks...
11:09:08Old fields don't exist. There is no need to run this script
11:09:08done.
11:09:08Modifying rev_id field of table revision...done.
11:09:08Modifying rc_id field of table recentchanges...done.
11:09:08Modifying ct_rc_id field of table change_tag...done.
11:09:08Running MigrateBlocks...
11:09:08No ipblocks table, skipping migration to block_target.
11:09:08done.
11:09:08...ipblocks doesn't exist.
11:09:08...pagelinks table does not contain pl_title field.
11:09:08Modifying page_links_updated field of table page...done.
11:09:08Changing table options of 'searchindex'.
11:09:08...index PRIMARY already set on searchindex table.
11:09:08...site_stats is populated...done.
11:09:08Checking existence of old default messages...done.
11:09:08Adding empty categories with description pages...
11:09:08Removing empty categories without description pages...
11:09:08Category cleanup complete.
11:09:08Fixing log entries with log_title starting with 'User:#'
11:09:08done.
11:09:08Purging caches...done.
11:09:0811:09:08Done in 1.3 s.
11:09:08php maintenance/rebuildLocalisationCache.php --lang en
11:09:08Rebuilding en...
11:09:081 languages rebuilt out of 1
11:09:08<<< Finish: Install MediaWiki, db=<MySQL /workspace/db/quibble-mysql-uwh6rn59/socket>, in 3.228 s
11:09:0811:09:15DEBUG:quibble.util:Waiting for Post-dependency install, pre-database dependent steps: 10s elapsed, 1/2 completed
npm install in /workspace/src
11:09:16INFO:quibble.commands:>>> Start: npm install in /workspace/src
11:09:16npm warn deprecated @types/easy-table@1.2.0: This is a stub types definition. easy-table provides its own type definitions, so you do not need this installed.
11:09:16npm warn deprecated har-validator@5.1.5: this library is no longer supported
11:09:16npm warn deprecated date-format@0.0.2: 0.x is no longer supported. Please upgrade to 4.x or higher.
11:09:16npm warn deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
11:09:16npm warn deprecated formidable@1.2.6: Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau11:09:16npm warn deprecated domexception@4.0.0: Use your platform's native DOMException instead
11:09:16npm warn deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
11:09:16npm warn deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/314211:09:16npm warn deprecated superagent@6.1.0: Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>. Thanks to @shadowgate15, @spence-s, and @niftylettuce. Superagent is sponsored by Forward Email at <https://forwardemail.net>.
11:09:1611:09:16added 1449 packages, and audited 1451 packages in 11s
11:09:1611:09:16160 packages are looking for funding
11:09:16 run `npm fund` for details
11:09:1611:09:1616 vulnerabilities (1 low, 4 moderate, 11 high)
11:09:1611:09:16To address issues that do not require attention, run:
11:09:16 npm audit fix
11:09:1611:09:16To address all issues (including breaking changes), run:
11:09:16 npm audit fix --force
11:09:1611:09:16Run `npm audit` for details.
11:09:16<<< Finish: npm install in /workspace/src, in 11.437 s
11:09:1611:09:16INFO:quibble.commands:<<< Finish: Run Post-dependency install, pre-database dependent steps in parallel (concurrency=2):
11:09:16* Install MediaWiki, db=<MySQL /workspace/db/quibble-mysql-uwh6rn59/socket>
11:09:16* npm install in /workspace/src, in 11.475 s
PHPUnit unit tests
11:09:25INFO:quibble.commands:>>> Start: PHPUnit Prepare Parallel Run (Composer)
11:09:25> MediaWiki\Composer\PhpUnitSplitter\PhpUnitXmlManager::listTestsNotice
11:09:2511:09:25Running `phpunit --list-tests-xml` to get a list of expected tests ...
11:09:2511:09:26> phpunit '--list-tests-xml=tests-list-extensions.xml' '--testsuite=extensions'
11:09:26Using PHP 8.1.30
11:09:26Running with MediaWiki settings because there might be integration tests
11:09:26PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:2611:09:26Wrote list of tests that would have been run to tests-list-extensions.xml
11:09:26> MediaWiki\Composer\PhpUnitSplitter\PhpUnitXmlManager::splitTestsListExtensions
11:09:2611:09:26Created modified `phpunit.xml` with test suite groups
11:09:26INFO:quibble.util:Copying /workspace/src/phpunit.xml to /workspace/log/phpunit-parallel.xml
11:09:26INFO:quibble.commands:<<< Finish: PHPUnit Prepare Parallel Run (Composer), in 1.603 s
PHPUnit extensions suite (without database or standalone) parallel run (Composer)
11:09:26INFO:quibble.commands:>>> Start: PHPUnit extensions suite (without database or standalone) parallel run (Composer)
11:09:27> MediaWiki\Composer\ComposerLaunchParallel::launchTestsDatabaseless
11:09:27Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_4' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_4_databaseless.result.cache'' ...
11:09:27Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_0' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_0_databaseless.result.cache'' ...
11:09:27Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_1' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_1_databaseless.result.cache'' ...
11:09:27Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_2' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_2_databaseless.result.cache'' ...
11:09:27Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_3' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_3_databaseless.result.cache'' ...
11:09:27Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_6' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_6_databaseless.result.cache'' ...
11:09:27Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_5' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_5_databaseless.result.cache'' ...
11:09:29> phpunit '--testsuite' 'split_group_6' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_6_databaseless.result.cache'
11:09:29Using PHP 8.1.30
11:09:29Running with MediaWiki settings because there might be integration tests
11:09:29PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:2911:09:29..................................... 37 / 37 (100%)
11:09:2911:09:29Time: 00:00.104, Memory: 36.50 MB
11:09:2911:09:29OK (37 tests, 84 assertions)
11:09:29Worker exited with status 0
11:09:29> phpunit '--testsuite' 'split_group_1' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_1_databaseless.result.cache'
11:09:29Using PHP 8.1.30
11:09:29Running with MediaWiki settings because there might be integration tests
11:09:29PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:2911:09:29.......... 10 / 10 (100%)
11:09:2911:09:29Time: 00:00.050, Memory: 32.00 MB
11:09:2911:09:29OK (10 tests, 21 assertions)
11:09:29Worker exited with status 0
11:09:29> phpunit '--testsuite' 'split_group_5' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_5_databaseless.result.cache'
11:09:29Using PHP 8.1.30
11:09:29Running with MediaWiki settings because there might be integration tests
11:09:29PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:2911:09:29......................... 25 / 25 (100%)
11:09:2911:09:29Time: 00:00.476, Memory: 42.50 MB
11:09:2911:09:29OK (25 tests, 56 assertions)
11:09:2911:09:2911:09:29You should really speed up these slow tests (>100ms)...
11:09:29 1. 327ms to run MediaWiki\\Tests\\Structure\\BundleSizeTest::testBundleSize with data set "mediawiki.page.ready"
11:09:29Worker exited with status 0
11:09:30> phpunit '--testsuite' 'split_group_0' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_0_databaseless.result.cache'
11:09:30Using PHP 8.1.30
11:09:30Running with MediaWiki settings because there might be integration tests
11:09:30PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:3011:09:30................................................................. 65 / 82 ( 79%)
11:09:30................. 82 / 82 (100%)
11:09:3011:09:30You should really speed up these slow tests (>100ms)...
11:09:30 1. 138ms to run AbstractSchemaValidationTest::testSchemasPassValidation with data set "maintenance/tables.json"
11:09:3011:09:3011:09:30Time: 00:00.556, Memory: 40.50 MB
11:09:3011:09:30OK (82 tests, 102 assertions)
11:09:30Worker exited with status 0
11:09:31> phpunit '--testsuite' 'split_group_4' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_4_databaseless.result.cache'
11:09:31Using PHP 8.1.30
11:09:31Running with MediaWiki settings because there might be integration tests
11:09:31PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:3111:09:31................................... 35 / 35 (100%)
11:09:3111:09:31Time: 00:01.889, Memory: 52.50 MB
11:09:3111:09:31OK (35 tests, 37 assertions)
11:09:3111:09:3111:09:31You should really speed up these slow tests (>100ms)...
11:09:31 1. 945ms to run MediaWiki\\Skins\\Vector\\Tests\\Structure\\BundleSizeTest::testBundleSize with data set "skins.vector.styles.legacy"
11:09:31 2. 709ms to run MediaWiki\\Skins\\Vector\\Tests\\Structure\\BundleSizeTest::testBundleSize with data set "skins.vector.styles"
11:09:31Worker exited with status 0
11:09:31> phpunit '--testsuite' 'split_group_3' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_3_databaseless.result.cache'
11:09:31Using PHP 8.1.30
11:09:31Running with MediaWiki settings because there might be integration tests
11:09:31PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:3111:09:31............................................................... 63 / 833 ( 7%)
11:09:31............................................................... 126 / 833 ( 15%)
11:09:31............................................................... 189 / 833 ( 22%)
11:09:31............................................................... 252 / 833 ( 30%)
11:09:31............................................................... 315 / 833 ( 37%)
11:09:31............................................................... 378 / 833 ( 45%)
11:09:31............................................................... 441 / 833 ( 52%)
11:09:31............................................................... 504 / 833 ( 60%)
11:09:31............................................................... 567 / 833 ( 68%)
11:09:31............................................................... 630 / 833 ( 75%)
11:09:31............................................................... 693 / 833 ( 83%)
11:09:31............................................................... 756 / 833 ( 90%)
11:09:31............................................................... 819 / 833 ( 98%)
11:09:31.............. 833 / 833 (100%)
11:09:3111:09:31Time: 00:02.193, Memory: 46.50 MB
11:09:3111:09:31OK (833 tests, 8671 assertions)
11:09:3111:09:3111:09:31You should really speed up these slow tests (>100ms)...
11:09:31 1. 251ms to run AutoLoaderStructureTest::testAutoLoadConfig
11:09:31 2. 240ms to run MediaWiki\\Tests\\Structure\\SettingsTest::testConfigGeneration with data set "includes/config-schema.php"
11:09:31 3. 201ms to run MediaWiki\\Tests\\Structure\\SettingsTest::testConfigGeneration with data set "docs/config-schema.yaml"
11:09:31 4. 201ms to run MediaWiki\\Tests\\Structure\\SettingsTest::testConfigGeneration with data set "includes/MainConfigNames.php"
11:09:31 5. 184ms to run MediaWiki\\Tests\\Structure\\SettingsTest::testConfigGeneration with data set "docs/config-vars.php"
11:09:31 6. 134ms to run AutoLoaderStructureTest::testAutoloadOrder
11:09:31Worker exited with status 0
11:09:43> phpunit '--testsuite' 'split_group_2' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone,Database' '--cache-result-file=.phpunit_group_2_databaseless.result.cache'
11:09:43Using PHP 8.1.30
11:09:43Running with MediaWiki settings because there might be integration tests
11:09:43PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:4311:09:43............................................................. 61 / 3012 ( 2%)
11:09:43............................................................. 122 / 3012 ( 4%)
11:09:43............................................................. 183 / 3012 ( 6%)
11:09:43............................................................. 244 / 3012 ( 8%)
11:09:43............................................................. 305 / 3012 ( 10%)
11:09:43............................................................. 366 / 3012 ( 12%)
11:09:43............................................................. 427 / 3012 ( 14%)
11:09:43............................................................. 488 / 3012 ( 16%)
11:09:43............................................................. 549 / 3012 ( 18%)
11:09:43............................................................. 610 / 3012 ( 20%)
11:09:43............................................................. 671 / 3012 ( 22%)
11:09:43............................................................. 732 / 3012 ( 24%)
11:09:43............................................................. 793 / 3012 ( 26%)
11:09:43............................................................. 854 / 3012 ( 28%)
11:09:43............................................................. 915 / 3012 ( 30%)
11:09:43............................................................. 976 / 3012 ( 32%)
11:09:43............................................................. 1037 / 3012 ( 34%)
11:09:43............................................................. 1098 / 3012 ( 36%)
11:09:43............................................................. 1159 / 3012 ( 38%)
11:09:43............................................................. 1220 / 3012 ( 40%)
11:09:43............................................................. 1281 / 3012 ( 42%)
11:09:43............................................................. 1342 / 3012 ( 44%)
11:09:43............................................................. 1403 / 3012 ( 46%)
11:09:43............................................................. 1464 / 3012 ( 48%)
11:09:43............................................................. 1525 / 3012 ( 50%)
11:09:43............................................................. 1586 / 3012 ( 52%)
11:09:43............................................................. 1647 / 3012 ( 54%)
11:09:43............................................................. 1708 / 3012 ( 56%)
11:09:43............................................................. 1769 / 3012 ( 58%)
11:09:43............................................................. 1830 / 3012 ( 60%)
11:09:43............................................................. 1891 / 3012 ( 62%)
11:09:43............................................................. 1952 / 3012 ( 64%)
11:09:43............................................................. 2013 / 3012 ( 66%)
11:09:43............................................................. 2074 / 3012 ( 68%)
11:09:43............................................................. 2135 / 3012 ( 70%)
11:09:43............................................................. 2196 / 3012 ( 72%)
11:09:43............................................................. 2257 / 3012 ( 74%)
11:09:43............................................................. 2318 / 3012 ( 76%)
11:09:43............................................................. 2379 / 3012 ( 78%)
11:09:43............................................................. 2440 / 3012 ( 81%)
11:09:43............................................................. 2501 / 3012 ( 83%)
11:09:43............................................................. 2562 / 3012 ( 85%)
11:09:43............................................................. 2623 / 3012 ( 87%)
11:09:43............................................................. 2684 / 3012 ( 89%)
11:09:43............................................................. 2745 / 3012 ( 91%)
11:09:43............................................................. 2806 / 3012 ( 93%)
11:09:43............................................................. 2867 / 3012 ( 95%)
11:09:43............................................................. 2928 / 3012 ( 97%)
11:09:43............................................................. 2989 / 3012 ( 99%)
11:09:43....................... 3012 / 3012 (100%)
11:09:4311:09:43Time: 00:14.069, Memory: 232.50 MB
11:09:4311:09:43OK (3012 tests, 3057 assertions)
11:09:4311:09:4311:09:43You should really speed up these slow tests (>100ms)...
11:09:43 1. 364ms to run ScopeStructureTest::testAutoloadNoFileScope with data set "/workspace/src/includes/languages/data/ZhConversion.php"
11:09:43 2. 117ms to run ScopeStructureTest::testAutoloadNoFileScope with data set "/workspace/src/includes/language/Language.php"
11:09:43 3. 116ms to run ScopeStructureTest::testAutoloadNoFileScope with data set "/workspace/src/includes/editpage/EditPage.php"
11:09:43 4. 100ms to run ScopeStructureTest::testAutoloadNoFileScope with data set "/workspace/src/includes/parser/Parser.php"
11:09:43Worker exited with status 0
11:09:43INFO:quibble.commands:<<< Finish: PHPUnit extensions suite (without database or standalone) parallel run (Composer), in 16.984 s
Run phpbench
11:09:43INFO:quibble.commands:>>> Start: Run phpbench
11:09:43INFO:quibble.commands:Run phpbench
11:09:43INFO:quibble.commands:No phpbench entry found in composer.json
11:09:43INFO:quibble.commands:<<< Finish: Run phpbench, in 0.001 s
11:09:43INFO:quibble.commands:>>> Start: Run Qunit tests
11:09:43INFO:quibble.use_headless:Display: <None>
11:09:43DEBUG:quibble.chromium_flags:Flags: ['--autoplay-policy=no-user-gesture-required', '--disable-pushstate-throttle', '--no-sandbox', '--headless', '--disable-gpu', '--remote-debugging-port=9222']
11:09:43WARNING:backend.ChromeWebDriver:[1730545783.828][SEVERE]: bind() failed: Cannot assign requested address (99)
11:09:44Running "assert-mw-env" task
11:09:4411:09:44Running "karma:firefox" (karma) task
11:09:4402 11 2024 11:09:44.288:DEBUG [config]: No config file specified.
11:09:4402 11 2024 11:09:44.291:WARN [config]: "/" is proxied, you should probably change urlRoot to avoid conflicts
11:09:4402 11 2024 11:09:44.292:DEBUG [karma-server]: Final config Config {
11:09:44 LOG_DISABLE: 'OFF',
11:09:44 LOG_ERROR: 'ERROR',
11:09:44 LOG_WARN: 'WARN',
11:09:44 LOG_INFO: 'INFO',
11:09:44 LOG_DEBUG: 'DEBUG',
11:09:44 frameworks: [ 'qunit' ],
11:09:44 protocol: 'http:',
11:09:44 port: 9876,
11:09:44 listenAddress: '0.0.0.0',
11:09:44 hostname: 'localhost',
11:09:44 httpsServerConfig: {},
11:09:44 basePath: '/workspace/src',
11:09:44 files: [
11:09:44 UrlPattern {
11:09:44 pattern: 'http://127.0.0.1:9413//index.php?title=Special:JavaScriptTest/qunit/export',
11:09:44 served: false,
11:09:44 included: true,
11:09:44 watched: false,
11:09:44 nocache: false,
11:09:44 weight: [ 1, 0, 0, 0, 0, 1 ],
11:09:44 type: 'js',
11:09:44 isBinary: undefined,
11:09:44 integrity: undefined
11:09:44 }
11:09:44 ],
11:09:44 browserConsoleLogOptions: { level: 'debug', format: '%b %T: %m', terminal: true },
11:09:44 customContextFile: null,
11:09:44 customDebugFile: null,
11:09:44 customClientContextFile: null,
11:09:44 exclude: [],
11:09:44 logLevel: 'DEBUG',
11:09:44 colors: true,
11:09:44 autoWatch: false,
11:09:44 autoWatchBatchDelay: 250,
11:09:44 restartOnFileChange: false,
11:09:44 usePolling: true,
11:09:44 reporters: [ 'mocha' ],
11:09:44 singleRun: true,
11:09:44 browsers: [ 'FirefoxHeadless' ],
11:09:44 captureTimeout: 60000,
11:09:44 pingTimeout: 5000,
11:09:44 proxies: { '/': { target: 'http://127.0.0.1:9413/', changeOrigin: true } },
11:09:44 proxyValidateSSL: true,
11:09:44 preprocessors: [Object: null prototype] {},
11:09:44 preprocessor_priority: {},
11:09:44 urlRoot: '/',
11:09:44 upstreamProxy: undefined,
11:09:44 reportSlowerThan: 0,
11:09:44 loggers: [
11:09:44 {
11:09:44 type: 'console',
11:09:44 layout: { type: 'pattern', pattern: '%[%d{DATETIME}:%p [%c]: %]%m' }
11:09:44 }
11:09:44 ],
11:09:44 transports: [ 'polling', 'websocket' ],
11:09:44 forceJSONP: false,
11:09:44 plugins: [
11:09:44 '@wikimedia/karma-firefox-launcher',
11:09:44 'karma-*',
11:09:44 [Object: null prototype] {
11:09:44 'launcher:ChromeCustom': [ 'factory', [Function (anonymous)] ]
11:09:44 }
11:09:44 ],
11:09:44 client: {
11:09:44 args: [],
11:09:44 useIframe: true,
11:09:44 runInParent: false,
11:09:44 captureConsole: true,
11:09:44 clearContext: true,
11:09:44 allowedReturnUrlPatterns: [ '^https?://' ],
11:09:44 qunit: { autostart: false }
11:09:44 },
11:09:44 defaultClient: {
11:09:44 args: [],
11:09:44 useIframe: true,
11:09:44 runInParent: false,
11:09:44 captureConsole: true,
11:09:44 clearContext: true,
11:09:44 allowedReturnUrlPatterns: [ '^https?://' ],
11:09:44 qunit: { autostart: false }
11:09:44 },
11:09:44 browserDisconnectTimeout: 2000,
11:09:44 browserDisconnectTolerance: 0,
11:09:44 browserNoActivityTimeout: 60000,
11:09:44 processKillTimeout: 2000,
11:09:44 concurrency: Infinity,
11:09:44 failOnEmptyTestSuite: true,
11:09:44 retryLimit: 2,
11:09:44 detached: false,
11:09:44 crossOriginAttribute: false,
11:09:44 browserSocketTimeout: 20000,
11:09:44 background: false,
11:09:44 customLaunchers: {
11:09:44 ChromeCustom: {
11:09:44 base: 'ChromeHeadless',
11:09:44 flags: [
11:09:44 '--autoplay-policy=no-user-gesture-required',
11:09:44 '--disable-pushstate-throttle',
11:09:44 '--no-sandbox',
11:09:44 '--headless',
11:09:44 '--disable-gpu',
11:09:44 '--remote-debugging-port=9222'
11:09:44 ]
11:09:44 }
11:09:44 }
11:09:44}
11:09:4402 11 2024 11:09:44.293:DEBUG [plugin]: Loading plugin @wikimedia/karma-firefox-launcher.
11:09:4402 11 2024 11:09:44.296:DEBUG [plugin]: Loading karma-* from /workspace/src/node_modules
11:09:4402 11 2024 11:09:44.309:DEBUG [plugin]: Loading plugin /workspace/src/node_modules/karma-chrome-launcher.
11:09:4402 11 2024 11:09:44.314:DEBUG [plugin]: Loading plugin /workspace/src/node_modules/karma-mocha-reporter.
11:09:4402 11 2024 11:09:44.329:DEBUG [plugin]: Loading plugin /workspace/src/node_modules/karma-qunit.
11:09:4402 11 2024 11:09:44.330:DEBUG [plugin]: Loading inline plugin defining launcher:ChromeCustom.
11:09:4402 11 2024 11:09:44.335:DEBUG [web-server]: Instantiating middleware
11:09:4402 11 2024 11:09:44.335:DEBUG [reporter]: Trying to load reporter: mocha
11:09:4402 11 2024 11:09:44.336:DEBUG [reporter]: Trying to load color-version of reporter: mocha (mocha_color)
11:09:4402 11 2024 11:09:44.336:DEBUG [reporter]: Couldn't load color-version.
11:09:4411:09:44START:11:09:4402 11 2024 11:09:44.346:INFO [karma-server]: Karma v6.4.1 server started at http://localhost:9876/11:09:4402 11 2024 11:09:44.347:INFO [launcher]: Launching browsers FirefoxHeadless with concurrency unlimited
11:09:4402 11 2024 11:09:44.350:INFO [launcher]: Starting browser FirefoxHeadless
11:09:4402 11 2024 11:09:44.350:DEBUG [launcher]: null -> BEING_CAPTURED
11:09:4402 11 2024 11:09:44.351:DEBUG [temp-dir]: Creating temp dir at /tmp/karma-4183211
11:09:4402 11 2024 11:09:44.351:DEBUG [launcher]: firefox http://localhost:9876/?id=4183211 -profile /tmp/karma-4183211 -no-remote -wait-for-browser -headless --start-debugger-server 6000
11:09:4702 11 2024 11:09:47.212:DEBUG [web-server]: serving: /workspace/src/node_modules/karma/static/client.html
11:09:4702 11 2024 11:09:47.951:DEBUG [web-server]: serving: /workspace/src/node_modules/karma/static/karma.js
11:09:4802 11 2024 11:09:48.163:DEBUG [web-server]: serving: /workspace/src/node_modules/karma/static/favicon.ico
11:09:4802 11 2024 11:09:48.185:DEBUG [karma-server]: A browser has connected on socket YkSmo5_INbLmaKslAAAB
11:09:4802 11 2024 11:09:48.217:DEBUG [web-server]: upgrade /socket.io/?EIO=4&transport=websocket&sid=g2MkScULPQuTQa6MAAAA
11:09:4802 11 2024 11:09:48.218:DEBUG [proxy]: NOT upgrading proxyWebSocketRequest /socket.io/?EIO=4&transport=websocket&sid=g2MkScULPQuTQa6MAAAA
11:09:4802 11 2024 11:09:48.305:DEBUG [Firefox 128.0 (Linux x86_64)]: undefined -> CONNECTED
11:09:4802 11 2024 11:09:48.306:INFO [Firefox 128.0 (Linux x86_64)]: Connected on socket YkSmo5_INbLmaKslAAAB with id 4183211
11:09:4802 11 2024 11:09:48.307:DEBUG [launcher]: BEING_CAPTURED -> CAPTURED
11:09:4802 11 2024 11:09:48.307:DEBUG [launcher]: FirefoxHeadless (id 4183211) captured in 3.96 secs
11:09:4802 11 2024 11:09:48.308:DEBUG [Firefox 128.0 (Linux x86_64)]: CONNECTED -> CONFIGURING
11:09:4802 11 2024 11:09:48.356:DEBUG [middleware:karma]: custom files null null null
11:09:4802 11 2024 11:09:48.357:DEBUG [middleware:karma]: Serving static request /context.html
11:09:4802 11 2024 11:09:48.361:DEBUG [web-server]: serving: /workspace/src/node_modules/karma/static/context.html
11:09:4802 11 2024 11:09:48.422:DEBUG [middleware:source-files]: Requesting /base/node_modules/qunit/qunit/qunit.css?dbaee396ca3e6cd14067471c048590f9d650be87
11:09:4802 11 2024 11:09:48.422:DEBUG [middleware:source-files]: Fetching /workspace/src/node_modules/qunit/qunit/qunit.css
11:09:4802 11 2024 11:09:48.423:DEBUG [web-server]: serving (cached): /workspace/src/node_modules/qunit/qunit/qunit.css
11:09:4802 11 2024 11:09:48.425:DEBUG [web-server]: serving: /workspace/src/node_modules/karma/static/context.js
11:09:4802 11 2024 11:09:48.429:DEBUG [middleware:source-files]: Requesting /base/node_modules/qunit/qunit/qunit.js?8235115d2e299369f216e0e1f7919be9faadf32d
11:09:4802 11 2024 11:09:48.430:DEBUG [middleware:source-files]: Fetching /workspace/src/node_modules/qunit/qunit/qunit.js
11:09:4802 11 2024 11:09:48.430:DEBUG [web-server]: serving (cached): /workspace/src/node_modules/qunit/qunit/qunit.js
11:09:4802 11 2024 11:09:48.431:DEBUG [middleware:source-files]: Requesting /base/node_modules/karma-qunit/lib/adapter.js?5e1aa67d9adc9aab151547c9cc815cbb9ddfb70e
11:09:4802 11 2024 11:09:48.432:DEBUG [middleware:source-files]: Fetching /workspace/src/node_modules/karma-qunit/lib/adapter.js
11:09:4802 11 2024 11:09:48.432:DEBUG [web-server]: serving (cached): /workspace/src/node_modules/karma-qunit/lib/adapter.js
11:09:4902 11 2024 11:09:49.408:DEBUG [middleware:source-files]: Requesting /load.php?modules=jquery%7Cmediawiki.base&version=82ujr
11:09:4902 11 2024 11:09:49.409:DEBUG [middleware:source-files]: Fetching /load.php
11:09:4902 11 2024 11:09:49.409:DEBUG [proxy]: proxying request - /load.php?modules=jquery%7Cmediawiki.base&version=82ujr to 127.0.0.1:9413
11:09:4902 11 2024 11:09:49.415:DEBUG [middleware:source-files]: Requesting /load.php?modules=jquery.client%2ChighlightText%2ClengthLimit%2CmakeCollapsible%2Ctablesorter%2CtextSelection%7Cjquery.makeCollapsible.styles%7Cjquery.tablesorter.styles%7Cmediawiki.ForeignApi%2CString%2CTitle%2CUri%2Capi%2Ccldr%2Ccookie%2Cdeflate%2Cexperiments%2Cinspect%2CjqueryMsg%2Clanguage%2CmessagePoster%2Cqunit-testrunner%2Crouter%2Cstorage%2Ctemplate%2Ctoc%2Cuser%2Cutil%2CvisibleTimeout%2Cwidgets%7Cmediawiki.ForeignApi.core%7Cmediawiki.language.months%2Ctestdata%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.rcfilters.filters.ui%7Cmediawiki.template.mustache%7Cmediawiki.widgets.MediaSearch%2CTable%2Cstyles%7Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csinonjs%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui-widgets.icons%7Coojs-ui-windows.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-editing-core%2Cicons-editing-styling%2Cicons-interactions%2Cicons-layout%2Cicons-media%2Cicons-moderation%2Cindicators%7Cskins.vector.clientPreferences%7Ctest.MediaWiki%2CVector&version=93ymv
11:09:4902 11 2024 11:09:49.415:DEBUG [middleware:source-files]: Fetching /load.php
11:09:4902 11 2024 11:09:49.416:DEBUG [proxy]: proxying request - /load.php?modules=jquery.client%2ChighlightText%2ClengthLimit%2CmakeCollapsible%2Ctablesorter%2CtextSelection%7Cjquery.makeCollapsible.styles%7Cjquery.tablesorter.styles%7Cmediawiki.ForeignApi%2CString%2CTitle%2CUri%2Capi%2Ccldr%2Ccookie%2Cdeflate%2Cexperiments%2Cinspect%2CjqueryMsg%2Clanguage%2CmessagePoster%2Cqunit-testrunner%2Crouter%2Cstorage%2Ctemplate%2Ctoc%2Cuser%2Cutil%2CvisibleTimeout%2Cwidgets%7Cmediawiki.ForeignApi.core%7Cmediawiki.language.months%2Ctestdata%7Cmediawiki.libs.pluralruleparser%7Cmediawiki.page.ready%7Cmediawiki.rcfilters.filters.ui%7Cmediawiki.template.mustache%7Cmediawiki.widgets.MediaSearch%2CTable%2Cstyles%7Coojs%2Coojs-ui-core%2Coojs-ui-widgets%2Csinonjs%7Coojs-ui-core.icons%2Cstyles%7Coojs-ui-widgets.icons%7Coojs-ui-windows.icons%7Coojs-ui.styles.icons-content%2Cicons-editing-advanced%2Cicons-editing-core%2Cicons-editing-styling%2Cicons-interactions%2Cicons-layout%2Cicons-media%2Cicons-moderation%2Cindicators%7Cskins.vector.clientPreferences%7Ctest.MediaWiki%2CVector&version=93ymv to 127.0.0.1:9413
11:09:50Firefox 128.0 (Linux x86_64) WARN: 'This page is using the deprecated ResourceLoader module "mediawiki.Uri".
11:09:50[1.43] Please use browser native URL.'
11:09:5102 11 2024 11:09:51.081:DEBUG [Firefox 128.0 (Linux x86_64)]: CONFIGURING -> EXECUTING
11:09:51 testrunner11:09:51✔ assert.htmlEqual11:09:51 Vector (integration)11:09:51✔ Client preferences: Behaves same for all users11:09:51 mediawiki11:09:51✔ Initial check11:09:51✔ mw.format11:09:51✔ mw.now11:09:51 mw.Message11:09:51✔ Construct11:09:51✔ plain()11:09:51✔ escaped()11:09:51✔ parse()11:09:51✔ exists()11:09:51✔ toString() non-existing11:09:51✔ jqueryMsg / Magic words11:09:51✔ mw.msg()11:09:51 mw.Map11:09:51✔ Store simple string key11:09:51✔ Store number-like key11:09:51✔ get()11:09:51✔ values11:09:51✔ set()11:09:51✔ exists()11:09:51✔ Avoid prototype pollution11:09:51 mw.loader11:09:51✔ .using( .., Function callback ) Promise11:09:51✔ Prototype method as module name11:09:51✔ .using() - Error: Circular dependency [Set]11:09:51WARN: 'Skipped unavailable module test.load.circleC'
11:09:51✔ .load() - Error: Circular dependency11:09:51WARN: 'Skipped unavailable module test.load.circleDirect'
11:09:51✔ .load() - Error: Circular dependency (direct)11:09:51✔ .using() - Error: Unregistered11:09:51✔ .load() - Error: Unregistered11:09:51WARN: 'Skipped unavailable module test.load.missingdep'
11:09:51✔ .load() - Error: Missing dependency11:09:51✔ .implement( styles={ "css": [text, ..] } )11:09:5102 11 2024 11:09:51.224:DEBUG [middleware:source-files]: Requesting /api.php
11:09:5102 11 2024 11:09:51.224:DEBUG [middleware:source-files]: Fetching /api.php
11:09:5102 11 2024 11:09:51.225:DEBUG [proxy]: proxying request - /api.php to 127.0.0.1:9413
11:09:51✔ .implement( styles={ "url": { <media>: [url, ..] } } )11:09:51✔ .implement( messages before script )11:09:51✔ .implement( styles with @import )11:09:51✔ .implement( dependency with styles )11:09:51✔ .implement( only scripts )11:09:51✔ .implement( only messages )11:09:51✔ .implement( empty )11:09:51✔ .implement() [packageFiles long paths]11:09:51✔ .implement() [packageFiles with parent files]11:09:51✔ .implement( name with @ )11:09:51✔ .addSource()11:09:51✔ .register() - ES6 support always true11:09:51✔ .batchRequest() - Module version combines for given batch11:09:51✔ .batchRequest() - Module version combined based on sorted order11:09:51✔ Broken indirect dependency11:09:51✔ Out-of-order implementation11:09:51✔ Missing dependency11:09:51✔ Dependency handling11:09:51✔ Network failure11:09:51✔ Skip-function handling11:09:51✔ .load() [protocol-relative URL T32825]11:09:51✔ .load() [absolute URL]11:09:51✔ importScript()11:09:51✔ importStylesheet()11:09:51✔ Empty string module name - T2880411:09:51✔ Executing race - T11223211:09:51✔ Stale response caching - T11758711:09:51✔ No storing of group=private responses11:09:51✔ No storing of group=user responses11:09:51✔ mw.loader.store.load - Disallowed localStorage11:09:51✔ mw.loader.store.load - Invalid JSON11:09:51✔ mw.loader.store.load - Unusable JSON11:09:51✔ mw.loader.store.load - Expired JSON11:09:51✔ mw.loader.store.load - Good JSON11:09:51✔ require()11:09:51✔ require() in debug mode11:09:5102 11 2024 11:09:51.690:DEBUG [middleware:source-files]: Requesting /load.php?modules=site.styles&version=131ff
11:09:5102 11 2024 11:09:51.691:DEBUG [middleware:source-files]: Fetching /load.php
11:09:5102 11 2024 11:09:51.691:DEBUG [proxy]: proxying request - /load.php?modules=site.styles&version=131ff to 127.0.0.1:9413
11:09:51✔ Implicit dependencies11:09:51✔ .getScript() - success11:09:5102 11 2024 11:09:51.748:DEBUG [middleware:source-files]: Requesting /this-is-not-found.txt
11:09:5102 11 2024 11:09:51.748:DEBUG [middleware:source-files]: Fetching /this-is-not-found.txt
11:09:5102 11 2024 11:09:51.749:DEBUG [proxy]: proxying request - /this-is-not-found.txt to 127.0.0.1:9413
11:09:51✔ .getScript() - failure11:09:51 mw.requestIdleCallback11:09:51✔ callback11:09:51✔ nested11:09:51✔ timeRemaining11:09:51✔ native11:09:51 startup/jscompat11:09:51✔ Unicode variable name11:09:51✔ textarea strips newline (T14130) [0]11:09:51✔ textarea strips newline (T14130) [1]11:09:51✔ textarea strips newline (T14130) [2]11:09:51✔ textarea strips newline (T14130) [3]11:09:51 startup/clientprefs11:09:51✔ clientprefs() [default behaviour]11:09:51✔ clientprefs() [default behaviour on skin with clientprefs]11:09:51✔ clientprefs() [toggle feature with boolean suffix]11:09:51✔ clientprefs() [toggle feature with number suffix]11:09:51✔ clientprefs() [toggle feature with word suffix]11:09:51✔ clientprefs() [ignore key without clientpref suffix]11:09:51✔ clientprefs() [ignore value with dashes]11:09:51✔ clientprefs() [toggle multiple features]11:09:51 jquery.highlightText11:09:51✔ highlightText() [0]11:09:51✔ highlightText() [1]11:09:51✔ highlightText() [2]11:09:51✔ highlightText() [3]11:09:51✔ highlightText() [4]11:09:51✔ highlightText() [5]11:09:51✔ highlightText() [6]11:09:51✔ highlightText() [7]11:09:51✔ highlightText() [8]11:09:51✔ highlightText() [9]11:09:51✔ highlightText() [10]11:09:51✔ highlightText() [11]11:09:51✔ highlightText() [12]11:09:51✔ highlightText() [13]11:09:51✔ highlightText() [14]11:09:51✔ highlightText() [15]11:09:51✔ highlightText() [16]11:09:51✔ highlightText() [17]11:09:51✔ highlightText() [18]11:09:51✔ highlightText() [19]11:09:51✔ highlightText() [20]11:09:51✔ highlightText() [21]11:09:51✔ highlightText() [22]11:09:51✔ highlightText() [23]11:09:51✔ highlightText() [24]11:09:51✔ highlightText() [25]11:09:51✔ highlightText() [26]11:09:51✔ highlightText() [27]11:09:51✔ highlightText() [28]11:09:51✔ highlightText() [29]11:09:51✔ highlightText() [30]11:09:51✔ highlightText() [31]11:09:51✔ highlightText() [32]11:09:51✔ highlightText() [33]11:09:51✔ highlightText() [34]11:09:51✔ highlightText() [35]11:09:51 jquery.lengthLimit11:09:51✔ byteLimit() [Plain text input]11:09:51✔ byteLimit() [Plain text input. Calling byteLimit with no parameters and no maxlength attribute (T38310)]11:09:51✔ byteLimit() [Limit using the maxlength attribute]11:09:51✔ byteLimit() [Limit using a custom value]11:09:51✔ byteLimit() [Limit using a custom value, overriding maxlength attribute]11:09:51✔ byteLimit() [Limit using a custom value (multibyte)]11:09:51✔ byteLimit() [Limit using a custom value (multibyte, outside BMP)]11:09:51✔ byteLimit() [Limit using a custom value (multibyte) overlapping a byte]11:09:51✔ byteLimit() [Pass the limit and a callback as input filter]11:09:51✔ byteLimit() [Limit using the maxlength attribute and pass a callback as input filter]11:09:51✔ byteLimit() [Truncate with exceeded limit and filter callback]11:09:51✔ byteLimit() [Input filter that increases the length]11:09:51✔ byteLimit() [Input filter of which the base exceeds the limit]11:09:51✔ byteLimit() [Unpaired surrogates do not crash]11:09:51✔ Confirm properties and attributes set11:09:51✔ Trim from insertion when limit exceeded11:09:51✔ Do not cut up false matching substrings in emoji insertions11:09:51 jquery.makeCollapsible11:09:51✔ testing hooks/triggers11:09:51✔ basic div operation11:09:51✔ basic table operation11:09:51✔ table support [table with caption]11:09:51✔ table support [table with caption and thead]11:09:51✔ basic list operation [ul]11:09:51✔ basic list operation [ol]11:09:51✔ basic operation when synchronous (options.instantHide)11:09:51✔ mw-made-collapsible data added11:09:51✔ mw-collapsible added when missing11:09:51✔ mw-collapsed added when missing11:09:51✔ initial collapse (mw-collapsed class)11:09:51✔ initial collapse (options.collapsed)11:09:51✔ clicks on links inside toggler pass through11:09:51✔ click on non-link inside toggler counts as trigger11:09:51✔ collapse/expand text (data-collapsetext, data-expandtext)11:09:51✔ collapse/expand text (options.collapseText, options.expandText)11:09:51✔ predefined toggle button and text (.mw-collapsible-toggle/.mw-collapsible-text)11:09:51✔ cloned collapsibles can be made collapsible again11:09:51✔ collapsibles in cloned elements are controlled by toggle clones11:09:51✔ reveal hash fragment11:09:51✔ T168689 - nested collapsible divs should keep independent state11:09:51✔ placeholder element for toggle11:09:51✔ T364712 - toggle moved outside of collapsible should still work11:09:51 jquery.tablesorter11:09:51✔ Planets: initial sort ascending by name11:09:51✔ Planets: initial sort descending by radius11:09:51✔ Planets: ascending by name11:09:51✔ Planets: ascending by name (again)11:09:51✔ Planets: ascending by name (multiple clicks)11:09:51✔ Planets: descending by name11:09:51✔ Planets: return to initial sort11:09:51✔ Planets: ascending radius11:09:51✔ Planets: descending radius11:09:51✔ Sorting multiple columns by passing sort list11:09:51✔ Sorting multiple columns by programmatically triggering sort()11:09:51✔ Reset to initial sorting by triggering sort() without any parameters11:09:51✔ Sort via click event after having initialized the tablesorter with initial sorting11:09:51✔ Multi-sort via click event after having initialized the tablesorter with initial sorting11:09:51✔ Reset sorting making table appear unsorted11:09:51✔ Sorting with colspanned headers: spanned column11:09:51✔ Sorting with colspanned headers: sort spanned column twice11:09:51✔ Sorting with colspanned headers: subsequent column11:09:51✔ Sorting with colspanned headers: sort subsequent column twice11:09:51✔ Basic planet table: one unsortable column11:09:51✔ T30775: German-style (dmy) short numeric dates11:09:51✔ T30775: American-style (mdy) short numeric dates11:09:51✔ IPv4 address sorting (T19141)11:09:52✔ IPv4 address reverse sorting (T19141)11:09:52✔ Accented Characters with custom collation11:09:52✔ Accented Characters Swedish locale11:09:52✔ Digraphs with custom collation11:09:52✔ Rowspan not exploded on init11:09:52✔ Basic planet table: same value for multiple rows via rowspan11:09:52✔ Basic planet table: same value for multiple rows via rowspan (sorting initially)11:09:52✔ Basic planet table: Same value for multiple rows via rowspan II11:09:52✔ Complex date parsing I11:09:52✔ Currency parsing I11:09:52✔ Handling of .sortbottom11:09:52✔ Handling of .sorttop11:09:52WARN: '(sort-rowspan-error)'
11:09:52✔ Rowspan invalid value (T265503)11:09:52✔ Test sort buttons not added to .sorttop row11:09:52✔ Test detection routine11:09:52✔ T34047 - caption must be before thead11:09:52✔ data-sort-value attribute, when available, should override sorting position11:09:52✔ T10115: sort numbers with commas (ascending)11:09:52✔ T10115: sort numbers with commas (descending)11:09:52✔ T34888 - Tables inside a tableheader cell11:09:52✔ Correct date sorting I11:09:52✔ Correct date sorting II11:09:52✔ ISO date sorting11:09:52✔ Sorting images using alt text11:09:52✔ Sorting images using alt text (complex)11:09:52✔ Sorting images using alt text (with format autodetection)11:09:52✔ T40911 - The row with the largest amount of columns should receive the sort indicators11:09:52✔ rowspans in table headers should prefer the last row when rows are equal in length11:09:52✔ holes in the table headers should not throw JS errors11:09:52✔ td cells in thead should not be taken into account for longest row calculation11:09:52✔ Rowspan exploding with row headers11:09:52✔ Rowspan exploding with row headers and colspans11:09:52✔ Rowspan exploding with colspanned cells11:09:52✔ Rowspan exploding with colspanned cells (2)11:09:52✔ Rowspan exploding with rightmost rows spanning most11:09:52✔ Rowspan exploding with rightmost rows spanning most (2)11:09:52✔ Rowspan exploding with row-and-colspanned cells11:09:52✔ Rowspan exploding with uneven rowspan layout11:09:52✔ T105731 - incomplete rows in table body11:09:52✔ bug T114721 - use of expand-child class11:09:52✔ T29745 - References ignored in sortkey11:09:52✔ T311145 - style tags ignored in sortkey11:09:52 jquery.tablesorter > parsers11:09:52✔ Textual keys11:09:52✔ IPv411:09:52✔ MDY Dates using mdy content language11:09:52✔ MDY Dates using dmy content language11:09:52✔ Very old MDY dates11:09:52✔ MDY Dates11:09:52✔ DMY Dates11:09:52✔ Clobbered Dates11:09:52✔ MY Dates11:09:52✔ Y Dates11:09:52✔ Currency11:09:52✔ Currency with european separators11:09:52✔ T114604 - Breaking tfoot with rowspans11:09:52 jquery.textSelection11:09:52✔ encapsulateText [Adding sig to end of text]11:09:52✔ encapsulateText [Adding bold to empty]11:09:52✔ encapsulateText [Adding bold to existing text]11:09:52✔ encapsulateText [ownline option: adding new h2]11:09:52✔ encapsulateText [ownline option: turn a whole line into new h2]11:09:52✔ encapsulateText [ownline option: turn a partial line into new h2]11:09:52✔ encapsulateText [splitlines option: no selection, insert new list item]11:09:52✔ encapsulateText [splitlines option: single partial line selection, insert new list item]11:09:52✔ encapsulateText [splitlines option: multiple lines]11:09:52✔ getCaretPosition [initial]11:09:52✔ getCaretPosition [forced empty selection]11:09:52✔ getCaretPosition [small selection]11:09:52 mediawiki.base/errorLogger11:09:52✔ installGlobalHandler11:09:52✔ logError11:09:52 mediawiki.base11:09:52✔ mw.hook - add() and fire()11:09:52✔ mw.hook - "hasOwnProperty" as hook name11:09:52✔ mw.hook - Number of arguments11:09:52✔ mw.hook - Variadic firing data and array data type11:09:52✔ mw.hook - Chainable11:09:52✔ mw.hook - Memory from before11:09:52✔ mw.hook - functions always registered before firing11:09:52✔ mw.hook - Multiple consumers with memory between fires11:09:52✔ mw.hook - Memory is not wiped when consumed.11:09:52✔ mw.hook - Unregistering handler.11:09:52✔ mw.hook - Limit impact of consumer errors T22335211:09:52✔ mw.hook - Variadic add and remove11:09:52✔ mw.log.makeDeprecated()11:09:52✔ mw.log.deprecate()11:09:52✔ RLQ.push11:09:52 mediawiki.base/html11:09:52✔ escape11:09:52✔ element()11:09:52✔ element( tagName )11:09:52✔ element( tagName, attrs )11:09:52✔ element( tagName, attrs, content )11:09:52 mediawiki.base/track11:09:52✔ track11:09:52✔ trackSubscribe11:09:52✔ trackUnsubscribe11:09:52✔ trackError11:09:52 mediawiki.jqueryMsg11:09:52✔ Replace11:09:52✔ Plural11:09:52✔ Gender11:09:52✔ Case changing11:09:52✔ Grammar11:09:52✔ Formal11:09:52✔ Variables11:09:52✔ Bi-di11:09:52✔ Match PHP parser11:09:52✔ Links11:09:52✔ CaseSensitiveNamespaces11:09:52✔ LocalizedNamespaces11:09:52✔ Replacements in links11:09:52✔ Curly brace transformation11:09:52✔ Int11:09:52✔ Ns11:09:52✔ mw.Message.prototype.parser monkey-patch11:09:52✔ mw.Message.prototype.parser monkey-patch HTML-escape11:09:52✔ formatnum11:09:52✔ HTML11:09:52✔ Nowiki11:09:52✔ Behavior in case of invalid wikitext11:09:52✔ Non-string parameters to various functions11:09:52✔ Do not allow javascript: urls11:09:52✔ Do not allow arbitrary style11:09:52✔ Integration11:09:52✔ setParserDefaults11:09:52 mediawiki.messagePoster11:09:52✔ register11:09:52 mediawiki.String11:09:52✔ byteLength() [lowercase a-z]11:09:52✔ byteLength() [uppercase A-Z]11:09:52✔ byteLength() [numbers 0-9]11:09:52✔ byteLength() [an asterisk]11:09:52✔ byteLength() [3 spaces]11:09:52✔ byteLength() [U+0024 Dollar]11:09:52✔ byteLength() [U+00A2 Cent]11:09:52✔ byteLength() [U+20AC Euro]11:09:52✔ byteLength() [U+24B62 Han surrogate]11:09:52✔ charAt() [simple]11:09:52✔ charAt() UTF-16 text11:09:52✔ lcFirst() [empty string]11:09:52✔ lcFirst() [slash is unchanged]11:09:52✔ lcFirst() [ASCII uppercase]11:09:52✔ lcFirst() [ASCII lowercase unchanged]11:09:52✔ lcFirst() [first surrogate only]11:09:52✔ lcFirst() [first surrogate with char]11:09:52✔ lcFirst() [second surrogate only]11:09:52✔ lcFirst() [second surrogate with char]11:09:52✔ lcFirst() [from U+10C80 (Old Hungarian capital A) to U+10CC0 (Old Hungarian small A)]11:09:52✔ ucFirst() [empty string]11:09:52✔ ucFirst() [slash is unchanged]11:09:52✔ ucFirst() [ASCII uppercase unchanged]11:09:52✔ ucFirst() [ASCII lowercase]11:09:52✔ ucFirst() [first surrogate only]11:09:52✔ ucFirst() [first surrogate with char]11:09:52✔ ucFirst() [second surrogate only]11:09:52✔ ucFirst() [second surrogate with char]11:09:52✔ ucFirst() [from U+10CC0 (Old Hungarian small A) to U+10C80 (Old Hungarian capital A)]11:09:52✔ trimByteLength() [simple ASCII]11:09:52✔ trimByteLength() [multibyte input]11:09:52✔ trimByteLength() [multibyte outside BMP]11:09:52✔ trimByteLength() [multibyte overlapping a byte]11:09:52✔ trimByteLength() [at limit with shortening input filter]11:09:52✔ trimByteLength() [exceed limit with shortening input filter]11:09:52✔ trimByteLength() [below limit with expanding input filter]11:09:52✔ trimByteLength() [trim from insertion point 0]11:09:52✔ trimByteLength() [trim from insertion point 1]11:09:52✔ trimByteLength() [Do not cut up false matching substrings in emoji insertions]11:09:52✔ trimByteLength() [Unpaired surrogates do not crash]11:09:52 mediawiki.storage11:09:52✔ set/get(Object) with storage support11:09:52✔ set/get(Object) with storage methods disabled11:09:52✔ set/get(Object) with storage object disabled11:09:52✔ set/get with expiry - partial failure11:09:52 mediawiki.template11:09:52✔ add11:09:52✔ compile11:09:52✔ get11:09:52 mediawiki.template.mustache11:09:52✔ render11:09:52 mediawiki.inspect11:09:52✔ .getModuleSize() - scripts11:09:52 mediawiki.router11:09:52✔ instance11:09:52 mediawiki.Title11:09:52✔ constructor11:09:52✔ newFromText11:09:52✔ makeTitle11:09:52✔ Basic parsing11:09:52✔ Transformation11:09:52✔ Namespace detection and conversion11:09:52✔ isTalkPage/getTalkPage/getSubjectPage11:09:52✔ wantSignaturesNamespace11:09:52✔ Throw error on invalid title11:09:52✔ phpCharToUpper11:09:52✔ Case-sensivity11:09:52✔ toString / toText11:09:52✔ getExtension11:09:52✔ exists11:09:52✔ getUrl11:09:52✔ newFromImg11:09:52✔ getRelativeText11:09:52✔ normalizeExtension11:09:52✔ newFromUserInput11:09:52✔ newFromUserInput with invalid file name for upload11:09:52✔ newFromUserInput with misplaced parameter11:09:52✔ newFromUserInput with invalid file name, but not for upload11:09:52✔ newFromFileName11:09:52✔ makeTitle for non existent namespace11:09:52 mediawiki.toc11:09:52✔ Use toggle11:09:52✔ Initially hidden11:09:52 mediawiki.Uri11:09:52✔ new mw.Uri( string ) with HTTP value [strict mode]11:09:52✔ new mw.Uri( string ) with HTTP value [non-strict mode]11:09:52✔ new mw.Uri( string ) with overrideKeys [0]11:09:52✔ new mw.Uri( string ) with overrideKeys [1]11:09:52✔ new mw.Uri( string ) with non-HTTP values11:09:52✔ new mw.Uri( Object )11:09:52✔ new mw.Uri( empty )11:09:52✔ Setting properties11:09:52✔ .getQueryString()11:09:52✔ arrayParams11:09:52✔ .clone()11:09:52✔ .toString() after query manipulation11:09:52✔ Variable defaultUri11:09:52✔ Advanced URL11:09:52✔ Parse a uri with an @ symbol in the path and query11:09:52✔ Handle protocol-relative URLs11:09:52✔ T3765811:09:52 mediawiki.user11:09:52✔ options11:09:52✔ getters (anonymous)11:09:52✔ getters (logged-in)11:09:52✔ getGroups (callback)11:09:52✔ getGroups (Promise)11:09:52✔ getRights (callback)11:09:52✔ getRights (Promise)11:09:52✔ generateRandomSessionId11:09:52✔ generateRandomSessionId (fallback)11:09:52✔ getPageviewToken11:09:52✔ sessionId11:09:52 mediawiki.user > clientPrefs11:09:52✔ get() [from HTML element]11:09:52✔ get() [never read from cookie]11:09:52✔ set() [valid preferences]11:09:52✔ set() [invalid preferences]11:09:52✔ set() [invalid characters]11:09:52✔ set() [create cookie on change]11:09:52✔ set() [always store values]11:09:52✔ set() [throw if registered user]11:09:52 mediawiki.util11:09:52✔ rawurlencode11:09:52✔ escapeIdForAttribute11:09:52✔ escapeIdForLink11:09:52✔ percentDecodeFragment [0]11:09:52✔ percentDecodeFragment [1]11:09:52✔ percentDecodeFragment [2]11:09:52✔ percentDecodeFragment [3]11:09:52✔ percentDecodeFragment [4]11:09:52✔ percentDecodeFragment [5]11:09:52✔ percentDecodeFragment [6]11:09:52✔ percentDecodeFragment [7]11:09:52✔ percentDecodeFragment [8]11:09:52✔ percentDecodeFragment [9]11:09:52✔ percentDecodeFragment [10]11:09:52✔ percentDecodeFragment [11]11:09:52✔ percentDecodeFragment [12]11:09:52✔ wikiUrlencode [0]11:09:52✔ wikiUrlencode [1]11:09:52✔ wikiUrlencode [2]11:09:52✔ wikiUrlencode [3]11:09:52✔ wikiUrlencode [4]11:09:52✔ wikiUrlencode [5]11:09:52✔ wikiUrlencode [6]11:09:52✔ wikiUrlencode [7]11:09:52✔ wikiUrlencode [8]11:09:52✔ wikiUrlencode [9]11:09:52✔ wikiUrlencode [10]11:09:52✔ getUrl11:09:52✔ wikiScript11:09:52✔ addCSS11:09:52✔ getParamValue11:09:52✔ getArrayParam11:09:52✔ messageBox11:09:52✔ addPortlet does not append to DOM if no `before` is provided11:09:52✔ addPortlet returns null if bad selector given11:09:52✔ addPortlet appends to DOM if before provided11:09:52✔ addPortletLink (Vector list)11:09:52✔ addPortletLink (Minerva list)11:09:52✔ addPortletLink (nextNode option)11:09:52✔ addPortletLink (accesskey option)11:09:52✔ addPortletLink (nested list)11:09:52✔ validateEmail11:09:52✔ isIPv4Address invalid [0]11:09:52✔ isIPv4Address invalid [1]11:09:52✔ isIPv4Address invalid [2]11:09:52✔ isIPv4Address invalid [3]11:09:52✔ isIPv4Address invalid [4]11:09:52✔ isIPv4Address invalid [5]11:09:52✔ isIPv4Address invalid [6]11:09:52✔ isIPv4Address invalid [7]11:09:52✔ isIPv4Address invalid [8]11:09:52✔ isIPv4Address valid [0]11:09:52✔ isIPv4Address valid [1]11:09:52✔ isIPv6Address invalid [0]11:09:52✔ isIPv6Address invalid [1]11:09:52✔ isIPv6Address invalid [2]11:09:52✔ isIPv6Address invalid [3]11:09:52✔ isIPv6Address invalid [4]11:09:52✔ isIPv6Address invalid [5]11:09:52✔ isIPv6Address invalid [6]11:09:52✔ isIPv6Address invalid [7]11:09:52✔ isIPv6Address invalid [8]11:09:52✔ isIPv6Address invalid [9]11:09:52✔ isIPv6Address invalid [10]11:09:52✔ isIPv6Address invalid [11]11:09:52✔ isIPv6Address invalid [12]11:09:52✔ isIPv6Address invalid [13]11:09:52✔ isIPv6Address invalid [14]11:09:52✔ isIPv6Address invalid [15]11:09:52✔ isIPv6Address invalid [16]11:09:52✔ isIPv6Address valid [0]11:09:52✔ isIPv6Address valid [1]11:09:52✔ isIPv6Address valid [2]11:09:52✔ isIPv6Address valid [3]11:09:52✔ isIPv6Address valid [4]11:09:52✔ isIPv6Address valid [5]11:09:52✔ isIPv6Address valid [6]11:09:52✔ isIPv6Address valid [7]11:09:52✔ isIPv6Address valid [8]11:09:52✔ isIPv6Address valid [9]11:09:52✔ isIPv6Address valid [10]11:09:52✔ isIPv6Address valid [11]11:09:52✔ isIPv6Address valid [12]11:09:52✔ isIPv6Address valid [13]11:09:52✔ isIPv6Address valid [14]11:09:52✔ isIPv6Address valid [15]11:09:52✔ isIPv6Address valid [16]11:09:52✔ isIPv6Address valid [17]11:09:52✔ isIPv6Address valid [18]11:09:52✔ isIPv6Address valid [19]11:09:52✔ isIPv6Address valid [20]11:09:52✔ isIPv6Address valid [21]11:09:52✔ isIPv6Address valid [22]11:09:52✔ isIPv6Address valid [23]11:09:52✔ isIPv6Address valid [24]11:09:52✔ parseImageUrl [Hashed thumb with shortened path]11:09:52✔ parseImageUrl [Hashed thumb with sha1-ed path]11:09:52✔ parseImageUrl [Normal hashed directory thumbnail]11:09:52✔ parseImageUrl [Normal hashed directory thumbnail with complex thumbnail parameters]11:09:52✔ parseImageUrl [Width-like filename component]11:09:52✔ parseImageUrl [Width-like filename component in non-ASCII filename]11:09:52✔ parseImageUrl [Commons thumbnail]11:09:52✔ parseImageUrl [Full image]11:09:52✔ parseImageUrl [thumb.php-based thumbnail]11:09:52✔ parseImageUrl [thumb.php-based thumbnail with px width]11:09:52✔ parseImageUrl [thumb.php-based BC thumbnail]11:09:52✔ parseImageUrl [Commons unhashed thumbnail]11:09:52✔ parseImageUrl [Commons unhashed thumbnail with complex thumbnail parameters]11:09:52✔ parseImageUrl [Unhashed local file]11:09:52✔ parseImageUrl [Empty string]11:09:52✔ parseImageUrl [String with only alphabet characters]11:09:52✔ parseImageUrl [Not a file path]11:09:52✔ parseImageUrl [Space characters]11:09:52✔ parseImageUrl [no dynamic thumbnail generation]11:09:52✔ escapeRegExp [normal]11:09:52✔ escapeRegExp [specials] [0]11:09:52✔ escapeRegExp [specials] [1]11:09:52✔ escapeRegExp [specials] [2]11:09:52✔ escapeRegExp [specials] [3]11:09:52✔ escapeRegExp [specials] [4]11:09:52✔ escapeRegExp [specials] [5]11:09:52✔ escapeRegExp [specials] [6]11:09:52✔ escapeRegExp [specials] [7]11:09:52✔ escapeRegExp [specials] [8]11:09:52✔ escapeRegExp [specials] [9]11:09:52✔ escapeRegExp [specials] [10]11:09:52✔ escapeRegExp [specials] [11]11:09:52✔ escapeRegExp [specials] [12]11:09:52✔ escapeRegExp [specials] [13]11:09:52✔ escapeRegExp [specials] [14]11:09:52✔ debounce(Function, timeout)11:09:52✔ debounce(Function, timeout, immediate=true)11:09:52✔ debounce(timeout, Function) [old signature]11:09:52✔ init (.mw-body-primary)11:09:52✔ init (first of multiple .mw-body)11:09:52✔ init (#mw-content-text fallback)11:09:52✔ init (body fallback)11:09:52✔ sanitizeIP [IPv6 with "::" and 2 words]11:09:52✔ sanitizeIP [IPv6 with "::" and 3 words]11:09:52✔ sanitizeIP [IPv6 with "::" and 4 words]11:09:52✔ sanitizeIP [IPv6 with "::" and 5 words]11:09:52✔ sanitizeIP [IPv6 with "::" and 6 words]11:09:52✔ sanitizeIP [IPv6 with "::" and 7 words]11:09:52✔ sanitizeIP [IPv6 with "::" and 2 words (Teredo)]11:09:52✔ sanitizeIP [IPv6 with "::" and 5 words (Teredo)]11:09:52✔ sanitizeIP [IPv6 with "::" and 6 words (Teredo)]11:09:52✔ sanitizeIP [IPv6 range with "::" and 6 words (Teredo)]11:09:52✔ sanitizeIP [IPv4 no change]11:09:52✔ sanitizeIP [IPv4 strip leading 0s]11:09:52✔ sanitizeIP [IPv4 strip multiple leading 0s]11:09:52✔ sanitizeIP [IPv4 don't strip meaningful trailing 0s]11:09:52✔ sanitizeIP [IPv4 strip meaningless multiple 0s]11:09:52✔ sanitizeIP [IPv4 range strip meaningless multiple 0s]11:09:52✔ sanitizeIP [Not an IP]11:09:52✔ sanitizeIP [Empty string]11:09:52✔ sanitizeIP [IPv4 trim whitespace from start and end of the string]11:09:52✔ sanitizeIP [IPv6 starts with ::]11:09:52✔ sanitizeIP [IPv6 remove leading zeros from each block.]11:09:52✔ sanitizeIP [IPv6 :: at the end]11:09:52✔ sanitizeIP [Non-IP string]11:09:52✔ sanitizeIP [Non-string]11:09:52✔ prettifyIP [IPv6 change to lowercase]11:09:52✔ prettifyIP [IPv4 no change]11:09:52✔ prettifyIP [IPv4 range strip meaningless multiple 0s]11:09:52✔ prettifyIP [Empty string]11:09:52✔ prettifyIP [IPv6 range Replace consecutive zeros with :: ]11:09:52✔ prettifyIP [IPv6 middle only consecutive zeros with ::]11:09:52✔ prettifyIP [IPv6 first longer consecutive zeros with ::]11:09:52✔ prettifyIP [IPv6 last longer consecutive zeros with ::]11:09:52✔ prettifyIP [IPv6 first of equal length consecutive zeros with ::]11:09:52✔ isTemporaryUser [prefix mismatch]11:09:52✔ isTemporaryUser [prefix match]11:09:52✔ isTemporaryUser [suffix only match]11:09:52✔ isTemporaryUser [suffix only mismatch]11:09:52✔ isTemporaryUser [prefix and suffix match]11:09:52✔ isTemporaryUser [prefix and suffix mismatch]11:09:52✔ isTemporaryUser [prefix and suffix zero length match]11:09:52✔ isTemporaryUser [prefix and suffix overlapping]11:09:52✔ isTemporaryUser [multiple patterns prefix match]11:09:52✔ isTemporaryUser [multiple patterns prefix mismatch]11:09:52✔ isTemporaryUser [multiple patterns suffix match]11:09:52✔ isTemporaryUser [multiple patterns suffix mismatch]11:09:52✔ isTemporaryUser [multiple patterns prefix and suffix match]11:09:52✔ isTemporaryUser [Auto create temporary user disabled]11:09:52✔ isTemporaryUser [null username]11:09:52✔ isTemporaryUser matchPattern null [prefix mismatch]11:09:52✔ isTemporaryUser matchPattern null [prefix match]11:09:52✔ isInfinity11:09:52 mediawiki.util: jquery.accessKeyLabel11:09:52✔ getAccessKeyPrefix11:09:52✔ updateTooltipAccessKeys - current browser11:09:52✔ updateTooltipAccessKeys - no access key11:09:52✔ updateTooltipAccessKeys - with access key11:09:52✔ updateTooltipAccessKeys with label element11:09:52✔ updateTooltipAccessKeys with label element as parent11:09:52 mediawiki.api11:09:52✔ get()11:09:52✔ post()11:09:52✔ API error errorformat=bc11:09:52✔ API error errorformat!=bc11:09:52✔ FormData support11:09:52✔ Converting arrays to pipe-separated (string)11:09:52✔ Converting arrays to pipe-separated (mw.Title)11:09:52✔ Converting arrays to pipe-separated (misc primitives)11:09:52✔ Omitting false booleans11:09:52✔ getToken() - cached11:09:52✔ getToken() - uncached11:09:52✔ getToken() - error11:09:52✔ getToken() - no query11:09:52WARN: 'Use of the "email" token is deprecated. Use "csrf" instead.'
11:09:52✔ getToken() - deprecated11:09:53✔ badToken()11:09:53WARN: 'Use of the "options" token is deprecated. Use "csrf" instead.'
11:09:53WARN: 'Use of the "options" token is deprecated. Use "csrf" instead.'
11:09:53WARN: 'Use of the "options" token is deprecated. Use "csrf" instead.'
11:09:53✔ badToken( legacy )11:09:53✔ postWithToken( tokenType, params )11:09:53✔ postWithToken( tokenType, params with assert )11:09:53✔ postWithToken( tokenType, params, ajaxOptions )11:09:53✔ postWithToken() - badtoken11:09:53✔ postWithToken() - badtoken-cached11:09:53✔ #abort11:09:53 mediawiki.api.category11:09:53✔ .getCategoriesByPrefix()11:09:53✔ .isCategory("")11:09:53✔ .isCategory("#")11:09:53✔ .isCategory("mw:")11:09:53✔ .isCategory("|")11:09:53✔ .getCategories("")11:09:53✔ .getCategories("#")11:09:53✔ .getCategories("mw:")11:09:53✔ .getCategories("|")11:09:53 mediawiki.api.edit11:09:53✔ edit( title, transform String )11:09:53✔ edit( mw.Title, transform String )11:09:53✔ edit( title, transform Promise )11:09:53✔ edit( title, transform Object )11:09:53✔ edit( invalid-title, transform String )11:09:53✔ create( title, content )11:09:53 mediawiki.api.messages11:09:53✔ .getMessages()11:09:53✔ .getMessages() with a long string11:09:53 mediawiki.api.options11:09:53✔ saveOption11:09:53✔ saveOptions without Unit Separator11:09:54✔ saveOptions with Unit Separator11:09:54✔ saveOptions (anonymous)11:09:54✔ .parse( string )11:09:54✔ .parse( Object.toString )11:09:54✔ .parse( mw.Title )11:09:54 mediawiki.api.upload11:09:54✔ Basic functionality11:09:54 mediawiki.api.watch11:09:54✔ .watch( string )11:09:54✔ .watch( Array ) - single11:09:54✔ .watch( Array ) - multi11:09:54 mediawiki.rest11:09:54✔ get()11:09:54✔ get() respects ajaxOptions url11:09:54✔ post()11:09:54✔ put()11:09:54✔ delete()11:09:54✔ http error11:09:54✔ #abort11:09:54 mediawiki.ForeignApi11:09:54✔ origin is included in GET requests11:09:54✔ origin is included in POST requests11:09:54✔ origin is not included in same-origin GET requests11:09:54✔ origin is not included in same-origin POST requests11:09:54 mediawiki.ForeignRest11:09:54✔ get()11:09:54✔ post()11:09:54✔ http error11:09:54 mediawiki.rcfilters - FiltersViewModel11:09:54✔ Setting up filters11:09:54✔ Default filters11:09:54✔ Parameter minimal state11:09:54✔ Parameter states11:09:54✔ Cleaning up parameter states11:09:54✔ Finding matching filters11:09:54✔ getParametersFromFilters11:09:54✔ getParametersFromFilters (custom object)11:09:54✔ getFiltersFromParameters11:09:54✔ sanitizeStringOptionGroup11:09:54✔ Filter interaction: subsets11:09:54✔ Filter interaction: full coverage11:09:54✔ Filter interaction: conflicts11:09:54✔ Filter highlights11:09:54✔ emptyAllFilters11:09:54✔ areVisibleFiltersEmpty11:09:54 mediawiki.rcfilters - FilterItem11:09:54✔ Initializing filter item11:09:54✔ Emitting events11:09:54✔ get/set boolean value11:09:54✔ get/set any value11:09:54 mediawiki.rcfilters - SavedQueryItemModel11:09:54✔ Initializing and getters11:09:54✔ Default11:09:54 mediawiki.rcfilters - SavedQueriesModel11:09:54✔ Initializing queries11:09:54✔ Adding new queries11:09:54✔ Manipulating queries11:09:54✔ Testing invert property11:09:54 mediawiki.rcfilters - UriProcessor11:09:54✔ getVersion11:09:54✔ getUpdatedUri11:09:54✔ updateModelBasedOnQuery11:09:54✔ isNewState11:09:54✔ _getNormalizedQueryParams11:09:54✔ _normalizeTargetInUri11:09:54 mediawiki.widgets.APIResultsQueue11:09:54✔ Query providers11:09:54✔ Abort providers11:09:54 mediawiki.widgets.NamespaceInputWidget11:09:54✔ NamespaceInputWidget initialization11:09:54✔ NamespaceInputWidget 'include' config parameter11:09:54 mediawiki.widgets.TableWidget11:09:54✔ TableWidgetModel initialization11:09:54✔ TableWidgetModel#getRowProperties11:09:54✔ TableWidget#setValue11:09:54 ✔ TableWidget#insertColumn/insertRow (skipped)11:09:54 ✔ TableWidget#removeColumn (skipped)11:09:54 ✔ TableWidget#removeRow by index (skipped)11:09:54 ✔ TableWidget#removeRow by key (skipped)11:09:54✔ TableWidget populate text inputs11:09:54 mediawiki.language11:09:54✔ mw.language getData and setData11:09:54✔ mw.language.convertNumber11:09:54✔ mw.language.convertNumber - digitTransformTable11:09:54✔ List to text test11:09:54✔ mw.language.bcp4711:09:54 mediawiki.cookie11:09:54✔ set( key, value )11:09:54✔ set( key, value, expires )11:09:54✔ set( key, value, options )11:09:54✔ get( key ) - no values11:09:54✔ get( key ) - with value11:09:54✔ get( key, prefix )11:09:54 mediawiki.deflate11:09:54✔ deflate [foobar]11:09:54✔ deflate [Unicode]11:09:54✔ deflate [Non BMP unicode]11:09:55✔ deflate [5MB data]11:09:55 mediawiki.experiments11:09:55✔ getBucket( experiment, token )11:09:55 mediawiki.visibleTimeout11:09:55✔ visibleTimeoutId is always a positive integer11:09:55✔ basic usage when visible11:09:55✔ basic usage - fallback assumes visible11:09:55✔ can cancel timeout11:09:55✔ start hidden and become visible11:09:55✔ timeout is cumulative11:09:5502 11 2024 11:09:55.589:DEBUG [Firefox 128.0 (Linux x86_64)]: EXECUTING -> CONNECTED
11:09:5502 11 2024 11:09:55.592:DEBUG [launcher]: CAPTURED -> BEING_KILLED
11:09:5502 11 2024 11:09:55.592:DEBUG [launcher]: BEING_KILLED -> BEING_FORCE_KILLED
11:09:5502 11 2024 11:09:55.592:DEBUG [Firefox 128.0 (Linux x86_64)]: CONNECTED -> DISCONNECTED
11:09:5511:09:55Finished in 4.509 secs / 4.168 secs @ 11:09:55 GMT+0000 (Coordinated Universal Time)11:09:5511:09:55SUMMARY:11:09:55✔ 738 tests completed11:09:55ℹ 4 tests skipped11:09:5502 11 2024 11:09:55.595:DEBUG [karma-server]: Run complete, exiting.
11:09:5502 11 2024 11:09:55.596:DEBUG [launcher]: Disconnecting all browsers
11:09:5502 11 2024 11:09:55.596:DEBUG [launcher]: BEING_FORCE_KILLED -> BEING_FORCE_KILLED
11:09:5502 11 2024 11:09:55.596:DEBUG [proxy]: Destroying proxy agents
11:09:5502 11 2024 11:09:55.642:DEBUG [launcher]: Process FirefoxHeadless exited with code null and signal SIGTERM
11:09:5502 11 2024 11:09:55.643:DEBUG [temp-dir]: Cleaning temp dir /tmp/karma-4183211
11:09:5502 11 2024 11:09:55.695:DEBUG [launcher]: Finished all browsers
11:09:5502 11 2024 11:09:55.695:DEBUG [launcher]: BEING_FORCE_KILLED -> FINISHED
11:09:5502 11 2024 11:09:55.695:DEBUG [launcher]: FINISHED -> FINISHED
11:09:5511:09:55Done.
11:09:55INFO:quibble.commands:<<< Finish: Run Qunit tests, in 11.927 s
PHPUnit extensions suite (with database) parallel run (Composer)
11:09:55INFO:quibble.commands:>>> Start: PHPUnit extensions suite (with database) parallel run (Composer)
11:09:56> MediaWiki\Composer\ComposerLaunchParallel::launchTestsDatabase
11:09:56Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_0' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_0_database.result.cache'' ...
11:09:56Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_1' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_1_database.result.cache'' ...
11:09:56Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_2' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_2_database.result.cache'' ...
11:09:56Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_3' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_3_database.result.cache'' ...
11:09:56Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_4' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_4_database.result.cache'' ...
11:09:56Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_5' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_5_database.result.cache'' ...
11:09:56Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_6' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_6_database.result.cache'' ...
11:09:56Running command ''composer' 'run' '--timeout=0' 'phpunit:entrypoint' '--' '--testsuite' 'split_group_7' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_7_database.result.cache'' ...
11:09:58> phpunit '--testsuite' 'split_group_5' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_5_database.result.cache'
11:09:58Using PHP 8.1.30
11:09:58Running with MediaWiki settings because there might be integration tests
11:09:58PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:5811:09:58No tests executed!
11:09:58Worker exited with status 0
11:09:58> phpunit '--testsuite' 'split_group_7' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_7_database.result.cache'
11:09:58Using PHP 8.1.30
11:09:58Running with MediaWiki settings because there might be integration tests
11:09:58PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:5811:09:58No tests executed!
11:09:58Worker exited with status 0
11:09:58> phpunit '--testsuite' 'split_group_6' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_6_database.result.cache'
11:09:58Using PHP 8.1.30
11:09:58Running with MediaWiki settings because there might be integration tests
11:09:58PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:5811:09:58No tests executed!
11:09:58> phpunit '--testsuite' 'split_group_3' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_3_database.result.cache'
11:09:58Using PHP 8.1.30
11:09:58Running with MediaWiki settings because there might be integration tests
11:09:58PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:09:5811:09:58No tests executed!
11:09:58Worker exited with status 0
11:09:58Worker exited with status 0
11:10:00> phpunit '--testsuite' 'split_group_1' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_1_database.result.cache'
11:10:00Using PHP 8.1.30
11:10:00Running with MediaWiki settings because there might be integration tests
11:10:00PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:10:0011:10:00............................................................... 63 / 162 ( 38%)
11:10:00............................................................... 126 / 162 ( 77%)
11:10:00.................................... 162 / 162 (100%)
11:10:0011:10:00Time: 00:01.290, Memory: 76.50 MB
11:10:0011:10:00OK (162 tests, 1416 assertions)
11:10:0011:10:0011:10:00You should really speed up these slow tests (>100ms)...
11:10:00 1. 259ms to run ContentHandlerFunctionalTest::testGetParserOutput
11:10:00 2. 231ms to run ApiPrefixUniquenessTest::testPrefixes
11:10:00 3. 171ms to run ContentHandlerFunctionalTest::testPreSaveTransform
11:10:00 4. 162ms to run ContentHandlerFunctionalTest::testPreloadTransform
11:10:00Worker exited with status 0
11:10:00> phpunit '--testsuite' 'split_group_2' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_2_database.result.cache'
11:10:00Using PHP 8.1.30
11:10:00Running with MediaWiki settings because there might be integration tests
11:10:00PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:10:0011:10:00............................................................... 63 / 505 ( 12%)
11:10:00............................................................... 126 / 505 ( 24%)
11:10:00............................................................... 189 / 505 ( 37%)
11:10:00............................................................... 252 / 505 ( 49%)
11:10:00............................................................... 315 / 505 ( 62%)
11:10:00............................................................... 378 / 505 ( 74%)
11:10:00............................................................... 441 / 505 ( 87%)
11:10:00............................................................... 504 / 505 ( 99%)
11:10:00. 505 / 505 (100%)
11:10:0011:10:00Time: 00:01.683, Memory: 68.50 MB
11:10:0011:10:00OK (505 tests, 8792 assertions)
11:10:0011:10:0011:10:00You should really speed up these slow tests (>100ms)...
11:10:00 1. 188ms to run DatabaseIntegrationTest::testAutomaticSqlGeneration with data set #0
11:10:00 2. 145ms to run DatabaseIntegrationTest::testAutomaticSqlGeneration with data set #1
11:10:00 3. 144ms to run DatabaseIntegrationTest::testAutomaticSqlGeneration with data set #2
11:10:00Worker exited with status 0
11:10:01> phpunit '--testsuite' 'split_group_4' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_4_database.result.cache'
11:10:01Using PHP 8.1.30
11:10:01Running with MediaWiki settings because there might be integration tests
11:10:01PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:10:0111:10:01............................................................... 63 / 138 ( 45%)
11:10:01............................................................... 126 / 138 ( 91%)
11:10:01............ 138 / 138 (100%)
11:10:0111:10:01Time: 00:02.713, Memory: 70.50 MB
11:10:0111:10:01OK (138 tests, 138 assertions)
11:10:0111:10:0111:10:01You should really speed up these slow tests (>100ms)...
11:10:01 1. 303ms to run SpecialPageFatalTest::testSpecialPageDoesNotFatal with data set "BrokenRedirects"
11:10:01 2. 244ms to run SpecialPageFatalTest::testSpecialPageDoesNotFatal with data set "Preferences"
11:10:01 3. 159ms to run SpecialPageFatalTest::testSpecialPageDoesNotFatal with data set "Version"
11:10:01Worker exited with status 0
11:10:32> phpunit '--testsuite' 'split_group_0' '--exclude-group' 'Broken,ParserFuzz,Stub,Standalone' '--group' 'Database' '--cache-result-file=.phpunit_group_0_database.result.cache'
11:10:32Using PHP 8.1.30
11:10:32Running with MediaWiki settings because there might be integration tests
11:10:32PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
11:10:3211:10:32............................................................. 61 / 1459 ( 4%)
11:10:32............................................................. 122 / 1459 ( 8%)
11:10:32............................................................. 183 / 1459 ( 12%)
11:10:32............................................................. 244 / 1459 ( 16%)
11:10:32............................................................. 305 / 1459 ( 20%)
11:10:32............................................................. 366 / 1459 ( 25%)
11:10:32............................................................. 427 / 1459 ( 29%)
11:10:32............................................................. 488 / 1459 ( 33%)
11:10:32............................................................. 549 / 1459 ( 37%)
11:10:32............................................................. 610 / 1459 ( 41%)
11:10:32............................................................. 671 / 1459 ( 45%)
11:10:32............................................................. 732 / 1459 ( 50%)
11:10:32............................................................. 793 / 1459 ( 54%)
11:10:32............................................................. 854 / 1459 ( 58%)
11:10:32............................................................. 915 / 1459 ( 62%)
11:10:32............................................................. 976 / 1459 ( 66%)
11:10:32............................................................. 1037 / 1459 ( 71%)
11:10:32............................................................. 1098 / 1459 ( 75%)
11:10:32............................................................. 1159 / 1459 ( 79%)
11:10:32............................................................. 1220 / 1459 ( 83%)
11:10:32............................................................. 1281 / 1459 ( 87%)
11:10:32............................................................. 1342 / 1459 ( 91%)
11:10:32............................................................. 1403 / 1459 ( 96%)
11:10:32........................................................ 1459 / 1459 (100%)
11:10:3211:10:32Time: 00:33.526, Memory: 110.50 MB
11:10:3211:10:32OK (1459 tests, 3375 assertions)
11:10:3211:10:3211:10:32You should really speed up these slow tests (>100ms)...
11:10:32 1. 3306ms to run ResourcesTest::testResourceFiles
11:10:32 2. 1255ms to run ResourcesTest::testRespond with data set #118
11:10:32 3. 1205ms to run ResourcesTest::testRespond with data set #360
11:10:32 4. 667ms to run ResourcesTest::testRespond with data set #230
11:10:32 5. 639ms to run ResourcesTest::testRespond with data set #472
11:10:32 6. 600ms to run ResourcesTest::testRespond with data set #250
11:10:32 7. 568ms to run ResourcesTest::testRespond with data set #8
11:10:32 8. 503ms to run ResourcesTest::testRespond with data set #849
11:10:32 9. 474ms to run ResourcesTest::testRespond with data set #607
11:10:32 10. 460ms to run ResourcesTest::testRespond with data set #1333
11:10:32...and there are 33 more above your threshold hidden from view
11:10:32Worker exited with status 0
11:10:32INFO:quibble.commands:<<< Finish: PHPUnit extensions suite (with database) parallel run (Composer), in 36.770 s
PHPUnit Parallel Notice
11:10:32INFO:quibble.commands:>>> Start: PHPUnit Parallel Notice
11:10:32INFO:quibble.commands:NOTICE: These tests have been executed with PHPUnit Parallel enabled.
11:10:32INFO:quibble.commands:If you encounter unexpected test failures or notice incomplete execution of test suites, please let us know!
11:10:32INFO:quibble.commands:For more information, and to report parallel-testing-related failures, please visit https://phabricator.wikimedia.org/T36119011:10:32INFO:quibble.commands:<<< Finish: PHPUnit Parallel Notice, in 0.001 s