1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/media/test/test_media_selection.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,139 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<head> 1.7 + <title>Media test: media selection</title> 1.8 + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.9 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 1.10 + <script type="application/javascript" src="manifest.js"></script> 1.11 +</head> 1.12 +<body> 1.13 +<pre id="test"> 1.14 +<script class="testbody" type="text/javascript"> 1.15 +var manager = new MediaTestManager; 1.16 + 1.17 +function maketest(attach_media, name, type, check_metadata) { 1.18 + return function (token) { 1.19 + var e = document.createElement('video'); 1.20 + e.preload = "metadata"; 1.21 + manager.started(token); 1.22 + var errorRun = false; 1.23 + if (check_metadata) { 1.24 + e.addEventListener('loadedmetadata', function () { 1.25 + ok(e.readyState >= HTMLMediaElement.HAVE_METADATA, 1.26 + 'test ' + token + ' readyState ' + e.readyState + ' expected >= ' + HTMLMediaElement.HAVE_METADATA); 1.27 + is(e.currentSrc.substring(e.currentSrc.length - name.length), name, 'test ' + token); 1.28 + // The load can go idle due to cache size limits 1.29 + ok(e.networkState >= HTMLMediaElement.NETWORK_IDLE, 1.30 + 'test ' + token + ' networkState = ' + e.networkState + ' expected >= ' + HTMLMediaElement.NETWORK_IDLE); 1.31 + check_metadata(e); 1.32 + e.parentNode.removeChild(e); 1.33 + manager.finished(token); 1.34 + }, false); 1.35 + } else { 1.36 + e.addEventListener('error', function(event) { 1.37 + is(errorRun, false, "error handler should run once only!"); 1.38 + errorRun = true; 1.39 + is(e.readyState, HTMLMediaElement.HAVE_NOTHING, 1.40 + 'test ' + token + ' readyState should be HAVE_NOTHING when load fails.'); 1.41 + e.parentNode.removeChild(e); 1.42 + manager.finished(token); 1.43 + }, true); 1.44 + } 1.45 + attach_media(e, name, type); 1.46 + } 1.47 +} 1.48 + 1.49 +function set_src(element, name, type) { 1.50 + element.src = name; 1.51 + document.body.appendChild(element); 1.52 +} 1.53 + 1.54 +function add_source(element, name, type) { 1.55 + do_add_source(element, name, type); 1.56 + document.body.appendChild(element); 1.57 +} 1.58 + 1.59 +function do_add_source(element, name, type) { 1.60 + var source = document.createElement('source'); 1.61 + if (type) { 1.62 + source.type = type; 1.63 + } 1.64 + source.src = name; 1.65 + element.appendChild(source); 1.66 +} 1.67 + 1.68 +function add_sources_last(element, name, type) { 1.69 + do_add_source(element, name, 'unsupported/type'); 1.70 + do_add_source(element, name, type); 1.71 + document.body.appendChild(element); 1.72 +} 1.73 + 1.74 +function add_sources_first(element, name, type) { 1.75 + do_add_source(element, name, type); 1.76 + do_add_source(element, name, 'unsupported/type'); 1.77 + document.body.appendChild(element); 1.78 +} 1.79 + 1.80 +function late_add_sources_last(element, name, type) { 1.81 + document.body.appendChild(element); 1.82 + do_add_source(element, name, 'unsupported/type'); 1.83 + do_add_source(element, name, type); 1.84 +} 1.85 + 1.86 +function late_add_sources_first(element, name, type) { 1.87 + document.body.appendChild(element); 1.88 + do_add_source(element, name, type); 1.89 + do_add_source(element, name, 'unsupported/type'); 1.90 +} 1.91 + 1.92 +var nextTest = 0; 1.93 +var subtests = [ 1.94 + maketest(add_source, 'unknown.raw', 'bogus/type', null) 1.95 +]; 1.96 + 1.97 +var tmpVid = document.createElement('video'); 1.98 + 1.99 +for (var i = 0; i < gSmallTests.length; ++i) { 1.100 + var test = gSmallTests[i]; 1.101 + var src = test.name; 1.102 + var type = test.type; 1.103 + 1.104 + if (!tmpVid.canPlayType(type)) 1.105 + continue; 1.106 + 1.107 + // The following nested function hack is to ensure that 'test' is correctly 1.108 + // captured in the closure and we don't end up getting the value 'test' 1.109 + // had in the last iteration of the loop. I blame Brendan. 1.110 + var check = function(test) { return function (e) { 1.111 + checkMetadata(test.name, e, test); 1.112 + }}(test); 1.113 + 1.114 + var otherType = type.match(/^video\//) ? "audio/x-wav" : "video/ogg"; 1.115 + subtests.push(maketest(set_src, src, null, check), 1.116 + maketest(add_source, src, null, check), 1.117 + maketest(add_source, src, type, check), 1.118 + maketest(add_sources_last, src, null, check), 1.119 + maketest(add_sources_first, src, type, check), 1.120 + 1.121 + // type hint matches a decoder, actual type matches different decoder 1.122 + maketest(add_source, src, otherType, check), 1.123 + maketest(add_source, 'unknown.raw', type, null), 1.124 + 1.125 + // should not start loading, type excludes it from media candiate list 1.126 + maketest(add_source, src, 'bogus/type', null), 1.127 + 1.128 + // element doesn't notice source children attached later, needs bug 462455 fixed 1.129 + maketest(late_add_sources_last, src, type, check), 1.130 + maketest(late_add_sources_first, src, type, check)); 1.131 +} 1.132 + 1.133 +function startTest(test, token) { 1.134 + test(token); 1.135 +} 1.136 + 1.137 +manager.runTests(subtests, startTest); 1.138 + 1.139 +</script> 1.140 +</pre> 1.141 +</body> 1.142 +</html>