mirror of
https://github.com/servo/servo.git
synced 2025-08-15 02:15:33 +01:00
Update web-platform-tests to revision 4333a1d2f109795547fc5e22ebfc8481fa649de7
This commit is contained in:
parent
728ebcc932
commit
8c46b67f8e
456 changed files with 10561 additions and 5108 deletions
|
@ -59,6 +59,7 @@ interface SourceBuffer : EventTarget {
|
|||
attribute EventHandler onabort;
|
||||
void appendBuffer(BufferSource data);
|
||||
void abort();
|
||||
void changeType(DOMString type);
|
||||
void remove(double start, unrestricted double end);
|
||||
};
|
||||
|
||||
|
|
|
@ -425,11 +425,11 @@
|
|||
loadedmetadataCalled = true;
|
||||
e.target.removeEventListener(e.type, metadata);
|
||||
});
|
||||
sourceBuffer.addEventListener("updateend", function updateend(e) {
|
||||
sourceBuffer.addEventListener("updateend", test.step_func(function updateend(e) {
|
||||
assert_true(loadedmetadataCalled);
|
||||
assert_equals(mediaElement.readyState, mediaElement.HAVE_METADATA);
|
||||
e.target.removeEventListener(e.type, updateend);
|
||||
});
|
||||
}));
|
||||
test.expectEvent(sourceBuffer, "updateend", "remainingInitSegment append ended.");
|
||||
test.expectEvent(mediaElement, "loadedmetadata", "loadedmetadata event received.");
|
||||
sourceBuffer.appendBuffer(initSegment);
|
||||
|
@ -444,11 +444,11 @@
|
|||
loadeddataCalled = true;
|
||||
e.target.removeEventListener(e.type, loadeddata);
|
||||
});
|
||||
sourceBuffer.addEventListener("updateend", function updateend(e) {
|
||||
sourceBuffer.addEventListener("updateend", test.step_func(function updateend(e) {
|
||||
assert_true(loadeddataCalled);
|
||||
assert_greater_than_equal(mediaElement.readyState, mediaElement.HAVE_CURRENT_DATA);
|
||||
e.target.removeEventListener(e.type, updateend);
|
||||
});
|
||||
}));
|
||||
test.expectEvent(sourceBuffer, "updateend", "mediaSegment append ended.");
|
||||
test.expectEvent(mediaElement, "loadeddata", "loadeddata fired.");
|
||||
sourceBuffer.appendBuffer(mediaSegment);
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE html>
|
||||
<!-- Copyright © 2018 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
|
||||
<html>
|
||||
<head>
|
||||
<title>Exercise changeType for supported test types.</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="mediasource-util.js"></script>
|
||||
<script src="mediasource-changetype-util.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="log"></div>
|
||||
<script>
|
||||
|
||||
function generateChangeTypeTests(audio_types, video_types)
|
||||
{
|
||||
async_test(function(test) {
|
||||
assert_true(audio_types.length > 1, "Browser doesn't support at least 2 types of audio test media" + audio_types);
|
||||
assert_true(video_types.length > 1, "Browser doesn't support at least 2 types of video test media");
|
||||
test.done();
|
||||
}, "Check if browser supports enough test media types");
|
||||
|
||||
// Generate audio-only changeType tests
|
||||
for (let audio1 of audio_types) {
|
||||
for (let audio2 of audio_types) {
|
||||
mediaSourceChangeTypeTest(audio1, audio2, "Test audio-only changeType for " + audio1.type + " <-> " + audio2.type);
|
||||
}
|
||||
}
|
||||
|
||||
// Generate video-only changeType tests
|
||||
for (let video1 of video_types) {
|
||||
for (let video2 of video_types) {
|
||||
mediaSourceChangeTypeTest(video1, video2, "Test video-only changeType for " + video1.type + " <-> " + video2.type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
findSupportedChangeTypeTestTypes(generateChangeTypeTests);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,156 @@
|
|||
// Copyright © 2018 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang).
|
||||
|
||||
function findSupportedChangeTypeTestTypes(cb)
|
||||
{
|
||||
var CHANGE_TYPE_MEDIA_LIST = [
|
||||
{
|
||||
type: 'video/webm; codecs="vp8"',
|
||||
is_video: true,
|
||||
url: 'webm/test-v-128k-320x240-24fps-8kfr.webm'
|
||||
},
|
||||
{
|
||||
type: 'video/webm; codecs="vp9"',
|
||||
is_video: true,
|
||||
url: 'webm/test-vp9.webm'
|
||||
},
|
||||
{
|
||||
type: 'video/mp4; codecs="avc1.4D4001"',
|
||||
is_video: true,
|
||||
url: 'mp4/test-v-128k-320x240-24fps-8kfr.mp4'
|
||||
},
|
||||
{
|
||||
type: 'video/webm; codecs="vorbis"',
|
||||
is_video: false,
|
||||
url: 'webm/test-a-128k-44100Hz-1ch.webm'
|
||||
},
|
||||
{
|
||||
type: 'video/mp4; codecs="mp4a.40.2"',
|
||||
is_video: false,
|
||||
url: 'mp4/test-a-128k-44100Hz-1ch.mp4'
|
||||
},
|
||||
{
|
||||
type: 'audio/mpeg',
|
||||
is_video: false,
|
||||
url: 'mp3/sound_5.mp3'
|
||||
}
|
||||
];
|
||||
|
||||
var audio_result = [];
|
||||
var video_result = [];
|
||||
|
||||
for (var i = 0; i < CHANGE_TYPE_MEDIA_LIST.length; ++i) {
|
||||
var media = CHANGE_TYPE_MEDIA_LIST[i];
|
||||
if (window.MediaSource && MediaSource.isTypeSupported(media.type)) {
|
||||
if (media.is_video === true) {
|
||||
video_result.push(media);
|
||||
} else {
|
||||
audio_result.push(media);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cb(audio_result, video_result);
|
||||
}
|
||||
|
||||
function appendBuffer(test, sourceBuffer, data)
|
||||
{
|
||||
test.expectEvent(sourceBuffer, "update");
|
||||
test.expectEvent(sourceBuffer, "updateend");
|
||||
sourceBuffer.appendBuffer(data);
|
||||
}
|
||||
|
||||
function trimBuffered(test, mediaElement, sourceBuffer, minimumPreviousDuration, newDuration)
|
||||
{
|
||||
assert_less_than(newDuration, minimumPreviousDuration);
|
||||
assert_less_than(minimumPreviousDuration, mediaElement.duration);
|
||||
test.expectEvent(sourceBuffer, "update");
|
||||
test.expectEvent(sourceBuffer, "updateend");
|
||||
sourceBuffer.remove(newDuration, Infinity);
|
||||
}
|
||||
|
||||
function trimDuration(test, mediaElement, mediaSource, newDuration)
|
||||
{
|
||||
assert_less_than(newDuration, mediaElement.duration);
|
||||
test.expectEvent(mediaElement, "durationchange");
|
||||
mediaSource.duration = newDuration;
|
||||
}
|
||||
|
||||
function runChangeTypeTest(test, mediaElement, mediaSource, typeA, dataA, typeB, dataB)
|
||||
{
|
||||
var sourceBuffer = mediaSource.addSourceBuffer(typeA);
|
||||
|
||||
appendBuffer(test, sourceBuffer, dataA);
|
||||
|
||||
// changeType A->B and append B starting at 0.5 seconds.
|
||||
test.waitForExpectedEvents(function()
|
||||
{
|
||||
sourceBuffer.changeType(typeB);
|
||||
sourceBuffer.timestampOffset = 0.5;
|
||||
appendBuffer(test, sourceBuffer, dataB);
|
||||
});
|
||||
|
||||
// changeType B->B and append B starting at 1.0 seconds.
|
||||
test.waitForExpectedEvents(function()
|
||||
{
|
||||
sourceBuffer.changeType(typeB);
|
||||
sourceBuffer.timestampOffset = 1.0;
|
||||
appendBuffer(test, sourceBuffer, dataB);
|
||||
});
|
||||
|
||||
// changeType B->A and append A starting at 1.5 seconds.
|
||||
test.waitForExpectedEvents(function()
|
||||
{
|
||||
sourceBuffer.changeType(typeA);
|
||||
sourceBuffer.timestampOffset = 1.5;
|
||||
appendBuffer(test, sourceBuffer, dataA);
|
||||
});
|
||||
|
||||
// changeTypoe A->A and append A starting at 1.3 seconds.
|
||||
test.waitForExpectedEvents(function()
|
||||
{
|
||||
sourceBuffer.changeType(typeA);
|
||||
sourceBuffer.timestampOffset = 1.3;
|
||||
appendBuffer(test, sourceBuffer, dataA);
|
||||
});
|
||||
|
||||
// Trim duration to 2 seconds, then play through to end.
|
||||
test.waitForExpectedEvents(function()
|
||||
{
|
||||
trimBuffered(test, mediaElement, sourceBuffer, 2.1, 2);
|
||||
});
|
||||
|
||||
test.waitForExpectedEvents(function()
|
||||
{
|
||||
trimDuration(test, mediaElement, mediaSource, 2);
|
||||
});
|
||||
|
||||
test.waitForExpectedEvents(function()
|
||||
{
|
||||
assert_equals(mediaElement.currentTime, 0);
|
||||
test.expectEvent(mediaSource, "sourceended");
|
||||
test.expectEvent(mediaElement, "play");
|
||||
test.expectEvent(mediaElement, "ended");
|
||||
mediaSource.endOfStream();
|
||||
mediaElement.play();
|
||||
});
|
||||
|
||||
test.waitForExpectedEvents(function() {
|
||||
test.done();
|
||||
});
|
||||
}
|
||||
|
||||
function mediaSourceChangeTypeTest(metadataA, metadataB, description)
|
||||
{
|
||||
mediasource_test(function(test, mediaElement, mediaSource)
|
||||
{
|
||||
mediaElement.pause();
|
||||
mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
|
||||
MediaSourceUtil.loadBinaryData(test, metadataA.url, function(dataA) {
|
||||
MediaSourceUtil.loadBinaryData(test, metadataB.url, function(dataB) {
|
||||
runChangeTypeTest(test, mediaElement, mediaSource, metadataA.type, dataA, metadataB.type, dataB);
|
||||
});
|
||||
});
|
||||
}, description);
|
||||
}
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
<!DOCTYPE html>
|
||||
<!-- Copyright © 2018 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>SourceBuffer.changeType() 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_throws(new TypeError(), function()
|
||||
{
|
||||
sourceBuffer.changeType("");
|
||||
}, "changeType");
|
||||
|
||||
test.done();
|
||||
}, "Test changeType with an empty type.");
|
||||
|
||||
mediasource_test(function(test, mediaElement, mediaSource)
|
||||
{
|
||||
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
|
||||
|
||||
mediaSource.removeSourceBuffer(sourceBuffer);
|
||||
|
||||
assert_throws("InvalidStateError", function()
|
||||
{
|
||||
sourceBuffer.changeType(MediaSourceUtil.AUDIO_VIDEO_TYPE);
|
||||
}, "changeType");
|
||||
|
||||
test.done();
|
||||
}, "Test changeType after SourceBuffer removed from mediaSource.");
|
||||
|
||||
mediasource_test(function(test, mediaElement, mediaSource)
|
||||
{
|
||||
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
|
||||
sourceBuffer.appendBuffer(new Uint8Array(0));
|
||||
assert_true(sourceBuffer.updating, "Updating flag set when a buffer is appended.");
|
||||
|
||||
assert_throws("InvalidStateError", function()
|
||||
{
|
||||
sourceBuffer.changeType(MediaSourceUtil.AUDIO_VIDEO_TYPE);
|
||||
}, "changeType");
|
||||
|
||||
test.done();
|
||||
}, "Test changeType while update pending.");
|
||||
|
||||
mediasource_test(function(test, mediaElement, mediaSource)
|
||||
{
|
||||
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
|
||||
|
||||
var unsupported_type = null;
|
||||
assert_false(MediaSource.isTypeSupported(unsupported_type), "null MIME type is not expected to be supported.");
|
||||
|
||||
assert_throws("NotSupportedError", function()
|
||||
{
|
||||
sourceBuffer.changeType(unsupported_type);
|
||||
}, "changeType");
|
||||
|
||||
test.done();
|
||||
}, "Test changeType with null type.");
|
||||
|
||||
mediasource_test(function(test, mediaElement, mediaSource)
|
||||
{
|
||||
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
|
||||
|
||||
var unsupported_type = 'invalidType';
|
||||
assert_false(MediaSource.isTypeSupported(unsupported_type), unsupported_type + " is not expected to be supported.");
|
||||
|
||||
assert_throws("NotSupportedError", function()
|
||||
{
|
||||
sourceBuffer.changeType(unsupported_type);
|
||||
}, "changeType");
|
||||
|
||||
test.done();
|
||||
}, "Test changeType with unsupported type.");
|
||||
|
||||
mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
|
||||
{
|
||||
test.expectEvent(sourceBuffer, "updatestart");
|
||||
test.expectEvent(sourceBuffer, "update");
|
||||
test.expectEvent(sourceBuffer, "updateend");
|
||||
sourceBuffer.appendBuffer(mediaData);
|
||||
|
||||
test.waitForExpectedEvents(function()
|
||||
{
|
||||
mediaSource.endOfStream();
|
||||
assert_equals(mediaSource.readyState, "ended");
|
||||
|
||||
test.expectEvent(mediaSource, "sourceopen");
|
||||
sourceBuffer.changeType(MediaSourceUtil.AUDIO_VIDEO_TYPE);
|
||||
assert_equals(mediaSource.readyState, "open");
|
||||
});
|
||||
|
||||
test.waitForExpectedEvents(function()
|
||||
{
|
||||
test.done();
|
||||
});
|
||||
}, "Test changeType transitioning readyState from 'ended' to 'open'.");
|
||||
|
||||
mediasource_test(function(test, mediaElement, mediaSource) {
|
||||
var sequenceType = "audio/aac";
|
||||
if (!MediaSource.isTypeSupported(sequenceType)) {
|
||||
sequenceType = "audio/mpeg";
|
||||
assert_true(MediaSource.isTypeSupported(sequenceType),
|
||||
"No bytestream that generates timestamps is supported, aborting test");
|
||||
}
|
||||
|
||||
assert_not_equals(MediaSourceUtil.AUDIO_ONLY_TYPE, sequenceType,
|
||||
"This test requires distinct audio-only types");
|
||||
|
||||
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
|
||||
assert_equals(sourceBuffer.mode, "segments",
|
||||
"None of the audioOnlyTypes in the test util generate timestamps, but mode is incorrectly set");
|
||||
|
||||
sourceBuffer.changeType(sequenceType);
|
||||
assert_equals(sourceBuffer.mode, "sequence",
|
||||
"Mode is not updated correctly for a bytestream that generates timestamps");
|
||||
|
||||
test.done();
|
||||
}, "Test changeType sets mode to sequence for change to type that generates timestamps");
|
||||
|
||||
mediasource_test(function(test, mediaElement, mediaSource) {
|
||||
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
|
||||
|
||||
assert_equals(sourceBuffer.mode, "segments",
|
||||
"None of the audioOnlyTypes in the test util generate timestamps, but mode is incorrectly set");
|
||||
sourceBuffer.changeType(MediaSourceUtil.AUDIO_ONLY_TYPE);
|
||||
assert_equals(sourceBuffer.mode, "segments",
|
||||
"Previous segments mode is not retained correctly for changeType to one that doesn't generate timestamps");
|
||||
|
||||
sourceBuffer.mode = "sequence";
|
||||
assert_equals(sourceBuffer.mode, "sequence", "mode should be sequence now");
|
||||
sourceBuffer.changeType(MediaSourceUtil.AUDIO_ONLY_TYPE);
|
||||
assert_equals(sourceBuffer.mode, "sequence",
|
||||
"Previous sequence mode is not retained correctly for changeType to one that doesn't generate timestamps");
|
||||
|
||||
test.done();
|
||||
}, "Test changeType retains previous mode when changing to type that doesn't generate timestamps");
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
BIN
tests/wpt/web-platform-tests/media-source/mp3/sound_5.mp3
Normal file
BIN
tests/wpt/web-platform-tests/media-source/mp3/sound_5.mp3
Normal file
Binary file not shown.
BIN
tests/wpt/web-platform-tests/media-source/webm/test-vp9.webm
Normal file
BIN
tests/wpt/web-platform-tests/media-source/webm/test-vp9.webm
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue