$value ) { $GLOBALS[$var] = $value; } TestSetup::requireOnceInGlobalScope( "$IP/includes/DevelopmentSettings.php" ); TestSetup::applyInitialConfig(); MediaWikiCliOptions::initialize(); // Since we do not load settings, expect to find extensions and skins // in their respective default locations. $GLOBALS['wgExtensionDirectory'] = "$IP/extensions"; $GLOBALS['wgStyleDirectory'] = "$IP/skins"; // Populate classes and namespaces from extensions and skins present in filesystem. $directoryToJsonMap = [ $GLOBALS['wgExtensionDirectory'] => 'extension*.json', $GLOBALS['wgStyleDirectory'] => 'skin*.json' ]; $extensionProcessor = new ExtensionProcessor(); foreach ( $directoryToJsonMap as $directory => $jsonFilePattern ) { foreach ( new GlobIterator( $directory . '/*/' . $jsonFilePattern ) as $iterator ) { $jsonPath = $iterator->getPathname(); $extensionProcessor->extractInfoFromFile( $jsonPath ); } } $autoload = $extensionProcessor->getExtractedAutoloadInfo( true ); AutoLoader::loadFiles( $autoload['files'] ); AutoLoader::registerClasses( $autoload['classes'] ); AutoLoader::registerNamespaces( $autoload['namespaces'] ); // More faking in lieu of Setup.php Profiler::init( [] ); // Check that composer dependencies are up-to-date if ( !getenv( 'MW_SKIP_EXTERNAL_DEPENDENCIES' ) ) { $composerLockUpToDate = new CheckComposerLockUpToDate(); $composerLockUpToDate->loadParamsAndArgs( 'phpunit', [ 'quiet' => true ] ); $composerLockUpToDate->execute(); }