content/media/test/test_unseekable.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/content/media/test/test_unseekable.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,101 @@
     1.4 +<!DOCTYPE HTML>
     1.5 +<html>
     1.6 +<head>
     1.7 +  <title>Media test: unseekable</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="text/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 +
    1.16 +/*
    1.17 +
    1.18 +Test that unseekable media can't be seeked. We load a media that shouldn't
    1.19 +be seekable, and play through once. While playing through we repeatedly try
    1.20 +to seek and check that nothing happens when we do. We also verify that the
    1.21 +seekable ranges are empty.
    1.22 +
    1.23 +*/
    1.24 +
    1.25 +var manager = new MediaTestManager;
    1.26 +
    1.27 +var onseeking = function(event) {
    1.28 +  var v = event.target;
    1.29 +  v.actuallySeeked = true;
    1.30 +};
    1.31 +
    1.32 +var onseeked = function(event) {
    1.33 +  var v = event.target;
    1.34 +  v.actuallySeeked = true;
    1.35 +};
    1.36 +
    1.37 +var ontimeupdate = function(event) {
    1.38 +  var v = event.target;
    1.39 +
    1.40 +  // Check that when we seek nothing happens.
    1.41 +  var t = v.currentTime;
    1.42 +  v.currentTime = v.currentTime /= 2;
    1.43 +  ok(Math.abs(t - v.currentTime) < 0.01, "Current time shouldn't change when seeking in unseekable media: " + v.name);
    1.44 +
    1.45 +  // Check that the seekable ranges are empty.
    1.46 +  is(v.seekable.length, 0, "Should have no seekable ranges in unseekable media: " + v.name);
    1.47 +};
    1.48 +
    1.49 +var onended = function(event) {
    1.50 +  var v = event.target;
    1.51 +
    1.52 +  // Remove the event listeners so that they can't run if there are any pending
    1.53 +  // events.
    1.54 +  v.removeEventListener("seeking", onseeking, false);
    1.55 +  v.removeEventListener("seeked", onseeked, false);
    1.56 +  v.removeEventListener("timeupdate", ontimeupdate, false);
    1.57 +  v.removeEventListener("ended", onended, false);
    1.58 +
    1.59 +  v.src = "";
    1.60 +  if (v.parentNode) {
    1.61 +    v.parentNode.removeChild(v);
    1.62 +  }
    1.63 +
    1.64 +  // Verify that none of the seeks we did in timeupdate actually seeked.
    1.65 +  ok(!v.actuallySeeked, "Should not be able to seek in unseekable media: " + v.name);
    1.66 +
    1.67 +  manager.finished(v.token);
    1.68 +}
    1.69 +
    1.70 +function startTest(test, token) {
    1.71 +  var v = document.createElement('video');
    1.72 +  manager.started(token);
    1.73 +  v.name = test.name;
    1.74 +  v.src = test.name;
    1.75 +  v.token = token;
    1.76 +  v.autoplay = "true";
    1.77 +  
    1.78 +  v.actuallySeeked = false;
    1.79 +  
    1.80 +  v.addEventListener("seeking", onseeking, false);
    1.81 +  v.addEventListener("seeked", onseeked, false);
    1.82 +  v.addEventListener("timeupdate", ontimeupdate, false);
    1.83 +  v.addEventListener("ended", onended, false);
    1.84 +
    1.85 +  document.body.appendChild(v);
    1.86 +}
    1.87 +
    1.88 +function canPlay(candidates) {
    1.89 +  var v = document.createElement("video");  
    1.90 +  var resources = candidates.filter(function(x){return v.canPlayType(x.type);});
    1.91 +  return (resources.length > 0);
    1.92 +}
    1.93 +
    1.94 +if (canPlay(gUnseekableTests)) {
    1.95 +  manager.runTests(gUnseekableTests, startTest);
    1.96 +} else {
    1.97 +  todo(false, "No files of supported format to test");
    1.98 +}
    1.99 +
   1.100 +
   1.101 +</script>
   1.102 +</pre>
   1.103 +</body>
   1.104 +</html>

mercurial