X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=tests%2FtestHelpers.inc;h=818b24e23cc0be67600e2a5a116b7b0155adb59c;hb=4f18925d219fffe42b11276ffa42c5bec6c0fbe9;hp=f4433f4f981501380175967059f9a89aade4de22;hpb=5974804aee5bfc01ea6b49de8537df960035c0ce;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/testHelpers.inc b/tests/testHelpers.inc index f4433f4f98..818b24e23c 100644 --- a/tests/testHelpers.inc +++ b/tests/testHelpers.inc @@ -333,8 +333,8 @@ class DbTestRecorder extends DbTestPreviewer { /** * Record an individual test item's success or failure to the db * - * @param $test String - * @param $result Boolean + * @param string $test + * @param bool $result */ function record( $test, $result ) { parent::record( $test, $result ); @@ -419,7 +419,7 @@ class TestFileIterator implements Iterator { $this->lineNum++; $matches = array(); - if ( preg_match( '/^!!\s*(\w+)/', $line, $matches ) ) { + if ( preg_match( '/^!!\s*(\S+)/', $line, $matches ) ) { $this->section = strtolower( $matches[1] ); if ( $this->section == 'endarticle' ) { @@ -467,8 +467,10 @@ class TestFileIterator implements Iterator { if ( $this->section == 'end' ) { $this->checkSection( 'test' ); - $this->checkSection( 'input' ); - $this->checkSection( 'result' ); + // "input" and "result" are old section names allowed + // for backwards-compatibility. + $input = $this->checkSection( array( 'wikitext', 'input' ), false ); + $result = $this->checkSection( array( 'html/php', 'html/*', 'html', 'result' ), false ); if ( !isset( $this->sectionData['options'] ) ) { $this->sectionData['options'] = ''; @@ -478,8 +480,9 @@ class TestFileIterator implements Iterator { $this->sectionData['config'] = ''; } - if ( ( ( preg_match( '/\\bdisabled\\b/i', $this->sectionData['options'] ) && !$this->parserTest->runDisabled ) - || ( preg_match( '/\\bparsoid\\b/i', $this->sectionData['options'] ) && !$this->parserTest->runParsoid ) + if ( $input == false || $result == false || + ( ( preg_match( '/\\bdisabled\\b/i', $this->sectionData['options'] ) && !$this->parserTest->runDisabled ) + || ( preg_match( '/\\bparsoid\\b/i', $this->sectionData['options'] ) && $result != 'html/php' && !$this->parserTest->runParsoid ) || !preg_match( "/" . $this->parserTest->regex . "/i", $this->sectionData['test'] ) ) ) { # disabled test @@ -501,8 +504,8 @@ class TestFileIterator implements Iterator { $this->test = array( 'test' => ParserTest::chomp( $this->sectionData['test'] ), - 'input' => ParserTest::chomp( $this->sectionData['input'] ), - 'result' => ParserTest::chomp( $this->sectionData['result'] ), + 'input' => ParserTest::chomp( $this->sectionData[ $input ] ), + 'result' => ParserTest::chomp( $this->sectionData[ $result ] ), 'options' => ParserTest::chomp( $this->sectionData['options'] ), 'config' => ParserTest::chomp( $this->sectionData['config'] ), ); @@ -538,27 +541,55 @@ class TestFileIterator implements Iterator { /** * Verify the current section data has some value for the given token - * name (first parameter). + * name(s) (first parameter). * Throw an exception if it is not set, referencing current section * and adding the current file name and line number * - * @param $token String: expected token that should have been mentionned before closing this section + * @param string|array $token Expected token(s) that should have been + * mentioned before closing this section + * @param bool $fatal True iff an exception should be thrown if + * the section is not found. */ - private function checkSection( $token ) { + private function checkSection( $tokens, $fatal = true ) { if ( is_null( $this->section ) ) { throw new MWException( __METHOD__ . " can not verify a null section!\n" ); } + if ( !is_array( $tokens ) ) { + $tokens = array( $tokens ); + } + if ( count( $tokens ) == 0 ) { + throw new MWException( __METHOD__ . " can not verify zero sections!\n" ); + } - if ( !isset( $this->sectionData[$token] ) ) { + $data = $this->sectionData; + $tokens = array_filter( $tokens, function ( $token ) use ( $data ) { + return isset( $data[ $token ] ); + } ); + + if ( count( $tokens ) == 0 ) { + if ( !$fatal ) { + return false; + } throw new MWException( sprintf( "'%s' without '%s' at line %s of %s\n", $this->section, - $token, + implode( ',', $tokens ), $this->lineNum, $this->file ) ); } - return true; + if ( count( $tokens ) > 1 ) { + throw new MWException( sprintf( + "'%s' with unexpected tokens '%s' at line %s of %s\n", + $this->section, + implode( ',', $tokens ), + $this->lineNum, + $this->file + ) ); + } + + $tokens = array_values( $tokens ); + return $tokens[ 0 ]; } } @@ -587,6 +618,7 @@ class DelayedParserTest { /** * Called whenever we actually want to run the hook. * Should be the case if we found the parserTest is not disabled + * @param ParserTest|NewParserTest $parserTest */ public function unleash( &$parserTest ) { if ( !( $parserTest instanceof ParserTest || $parserTest instanceof NewParserTest ) ) { @@ -616,6 +648,7 @@ class DelayedParserTest { /** * Similar to ParserTest object but does not run anything * Use unleash() to really execute the hook + * @param string $hook */ public function requireHook( $hook ) { $this->hooks[] = $hook; @@ -624,9 +657,44 @@ class DelayedParserTest { /** * Similar to ParserTest object but does not run anything * Use unleash() to really execute the hook function + * @param string $fnHook */ public function requireFunctionHook( $fnHook ) { $this->fnHooks[] = $fnHook; } } + +/** + * Initialize and detect the DjVu files support + */ +class DjVuSupport { + + /** + * Initialises DjVu tools global with default values + */ + public function __construct() { + global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML, $wgFileExtensions; + + $wgDjvuRenderer = $wgDjvuRenderer ? $wgDjvuRenderer : '/usr/bin/ddjvu'; + $wgDjvuDump = $wgDjvuDump ? $wgDjvuDump : '/usr/bin/djvudump'; + $wgDjvuToXML = $wgDjvuToXML ? $wgDjvuToXML : '/usr/bin/djvutoxml'; + + if ( !in_array( 'djvu', $wgFileExtensions ) ) { + $wgFileExtensions[] = 'djvu'; + } + } + + /** + * Returns if the DjVu tools are usable + * + * @return bool + */ + public function isEnabled() { + global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML; + + return is_executable( $wgDjvuRenderer ) + && is_executable( $wgDjvuDump ) + && is_executable( $wgDjvuToXML ); + } +}