content/media/test/test_media_selection.html

Fri, 16 Jan 2015 04:50:19 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 04:50:19 +0100
branch
TOR_BUG_9701
changeset 13
44a2da4a2ab2
permissions
-rw-r--r--

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>

mercurial