1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
<!DOCTYPE html>
<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<html>
<head>
<title>SourceBuffer.timestampOffset test cases.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="mediasource-util.js"></script>
</head>
<body>
<div id="log"></div>
<script>
function simpleTimestampOffsetTest(value, expected, description)
{
mediasource_test(function(test, mediaElement, mediaSource)
{
var segmentInfo = MediaSourceUtil.SEGMENT_INFO;
var sourceBuffer = mediaSource.addSourceBuffer(segmentInfo.type);
assert_equals(sourceBuffer.timestampOffset, 0,
"Initial timestampOffset of a SourceBuffer is 0");
if (expected == "TypeError") {
assert_throws_js(TypeError,
function() { sourceBuffer.timestampOffset = value; },
"setting timestampOffset to " + description + " throws an exception.");
} else {
sourceBuffer.timestampOffset = value;
assert_equals(sourceBuffer.timestampOffset, expected);
}
test.done();
}, "Test setting SourceBuffer.timestampOffset to " + description + ".");
}
simpleTimestampOffsetTest(10.5, 10.5, "a positive number");
simpleTimestampOffsetTest(-10.4, -10.4, "a negative number");
simpleTimestampOffsetTest(0, 0, "zero");
simpleTimestampOffsetTest(Number.POSITIVE_INFINITY, "TypeError", "positive infinity");
simpleTimestampOffsetTest(Number.NEGATIVE_INFINITY, "TypeError", "negative infinity");
simpleTimestampOffsetTest(Number.NaN, "TypeError", "NaN");
simpleTimestampOffsetTest(undefined, "TypeError", "undefined");
simpleTimestampOffsetTest(null, 0, "null");
simpleTimestampOffsetTest(false, 0, "false");
simpleTimestampOffsetTest(true, 1, "true");
simpleTimestampOffsetTest("10.5", 10.5, "a number string");
simpleTimestampOffsetTest("", 0, "an empty string");
mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
{
var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[0]);
test.expectEvent(sourceBuffer, "updateend", "initSegment append ended.");
sourceBuffer.appendBuffer(initSegment);
test.waitForExpectedEvents(function()
{
test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended.");
sourceBuffer.appendBuffer(mediaSegment);
});
test.waitForExpectedEvents(function()
{
mediaSource.endOfStream();
assert_equals(mediaSource.readyState, "ended");
mediaSource.sourceBuffers[0].timestampOffset = 2;
assert_equals(mediaSource.readyState, "open");
test.expectEvent(mediaSource, "sourceopen", "mediaSource fired 'sourceopen' event.");
});
test.waitForExpectedEvents(function()
{
test.done();
});
}, "Test setting timestampOffset in 'ended' state causes a transition to 'open'.");
mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
{
var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[0]);
test.expectEvent(sourceBuffer, "updateend", "initSegment append ended.");
sourceBuffer.appendBuffer(initSegment);
assert_equals(mediaSource.sourceBuffers[0].timestampOffset, 0, "read initial value");
test.waitForExpectedEvents(function()
{
test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended.");
sourceBuffer.appendBuffer(mediaSegment);
assert_equals(mediaSource.sourceBuffers[0].timestampOffset, 0,
"No change to timestampoffset after segments mode init segment append");
});
test.waitForExpectedEvents(function()
{
assert_equals(mediaSource.sourceBuffers[0].timestampOffset, 0,
"No change to timestampoffset after segments mode media segment append");
test.done();
});
}, "Test getting the initial value of timestampOffset.");
mediasource_test(function(test, mediaElement, mediaSource)
{
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
assert_true(sourceBuffer != null, "New SourceBuffer returned");
mediaSource.removeSourceBuffer(sourceBuffer);
assert_equals(mediaSource.sourceBuffers.length, 0, "MediaSource.sourceBuffers is empty");
assert_equals(mediaSource.activeSourceBuffers.length, 0, "MediaSource.activesourceBuffers is empty");
assert_throws_dom("InvalidStateError", function()
{
sourceBuffer.timestampOffset = 10;
});
test.done();
}, "Test setting timestampoffset after removing the sourcebuffer.");
</script>
</body>
</html>
|