From: Derk-Jan Hartman Date: Fri, 12 Feb 2016 15:31:58 +0000 (+0100) Subject: Parsertests: Fix the video parsertests to run using phpunit X-Git-Tag: 1.31.0-rc.0~7900 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=61d078a2f56f46b88900ca3005f7734144b7fb37 Parsertests: Fix the video parsertests to run using phpunit Bug: T126723 Change-Id: Ib3777413e1f86ddca9e460b41a8e3ef0eb8fb7cc --- diff --git a/tests/TestsAutoLoader.php b/tests/TestsAutoLoader.php index 63f6a19dbd..76a6335456 100644 --- a/tests/TestsAutoLoader.php +++ b/tests/TestsAutoLoader.php @@ -126,6 +126,7 @@ $wgAutoloadClasses += [ 'MockImageHandler' => "$testDir/phpunit/mocks/media/MockImageHandler.php", 'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockSvgHandler.php", 'MockDjVuHandler' => "$testDir/phpunit/mocks/media/MockDjVuHandler.php", + 'MockOggHandler' => "$testDir/phpunit/mocks/media/MockOggHandler.php", 'MockWebRequest' => "$testDir/phpunit/mocks/MockWebRequest.php", 'MediaWiki\\Session\\DummySessionBackend' => "$testDir/phpunit/mocks/session/DummySessionBackend.php", diff --git a/tests/phpunit/includes/parser/NewParserTest.php b/tests/phpunit/includes/parser/NewParserTest.php index 895398fa71..fa86eede6c 100644 --- a/tests/phpunit/includes/parser/NewParserTest.php +++ b/tests/phpunit/includes/parser/NewParserTest.php @@ -142,6 +142,9 @@ class NewParserTest extends MediaWikiTestCase { // DjVu images have to be handled slightly differently $tmpGlobals['wgMediaHandlers']['image/vnd.djvu'] = 'MockDjVuHandler'; + // Ogg video/audio increasingly more differently + $tmpGlobals['wgMediaHandlers']['application/ogg'] = 'MockOggHandler'; + $tmpHooks = $wgHooks; $tmpHooks['ParserTestParser'][] = 'ParserTestParserHook::setup'; $tmpHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp'; @@ -308,13 +311,13 @@ class NewParserTest extends MediaWikiTestCase { if ( !$this->db->selectField( 'image', '1', [ 'img_name' => $image->getName() ] ) ) { $image->recordUpload2( '', 'A pretty movie', 'Will it play', [ 'size' => 12345, - 'width' => 240, - 'height' => 180, + 'width' => 320, + 'height' => 240, 'bits' => 0, 'media_type' => MEDIATYPE_VIDEO, 'mime' => 'application/ogg', 'metadata' => serialize( [] ), - 'sha1' => Wikimedia\base_convert( '', 16, 36, 31 ), + 'sha1' => Wikimedia\base_convert( '', 16, 36, 32 ), 'fileExists' => true ], $this->db->timestamp( '20010115123500' ), $user ); } diff --git a/tests/phpunit/mocks/media/MockOggHandler.php b/tests/phpunit/mocks/media/MockOggHandler.php new file mode 100644 index 0000000000..b110e2137f --- /dev/null +++ b/tests/phpunit/mocks/media/MockOggHandler.php @@ -0,0 +1,93 @@ +normaliseParams( $file, $params ) ) { + return new TransformParameterError( $params ); + } + + $srcWidth = $file->getWidth(); + $srcHeight = $file->getHeight(); + + // Audio should not be transformed by size, give it a default width and height + if ( $this->isAudio( $file ) ) { + $srcWidth = 220; + $srcHeight = 23; + } + + $params['width'] = isset( $params['width'] ) ? $params['width'] : $srcWidth; + + // if height overtakes width use height as max: + $targetWidth = $params['width']; + $targetHeight = $srcWidth == 0 ? $srcHeight : round( $params['width'] * $srcHeight / $srcWidth ); + if ( isset( $params['height'] ) && $targetHeight > $params['height'] ) { + $targetHeight = $params['height']; + $targetWidth = round( $params['height'] * $srcWidth / $srcHeight ); + } + $options = [ + 'file' => $file, + 'length' => $this->getLength( $file ), + 'offset' => $this->getOffset( $file ), + 'width' => $targetWidth, + 'height' => $targetHeight, + 'isVideo' => !$this->isAudio( $file ), + 'thumbtime' => isset( + $params['thumbtime'] + ) ? $params['thumbtime'] : intval( $file->getLength() / 2 ), + 'start' => isset( $params['start'] ) ? $params['start'] : false, + 'end' => isset( $params['end'] ) ? $params['end'] : false, + 'fillwindow' => isset( $params['fillwindow'] ) ? $params['fillwindow'] : false, + 'disablecontrols' => isset ( $params['disablecontrols'] ) ? $params['disablecontrols'] : false + ]; + + // No thumbs for audio + if ( !$options['isVideo'] ) { + return new TimedMediaTransformOutput( $options ); + } + + // Setup pointer to thumb arguments + $options[ 'thumbUrl' ] = $dstUrl; + $options[ 'dstPath' ] = $dstPath; + $options[ 'path' ] = $dstPath; + + return new TimedMediaTransformOutput( $options ); + } + + function getLength( $file ) { + return 4.3666666666667; + } + + function getBitRate( $file ) { + return 590013; + } + + function getWebType( $file ) { + return "video/ogg; codecs=\"theora\""; + } + + function getFramerate( $file ) { + return 30; + } +}