summaryrefslogtreecommitdiff
path: root/extensions/TimedMediaHandler/tests/phpunit/TestTimedMediaTransformOutput.php
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/TimedMediaHandler/tests/phpunit/TestTimedMediaTransformOutput.php')
-rw-r--r--extensions/TimedMediaHandler/tests/phpunit/TestTimedMediaTransformOutput.php142
1 files changed, 142 insertions, 0 deletions
diff --git a/extensions/TimedMediaHandler/tests/phpunit/TestTimedMediaTransformOutput.php b/extensions/TimedMediaHandler/tests/phpunit/TestTimedMediaTransformOutput.php
new file mode 100644
index 00000000..9bcc89fb
--- /dev/null
+++ b/extensions/TimedMediaHandler/tests/phpunit/TestTimedMediaTransformOutput.php
@@ -0,0 +1,142 @@
+<?php
+class TestTimedMediaTransformOutput extends MediaWikiMediaTestCase {
+
+ private $sortMethod;
+ private $thumbObj;
+
+ function getFilePath() {
+ return __DIR__ . '/media';
+ }
+
+ protected function setUp() {
+ parent::setUp();
+
+ // Disable video thumbnail generation. Not needed for this test.
+ $reflection = new ReflectionClass( $this->repo );
+ $reflectionProperty = $reflection->getProperty( 'transformVia404' );
+ $reflectionProperty->setAccessible( true );
+ $reflectionProperty->setValue( $this->repo, true );
+
+ $this->setMWGlobals( 'wgMinimumVideoPlayerSize', '400' );
+ }
+
+ /**
+ * @param $width int The requested width of the thumbnail
+ * @param $minVideoSize int The min width a non-pop up video is acceptable
+ * @param $expectPopup boolean Do we expect a pop up video
+ *
+ * @dataProvider providerIsPopUp
+ */
+ function testIsPopUp( $width, $minVideoSize, $expectPopup ) {
+ $this->setMwGlobals( 'wgMinimumVideoPlayerSize', $minVideoSize );
+
+ // Note this file has a width of 400px and a height of 300px
+ $file = $this->dataFile( 'test5seconds.electricsheep.300x400.ogv', 'application/ogg' );
+ $thumbnail = $file->transform( array( 'width' => $width ) );
+ $this->assertTrue( $thumbnail && !$thumbnail->isError() );
+
+ $reflection = new ReflectionClass( $thumbnail );
+ $reflMethod = $reflection->getMethod( 'useImagePopUp' );
+ $reflMethod->setAccessible( true );
+
+ $actual = $reflMethod->invoke( $thumbnail );
+ $this->assertEquals( $actual, $expectPopup );
+
+ }
+
+ function providerIsPopUp() {
+ return array(
+ array( 400, 800, false ),
+ array( 300, 800, true ),
+ array( 300, 200, false ),
+ array( 300, 300, false )
+ );
+ }
+
+ /**
+ * @param $thumbWidth int Requested width
+ * @param $sources array
+ * @param $sortedSources array
+ * @dataProvider providerSortMediaByBandwidth
+ */
+ function testSortMediaByBandwidth( $thumbWidth, $sources, $sortedSources ) {
+ $params = array(
+ 'width' => $thumbWidth,
+ 'height' => $thumbWidth * 9 / 16,
+ 'isVideo' => true,
+ 'fillwindow' => false,
+ 'file' => new FakeDimensionFile( array( 1820, 1024 ) )
+ );
+ $this->thumbObj = new TimedMediaTransformOutput( $params );
+
+ $reflection = new ReflectionClass( $this->thumbObj );
+ $this->sortMethod = $reflection->getMethod( 'sortMediaByBandwidth' );
+ $this->sortMethod->setAccessible( true );
+
+ usort( $sources, array( $this, 'callSortMethodHelper' ) );
+ $this->assertEquals( $sortedSources, $sources );
+ }
+
+ public function callSortMethodHelper( $a, $b ) {
+ return $this->sortMethod->invoke( $this->thumbObj, $a, $b );
+ }
+
+
+ function providerSortMediaByBandwidth() {
+ return array(
+ array(
+ 600,
+ array(
+ array( 'width' => 1000, 'bandwidth' => 2000 ),
+ array( 'width' => 1000, 'bandwidth' => 7000 ),
+ array( 'width' => 1000, 'bandwidth' => 1000 ),
+ ),
+ array(
+ array( 'width' => 1000, 'bandwidth' => 1000 ),
+ array( 'width' => 1000, 'bandwidth' => 2000 ),
+ array( 'width' => 1000, 'bandwidth' => 7000 ),
+ ),
+ ),
+ array(
+ 600,
+ array(
+ array( 'width' => 200, 'bandwidth' => 2000 ),
+ array( 'width' => 1000, 'bandwidth' => 7000 ),
+ array( 'width' => 200, 'bandwidth' => 1000 ),
+ ),
+ array(
+ array( 'width' => 1000, 'bandwidth' => 7000 ),
+ array( 'width' => 200, 'bandwidth' => 1000 ),
+ array( 'width' => 200, 'bandwidth' => 2000 ),
+ ),
+ ),
+ array(
+ /* Pop up viewer in this case */
+ 100,
+ array(
+ array( 'width' => 700, 'bandwidth' => 2000 ),
+ array( 'width' => 1000, 'bandwidth' => 7000 ),
+ array( 'width' => 700, 'bandwidth' => 1000 ),
+ ),
+ array(
+ array( 'width' => 1000, 'bandwidth' => 7000 ),
+ array( 'width' => 700, 'bandwidth' => 1000 ),
+ array( 'width' => 700, 'bandwidth' => 2000 ),
+ ),
+ ),
+ array(
+ 600,
+ array(
+ array( 'width' => 700, 'bandwidth' => 2000 ),
+ array( 'width' => 800, 'bandwidth' => 7000 ),
+ array( 'width' => 1000, 'bandwidth' => 1000 ),
+ ),
+ array(
+ array( 'width' => 1000, 'bandwidth' => 1000 ),
+ array( 'width' => 700, 'bandwidth' => 2000 ),
+ array( 'width' => 800, 'bandwidth' => 7000 ),
+ ),
+ ),
+ );
+ }
+}