Merge "ParserTests: Add a video file to parser test suite"
[lhc/web/wiklou.git] / tests / parser / parserTest.inc
index f429c30..6a95205 100644 (file)
@@ -134,6 +134,12 @@ class ParserTest {
                $this->setupRecorder( $options );
                $this->keepUploads = isset( $options['keep-uploads'] );
 
+               if ( $this->keepUploads ) {
+                       $this->uploadDir = wfTempDir() . '/mwParser-images';
+               } else {
+                       $this->uploadDir = wfTempDir() . "/mwParser-" . mt_rand() . "-images";
+               }
+
                if ( isset( $options['seed'] ) ) {
                        $this->fuzzSeed = intval( $options['seed'] ) - 1;
                }
@@ -147,13 +153,17 @@ class ParserTest {
                        echo "Warning: tidy is not installed, skipping some tests\n";
                }
 
+               if ( !extension_loaded( 'gd' ) ) {
+                       echo "Warning: GD extension is not present, thumbnailing tests will probably fail\n";
+               }
+
                $this->hooks = array();
                $this->functionHooks = array();
                $this->transparentHooks = array();
-               self::setUp();
+               $this->setUp();
        }
 
-       static function setUp() {
+       function setUp() {
                global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc,
                        $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory,
                        $wgExtraNamespaces, $wgNamespaceAliases, $wgNamespaceProtection, $wgLocalFileRepo,
@@ -171,7 +181,7 @@ class ParserTest {
                $wgLockManagers = array( array(
                        'name' => 'fsLockManager',
                        'class' => 'FSLockManager',
-                       'lockDirectory' => wfTempDir() . '/test-repo/lockdir',
+                       'lockDirectory' => $this->uploadDir . '/lockdir',
                ), array(
                        'name' => 'nullLockManager',
                        'class' => 'NullLockManager',
@@ -186,10 +196,10 @@ class ParserTest {
                                'name' => 'local-backend',
                                'wikiId' => wfWikiId(),
                                'containerPaths' => array(
-                                       'local-public' => wfTempDir() . '/test-repo/public',
-                                       'local-thumb' => wfTempDir() . '/test-repo/thumb',
-                                       'local-temp' => wfTempDir() . '/test-repo/temp',
-                                       'local-deleted' => wfTempDir() . '/test-repo/deleted',
+                                       'local-public' => $this->uploadDir . '/public',
+                                       'local-thumb' => $this->uploadDir . '/thumb',
+                                       'local-temp' => $this->uploadDir . '/temp',
+                                       'local-deleted' => $this->uploadDir . '/deleted',
                                )
                        ) )
                );
@@ -502,6 +512,7 @@ class ParserTest {
                        $ok = true;
 
                        foreach ( $filenames as $filename ) {
+                               echo "Running parser tests from: $filename\n";
                                $tests = new TestFileIterator( $filename, $this );
                                $ok = $this->runTests( $tests ) && $ok;
                        }
@@ -729,7 +740,7 @@ class ParserTest {
                                )*
                                \}              # Close bracket
                        )
-            (?<value>
+                       (?<value>
                                (?:
                                        (?&qstr)                        # Quoted val
                                |
@@ -937,6 +948,7 @@ class ParserTest {
 
                MagicWord::clearCache();
                MWTidy::destroySingleton();
+               RepoGroup::destroySingleton();
 
                return $context;
        }
@@ -951,9 +963,9 @@ class ParserTest {
                        'protected_titles', 'revision', 'text', 'pagelinks', 'imagelinks',
                        'categorylinks', 'templatelinks', 'externallinks', 'langlinks', 'iwlinks',
                        'site_stats', 'ipblocks', 'image', 'oldimage',
-                       'recentchanges', 'watchlist', 'interwiki', 'logging',
+                       'recentchanges', 'watchlist', 'interwiki', 'logging', 'log_search',
                        'querycache', 'objectcache', 'job', 'l10n_cache', 'redirect', 'querycachetwo',
-                       'archive', 'user_groups', 'page_props', 'category', 'msg_resource', 'msg_resource_links'
+                       'archive', 'user_groups', 'page_props', 'category'
                );
 
                if ( in_array( $this->db->getType(), array( 'mysql', 'sqlite', 'oracle' ) ) ) {
@@ -1028,7 +1040,7 @@ class ParserTest {
 
                // Remember to update newParserTests.php after changing the below
                // (and it uses a slightly different syntax just for teh lulz)
-               $this->uploadDir = $this->setupUploadDir();
+               $this->setupUploadDir();
                $user = User::createNew( 'WikiSysop' );
                $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Foobar.jpg' ) );
                # note that the size/width/height/bits/etc of the file
@@ -1043,7 +1055,7 @@ class ParserTest {
                        'media_type' => MEDIATYPE_BITMAP,
                        'mime' => 'image/jpeg',
                        'metadata' => serialize( array() ),
-                       'sha1' => wfBaseConvert( '1', 16, 36, 31 ),
+                       'sha1' => Wikimedia\base_convert( '1', 16, 36, 31 ),
                        'fileExists' => true
                ), $this->db->timestamp( '20010115123500' ), $user );
 
@@ -1057,7 +1069,7 @@ class ParserTest {
                        'media_type' => MEDIATYPE_BITMAP,
                        'mime' => 'image/png',
                        'metadata' => serialize( array() ),
-                       'sha1' => wfBaseConvert( '2', 16, 36, 31 ),
+                       'sha1' => Wikimedia\base_convert( '2', 16, 36, 31 ),
                        'fileExists' => true
                ), $this->db->timestamp( '20130225203040' ), $user );
 
@@ -1070,7 +1082,7 @@ class ParserTest {
                                'media_type'  => MEDIATYPE_DRAWING,
                                'mime'        => 'image/svg+xml',
                                'metadata'    => serialize( array() ),
-                               'sha1'        => wfBaseConvert( '', 16, 36, 31 ),
+                               'sha1'        => Wikimedia\base_convert( '', 16, 36, 31 ),
                                'fileExists'  => true
                ), $this->db->timestamp( '20010115123500' ), $user );
 
@@ -1084,7 +1096,20 @@ class ParserTest {
                        'media_type' => MEDIATYPE_BITMAP,
                        'mime' => 'image/jpeg',
                        'metadata' => serialize( array() ),
-                       'sha1' => wfBaseConvert( '3', 16, 36, 31 ),
+                       'sha1' => Wikimedia\base_convert( '3', 16, 36, 31 ),
+                       'fileExists' => true
+               ), $this->db->timestamp( '20010115123500' ), $user );
+
+               $image = wfLocalFile( Title::makeTitle( NS_FILE, 'Video.ogv' ) );
+               $image->recordUpload2( '', 'A pretty movie', 'Will it play', array(
+                       'size' => 12345,
+                       'width' => 320,
+                       'height' => 240,
+                       'bits' => 0,
+                       'media_type' => MEDIATYPE_VIDEO,
+                       'mime' => 'application/ogg',
+                       'metadata' => serialize( array() ),
+                       'sha1' => Wikimedia\base_convert( '', 16, 36, 31 ),
                        'fileExists' => true
                ), $this->db->timestamp( '20010115123500' ), $user );
 
@@ -1123,7 +1148,7 @@ class ParserTest {
 </OBJECT>
 </BODY>
 </DjVuXML>',
-                       'sha1' => wfBaseConvert( '', 16, 36, 31 ),
+                       'sha1' => Wikimedia\base_convert( '', 16, 36, 31 ),
                        'fileExists' => true
                ), $this->db->timestamp( '20010115123600' ), $user );
        }
@@ -1177,20 +1202,15 @@ class ParserTest {
        private function setupUploadDir() {
                global $IP;
 
-               if ( $this->keepUploads ) {
-                       $dir = wfTempDir() . '/mwParser-images';
-
-                       if ( is_dir( $dir ) ) {
-                               return $dir;
-                       }
-               } else {
-                       $dir = wfTempDir() . "/mwParser-" . mt_rand() . "-images";
+               $dir = $this->uploadDir;
+               if ( $this->keepUploads && is_dir( $dir ) ) {
+                       return;
                }
 
                // wfDebug( "Creating upload directory $dir\n" );
                if ( file_exists( $dir ) ) {
                        wfDebug( "Already exists!\n" );
-                       return $dir;
+                       return;
                }
 
                wfMkdirParents( $dir . '/3/3a', null, __METHOD__ );
@@ -1206,8 +1226,10 @@ class ParserTest {
                        ' version="1.1" width="240" height="180"/>' );
                wfMkdirParents( $dir . '/5/5f', null, __METHOD__ );
                copy( "$IP/tests/phpunit/data/parser/LoremIpsum.djvu", "$dir/5/5f/LoremIpsum.djvu" );
+               wfMkdirParents( $dir . '/0/00', null, __METHOD__ );
+               copy( "$IP/tests/phpunit/data/parser/320x240.ogv", "$dir/0/00/Video.ogv" );
 
-               return $dir;
+               return;
        }
 
        /**
@@ -1239,59 +1261,22 @@ class ParserTest {
                self::deleteFiles(
                        array(
                                "$dir/3/3a/Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/1000px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/100px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/1280px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/137px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/1500px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/177px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/206px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/20px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/265px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/274px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/30px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/353px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/40px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/442px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/450px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/600px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/640px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/70px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/75px-Foobar.jpg",
-                               "$dir/thumb/3/3a/Foobar.jpg/960px-Foobar.jpg",
-
+                               "$dir/thumb/3/3a/Foobar.jpg/*.jpg",
                                "$dir/e/ea/Thumb.png",
-
                                "$dir/0/09/Bad.jpg",
-
                                "$dir/5/5f/LoremIpsum.djvu",
-                               "$dir/thumb/5/5f/LoremIpsum.djvu/page2-2480px-LoremIpsum.djvu.jpg",
-                               "$dir/thumb/5/5f/LoremIpsum.djvu/page2-3720px-LoremIpsum.djvu.jpg",
-                               "$dir/thumb/5/5f/LoremIpsum.djvu/page2-4960px-LoremIpsum.djvu.jpg",
-
+                               "$dir/thumb/5/5f/LoremIpsum.djvu/*-LoremIpsum.djvu.jpg",
                                "$dir/f/ff/Foobar.svg",
-                               "$dir/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png",
-                               "$dir/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png",
-                               "$dir/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png",
-                               "$dir/thumb/f/ff/Foobar.svg/3000px-Foobar.svg.png",
-                               "$dir/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png",
-                               "$dir/thumb/f/ff/Foobar.svg/4000px-Foobar.svg.png",
-                               "$dir/thumb/f/ff/Foobar.svg/langde-180px-Foobar.svg.png",
-                               "$dir/thumb/f/ff/Foobar.svg/langde-270px-Foobar.svg.png",
-                               "$dir/thumb/f/ff/Foobar.svg/langde-360px-Foobar.svg.png",
-
+                               "$dir/thumb/f/ff/Foobar.svg/*-Foobar.svg.png",
                                "$dir/math/f/a/5/fa50b8b616463173474302ca3e63586b.png",
+                               "$dir/0/00/Video.ogv",
+                               "$dir/thumb/0/00/Video.ogv/120px--Video.ogv.jpg",
+                               "$dir/thumb/0/00/Video.ogv/180px--Video.ogv.jpg",
+                               "$dir/thumb/0/00/Video.ogv/240px--Video.ogv.jpg",
+                               "$dir/thumb/0/00/Video.ogv/320px--Video.ogv.jpg",
+                               "$dir/thumb/0/00/Video.ogv/270px--Video.ogv.jpg",
+                               "$dir/thumb/0/00/Video.ogv/320px-seek=2-Video.ogv.jpg",
+                               "$dir/thumb/0/00/Video.ogv/320px-seek=3.3666666666667-Video.ogv.jpg",
                        )
                );
 
@@ -1309,10 +1294,14 @@ class ParserTest {
                                "$dir/thumb/f/ff/Foobar.svg",
                                "$dir/thumb/f/ff/",
                                "$dir/thumb/f/",
+                               "$dir/0/00/",
                                "$dir/0/09/",
                                "$dir/0/",
                                "$dir/5/5f",
                                "$dir/5",
+                               "$dir/thumb/0/00/Video.ogv",
+                               "$dir/thumb/0/00",
+                               "$dir/thumb/0",
                                "$dir/thumb/5/5f/LoremIpsum.djvu",
                                "$dir/thumb/5/5f",
                                "$dir/thumb/5",
@@ -1321,6 +1310,7 @@ class ParserTest {
                                "$dir/math/f/a",
                                "$dir/math/f",
                                "$dir/math",
+                               "$dir/lockdir",
                                "$dir",
                        )
                );
@@ -1331,9 +1321,11 @@ class ParserTest {
         * @param array $files Full paths to files to delete.
         */
        private static function deleteFiles( $files ) {
-               foreach ( $files as $file ) {
-                       if ( file_exists( $file ) ) {
-                               unlink( $file );
+               foreach ( $files as $pattern ) {
+                       foreach ( glob( $pattern ) as $file ) {
+                               if ( file_exists( $file ) ) {
+                                       unlink( $file );
+                               }
                        }
                }
        }
@@ -1661,7 +1653,7 @@ class ParserTest {
        }
 
        static function getFakeTimestamp( &$parser, &$ts ) {
-               $ts = 123; //parsed as '1970-01-01T00:02:03Z'
+               $ts = 123; // parsed as '1970-01-01T00:02:03Z'
                return true;
        }
 }