diff options
author | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
commit | fc7369835258467bf97eb64f184b93691f9a9fd5 (patch) | |
tree | daabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/tests/common |
first commit
Diffstat (limited to 'www/wiki/tests/common')
-rw-r--r-- | www/wiki/tests/common/TestSetup.php | 113 | ||||
-rw-r--r-- | www/wiki/tests/common/TestsAutoLoader.php | 222 |
2 files changed, 335 insertions, 0 deletions
diff --git a/www/wiki/tests/common/TestSetup.php b/www/wiki/tests/common/TestSetup.php new file mode 100644 index 00000000..c176a67f --- /dev/null +++ b/www/wiki/tests/common/TestSetup.php @@ -0,0 +1,113 @@ +<?php + +/** + * Common code for test environment initialisation and teardown + */ +class TestSetup { + /** + * This should be called before Setup.php, e.g. from the finalSetup() method + * of a Maintenance subclass + */ + public static function applyInitialConfig() { + global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType, $wgMainWANCache; + global $wgMainStash; + global $wgLanguageConverterCacheType, $wgUseDatabaseMessages; + global $wgLocaltimezone, $wgLocalisationCacheConf; + global $wgSearchType; + global $wgDevelopmentWarnings; + global $wgSessionProviders, $wgSessionPbkdf2Iterations; + global $wgJobTypeConf; + global $wgAuthManagerConfig, $wgAuth; + + // wfWarn should cause tests to fail + $wgDevelopmentWarnings = true; + + // Make sure all caches and stashes are either disabled or use + // in-process cache only to prevent tests from using any preconfigured + // cache meant for the local wiki from outside the test run. + // See also MediaWikiTestCase::run() which mocks CACHE_DB and APC. + + // Disabled in DefaultSettings, override local settings + $wgMainWANCache = + $wgMainCacheType = CACHE_NONE; + // Uses CACHE_ANYTHING in DefaultSettings, use hash instead of db + $wgMessageCacheType = + $wgParserCacheType = + $wgSessionCacheType = + $wgLanguageConverterCacheType = 'hash'; + // Uses db-replicated in DefaultSettings + $wgMainStash = 'hash'; + // Use memory job queue + $wgJobTypeConf = [ + 'default' => [ 'class' => JobQueueMemory::class, 'order' => 'fifo' ], + ]; + + $wgUseDatabaseMessages = false; # Set for future resets + + // Assume UTC for testing purposes + $wgLocaltimezone = 'UTC'; + + $wgLocalisationCacheConf['storeClass'] = LCStoreNull::class; + + // Do not bother updating search tables + $wgSearchType = SearchEngineDummy::class; + + // Generic MediaWiki\Session\SessionManager configuration for tests + // We use CookieSessionProvider because things might be expecting + // cookies to show up in a FauxRequest somewhere. + $wgSessionProviders = [ + [ + 'class' => MediaWiki\Session\CookieSessionProvider::class, + 'args' => [ [ + 'priority' => 30, + 'callUserSetCookiesHook' => true, + ] ], + ], + ]; + + // Single-iteration PBKDF2 session secret derivation, for speed. + $wgSessionPbkdf2Iterations = 1; + + // Generic AuthManager configuration for testing + $wgAuthManagerConfig = [ + 'preauth' => [], + 'primaryauth' => [ + [ + 'class' => MediaWiki\Auth\TemporaryPasswordPrimaryAuthenticationProvider::class, + 'args' => [ [ + 'authoritative' => false, + ] ], + ], + [ + 'class' => MediaWiki\Auth\LocalPasswordPrimaryAuthenticationProvider::class, + 'args' => [ [ + 'authoritative' => true, + ] ], + ], + ], + 'secondaryauth' => [], + ]; + $wgAuth = new MediaWiki\Auth\AuthManagerAuthPlugin(); + + // T46192 Do not attempt to send a real e-mail + Hooks::clear( 'AlternateUserMailer' ); + Hooks::register( + 'AlternateUserMailer', + function () { + return false; + } + ); + // xdebug's default of 100 is too low for MediaWiki + ini_set( 'xdebug.max_nesting_level', 1000 ); + + // Bug T116683 serialize_precision of 100 + // may break testing against floating point values + // treated with PHP's serialize() + ini_set( 'serialize_precision', 17 ); + + // TODO: we should call MediaWikiTestCase::prepareServices( new GlobalVarConfig() ) here. + // But PHPUnit may not be loaded yet, so we have to wait until just + // before PHPUnit_TextUI_Command::main() is executed. + } + +} diff --git a/www/wiki/tests/common/TestsAutoLoader.php b/www/wiki/tests/common/TestsAutoLoader.php new file mode 100644 index 00000000..abf718d0 --- /dev/null +++ b/www/wiki/tests/common/TestsAutoLoader.php @@ -0,0 +1,222 @@ +<?php +/** + * AutoLoader for the testing suite. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + * @ingroup Testing + */ + +global $wgAutoloadClasses; +$testDir = __DIR__ . "/.."; + +// phpcs:disable Generic.Files.LineLength +$wgAutoloadClasses += [ + + # tests/common + 'TestSetup' => "$testDir/common/TestSetup.php", + + # tests/integration + 'MWHttpRequestTestCase' => "$testDir/integration/includes/http/MWHttpRequestTestCase.php", + + # tests/parser + 'DbTestPreviewer' => "$testDir/parser/DbTestPreviewer.php", + 'DbTestRecorder' => "$testDir/parser/DbTestRecorder.php", + 'DjVuSupport' => "$testDir/parser/DjVuSupport.php", + 'MultiTestRecorder' => "$testDir/parser/MultiTestRecorder.php", + 'ParserTestMockParser' => "$testDir/parser/ParserTestMockParser.php", + 'ParserTestRunner' => "$testDir/parser/ParserTestRunner.php", + 'ParserTestParserHook' => "$testDir/parser/ParserTestParserHook.php", + 'ParserTestPrinter' => "$testDir/parser/ParserTestPrinter.php", + 'ParserTestResult' => "$testDir/parser/ParserTestResult.php", + 'ParserTestResultNormalizer' => "$testDir/parser/ParserTestResultNormalizer.php", + 'PhpunitTestRecorder' => "$testDir/parser/PhpunitTestRecorder.php", + 'TestFileEditor' => "$testDir/parser/TestFileEditor.php", + 'TestFileReader' => "$testDir/parser/TestFileReader.php", + 'TestRecorder' => "$testDir/parser/TestRecorder.php", + 'TidySupport' => "$testDir/parser/TidySupport.php", + + # tests/phpunit + 'MediaWikiTestCase' => "$testDir/phpunit/MediaWikiTestCase.php", + 'MediaWikiPHPUnitTestListener' => "$testDir/phpunit/MediaWikiPHPUnitTestListener.php", + 'MediaWikiLangTestCase' => "$testDir/phpunit/MediaWikiLangTestCase.php", + 'ResourceLoaderTestCase' => "$testDir/phpunit/ResourceLoaderTestCase.php", + 'ResourceLoaderTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php", + 'ResourceLoaderFileTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php", + 'ResourceLoaderFileModuleTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php", + 'EmptyResourceLoader' => "$testDir/phpunit/ResourceLoaderTestCase.php", + 'TestUser' => "$testDir/phpunit/includes/TestUser.php", + 'TestUserRegistry' => "$testDir/phpunit/includes/TestUserRegistry.php", + 'LessFileCompilationTest' => "$testDir/phpunit/LessFileCompilationTest.php", + 'MediaWikiCoversValidator' => "$testDir/phpunit/MediaWikiCoversValidator.php", + 'PHPUnit4And6Compat' => "$testDir/phpunit/PHPUnit4And6Compat.php", + 'HamcrestPHPUnitIntegration' => "$testDir/phpunit/HamcrestPHPUnitIntegration.php", + + # tests/phpunit/includes + 'RevisionDbTestBase' => "$testDir/phpunit/includes/RevisionDbTestBase.php", + 'RevisionTestModifyableContent' => "$testDir/phpunit/includes/RevisionTestModifyableContent.php", + 'RevisionTestModifyableContentHandler' => "$testDir/phpunit/includes/RevisionTestModifyableContentHandler.php", + 'TestLogger' => "$testDir/phpunit/includes/TestLogger.php", + + # tests/phpunit/includes/api + 'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php", + 'ApiQueryTestBase' => "$testDir/phpunit/includes/api/query/ApiQueryTestBase.php", + 'ApiQueryContinueTestBase' => "$testDir/phpunit/includes/api/query/ApiQueryContinueTestBase.php", + 'ApiTestCase' => "$testDir/phpunit/includes/api/ApiTestCase.php", + 'ApiTestCaseUpload' => "$testDir/phpunit/includes/api/ApiTestCaseUpload.php", + 'ApiTestContext' => "$testDir/phpunit/includes/api/ApiTestContext.php", + 'ApiUploadTestCase' => "$testDir/phpunit/includes/api/ApiUploadTestCase.php", + 'MockApi' => "$testDir/phpunit/includes/api/MockApi.php", + 'MockApiQueryBase' => "$testDir/phpunit/includes/api/MockApiQueryBase.php", + 'UserWrapper' => "$testDir/phpunit/includes/api/UserWrapper.php", + 'RandomImageGenerator' => "$testDir/phpunit/includes/api/RandomImageGenerator.php", + + # tests/phpunit/includes/auth + 'MediaWiki\\Auth\\AuthenticationRequestTestCase' => + "$testDir/phpunit/includes/auth/AuthenticationRequestTestCase.php", + + # tests/phpunit/includes/changes + 'TestRecentChangesHelper' => "$testDir/phpunit/includes/changes/TestRecentChangesHelper.php", + + # tests/phpunit/includes/content + 'DummyContentHandlerForTesting' => + "$testDir/phpunit/mocks/content/DummyContentHandlerForTesting.php", + 'DummyContentForTesting' => "$testDir/phpunit/mocks/content/DummyContentForTesting.php", + 'DummyNonTextContentHandler' => "$testDir/phpunit/mocks/content/DummyNonTextContentHandler.php", + 'DummyNonTextContent' => "$testDir/phpunit/mocks/content/DummyNonTextContent.php", + 'DummySerializeErrorContentHandler' => + "$testDir/phpunit/mocks/content/DummySerializeErrorContentHandler.php", + 'ContentHandlerTest' => "$testDir/phpunit/includes/content/ContentHandlerTest.php", + 'JavaScriptContentTest' => "$testDir/phpunit/includes/content/JavaScriptContentTest.php", + 'TextContentTest' => "$testDir/phpunit/includes/content/TextContentTest.php", + 'WikitextContentTest' => "$testDir/phpunit/includes/content/WikitextContentTest.php", + + # tests/phpunit/includes/db + 'DatabaseTestHelper' => "$testDir/phpunit/includes/db/DatabaseTestHelper.php", + + # tests/phpunit/includes/diff + 'FakeDiffOp' => "$testDir/phpunit/includes/diff/FakeDiffOp.php", + + # tests/phpunit/includes/externalstore + 'ExternalStoreForTesting' => "$testDir/phpunit/includes/externalstore/ExternalStoreForTesting.php", + + # tests/phpunit/includes/logging + 'LogFormatterTestCase' => "$testDir/phpunit/includes/logging/LogFormatterTestCase.php", + + # tests/phpunit/includes/page + 'WikiPageDbTestBase' => "$testDir/phpunit/includes/page/WikiPageDbTestBase.php", + + # tests/phpunit/includes/parser + 'ParserIntegrationTest' => "$testDir/phpunit/includes/parser/ParserIntegrationTest.php", + + # tests/phpunit/includes/password + 'PasswordTestCase' => "$testDir/phpunit/includes/password/PasswordTestCase.php", + + # tests/phpunit/includes/resourceloader + 'ResourceLoaderImageModuleTest' => + "$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php", + 'ResourceLoaderImageModuleTestable' => + "$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php", + + # tests/phpunit/includes/session + 'MediaWiki\\Session\\TestBagOStuff' => "$testDir/phpunit/includes/session/TestBagOStuff.php", + 'MediaWiki\\Session\\TestUtils' => "$testDir/phpunit/includes/session/TestUtils.php", + + # tests/phpunit/includes/site + 'SiteTest' => "$testDir/phpunit/includes/site/SiteTest.php", + 'TestSites' => "$testDir/phpunit/includes/site/TestSites.php", + + # tests/phpunit/includes/specialpage + 'SpecialPageTestHelper' => "$testDir/phpunit/includes/specialpage/SpecialPageTestHelper.php", + 'AbstractChangesListSpecialPageTestCase' => "$testDir/phpunit/includes/specialpage/AbstractChangesListSpecialPageTestCase.php", + + # tests/phpunit/includes/specials + 'SpecialPageTestBase' => "$testDir/phpunit/includes/specials/SpecialPageTestBase.php", + 'SpecialPageExecutor' => "$testDir/phpunit/includes/specials/SpecialPageExecutor.php", + + # tests/phpunit/includes/Storage + 'MediaWiki\Tests\Storage\RevisionSlotsTest' => "$testDir/phpunit/includes/Storage/RevisionSlotsTest.php", + 'MediaWiki\Tests\Storage\RevisionRecordTests' => "$testDir/phpunit/includes/Storage/RevisionRecordTests.php", + + # tests/phpunit/languages + 'LanguageClassesTestCase' => "$testDir/phpunit/languages/LanguageClassesTestCase.php", + + # tests/phpunit/includes/libs + 'GenericArrayObjectTest' => "$testDir/phpunit/includes/libs/GenericArrayObjectTest.php", + + # tests/phpunit/maintenance + 'MediaWiki\Tests\Maintenance\DumpTestCase' => "$testDir/phpunit/maintenance/DumpTestCase.php", + 'MediaWiki\Tests\Maintenance\MaintenanceBaseTestCase' => "$testDir/phpunit/maintenance/MaintenanceBaseTestCase.php", + + # tests/phpunit/media + 'FakeDimensionFile' => "$testDir/phpunit/includes/media/FakeDimensionFile.php", + 'MediaWikiMediaTestCase' => "$testDir/phpunit/includes/media/MediaWikiMediaTestCase.php", + + # tests/phpunit/mocks + 'MockFSFile' => "$testDir/phpunit/mocks/filebackend/MockFSFile.php", + 'MockFileBackend' => "$testDir/phpunit/mocks/filebackend/MockFileBackend.php", + 'MockLocalRepo' => "$testDir/phpunit/mocks/filerepo/MockLocalRepo.php", + 'MockBitmapHandler' => "$testDir/phpunit/mocks/media/MockBitmapHandler.php", + 'MockImageHandler' => "$testDir/phpunit/mocks/media/MockImageHandler.php", + 'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockSvgHandler.php", + 'MockDjVuHandler' => "$testDir/phpunit/mocks/media/MockDjVuHandler.php", + 'MockChangesListFilter' => "$testDir/phpunit/mocks/MockChangesListFilter.php", + 'MockChangesListFilterGroup' => "$testDir/phpunit/mocks/MockChangesListFilterGroup.php", + 'MockWebRequest' => "$testDir/phpunit/mocks/MockWebRequest.php", + 'MediaWiki\\Session\\DummySessionBackend' + => "$testDir/phpunit/mocks/session/DummySessionBackend.php", + 'DummySessionProvider' => "$testDir/phpunit/mocks/session/DummySessionProvider.php", + 'MockMessageLocalizer' => "$testDir/phpunit/mocks/MockMessageLocalizer.php", + + # tests/suites + 'ParserTestFileSuite' => "$testDir/phpunit/suites/ParserTestFileSuite.php", + 'ParserTestTopLevelSuite' => "$testDir/phpunit/suites/ParserTestTopLevelSuite.php", +]; +// phpcs:enable + +/** + * Alias any PHPUnit 4 era PHPUnit_... class + * to it's PHPUnit 6 replacement. For most classes + * this is a direct _ -> \ replacement, but for + * some others we might need to maintain a manual + * mapping. Once we drop support for PHPUnit 4 this + * should be considered deprecated and eventually removed. + */ +spl_autoload_register( function ( $class ) { + if ( strpos( $class, 'PHPUnit_' ) !== 0 ) { + // Skip if it doesn't start with the old prefix + return; + } + + // Classes that don't map 100% + $map = [ + 'PHPUnit_Framework_TestSuite_DataProvider' => 'PHPUnit\Framework\DataProviderTestSuite', + 'PHPUnit_Framework_Error' => 'PHPUnit\Framework\Error\Error', + ]; + + if ( isset( $map[$class] ) ) { + $newForm = $map[$class]; + } else { + $newForm = str_replace( '_', '\\', $class ); + } + + if ( class_exists( $newForm ) || interface_exists( $newForm ) ) { + // If the new class name exists, alias + // the old name to it. + class_alias( $newForm, $class ); + } +} ); |