コード例 #1
0
 /**
  * Use TidySupport to check whether we should use $wgTidyInternal.
  *
  * The Tidy extension in HHVM does not support error text return, so it is
  * nominally usable, but does not pass tests which require error text from
  * Tidy.
  */
 protected function setUp()
 {
     parent::setUp();
     $tidySupport = new TidySupport();
     $this->setMwGlobals('wgTidyInternal', $tidySupport->isInternal());
 }
コード例 #2
0
ファイル: NewParserTest.php プロジェクト: huatuoorg/mediawiki
 /**
  * @group medium
  * @dataProvider parserTestProvider
  * @param string $desc
  * @param string $input
  * @param string $result
  * @param array $opts
  * @param array $config
  */
 public function testParserTest($desc, $input, $result, $opts, $config)
 {
     if ($this->regex != '' && !preg_match('/' . $this->regex . '/', $desc)) {
         $this->assertTrue(true);
         // XXX: don't flood output with "test made no assertions"
         // $this->markTestSkipped( 'Filtered out by the user' );
         return;
     }
     if (!$this->isWikitextNS(NS_MAIN)) {
         // parser tests frequently assume that the main namespace contains wikitext.
         // @todo When setting up pages, force the content model. Only skip if
         //        $wgtContentModelUseDB is false.
         $this->markTestSkipped("Main namespace does not support wikitext," . "skipping parser test: {$desc}");
     }
     wfDebug("Running parser test: {$desc}\n");
     $opts = $this->parseOptions($opts);
     $context = $this->setupGlobals($opts, $config);
     $user = $context->getUser();
     $options = ParserOptions::newFromContext($context);
     if (isset($opts['title'])) {
         $titleText = $opts['title'];
     } else {
         $titleText = 'Parser test';
     }
     $local = isset($opts['local']);
     $preprocessor = isset($opts['preprocessor']) ? $opts['preprocessor'] : null;
     $parser = $this->getParser($preprocessor);
     $title = Title::newFromText($titleText);
     # Parser test requiring math. Make sure texvc is executable
     # or just skip such tests.
     if (isset($opts['math']) || isset($opts['texvc'])) {
         global $wgTexvc;
         if (!isset($wgTexvc)) {
             $this->markTestSkipped("SKIPPED: \$wgTexvc is not set");
         } elseif (!is_executable($wgTexvc)) {
             $this->markTestSkipped("SKIPPED: texvc binary does not exist" . " or is not executable.\n" . "Current configuration is:\n\$wgTexvc = '{$wgTexvc}'");
         }
     }
     if (isset($opts['djvu'])) {
         if (!$this->djVuSupport->isEnabled()) {
             $this->markTestSkipped("SKIPPED: djvu binaries do not exist or are not executable.\n");
         }
     }
     if (isset($opts['tidy'])) {
         if (!$this->tidySupport->isEnabled()) {
             $this->markTestSkipped("SKIPPED: tidy extension is not installed.\n");
         } else {
             $options->setTidy(true);
         }
     }
     if (isset($opts['pst'])) {
         $out = $parser->preSaveTransform($input, $title, $user, $options);
     } elseif (isset($opts['msg'])) {
         $out = $parser->transformMsg($input, $options, $title);
     } elseif (isset($opts['section'])) {
         $section = $opts['section'];
         $out = $parser->getSection($input, $section);
     } elseif (isset($opts['replace'])) {
         $section = $opts['replace'][0];
         $replace = $opts['replace'][1];
         $out = $parser->replaceSection($input, $section, $replace);
     } elseif (isset($opts['comment'])) {
         $out = Linker::formatComment($input, $title, $local);
     } elseif (isset($opts['preload'])) {
         $out = $parser->getPreloadText($input, $title, $options);
     } else {
         $output = $parser->parse($input, $title, $options, true, true, 1337);
         $output->setTOCEnabled(!isset($opts['notoc']));
         $out = $output->getText();
         if (isset($opts['tidy'])) {
             $out = preg_replace('/\\s+$/', '', $out);
         }
         if (isset($opts['showtitle'])) {
             if ($output->getTitleText()) {
                 $title = $output->getTitleText();
             }
             $out = "{$title}\n{$out}";
         }
         if (isset($opts['showindicators'])) {
             $indicators = '';
             foreach ($output->getIndicators() as $id => $content) {
                 $indicators .= "{$id}={$content}\n";
             }
             $out = $indicators . $out;
         }
         if (isset($opts['ill'])) {
             $out = implode(' ', $output->getLanguageLinks());
         } elseif (isset($opts['cat'])) {
             $outputPage = $context->getOutput();
             $outputPage->addCategoryLinks($output->getCategories());
             $cats = $outputPage->getCategoryLinks();
             if (isset($cats['normal'])) {
                 $out = implode(' ', $cats['normal']);
             } else {
                 $out = '';
             }
         }
         $parser->mPreprocessor = null;
     }
     $this->teardownGlobals();
     $this->assertEquals($result, $out, $desc);
 }
コード例 #3
0
 /**
  * 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);
 }