protected function setUp() { parent::setUp(); $contLang = Language::factory('en'); $this->setMwGlobals(array('wgShowDBErrorBacktrace' => true, 'wgLanguageCode' => 'en', 'wgContLang' => $contLang, 'wgLang' => Language::factory('en'), 'wgMemc' => new EmptyBagOStuff(), 'wgAlwaysUseTidy' => false, 'wgCleanSignatures' => true)); $this->options = ParserOptions::newFromUserAndLang(new User(), $contLang); $this->options->setTemplateCallback(array(__CLASS__, 'statelessFetchTemplate')); $this->parser = new Parser(); MagicWord::clearCache(); }
/** * @dataProvider provideMakeRedirectContent * @param Title|string $title Title object or string for Title::newFromText() * @param string $expected Serialized form of the content object built * @covers WikitextContentHandler::makeRedirectContent */ public function testMakeRedirectContent($title, $expected) { global $wgContLang; $wgContLang->resetNamespaces(); MagicWord::clearCache(); if (is_string($title)) { $title = Title::newFromText($title); } $content = $this->handler->makeRedirectContent($title); $this->assertEquals($expected, $content->serialize()); }
protected function setUp() { parent::setUp(); $contLang = Language::factory('en'); $this->setMwGlobals(['wgShowDBErrorBacktrace' => true, 'wgCleanSignatures' => true]); $this->setUserLang('en'); $this->setContentLang($contLang); // FIXME: This test should pass without setting global content language $this->options = ParserOptions::newFromUserAndLang(new User(), $contLang); $this->options->setTemplateCallback([__CLASS__, 'statelessFetchTemplate']); $this->parser = new Parser(); MagicWord::clearCache(); }
function setUp() { global $wgMemc; global $wgContLang; global $wgShowDBErrorBacktrace; global $wgLanguageCode; global $wgAlwaysUseTidy; $wgShowDBErrorBacktrace = true; $wgLanguageCode = 'en'; $wgContLang = new Language('en'); $wgMemc = new EmptyBagOStuff(); $wgAlwaysUseTidy = false; $this->options = new ParserOptions(); $this->options->setTemplateCallback(array(__CLASS__, 'statelessFetchTemplate')); $this->parser = new Parser(); MagicWord::clearCache(); }
/** * Set up the global variables for a consistent environment for each test. * Ideally this should replace the global configuration entirely. * @param array $opts * @param string $config * @return RequestContext */ protected function setupGlobals($opts = array(), $config = '') { global $wgFileBackends; # Find out values for some special options. $lang = self::getOptionValue('language', $opts, 'en'); $variant = self::getOptionValue('variant', $opts, false); $maxtoclevel = self::getOptionValue('wgMaxTocLevel', $opts, 999); $linkHolderBatchSize = self::getOptionValue('wgLinkHolderBatchSize', $opts, 1000); $uploadDir = $this->getUploadDir(); if ($this->getCliArg('use-filebackend')) { if (self::$backendToUse) { $backend = self::$backendToUse; } else { $name = $this->getCliArg('use-filebackend'); $useConfig = array(); foreach ($wgFileBackends as $conf) { if ($conf['name'] == $name) { $useConfig = $conf; } } $useConfig['name'] = 'local-backend'; // swap name unset($useConfig['lockManager']); unset($useConfig['fileJournal']); $class = $useConfig['class']; self::$backendToUse = new $class($useConfig); $backend = self::$backendToUse; } } else { # Replace with a mock. We do not care about generating real # files on the filesystem, just need to expose the file # informations. $backend = new MockFileBackend(array('name' => 'local-backend', 'wikiId' => wfWikiId())); } $settings = array('wgLocalFileRepo' => array('class' => 'LocalRepo', 'name' => 'local', 'url' => 'http://example.com/images', 'hashLevels' => 2, 'transformVia404' => false, 'backend' => $backend), 'wgEnableUploads' => self::getOptionValue('wgEnableUploads', $opts, true), 'wgLanguageCode' => $lang, 'wgDBprefix' => $this->db->getType() != 'oracle' ? 'unittest_' : 'ut_', 'wgRawHtml' => self::getOptionValue('wgRawHtml', $opts, false), 'wgNamespacesWithSubpages' => array(NS_MAIN => isset($opts['subpage'])), 'wgAllowExternalImages' => self::getOptionValue('wgAllowExternalImages', $opts, true), 'wgThumbLimits' => array(self::getOptionValue('thumbsize', $opts, 180)), 'wgMaxTocLevel' => $maxtoclevel, 'wgUseTeX' => isset($opts['math']) || isset($opts['texvc']), 'wgMathDirectory' => $uploadDir . '/math', 'wgDefaultLanguageVariant' => $variant, 'wgLinkHolderBatchSize' => $linkHolderBatchSize, 'wgUseTidy' => isset($opts['tidy'])); if ($config) { $configLines = explode("\n", $config); foreach ($configLines as $line) { list($var, $value) = explode('=', $line, 2); $settings[$var] = eval("return {$value};"); // ??? } } $this->savedGlobals = array(); /** @since 1.20 */ Hooks::run('ParserTestGlobals', array(&$settings)); $langObj = Language::factory($lang); $settings['wgContLang'] = $langObj; $settings['wgLang'] = $langObj; $context = new RequestContext(); $settings['wgOut'] = $context->getOutput(); $settings['wgUser'] = $context->getUser(); $settings['wgRequest'] = $context->getRequest(); // We (re)set $wgThumbLimits to a single-element array above. $context->getUser()->setOption('thumbsize', 0); foreach ($settings as $var => $val) { if (array_key_exists($var, $GLOBALS)) { $this->savedGlobals[$var] = $GLOBALS[$var]; } $GLOBALS[$var] = $val; } MWTidy::destroySingleton(); MagicWord::clearCache(); # The entries saved into RepoGroup cache with previous globals will be wrong. RepoGroup::destroySingleton(); FileBackendGroup::destroySingleton(); # Create dummy files in storage $this->setupUploads(); # Publish the articles after we have the final language set $this->publishTestArticles(); MessageCache::destroyInstance(); return $context; }
/** * Set up the global variables for a consistent environment for each test. * Ideally this should replace the global configuration entirely. */ protected function setupGlobals($opts = '', $config = '') { global $wgFileBackends; # Find out values for some special options. $lang = self::getOptionValue('language', $opts, 'en'); $variant = self::getOptionValue('variant', $opts, false); $maxtoclevel = self::getOptionValue('wgMaxTocLevel', $opts, 999); $linkHolderBatchSize = self::getOptionValue('wgLinkHolderBatchSize', $opts, 1000); $uploadDir = $this->getUploadDir(); if ($this->getCliArg('use-filebackend=')) { if (self::$backendToUse) { $backend = self::$backendToUse; } else { $name = $this->getCliArg('use-filebackend='); $useConfig = array(); foreach ($wgFileBackends as $conf) { if ($conf['name'] == $name) { $useConfig = $conf; } } $useConfig['name'] = 'local-backend'; // swap name $class = $conf['class']; self::$backendToUse = new $class($useConfig); $backend = self::$backendToUse; } } else { $backend = new FSFileBackend(array('name' => 'local-backend', 'lockManager' => 'nullLockManager', 'containerPaths' => array('local-public' => "{$uploadDir}", 'local-thumb' => "{$uploadDir}/thumb"))); } $settings = array('wgServer' => 'http://Britney-Spears', 'wgScript' => '/index.php', 'wgScriptPath' => '/', 'wgArticlePath' => '/wiki/$1', 'wgExtensionAssetsPath' => '/extensions', 'wgActionPaths' => array(), 'wgLocalFileRepo' => array('class' => 'LocalRepo', 'name' => 'local', 'url' => 'http://example.com/images', 'hashLevels' => 2, 'transformVia404' => false, 'backend' => $backend), 'wgEnableUploads' => self::getOptionValue('wgEnableUploads', $opts, true), 'wgStylePath' => '/skins', 'wgStyleSheetPath' => '/skins', 'wgSitename' => 'MediaWiki', 'wgLanguageCode' => $lang, 'wgDBprefix' => $this->db->getType() != 'oracle' ? 'unittest_' : 'ut_', 'wgRawHtml' => isset($opts['rawhtml']), 'wgLang' => null, 'wgContLang' => null, 'wgNamespacesWithSubpages' => array(0 => isset($opts['subpage'])), 'wgMaxTocLevel' => $maxtoclevel, 'wgCapitalLinks' => true, 'wgNoFollowLinks' => true, 'wgNoFollowDomainExceptions' => array(), 'wgThumbnailScriptPath' => false, 'wgUseImageResize' => false, 'wgUseTeX' => isset($opts['math']), 'wgMathDirectory' => $uploadDir . '/math', 'wgLocaltimezone' => 'UTC', 'wgAllowExternalImages' => true, 'wgUseTidy' => false, 'wgDefaultLanguageVariant' => $variant, 'wgVariantArticlePath' => false, 'wgGroupPermissions' => array('*' => array('createaccount' => true, 'read' => true, 'edit' => true, 'createpage' => true, 'createtalk' => true)), 'wgNamespaceProtection' => array(NS_MEDIAWIKI => 'editinterface'), 'wgDefaultExternalStore' => array(), 'wgForeignFileRepos' => array(), 'wgLinkHolderBatchSize' => $linkHolderBatchSize, 'wgExperimentalHtmlIds' => false, 'wgExternalLinkTarget' => false, 'wgAlwaysUseTidy' => false, 'wgHtml5' => true, 'wgCleanupPresentationalAttributes' => true, 'wgWellFormedXml' => true, 'wgAllowMicrodataAttributes' => true, 'wgAdaptiveMessageCache' => true, 'wgUseDatabaseMessages' => true); if ($config) { $configLines = explode("\n", $config); foreach ($configLines as $line) { list($var, $value) = explode('=', $line, 2); $settings[$var] = eval("return {$value};"); //??? } } $this->savedGlobals = array(); foreach ($settings as $var => $val) { if (array_key_exists($var, $GLOBALS)) { $this->savedGlobals[$var] = $GLOBALS[$var]; } $GLOBALS[$var] = $val; } $langObj = Language::factory($lang); $GLOBALS['wgContLang'] = $langObj; $context = new RequestContext(); $GLOBALS['wgLang'] = $context->getLanguage(); $GLOBALS['wgMemc'] = new EmptyBagOStuff(); $GLOBALS['wgOut'] = $context->getOutput(); $GLOBALS['wgUser'] = $context->getUser(); global $wgHooks; $wgHooks['ParserTestParser'][] = 'ParserTestParserHook::setup'; $wgHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp'; MagicWord::clearCache(); RepoGroup::destroySingleton(); FileBackendGroup::destroySingleton(); # Create dummy files in storage $this->setupUploads(); # Publish the articles after we have the final language set $this->publishTestArticles(); # The entries saved into RepoGroup cache with previous globals will be wrong. RepoGroup::destroySingleton(); FileBackendGroup::destroySingleton(); MessageCache::singleton()->destroyInstance(); return $context; }
/** * Do any required setup which is dependent on test options. * * @see staticSetup() for more information about setup/teardown * * @param array $test Test info supplied by TestFileReader * @param callable|null $nextTeardown * @return ScopedCallback */ public function perTestSetup($test, $nextTeardown = null) { $teardown = []; $this->checkSetupDone('setupDatabase', 'setDatabase'); $teardown[] = $this->markSetupDone('perTestSetup'); $opts = $this->parseOptions($test['options']); $config = $test['config']; // Find out values for some special options. $langCode = self::getOptionValue('language', $opts, 'en'); $variant = self::getOptionValue('variant', $opts, false); $maxtoclevel = self::getOptionValue('wgMaxTocLevel', $opts, 999); $linkHolderBatchSize = self::getOptionValue('wgLinkHolderBatchSize', $opts, 1000); $setup = ['wgEnableUploads' => self::getOptionValue('wgEnableUploads', $opts, true), 'wgLanguageCode' => $langCode, 'wgRawHtml' => self::getOptionValue('wgRawHtml', $opts, false), 'wgNamespacesWithSubpages' => [0 => isset($opts['subpage'])], 'wgMaxTocLevel' => $maxtoclevel, 'wgAllowExternalImages' => self::getOptionValue('wgAllowExternalImages', $opts, true), 'wgThumbLimits' => [self::getOptionValue('thumbsize', $opts, 180)], 'wgDefaultLanguageVariant' => $variant, 'wgLinkHolderBatchSize' => $linkHolderBatchSize, 'wgEnableMagicLinks' => self::getOptionValue('wgEnableMagicLinks', $opts, []) + ['ISBN' => true, 'PMID' => true, 'RFC' => true]]; if ($config) { $configLines = explode("\n", $config); foreach ($configLines as $line) { list($var, $value) = explode('=', $line, 2); $setup[$var] = eval("return {$value};"); } } /** @since 1.20 */ Hooks::run('ParserTestGlobals', [&$setup]); // Create tidy driver if (isset($opts['tidy'])) { // Cache a driver instance if ($this->tidyDriver === null) { $this->tidyDriver = MWTidy::factory($this->tidySupport->getConfig()); } $tidy = $this->tidyDriver; } else { $tidy = false; } MWTidy::setInstance($tidy); $teardown[] = function () { MWTidy::destroySingleton(); }; // Set content language. This invalidates the magic word cache and title services $lang = Language::factory($langCode); $setup['wgContLang'] = $lang; $reset = function () { MagicWord::clearCache(); $this->resetTitleServices(); }; $setup[] = $reset; $teardown[] = $reset; // Make a user object with the same language $user = new User(); $user->setOption('language', $langCode); $setup['wgLang'] = $lang; // We (re)set $wgThumbLimits to a single-element array above. $user->setOption('thumbsize', 0); $setup['wgUser'] = $user; // And put both user and language into the context $context = RequestContext::getMain(); $context->setUser($user); $context->setLanguage($lang); $teardown[] = function () use($context) { // Reset context to the restored globals $context->setUser($GLOBALS['wgUser']); $context->setLanguage($GLOBALS['wgContLang']); }; $teardown[] = $this->executeSetupSnippets($setup); return $this->createTeardownObject($teardown, $nextTeardown); }