Bug 1301675 - Fix track cloning test. r?jib draft
authorAndreas Pehrson <pehrsons@gmail.com>
Tue, 20 Sep 2016 10:18:47 +0200
changeset 432225 11971e42360744708d6f83b1d10d929ba423a3a8
parent 432224 6f5dceb22005c3668a8ed6fa9dd8dde3304fd47b
child 432226 739622231d238286cbb7f0da02264226bf69a870
push id34235
push userbmo:pehrson@telenordigital.com
push dateTue, 01 Nov 2016 13:40:03 +0000
reviewersjib
bugs1301675
milestone52.0a1
Bug 1301675 - Fix track cloning test. r?jib It relied on track.stop() not working for MediaStreamAudioDestinationNode tracks. MozReview-Commit-ID: 1E53JpzAiMs
dom/media/tests/mochitest/test_getUserMedia_mediaStreamTrackClone.html
--- a/dom/media/tests/mochitest/test_getUserMedia_mediaStreamTrackClone.html
+++ b/dom/media/tests/mochitest/test_getUserMedia_mediaStreamTrackClone.html
@@ -89,54 +89,16 @@
       var audioTrack1kOriginal = osc1kOriginal.getTracks()[0];
       var audioTrack1kClone = audioTrack1kOriginal.clone();
 
       var osc5kOriginal = createOscillatorStream(ac, 5000);
       var audioTrack5kOriginal = osc5kOriginal.getTracks()[0];
       var audioTrack5kClone = audioTrack5kOriginal.clone();
 
       return Promise.resolve().then(() => {
-        info("Analysing audio output of 1k original and 5k clone.");
-        var stream = new MediaStream();
-        stream.addTrack(audioTrack1kOriginal);
-        stream.addTrack(audioTrack5kClone);
-
-        var analyser = new AudioStreamAnalyser(ac, stream);
-        return analyser.waitForAnalysisSuccess(array =>
-                 array[analyser.binIndexForFrequency(50)] < 50 &&
-                 array[analyser.binIndexForFrequency(1000)] > 200 &&
-                 array[analyser.binIndexForFrequency(3000)] < 50 &&
-                 array[analyser.binIndexForFrequency(5000)] > 200 &&
-                 array[analyser.binIndexForFrequency(10000)] < 50)
-          .then(() => {
-            info("Waiting for original tracks to stop");
-            stream.getTracks().forEach(t => t.stop());
-            return analyser.waitForAnalysisSuccess(array =>
-                     array[analyser.binIndexForFrequency(50)] < 50 &&
-                     // WebAudioDestination streams do not handle stop()
-                     // XXX Should they? Plan to resolve that in bug 1208384.
-                     // array[analyser.binIndexForFrequency(1000)] < 50 &&
-                     array[analyser.binIndexForFrequency(3000)] < 50 &&
-                     // array[analyser.binIndexForFrequency(5000)] < 50 &&
-                     array[analyser.binIndexForFrequency(10000)] < 50);
-          }).then(() => analyser.disconnect());
-      }).then(() => {
-        info("Analysing audio output of clones of clones (1kx2 + 5kx5)");
-        var stream = new MediaStream([audioTrack1kClone.clone(),
-                                      audioTrack5kClone.clone().clone().clone().clone()]);
-
-        var analyser = new AudioStreamAnalyser(ac, stream);
-        return analyser.waitForAnalysisSuccess(array =>
-                 array[analyser.binIndexForFrequency(50)] < 50 &&
-                 array[analyser.binIndexForFrequency(1000)] > 200 &&
-                 array[analyser.binIndexForFrequency(3000)] < 50 &&
-                 array[analyser.binIndexForFrequency(5000)] > 200 &&
-                 array[analyser.binIndexForFrequency(10000)] < 50)
-          .then(() => analyser.disconnect());
-      }).then(() => {
         info("Analysing audio output enabled and disabled tracks that don't affect each other");
         audioTrack1kOriginal.enabled = true;
         audioTrack5kOriginal.enabled = false;
 
         audioTrack1kClone.enabled = false;
         audioTrack5kClone.enabled = true;
 
         var analyser =
@@ -159,14 +121,50 @@
                      array[cloneAnalyser.binIndexForFrequency(10000)] < 50)
               .then(() => cloneAnalyser.disconnect());
           })
           // Restore original tracks
           .then(() => [audioTrack1kOriginal,
                        audioTrack5kOriginal,
                        audioTrack1kClone,
                        audioTrack5kClone].forEach(t => t.enabled = true));
+      }).then(() => {
+        info("Analysing audio output of 1k original and 5k clone.");
+        var stream = new MediaStream();
+        stream.addTrack(audioTrack1kOriginal);
+        stream.addTrack(audioTrack5kClone);
+
+        var analyser = new AudioStreamAnalyser(ac, stream);
+        return analyser.waitForAnalysisSuccess(array =>
+                 array[analyser.binIndexForFrequency(50)] < 50 &&
+                 array[analyser.binIndexForFrequency(1000)] > 200 &&
+                 array[analyser.binIndexForFrequency(3000)] < 50 &&
+                 array[analyser.binIndexForFrequency(5000)] > 200 &&
+                 array[analyser.binIndexForFrequency(10000)] < 50)
+          .then(() => {
+            info("Waiting for tracks to stop");
+            stream.getTracks().forEach(t => t.stop());
+            return analyser.waitForAnalysisSuccess(array =>
+                     array[analyser.binIndexForFrequency(50)] < 50 &&
+                     array[analyser.binIndexForFrequency(1000)] < 50 &&
+                     array[analyser.binIndexForFrequency(3000)] < 50 &&
+                     array[analyser.binIndexForFrequency(5000)] < 50 &&
+                     array[analyser.binIndexForFrequency(10000)] < 50);
+          }).then(() => analyser.disconnect());
+      }).then(() => {
+        info("Analysing audio output of clones of clones (1kx2 + 5kx4)");
+        var stream = new MediaStream([audioTrack1kClone.clone(),
+                                      audioTrack5kOriginal.clone().clone().clone().clone()]);
+
+        var analyser = new AudioStreamAnalyser(ac, stream);
+        return analyser.waitForAnalysisSuccess(array =>
+                 array[analyser.binIndexForFrequency(50)] < 50 &&
+                 array[analyser.binIndexForFrequency(1000)] > 200 &&
+                 array[analyser.binIndexForFrequency(3000)] < 50 &&
+                 array[analyser.binIndexForFrequency(5000)] > 200 &&
+                 array[analyser.binIndexForFrequency(10000)] < 50)
+          .then(() => analyser.disconnect());
       });
     }));
 </script>
 </pre>
 </body>
 </html>