]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - tests/phpunit/autoload.ide.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / tests / phpunit / autoload.ide.php
1 <?php
2
3 /**
4  * This file is PHPUnit autoload file for PhpStorm IDE and other JetBrains IDEs.
5  *
6  * This file should be set in `Languages and frameworks > PHP > PhpUnit`
7  * select `Use Composer autoloader` and set `Path to script` to `<path to this file>`.
8  * After that, tests can be run in PhpStorm using Right-click > Run or `Ctrl + Shift + F10`.
9  * Also, tests can be run with debugger very easily.
10  *
11  * This file basically does almost the same thing as `tests/phpunit/phpunit.php`, except that all
12  * code is going to be executed inside some function, so some hacks needed to make old code to be
13  * executed as if it was executed on top of the execution stack.
14  *
15  * PS: Mostly it is copy-paste from `phpunit.php` and `doMaintenance.php`.
16  *
17  * @file
18  */
19
20 // Set a flag which can be used to detect when other scripts have been entered
21 // through this entry point or not.
22 use MediaWiki\MediaWikiServices;
23
24 global $argv;
25 $argv[1] = '--wiki';
26 $argv[2] = getenv( 'WIKI_NAME' ) ?: 'wiki';
27
28 require_once __DIR__ . "/phpunit.php";
29
30 // Get an object to start us off
31 /** @var Maintenance $maintenance */
32 $maintenance = new PHPUnitMaintClass();
33
34 // Basic sanity checks and such
35 $maintenance->setup();
36
37 // We used to call this variable $self, but it was moved
38 // to $maintenance->mSelf. Keep that here for b/c
39 $self = $maintenance->getName();
40 global $IP;
41 # Start the autoloader, so that extensions can derive classes from core files
42 require_once "$IP/includes/AutoLoader.php";
43 # Grab profiling functions
44 require_once "$IP/includes/profiler/ProfilerFunctions.php";
45
46 # Start the profiler
47 $wgProfiler = [];
48 if ( file_exists( "$IP/StartProfiler.php" ) ) {
49         require "$IP/StartProfiler.php";
50 }
51
52 $requireOnceGlobalsScope = function ( $file ) use ( $self ) {
53         foreach ( array_keys( $GLOBALS ) as $varName ) {
54                 eval( sprintf( 'global $%s;', $varName ) );
55         }
56
57         require_once $file;
58
59         unset( $file );
60         $definedVars = get_defined_vars();
61         foreach ( $definedVars as $varName => $value ) {
62                 eval( sprintf( 'global $%s; $%s = $value;', $varName, $varName ) );
63         }
64 };
65
66 // Some other requires
67 $requireOnceGlobalsScope( "$IP/includes/Defines.php" );
68 $requireOnceGlobalsScope( "$IP/includes/DefaultSettings.php" );
69 $requireOnceGlobalsScope( "$IP/includes/GlobalFunctions.php" );
70
71 foreach ( array_keys( $GLOBALS ) as $varName ) {
72         eval( sprintf( 'global $%s;', $varName ) );
73 }
74
75 # Load composer's autoloader if present
76 if ( is_readable( "$IP/vendor/autoload.php" ) ) {
77         require_once "$IP/vendor/autoload.php";
78 }
79
80 if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
81         # Use a callback function to configure MediaWiki
82         call_user_func( MW_CONFIG_CALLBACK );
83 } else {
84         // Require the configuration (probably LocalSettings.php)
85         require $maintenance->loadSettings();
86 }
87
88 if ( $maintenance->getDbType() === Maintenance::DB_NONE ) {
89         if (
90                 $wgLocalisationCacheConf['storeClass'] === false
91                 && (
92                         $wgLocalisationCacheConf['store'] == 'db'
93                         || ( $wgLocalisationCacheConf['store'] == 'detect' && !$wgCacheDirectory )
94                 )
95         ) {
96                 $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
97         }
98 }
99
100 $maintenance->finalSetup();
101 // Some last includes
102 $requireOnceGlobalsScope( "$IP/includes/Setup.php" );
103
104 // Initialize main config instance
105 $maintenance->setConfig( MediaWikiServices::getInstance()->getMainConfig() );
106
107 // Sanity-check required extensions are installed
108 $maintenance->checkRequiredExtensions();
109
110 // A good time when no DBs have writes pending is around lag checks.
111 // This avoids having long running scripts just OOM and lose all the updates.
112 $maintenance->setAgentAndTriggers();