https://github.com/web-platform-tests/wpt
Tip revision: 9b6e516d529b526e06447d171dc2937f646bbe89 authored by Bear Travis on 11 July 2014, 21:52:43 UTC
Adding basic tests for the CSS.supports API as part of the CSS Conditional Rules Module L3.
Adding basic tests for the CSS.supports API as part of the CSS Conditional Rules Module L3.
Tip revision: 9b6e516
mediasource-removesourcebuffer.html
<!DOCTYPE html>
<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<html>
<head>
<title>MediaSource.removeSourceBuffer() 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>
mediasource_test(function(test, mediaElement, mediaSource)
{
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
assert_class_string(sourceBuffer, "SourceBuffer", "New SourceBuffer returned");
mediaSource.removeSourceBuffer(sourceBuffer);
var sourceBuffer2 = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
assert_class_string(sourceBuffer2, "SourceBuffer", "New SourceBuffer returned");
assert_not_equals(sourceBuffer, sourceBuffer2, "SourceBuffers are different instances.");
assert_equals(mediaSource.sourceBuffers.length, 1, "sourceBuffers.length == 1");
test.done();
}, "Test addSourceBuffer(), removeSourceBuffer(), addSourceBuffer() sequence.");
mediasource_test(function(test, mediaElement, mediaSource)
{
assert_throws(new TypeError(),
function() { mediaSource.removeSourceBuffer(null); },
"removeSourceBuffer() threw an exception when passed null.");
test.done();
}, "Test removeSourceBuffer() with null");
mediasource_test(function(test, mediaElement, mediaSource)
{
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
assert_class_string(sourceBuffer, "SourceBuffer", "New SourceBuffer returned");
mediaSource.removeSourceBuffer(sourceBuffer);
assert_throws("NotFoundError",
function() { mediaSource.removeSourceBuffer(sourceBuffer); },
"removeSourceBuffer() threw an exception for a SourceBuffer that was already removed.");
test.done();
}, "Test calling removeSourceBuffer() twice with the same object.");
mediasource_test(function(test, mediaElement1, mediaSource1)
{
var sourceBuffer1 = mediaSource1.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
assert_class_string(sourceBuffer1, "SourceBuffer", "New SourceBuffer returned");
var mediaElement2 = document.createElement("video");
document.body.appendChild(mediaElement2);
test.add_cleanup(function() { document.body.removeChild(mediaElement2); });
var mediaSource2 = new MediaSource();
var mediaSource2URL = URL.createObjectURL(mediaSource2);
mediaElement2.src = mediaSource2URL;
test.expectEvent(mediaSource2, "sourceopen", "Second MediaSource opened");
test.waitForExpectedEvents(function()
{
URL.revokeObjectURL(mediaSource2URL);
var sourceBuffer2 = mediaSource2.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE);
assert_class_string(sourceBuffer2, "SourceBuffer", "Second new SourceBuffer returned");
assert_not_equals(mediaSource1, mediaSource2, "MediaSources are different instances");
assert_not_equals(sourceBuffer1, sourceBuffer2, "SourceBuffers are different instances");
assert_equals(mediaSource1.sourceBuffers[0], sourceBuffer1);
assert_equals(mediaSource2.sourceBuffers[0], sourceBuffer2);
assert_throws("NotFoundError",
function() { mediaSource1.removeSourceBuffer(sourceBuffer2); },
"MediaSource1.removeSourceBuffer() threw an exception for SourceBuffer2");
assert_throws("NotFoundError",
function() { mediaSource2.removeSourceBuffer(sourceBuffer1); },
"MediaSource2.removeSourceBuffer() threw an exception for SourceBuffer1");
mediaSource1.removeSourceBuffer(sourceBuffer1);
mediaSource2.removeSourceBuffer(sourceBuffer2);
test.done();
});
}, "Test calling removeSourceBuffer() for a sourceBuffer belonging to a different mediaSource instance.");
mediasource_test(function(test, mediaElement, mediaSource)
{
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
assert_class_string(sourceBuffer, "SourceBuffer", "New SourceBuffer returned");
mediaSource.endOfStream();
assert_equals(mediaSource.readyState, "ended", "MediaSource in ended state");
mediaSource.removeSourceBuffer(sourceBuffer);
assert_equals(mediaSource.sourceBuffers.length, 0, "MediaSource.sourceBuffers is empty");
assert_equals(mediaSource.activeSourceBuffers.length, 0, "MediaSource.activesourceBuffers is empty");
test.done();
}, "Test calling removeSourceBuffer() in ended state.");
mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
{
var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
test.expectEvent(sourceBuffer, "updateend", "initSegment append ended.");
test.expectEvent(mediaElement, "loadedmetadata", "loadedmetadata done.");
sourceBuffer.appendBuffer(initSegment);
test.waitForExpectedEvents(function()
{
assert_equals(mediaSource.sourceBuffers.length, 1, "MediaSource.sourceBuffers is not empty");
assert_equals(mediaSource.activeSourceBuffers.length, 1, "MediaSource.activesourceBuffers is not empty");
assert_equals(mediaElement.readyState, mediaElement.HAVE_METADATA);
assert_equals(mediaSource.duration, segmentInfo.duration);
test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "SourceBuffer removed from activeSourceBuffers.");
test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "SourceBuffer removed.");
mediaSource.removeSourceBuffer(sourceBuffer);
});
test.waitForExpectedEvents(function()
{
assert_equals(mediaSource.sourceBuffers.length, 0, "MediaSource.sourceBuffers is empty");
assert_equals(mediaSource.activeSourceBuffers.length, 0, "MediaSource.activesourceBuffers is empty");
test.done();
});
}, "Test removesourcebuffer event on activeSourceBuffers.");
mediasource_test(function(test, mediaElement, mediaSource)
{
mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
var mimetype = MediaSourceUtil.AUDIO_VIDEO_TYPE;
var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
sourceBuffer.appendBuffer(new Uint8Array(0));
assert_true(sourceBuffer.updating, "Updating flag set when a buffer is appended.");
test.expectEvent(sourceBuffer, 'abort');
test.expectEvent(sourceBuffer, 'updateend');
mediaSource.removeSourceBuffer(sourceBuffer);
assert_false(sourceBuffer.updating, "Updating flag reset after abort.");
test.waitForExpectedEvents(function()
{
test.done();
});
}, "Test abort event when removeSourceBuffer() called while SourceBuffer is updating");
</script>
</body>
</html>