 Chromium Code Reviews
 Chromium Code Reviews Issue 273153002:
  MSE: Add basic sequence AppendMode layout tests  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk
    
  
    Issue 273153002:
  MSE: Add basic sequence AppendMode layout tests  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk| Index: LayoutTests/http/tests/media/media-source/mediasource-sequencemode-append-buffer.html | 
| diff --git a/LayoutTests/http/tests/media/media-source/mediasource-sequencemode-append-buffer.html b/LayoutTests/http/tests/media/media-source/mediasource-sequencemode-append-buffer.html | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..baccb3fe44b3b4d45e4aef64c25c4f63ef6fcaa6 | 
| --- /dev/null | 
| +++ b/LayoutTests/http/tests/media/media-source/mediasource-sequencemode-append-buffer.html | 
| @@ -0,0 +1,113 @@ | 
| +<!DOCTYPE html> | 
| +<html> | 
| + <head> | 
| + <script src="/w3c/resources/testharness.js"></script> | 
| + <script src="/w3c/resources/testharnessreport.js"></script> | 
| + <script src="mediasource-util.js"></script> | 
| + <link rel='stylesheet' href='/w3c/resources/testharness.css'> | 
| + </head> | 
| + <body> | 
| + <div id="log"></div> | 
| + <script> | 
| + function mediasource_sequencemode_test(testFunction, description, options) | 
| + { | 
| + return mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) | 
| + { | 
| + assert_greater_than(segmentInfo.media.length, 3, 'at least 3 media segments for supported type'); | 
| + test.failOnEvent(mediaElement, 'error'); | 
| + sourceBuffer.mode = 'sequence'; | 
| + assert_equals(sourceBuffer.mode, 'sequence', 'mode after setting it to \'sequence\''); | 
| + | 
| + var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init); | 
| + test.expectEvent(sourceBuffer, 'updatestart', 'initSegment append started.'); | 
| + test.expectEvent(sourceBuffer, 'update', 'initSegment append success.'); | 
| + test.expectEvent(sourceBuffer, 'updateend', 'initSegment append ended.'); | 
| + sourceBuffer.appendBuffer(initSegment); | 
| + test.waitForExpectedEvents(function() | 
| + { | 
| + assert_equals(sourceBuffer.timestampOffset, 0, 'timestampOffset initially 0'); | 
| + testFunction(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData); | 
| + }); | 
| + }, description, options); | 
| + } | 
| + | 
| + function append_segment(test, sourceBuffer, mediaData, info, callback) | 
| + { | 
| + var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData, info); | 
| + test.expectEvent(sourceBuffer, 'updatestart', 'media segment append started.'); | 
| + test.expectEvent(sourceBuffer, 'update', 'media segment append success.'); | 
| + test.expectEvent(sourceBuffer, 'updateend', 'media segment append ended.'); | 
| + sourceBuffer.appendBuffer(mediaSegment); | 
| + test.waitForExpectedEvents(function() { callback(); }); | 
| + } | 
| + | 
| + mediasource_sequencemode_test(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) | 
| + { | 
| + assert_equals(segmentInfo.media[0].timecode, 0, 'segment starts at time 0'); | 
| + append_segment(test, sourceBuffer, mediaData, segmentInfo.media[0], function() | 
| + { | 
| + assert_equals(sourceBuffer.timestampOffset, 0, 'timestampOffset remains 0'); | 
| + assert_equals(sourceBuffer.buffered.length, 1, 'sourceBuffer.buffered has 1 range'); | 
| + assert_equals(sourceBuffer.buffered.start(0), 0, 'sourceBuffer.buffered range begins at time 0'); | 
| + assert_less_than_equal(sourceBuffer.buffered.end(0), segmentInfo.media[1].timecode, 'sourceBuffer.buffered range ends at or before next segment timecode') | 
| + test.done(); | 
| + }); | 
| + }, 'Test sequence AppendMode appendBuffer(first media segment)'); | 
| + | 
| + mediasource_sequencemode_test(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) | 
| + { | 
| + assert_greater_than(segmentInfo.media[1].timecode, 0, 'segment starts after time 0'); | 
| + append_segment(test, sourceBuffer, mediaData, segmentInfo.media[1], function() | 
| + { | 
| + // Muxed stream processing causes the offset to not always match expectation based on | 
| + // segment timecodes, hence allowance of up to 10% deviation from expectation here. | 
| 
acolwell GONE FROM CHROMIUM
2014/05/12 14:00:09
What? Why is this the case? If the timecode info i
 
wolenetz
2014/05/19 21:20:43
Done.
 | 
| + assert_approx_equals(sourceBuffer.timestampOffset, | 
| + -segmentInfo.media[1].timecode, | 
| + segmentInfo.media[1].timecode / 10, | 
| + 'timestampOffset near -(segment timecode)'); | 
| + assert_equals(sourceBuffer.buffered.length, 1, 'sourceBuffer.buffered has 1 range'); | 
| + assert_equals(sourceBuffer.buffered.start(0), 0, 'sourceBuffer.buffered range begins at time 0'); | 
| + assert_less_than_equal(sourceBuffer.buffered.end(0), | 
| + segmentInfo.media[2].timecode - segmentInfo.media[1].timecode, | 
| + 'sourceBuffer.buffered range ends at or before duration appended'); | 
| + test.done(); | 
| + }); | 
| + }, 'Test sequence AppendMode appendBuffer(second media segment)'); | 
| + | 
| + mediasource_sequencemode_test(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) | 
| + { | 
| + assert_greater_than(segmentInfo.media[1].timecode, 0, 'segment starts after time 0'); | 
| + | 
| + append_segment(test, sourceBuffer, mediaData, segmentInfo.media[1], function() | 
| + { | 
| + assert_equals(segmentInfo.media[0].timecode, 0, 'segment starts at time 0'); | 
| + append_segment(test, sourceBuffer, mediaData, segmentInfo.media[0], function() | 
| + { | 
| + // timestampOffset should now have been re-adjusted to put media[0] immediately after media[1]. | 
| + // Muxed stream processing causes the offset to not always exactly match expectation based on | 
| + // segment timecodes, hence allowance of up to 10% deviation from expectation here. | 
| 
acolwell GONE FROM CHROMIUM
2014/05/12 14:00:09
ditto re: time bound instead of percentage
 
wolenetz
2014/05/19 21:20:43
Done.
 | 
| + var expected_offset = segmentInfo.media[2].timecode - segmentInfo.media[1].timecode; | 
| + assert_greater_than(expected_offset, 0, 'media[2] timecode is after media[1] timecode'); | 
| + assert_approx_equals(sourceBuffer.timestampOffset, | 
| + expected_offset, | 
| + expected_offset / 10, | 
| + 'timestampOffset adjusted again'); | 
| + | 
| + assert_equals(sourceBuffer.buffered.length, 1, 'sourceBuffer.buffered has 1 range'); | 
| + assert_equals(sourceBuffer.buffered.start(0), 0, 'sourceBuffer.buffered range begins at time 0'); | 
| + | 
| + // Similarly allow for small variation in resulting length of buffered media. | 
| + assert_approx_equals(sourceBuffer.buffered.end(0), | 
| + segmentInfo.media[2].timecode, | 
| + expected_offset / 10, | 
| 
acolwell GONE FROM CHROMIUM
2014/05/12 14:00:09
ditto.
 
wolenetz
2014/05/19 21:20:43
Done.
 | 
| + 'sourceBuffer.buffered range ends near sum of appended segment durations'); | 
| + assert_greater_than(sourceBuffer.buffered.end(0), | 
| + segmentInfo.media[2].timecode - segmentInfo.media[1].timecode, | 
| + 'sourceBuffer.buffered range is larger than the duration of the first appended segment'); | 
| + test.done(); | 
| + }) | 
| + }); | 
| + }, 'Test sequence AppendMode appendBuffer(second media segment, then first media segment)'); | 
| + </script> | 
| + </body> | 
| +</html> |