Title: [147255] trunk/LayoutTests
Revision
147255
Author
[email protected]
Date
2013-03-29 15:18:03 -0700 (Fri, 29 Mar 2013)

Log Message

Add LayoutTests that verify MediaSource.duration behavior.
https://bugs.webkit.org/show_bug.cgi?id=113438

Reviewed by Eric Carlson.

* http/tests/media/media-source/video-media-source-duration-boundaryconditions-expected.txt: Added.
* http/tests/media/media-source/video-media-source-duration-boundaryconditions.html: Added.
* http/tests/media/media-source/video-media-source-duration-expected.txt: Added.
* http/tests/media/media-source/video-media-source-duration.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (147254 => 147255)


--- trunk/LayoutTests/ChangeLog	2013-03-29 22:10:06 UTC (rev 147254)
+++ trunk/LayoutTests/ChangeLog	2013-03-29 22:18:03 UTC (rev 147255)
@@ -1,3 +1,15 @@
+2013-03-29  Aaron Colwell  <[email protected]>
+
+        Add LayoutTests that verify MediaSource.duration behavior.
+        https://bugs.webkit.org/show_bug.cgi?id=113438
+
+        Reviewed by Eric Carlson.
+
+        * http/tests/media/media-source/video-media-source-duration-boundaryconditions-expected.txt: Added.
+        * http/tests/media/media-source/video-media-source-duration-boundaryconditions.html: Added.
+        * http/tests/media/media-source/video-media-source-duration-expected.txt: Added.
+        * http/tests/media/media-source/video-media-source-duration.html: Added.
+
 2013-03-29  Joshua Bell  <[email protected]>
 
         [Chromium] IndexedDB: Update terminated worker connection test

Added: trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-boundaryconditions-expected.txt (0 => 147255)


--- trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-boundaryconditions-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-boundaryconditions-expected.txt	2013-03-29 22:18:03 UTC (rev 147255)
@@ -0,0 +1,95 @@
+Tests boundary values for duration attribute on MediaSource object.
+
+
+running testSetMaxInt
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+EXPECTED (mediaSource.duration == 'testDurationValue'), OBSERVED '2147483648' FAIL
+onDurationChange : video.duration is 2147483648.000
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(durationchange)
+
+running testSetMinInt
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+EXPECTED (mediaSource.duration == 'testDurationValue') OK
+onDurationChange : video.duration is 1.000
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(durationchange)
+
+running testSetMaxValue
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+EXPECTED (mediaSource.duration == 'testDurationValue'), OBSERVED '3.4028234663852886e+38' FAIL
+onDurationChange : video.duration is 3.4028234663852886e+38
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(durationchange)
+
+running testSetMaxValueMinusOne
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+EXPECTED (mediaSource.duration == 'testDurationValue'), OBSERVED '3.4028234663852886e+38' FAIL
+onDurationChange : video.duration is 3.4028234663852886e+38
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(durationchange)
+
+running testSetMinValue
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+EXPECTED (mediaSource.duration == 'testDurationValue'), OBSERVED '1.1754943508222875e-38' FAIL
+onDurationChange : video.duration is 0.000
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(durationchange)
+
+running testSetMinValueMinusOne
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+PASS: Media Source set duration. Got expected exception Error: InvalidAccessError: DOM Exception 15
+
+running testSetPositiveInfinity
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+EXPECTED (mediaSource.duration == 'testDurationValue') OK
+onDurationChange : video.duration is Infinity
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(durationchange)
+
+running testSetNegativeInfinity
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+PASS: Media Source set duration. Got expected exception Error: InvalidAccessError: DOM Exception 15
+
+running testSetLowestValue
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+PASS: Media Source set duration. Got expected exception Error: InvalidAccessError: DOM Exception 15
+
+running testSetNegativeDouble
+EVENT(webkitsourceopen)
+onDurationChange : video.duration is 6.042
+EXPECTED (mediaSource.duration == 'video.duration') OK
+EVENT(loadedmetadata)
+PASS: Media Source set duration. Got expected exception Error: InvalidAccessError: DOM Exception 15
+
+running testSetPositiveDouble
+EVENT(webkitsourceopen)
+END OF TEST
+

Added: trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-boundaryconditions.html (0 => 147255)


--- trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-boundaryconditions.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-boundaryconditions.html	2013-03-29 22:18:03 UTC (rev 147255)
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <script src=""
+    <script src=""
+    <script src=""
+    <script>
+      var segmentHelper = new MediaSourceTest.SegmentHelper(WebMSegmentInfo.testWebM);
+
+      // Duration of HTMLMediaElement (i.e., video) changed.
+      function onDurationChange()
+      {
+        consoleWrite("onDurationChange : video.duration is " + video.duration.toFixed(3));
+
+        // Confirm that value of media-source duration matches value of
+        // parent HTML Media Element's duration.
+        // Do this only if the video tag ready state is greater
+        // than HAVE_NOTHING.
+        // Without metadata, parent media element won't have a duration value defined.
+        if (video.readyState <= video.HAVE_NOTHING)
+          return;
+
+        // Don't use "testExpected()" so we won't log the actual duration as the floating point result may differ with different engines.
+        reportExpected(mediaSource.duration == video.duration, "mediaSource.duration", "==", "video.duration", mediaSource.duration);
+      }
+
+      // Set duration of the MediaSource object to the input duration value.
+      // Also check if any error, if specified, was raised.
+      function verifySetDuration(testDurationValue, expectedError)
+      {
+        try {
+          mediaSource.duration = testDurationValue;
+          if (expectedError) {
+            consoleWrite("FAIL: Media Source set duration. Expected an exception");
+          }
+        } catch (e) {
+          if (!expectedError || !(e.code == expectedError)) {
+            consoleWrite("FAIL: Media Source set duration. Unexpected exception " + e);
+          }
+          consoleWrite("PASS: Media Source set duration. " + "Got expected exception " + e);
+          return;
+        }
+
+        // Confirm that value of media-source duration matches value that it was assigned.
+        // Don't use "testExpected()" so we won't log the actual duration as the floating point result may differ with different engines.
+        reportExpected(mediaSource.duration == testDurationValue, "mediaSource.duration", "==", "testDurationValue", mediaSource.duration);
+      }
+
+      function initialize()
+      {
+        segmentHelper.addSourceBuffer();
+        segmentHelper.appendInitSegment();
+      }
+
+      function setDurationHelper(testDurationValue, expectedError, runNextTestCase, video)
+      {
+        initialize();
+
+        waitForEventOnce('loadedmetadata', function () {
+          // Set duration to specified value.
+          verifySetDuration(testDurationValue, expectedError);
+          if (expectedError) {
+             runNextTestCase();
+          } else {
+             waitForEventOnce('durationchange', runNextTestCase);
+          }
+        }, false);
+      }
+
+      function testSetMaxInt(runNextTestCase, video)
+      {
+        // Set duration to maximum allowed int.
+        setDurationHelper(Math.pow(2, 31) - 1, null, runNextTestCase, video);
+      }
+
+      function testSetMinInt(runNextTestCase, video)
+      {
+        // Set duration to minimum allowed int.
+        setDurationHelper(1, null, runNextTestCase, video);
+      }
+
+      function testSetMaxValue(runNextTestCase, video)
+      {
+        // Set duration to maximum allowed JS value
+        setDurationHelper(Number.MAX_VALUE, null, runNextTestCase, video);
+      }
+
+      function testSetMinValue(runNextTestCase, video)
+      {
+        // Set duration minimum allowed JS value
+        setDurationHelper(Number.MIN_VALUE, null, runNextTestCase, video);
+      }
+
+      function testSetMaxValueMinusOne(runNextTestCase, video)
+      {
+        // Set duration to maximum allowed JS value minus 1.
+        setDurationHelper(Number.MAX_VALUE - 1, null, runNextTestCase, video);
+      }
+
+      function testSetMinValueMinusOne(runNextTestCase, video)
+      {
+        // Set duration to minimum allowed JS value minus 1, expect error.
+        var error = DOMException.INVALID_ACCESS_ERR;
+        setDurationHelper(Number.MIN_VALUE - 1, error, runNextTestCase, video);
+      }
+
+      function testSetPositiveInfinity(runNextTestCase, video)
+      {
+        // Set duration to maximum numerical value;
+        // in JS that is = Infinity; expect no error.
+        setDurationHelper(Number.POSITIVE_INFINITY, null, runNextTestCase, video);
+      }
+
+      function testSetNegativeInfinity(runNextTestCase, video)
+      {
+        // Set duration to maximum numerical value;
+        // in JS that is = Infinity; expect error.
+        var error = DOMException.INVALID_ACCESS_ERR;
+        setDurationHelper(Number.NEGATIVE_INFINITY, error, runNextTestCase, video);
+      }
+
+      function testSetLowestValue(runNextTestCase, video)
+      {
+        // Set duration to lowest numerical value;
+        // in JS that is = negative of max_value; expect error.
+        var error = DOMException.INVALID_ACCESS_ERR;
+        setDurationHelper(-1 * Number.MAX_VALUE, error, runNextTestCase, video);
+      }
+
+      function testSetNegativeDouble(runNextTestCase, video)
+      {
+        // Set duration to a negative double, expect error.
+        var error = DOMException.INVALID_ACCESS_ERR;
+        setDurationHelper(-101.9, error, runNextTestCase, video);
+      }
+
+      function testSetPositiveDouble(runNextTestCase, video)
+      {
+        // Set duration to a positive double, expect no errors.
+        setDurationHelper(101.9, null, runNextTestCase, video);
+        endTest();
+      }
+
+      function testSetZero(runNextTestCase, video)
+      {
+        // Set duration to a positive double, expect no errors.
+        setDurationHelper(0, null, runNextTestCase, video);
+        endTest();
+      }
+
+      function start()
+      {
+        findMediaElement();
+
+        mediaSource = new WebKitMediaSource();
+
+        waitForEventAndFail('error');
+        waitForEvent('webkitsourceopen', "", false, false, mediaSource);
+
+        segmentHelper.init(video, function (success)
+        {
+          if (!success) {
+            failTest("Failed to load segment data");
+            return;
+          }
+
+          // Listen to any duration change events.
+          // When it fires, check to see if duration of HTMLMediaElement
+          // matches duration of its MediaSource object.
+          video.addEventListener('durationchange', onDurationChange);
+
+          // List of tests we'd like to run.
+          var testCases = [
+              testSetMaxInt,
+              testSetMinInt,
+              testSetMaxValue,
+              testSetMaxValueMinusOne,
+              testSetMinValue,
+              testSetMinValueMinusOne,
+              testSetPositiveInfinity,
+              testSetNegativeInfinity,
+              testSetLowestValue,
+              testSetNegativeDouble,
+              testSetPositiveDouble
+          ];
+          MediaSourceTest.startSourceOpenTesting(video, testCases);
+        });
+      }
+    </script>
+  </head>
+  
+  <body _onload_="start()">
+    <video autoplay controls></video>
+    <p>Tests boundary values for duration attribute on MediaSource object.</p>
+  </body>
+
+</html>

Added: trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-expected.txt (0 => 147255)


--- trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-expected.txt	2013-03-29 22:18:03 UTC (rev 147255)
@@ -0,0 +1,8 @@
+Tests simple operations with duration attribute of MediaSource object.
+
+Original duration = 6
+EXPECTED (mediaSource.duration == '1') OK
+EXPECTED (mediaSource.duration == '1') OK
+PASS: Media Source duration truncated and current time changed to = 1
+END OF TEST
+

Added: trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration.html (0 => 147255)


--- trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration.html	2013-03-29 22:18:03 UTC (rev 147255)
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>  
+  <head>
+    <script src=""
+    <script src=""
+    <script src=""
+    <script>
+      var segmentHelper = new MediaSourceTest.SegmentHelper(WebMSegmentInfo.testWebM);
+      var seekTo = 2;
+      var newDuration = 1;
+
+      function onSourceOpen(event)
+      {
+        mediaSource.removeEventListener('webkitsourceopen', onSourceOpen);
+
+        // Add an initialization segment and multiple media segments.
+        segmentHelper.addSourceBuffer();
+        segmentHelper.appendInitSegment();
+        segmentHelper.appendAllMediaSegments();
+
+        // Appending all segments triggers a playing event;
+        // add a listener for that event.
+        video.addEventListener('playing', onPlaying);
+      }
+
+      function onPlaying(event)
+      {
+        consoleWrite("Original duration = " + mediaSource.duration.toFixed());
+        video.currentTime = seekTo;
+
+        // Changing video current-time triggers a seeked event.
+        // Add a listener to it.
+        video.addEventListener('seeked', onSeeked);
+      }
+
+      function onSeeked(event)
+      {
+        // Playtime should now be at 2 seconds.
+        // Set duration to < current playtime.
+        mediaSource.duration = newDuration;
+        testExpected("mediaSource.duration", newDuration, "==");
+
+        // Because the duration was set to be before the playback position,
+        // current playback position should now be the same as the new duration.
+        testExpected("mediaSource.duration", video.currentTime, "==");
+        consoleWrite("PASS: Media Source duration truncated and current time changed to = " + mediaSource.duration);
+        endTest();
+      }
+
+      function start()
+      {
+        findMediaElement();
+
+        waitForEventAndFail('error');
+
+        mediaSource.addEventListener('webkitsourceopen', onSourceOpen);
+
+        segmentHelper.init(video, function (success)
+        {
+          if (!success) {
+            failTest("Failed to load segment data");
+            return;
+          }
+
+          MediaSourceTest.setSrcToMediaSourceTestURL(video);
+        });
+      }
+    </script>
+  </head>
+  <body _onload_="start()">
+    <video autoplay controls></video>
+    <p>Tests simple operations with duration attribute of MediaSource object.</p>
+  </body>
+</html>
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to