Fri, 16 Jan 2015 04:50:19 +0100
Replace accessor implementation with direct member state manipulation, by
request https://trac.torproject.org/projects/tor/ticket/9701#comment:32
1 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <title>Media test: media selection</title>
5 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
7 <script type="application/javascript" src="manifest.js"></script>
8 </head>
9 <body>
10 <pre id="test">
11 <script class="testbody" type="text/javascript">
12 var manager = new MediaTestManager;
14 function maketest(attach_media, name, type, check_metadata) {
15 return function (token) {
16 var e = document.createElement('video');
17 e.preload = "metadata";
18 manager.started(token);
19 var errorRun = false;
20 if (check_metadata) {
21 e.addEventListener('loadedmetadata', function () {
22 ok(e.readyState >= HTMLMediaElement.HAVE_METADATA,
23 'test ' + token + ' readyState ' + e.readyState + ' expected >= ' + HTMLMediaElement.HAVE_METADATA);
24 is(e.currentSrc.substring(e.currentSrc.length - name.length), name, 'test ' + token);
25 // The load can go idle due to cache size limits
26 ok(e.networkState >= HTMLMediaElement.NETWORK_IDLE,
27 'test ' + token + ' networkState = ' + e.networkState + ' expected >= ' + HTMLMediaElement.NETWORK_IDLE);
28 check_metadata(e);
29 e.parentNode.removeChild(e);
30 manager.finished(token);
31 }, false);
32 } else {
33 e.addEventListener('error', function(event) {
34 is(errorRun, false, "error handler should run once only!");
35 errorRun = true;
36 is(e.readyState, HTMLMediaElement.HAVE_NOTHING,
37 'test ' + token + ' readyState should be HAVE_NOTHING when load fails.');
38 e.parentNode.removeChild(e);
39 manager.finished(token);
40 }, true);
41 }
42 attach_media(e, name, type);
43 }
44 }
46 function set_src(element, name, type) {
47 element.src = name;
48 document.body.appendChild(element);
49 }
51 function add_source(element, name, type) {
52 do_add_source(element, name, type);
53 document.body.appendChild(element);
54 }
56 function do_add_source(element, name, type) {
57 var source = document.createElement('source');
58 if (type) {
59 source.type = type;
60 }
61 source.src = name;
62 element.appendChild(source);
63 }
65 function add_sources_last(element, name, type) {
66 do_add_source(element, name, 'unsupported/type');
67 do_add_source(element, name, type);
68 document.body.appendChild(element);
69 }
71 function add_sources_first(element, name, type) {
72 do_add_source(element, name, type);
73 do_add_source(element, name, 'unsupported/type');
74 document.body.appendChild(element);
75 }
77 function late_add_sources_last(element, name, type) {
78 document.body.appendChild(element);
79 do_add_source(element, name, 'unsupported/type');
80 do_add_source(element, name, type);
81 }
83 function late_add_sources_first(element, name, type) {
84 document.body.appendChild(element);
85 do_add_source(element, name, type);
86 do_add_source(element, name, 'unsupported/type');
87 }
89 var nextTest = 0;
90 var subtests = [
91 maketest(add_source, 'unknown.raw', 'bogus/type', null)
92 ];
94 var tmpVid = document.createElement('video');
96 for (var i = 0; i < gSmallTests.length; ++i) {
97 var test = gSmallTests[i];
98 var src = test.name;
99 var type = test.type;
101 if (!tmpVid.canPlayType(type))
102 continue;
104 // The following nested function hack is to ensure that 'test' is correctly
105 // captured in the closure and we don't end up getting the value 'test'
106 // had in the last iteration of the loop. I blame Brendan.
107 var check = function(test) { return function (e) {
108 checkMetadata(test.name, e, test);
109 }}(test);
111 var otherType = type.match(/^video\//) ? "audio/x-wav" : "video/ogg";
112 subtests.push(maketest(set_src, src, null, check),
113 maketest(add_source, src, null, check),
114 maketest(add_source, src, type, check),
115 maketest(add_sources_last, src, null, check),
116 maketest(add_sources_first, src, type, check),
118 // type hint matches a decoder, actual type matches different decoder
119 maketest(add_source, src, otherType, check),
120 maketest(add_source, 'unknown.raw', type, null),
122 // should not start loading, type excludes it from media candiate list
123 maketest(add_source, src, 'bogus/type', null),
125 // element doesn't notice source children attached later, needs bug 462455 fixed
126 maketest(late_add_sources_last, src, type, check),
127 maketest(late_add_sources_first, src, type, check));
128 }
130 function startTest(test, token) {
131 test(token);
132 }
134 manager.runTests(subtests, startTest);
136 </script>
137 </pre>
138 </body>
139 </html>