mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 03:45:46 +00:00
Bug 648595 - Part 2/2: Tests for temporal media fragments support - r=cpearce
--HG-- extra : rebase_source : 45e62dc05dff2660a07b43989cdb179e91ac31a5
This commit is contained in:
parent
b95429c9e0
commit
cc675370ca
@ -74,6 +74,8 @@ _TEST_FILES = \
|
||||
cancellable_request.sjs \
|
||||
dynamic_redirect.sjs \
|
||||
file_access_controls.html \
|
||||
fragment_play.js \
|
||||
fragment_noplay.js \
|
||||
manifest.js \
|
||||
reactivate_helper.html \
|
||||
redirect.sjs \
|
||||
@ -288,6 +290,8 @@ endif
|
||||
ifdef MOZ_WAVE
|
||||
_TEST_FILES += \
|
||||
test_can_play_type_wave.html \
|
||||
test_fragment_play.html \
|
||||
test_fragment_noplay.html \
|
||||
test_wave_data_u8.html \
|
||||
test_wave_data_s16.html \
|
||||
$(NULL)
|
||||
|
19
content/media/test/fragment_noplay.js
Normal file
19
content/media/test/fragment_noplay.js
Normal file
@ -0,0 +1,19 @@
|
||||
function test_fragment_noplay(v, start, end, is, ok, finish) {
|
||||
|
||||
var completed = false;
|
||||
|
||||
function onLoadedMetadata() {
|
||||
var s = start == null ? 0 : start;
|
||||
var e = end == null ? v.duration : end;
|
||||
var a = s - 0.15;
|
||||
var b = s + 0.15;
|
||||
ok(v.currentTime >= a && v.currentTime <= b, "loadedmetadata currentTime is " + a + " < " + v.currentTime + " < " + b);
|
||||
ok(v.initialTime == s, "initialTime (" + v.initialTime + ") == start Time (" + s + ")");
|
||||
ok(v.mozFragmentEnd == e, "mozFragmentEnd (" + v.mozFragmentEnd + ") == end Time (" + e + ")");
|
||||
completed = true;
|
||||
finish();
|
||||
return false;
|
||||
}
|
||||
|
||||
v.addEventListener("loadedmetadata", onLoadedMetadata, false);
|
||||
}
|
74
content/media/test/fragment_play.js
Normal file
74
content/media/test/fragment_play.js
Normal file
@ -0,0 +1,74 @@
|
||||
function test_fragment_play(v, start, end, is, ok, finish) {
|
||||
|
||||
var completed = false;
|
||||
var loadedMetadataRaised = false;
|
||||
var seekedRaised = false;
|
||||
var pausedRaised = false;
|
||||
|
||||
function onLoadedMetadata() {
|
||||
var s = start == null ? 0 : start;
|
||||
var e = end == null ? v.duration : end;
|
||||
ok(v.currentTime == s, "loadedmetadata currentTime is " + v.currentTime + " != " + s);
|
||||
ok(v.initialTime == s, "initialTime (" + v.initialTime + ") == start Time (" + s + ")");
|
||||
ok(v.mozFragmentEnd == e, "mozFragmentEnd (" + v.mozFragmentEnd + ") == end Time (" + e + ")");
|
||||
loadedMetadataRaised = true;
|
||||
v.play();
|
||||
return false;
|
||||
}
|
||||
|
||||
function onSeeked() {
|
||||
if (completed)
|
||||
return false;
|
||||
|
||||
var s = start == null ? 0 : start;
|
||||
ok(v.currentTime == s, "seeked currentTime is " + v.currentTime + " != " + s);
|
||||
|
||||
seekedRaised = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
function onTimeUpdate() {
|
||||
if (completed)
|
||||
return false;
|
||||
|
||||
v._lastTimeUpdate = v.currentTime;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function onPause() {
|
||||
if (completed)
|
||||
return false;
|
||||
|
||||
var e = end == null ? v.duration : end;
|
||||
var a = e - 0.05;
|
||||
var b = e + 0.05;
|
||||
ok(v.currentTime >= a && v.currentTime <= b, "paused currentTime is " + a + " < " + v.currentTime + " < " + b + " ? " + v._lastTimeUpdate);
|
||||
pausedRaised = true;
|
||||
v.play();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function onEnded() {
|
||||
if (completed)
|
||||
return false;
|
||||
|
||||
completed = true;
|
||||
ok(loadedMetadataRaised, "loadedmetadata event");
|
||||
if (start) {
|
||||
ok(seekedRaised, "seeked event");
|
||||
}
|
||||
if (end) {
|
||||
ok(pausedRaised, "paused event: " + end + " " + v.duration);
|
||||
}
|
||||
finish();
|
||||
return false;
|
||||
}
|
||||
|
||||
v.addEventListener("ended", onEnded, false);
|
||||
v.addEventListener("loadedmetadata", onLoadedMetadata, false);
|
||||
v.addEventListener("seeked", onSeeked, false);
|
||||
v.addEventListener("pause", onPause, false);
|
||||
v.addEventListener("timeupdate", onTimeUpdate, false);
|
||||
}
|
@ -266,6 +266,12 @@ var gDecodeErrorTests = [
|
||||
{ name:"bogus.duh", type:"bogus/duh" }
|
||||
];
|
||||
|
||||
// These are files that are used for media fragments tests
|
||||
var gFragmentTests = [
|
||||
{ name:"big.wav", type:"audio/x-wav", duration:9.28, size:102444 }
|
||||
];
|
||||
|
||||
|
||||
function checkMetadata(msg, e, test) {
|
||||
if (test.width) {
|
||||
is(e.videoWidth, test.width, msg + " video width");
|
||||
|
129
content/media/test/test_fragment_noplay.html
Normal file
129
content/media/test/test_fragment_noplay.html
Normal file
@ -0,0 +1,129 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Media test: fragment tests</title>
|
||||
<script type="text/javascript" src="/MochiKit/packed.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
<script type="text/javascript" src="manifest.js"></script>
|
||||
<script type="text/javascript" src="fragment_noplay.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var manager = new MediaTestManager;
|
||||
|
||||
// Fragment parameters to try
|
||||
var gFragmentParams = [
|
||||
// W3C Media fragment tests
|
||||
// http://www.w3.org/2008/WebVideo/Fragments/TC/ua-test-cases
|
||||
{ fragment: "#t=banana", start: null, end: null }, // TC0027-UA
|
||||
{ fragment: "#t=3,banana", start: null, end: null }, // TC0028-UA
|
||||
{ fragment: "#t=banana,7", start: null, end: null }, // TC0029-UA
|
||||
{ fragment: "#t='3'", start: null, end: null }, // TC0030-UA
|
||||
{ fragment: "#t=3-7", start: null, end: null }, // TC0031-UA
|
||||
{ fragment: "#t=3:7", start: null, end: null }, // TC0032-UA
|
||||
{ fragment: "#t=3,7,9", start: null, end: null }, // TC0033-UA
|
||||
{ fragment: "#t%3D3", start: null, end: null }, // TC0034-UA
|
||||
{ fragment: "#%74=3", start: 3, end: null }, // TC0035-UA
|
||||
{ fragment: "#t=%33", start: 3, end: null }, // TC0036-UA
|
||||
{ fragment: "#t=3%2C7", start: 3, end: 7 }, // TC0037-UA
|
||||
{ fragment: "#t=%6Ept:3", start: 3, end: null }, // TC0038-UA
|
||||
{ fragment: "#t=npt%3A3", start: 3, end: null }, // TC0039-UA
|
||||
{ fragment: "#t=-1,3", start: null, end: null }, // TC0044-UA
|
||||
{ fragment: "#t=3&", start: 3, end: null }, // TC0051-UA
|
||||
{ fragment: "#u=12&t=3", start: 3, end: null }, // TC0052-UA
|
||||
{ fragment: "#t=foo:7&t=npt:3", start: 3, end: null }, // TC0053-UA
|
||||
{ fragment: "#&&=&=tom&jerry=&t=3&t=meow:0#", start: 3, end: null }, // TC0054-UA
|
||||
{ fragment: "#t=7&t=3", start: 3, end: null }, // TC0055-UA
|
||||
{ fragment: "#T=3,7", start: null, end: null }, // TC0058-UA
|
||||
{ fragment: "#t=", start: null, end: null }, // TC0061-UA
|
||||
{ fragment: "#t=.", start: null, end: null }, // TC0062-UA
|
||||
{ fragment: "#t=.0", start: null, end: null }, // TC0063-UA
|
||||
{ fragment: "#t=0s", start: null, end: null }, // TC0064-UA
|
||||
{ fragment: "#t=,0s", start: null, end: null }, // TC0065-UA
|
||||
{ fragment: "#t=0s,0s", start: null, end: null }, // TC0066-UA
|
||||
{ fragment: "#t=00:00:00s", start: null, end: null }, // TC0067-UA
|
||||
{ fragment: "#t=s", start: null, end: null }, // TC0068-UA
|
||||
{ fragment: "#t=npt:", start: null, end: null }, // TC0069-UA
|
||||
{ fragment: "#t=1e-1:", start: null, end: null }, // TC0070-UA
|
||||
{ fragment: "#t=00:00:01.1e-1", start: null, end: null }, // TC0071-UA
|
||||
{ fragment: "#t=3.", start: 3, end: null }, // TC0072-UA
|
||||
{ fragment: "#t=0:0:0", start: null, end: null }, // TC0073-UA
|
||||
{ fragment: "#t=0:00:60", start: null, end: null }, // TC0074-UA
|
||||
{ fragment: "#t=0:01:60", start: null, end: null }, // TC0075-UA
|
||||
{ fragment: "#t=0:60:00", start: null, end: null }, // TC0076-UA
|
||||
{ fragment: "#t=0:000:000", start: null, end: null }, // TC0077-UA
|
||||
{ fragment: "#t=00:00:03,00:00:07", start: 3, end: 7 }, // TC0078-UA
|
||||
{ fragment: "#t=3,00:00:07", start: 3, end: 7 }, // TC0079-UA
|
||||
{ fragment: "#t=00:00.", start: null, end: null }, // TC0080-UA
|
||||
{ fragment: "#t=0:00:00.", start: null, end: null }, // TC0081-UA
|
||||
{ fragment: "#t=0:00:10e-1", start: null, end: null }, // TC0082-UA
|
||||
{ fragment: "#t=0:00:60.000", start: null, end: null }, // TC0083-UA
|
||||
{ fragment: "#t=0:60:00.000", start: null, end: null }, // TC0084-UA
|
||||
{ fragment: "#t=3,7&t=foo", start: 3, end: 7 }, // TC0085-UA
|
||||
{ fragment: "#foo&t=3,7", start: 3, end: 7 }, // TC0086-UA
|
||||
{ fragment: "#t=3,7&foo", start: 3, end: 7 }, // TC0087-UA
|
||||
{ fragment: "#t=3,7&&", start: 3, end: 7 }, // TC0088-UA
|
||||
{ fragment: "#&t=3,7", start: 3, end: 7 }, // TC0089-UA
|
||||
{ fragment: "#&&t=3,7", start: 3, end: 7 }, // TC0090-UA
|
||||
{ fragment: "#&t=3,7&", start: 3, end: 7 }, // TC0091-UA
|
||||
{ fragment: "#t%3d10", start: null, end: null }, // TC0092-UA
|
||||
{ fragment: "#t=10%26", start: null, end: null }, // TC0093-UA
|
||||
{ fragment: "#&t=3,7,", start: null, end: null } // TC0094-UA
|
||||
];
|
||||
|
||||
function createTestArray() {
|
||||
var tests = [];
|
||||
var tmpVid = document.createElement("video");
|
||||
|
||||
for (var testNum=0; testNum<gFragmentTests.length; testNum++) {
|
||||
var test = gFragmentTests[testNum];
|
||||
if (!tmpVid.canPlayType(test.type)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (var fragNum=0; fragNum<gFragmentParams.length; fragNum++) {
|
||||
var p = gFragmentParams[fragNum];
|
||||
var t = new Object;
|
||||
t.name = test.name + p.fragment;
|
||||
t.type = test.type;
|
||||
t.duration = test.duration;
|
||||
t.start = p.start;
|
||||
t.end = p.end;
|
||||
tests.push(t);
|
||||
}
|
||||
}
|
||||
return tests;
|
||||
}
|
||||
|
||||
function startTest(test, token) {
|
||||
var v = document.createElement('video');
|
||||
manager.started(token);
|
||||
v.src = test.name;
|
||||
v.token = token;
|
||||
v.controls = true;
|
||||
document.body.appendChild(v);
|
||||
var name = test.name + " fragment test";
|
||||
var localIs = function(name) { return function(a, b, msg) {
|
||||
is(a, b, name + ": " + msg);
|
||||
}}(name);
|
||||
var localOk = function(name) { return function(a, msg) {
|
||||
ok(a, name + ": " + msg);
|
||||
}}(name);
|
||||
var localFinish = function(v, manager) { return function() {
|
||||
if (v.parentNode) {
|
||||
v.parentNode.removeChild(v);
|
||||
}
|
||||
manager.finished(v.token);
|
||||
}}(v, manager);
|
||||
window['test_fragment_noplay'](v, test.start, test.end, localIs, localOk, localFinish);
|
||||
}
|
||||
|
||||
manager.runTests(createTestArray(), startTest);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
93
content/media/test/test_fragment_play.html
Normal file
93
content/media/test/test_fragment_play.html
Normal file
@ -0,0 +1,93 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Media test: seek tests</title>
|
||||
<script type="text/javascript" src="/MochiKit/packed.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
<script type="text/javascript" src="manifest.js"></script>
|
||||
<script type="text/javascript" src="fragment_play.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var manager = new MediaTestManager;
|
||||
|
||||
// Fragment parameters to try. These tests
|
||||
// try playing the video. Tests for other fragment
|
||||
// formats are in test_fragment_noplay.html.
|
||||
var gFragmentParams = [
|
||||
{ fragment: "", start: null, end: null },
|
||||
{ fragment: "#t=,", start: null, end: null },
|
||||
{ fragment: "#t=3,3", start: null, end: null },
|
||||
{ fragment: "#t=7,3", start: null, end: null },
|
||||
{ fragment: "#t=7,15", start: 7, end: null },
|
||||
{ fragment: "#t=15,20", start: 9.287981, end: null, todo: "See Bug 679262" },
|
||||
{ fragment: "#t=5", start: 5, end: null },
|
||||
{ fragment: "#t=5.5", start: 5.5, end: null },
|
||||
{ fragment: "#t=5,", start: null, end: null },
|
||||
{ fragment: "#t=,5", start: 0, end: 5 },
|
||||
{ fragment: "#t=2.5,5.5", start: 2.5, end: 5.5 },
|
||||
{ fragment: "#t=1,2.5", start: 1, end: 2.5 },
|
||||
{ fragment: "#t=,15", start: 0, end: null }
|
||||
];
|
||||
|
||||
function createTestArray() {
|
||||
var tests = [];
|
||||
var tmpVid = document.createElement("video");
|
||||
|
||||
for (var testNum=0; testNum<gFragmentTests.length; testNum++) {
|
||||
var test = gFragmentTests[testNum];
|
||||
if (!tmpVid.canPlayType(test.type)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (var fragNum=0; fragNum<gFragmentParams.length; fragNum++) {
|
||||
var p = gFragmentParams[fragNum];
|
||||
var t = new Object;
|
||||
t.name = test.name + p.fragment;
|
||||
t.type = test.type;
|
||||
t.duration = test.duration;
|
||||
t.start = p.start;
|
||||
t.end = p.end;
|
||||
t.todo = p.todo;
|
||||
tests.push(t);
|
||||
}
|
||||
}
|
||||
return tests;
|
||||
}
|
||||
|
||||
function startTest(test, token) {
|
||||
if (test.todo) {
|
||||
todo(false, test.todo);
|
||||
return;
|
||||
}
|
||||
var v = document.createElement('video');
|
||||
manager.started(token);
|
||||
v.src = test.name;
|
||||
v.token = token;
|
||||
v.controls = true;
|
||||
document.body.appendChild(v);
|
||||
var name = test.name + " fragment test";
|
||||
var localIs = function(name) { return function(a, b, msg) {
|
||||
is(a, b, name + ": " + msg);
|
||||
}}(name);
|
||||
var localOk = function(name) { return function(a, msg) {
|
||||
ok(a, name + ": " + msg);
|
||||
}}(name);
|
||||
var localFinish = function(v, manager) { return function() {
|
||||
if (v.parentNode) {
|
||||
v.parentNode.removeChild(v);
|
||||
}
|
||||
manager.finished(v.token);
|
||||
}}(v, manager);
|
||||
window['test_fragment_play'](v, test.start, test.end, localIs, localOk, localFinish);
|
||||
}
|
||||
|
||||
manager.runTests(createTestArray(), startTest);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user