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
|
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=495319
-->
<head>
<title>Bug 495319 - playing back small audio files should fire timeupdate</title>
<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>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=495319">Mozilla Bug 495319</a>
<pre id="test">
<script class="testbody" type="text/javascript">
var manager = new MediaTestManager;
function ended(e) {
var v = e.target;
++v.counter["ended"];
is(v.counter["ended"], 1, v._name + " should see ended only once");
ok(v.counter["timeupdate"] > 0, v._name + " should see at least one timeupdate: " + v.currentTime);
// Rest event counters for we don't allow events after ended.
eventsToLog.forEach(function(e) {
v.counter[e] = 0;
});
// Finish the test after 500ms. We shouldn't receive any timeupdate events
// after the ended event, so this gives time for any pending timeupdate events
// to fire so we can ensure we don't regress behaviour.
setTimeout(
function() {
// Remove the event listeners before removing the video from the document.
// We should receive a timeupdate and pause event when we remove the element
// from the document (as the element is specified to behave as if pause() was
// invoked when it's removed from a document), and we don't want those
// confusing the test results.
v.removeEventListener("ended", ended, false);
eventsToLog.forEach(function(e) {
v.removeEventListener(e, logEvent, false);
});
removeNodeAndSource(v);
manager.finished(v.token);
},
500);
}
var eventsToLog = ["play", "canplay", "canplaythrough", "loadstart", "loadedmetadata",
"loadeddata", "playing", "timeupdate", "error", "stalled", "emptied", "abort",
"waiting", "pause"];
function logEvent(event) {
var v = event.target;
++v.counter[event.type];
if (v.counter["ended"] > 0) {
is(v.counter[event.type], 0, v._name + " got unexpected " + event.type + " after ended");
}
}
function startTest(test, token) {
var type = getMajorMimeType(test.type);
var v = document.createElement(type);
v.token = token;
manager.started(token);
v.src = test.name;
v._name = test.name;
// Keep how many events received for each event type.
v.counter = {};
eventsToLog.forEach(function(e) {
v.addEventListener(e, logEvent, false);
v.counter[e] = 0;
});
v.addEventListener("ended", ended, false);
v.counter["ended"] = 0;
document.body.appendChild(v);
v.play();
}
manager.runTests(gSmallTests, startTest);
</script>
</pre>
</body>
</html>
|