Bug 1424271 - convert mochitest test_AudioBuffer.html to a web-platform-test r?padenot draft
authorp1509425
Fri, 05 Jan 2018 11:36:02 +0100
changeset 717075 56c11e4864583383d58be0ac25aed06a141ac7f8
parent 717074 2b384edb6192a2c722e6d5f327f324f0c46c0ac1
child 717076 27e9d61fc53d0abea1f4ad1c003d1e690692284b
push id94557
push userbmo:alan.guyoch@gmail.com
push dateMon, 08 Jan 2018 07:50:18 +0000
reviewerspadenot
bugs1424271
milestone59.0a1
Bug 1424271 - convert mochitest test_AudioBuffer.html to a web-platform-test r?padenot MozReview-Commit-ID: DkLtvA9o8P4
testing/web-platform/meta/MANIFEST.json
testing/web-platform/tests/webaudio/the-audio-api/the-audiobuffer-interface/test_AudioBuffer.html
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -348534,16 +348534,22 @@
     ]
    ],
    "webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html": [
     [
      "/webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html",
      {}
     ]
    ],
+   "webaudio/the-audio-api/the-audiobuffer-interface/test_AudioBuffer.html": [
+    [
+     "/webaudio/the-audio-api/the-audiobuffer-interface/test_AudioBuffer.html",
+     {}
+    ]
+   ],
    "webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html": [
     [
      "/webaudio/the-audio-api/the-audiodestinationnode-interface/idl-test.html",
      {}
     ]
    ],
    "webaudio/the-audio-api/the-audionode-interface/audionode-connect-return-value.html": [
     [
@@ -576419,16 +576425,20 @@
   "webaudio/the-audio-api/the-audiobuffer-interface/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webaudio/the-audio-api/the-audiobuffer-interface/idl-test.html": [
    "0ef05c242d8f987d521c0e9ce474d0f9a46bee28",
    "testharness"
   ],
+  "webaudio/the-audio-api/the-audiobuffer-interface/test_AudioBuffer.html": [
+   "fada10a5450afbb433511f4e968f76447f7e98a4",
+   "testharness"
+  ],
   "webaudio/the-audio-api/the-audiobuffersourcenode-interface/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webaudio/the-audio-api/the-audiocontext-interface/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webaudio/the-audio-api/the-audiobuffer-interface/test_AudioBuffer.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <script src="/resources/testharness.js"></script>
+  <script src="/resources/testharnessreport.js"></script>
+  <script>
+var t = async_test();
+var context = new AudioContext();
+var buffer = context.createBuffer(2, 2048, context.sampleRate);
+//SpecialPowers.gc(); // Make sure that our channels are accessible after GC
+assert_not_equals(buffer, null, "Buffer was allocated successfully");
+assert_equals(buffer.sampleRate, context.sampleRate, "Correct sample rate");
+assert_equals(buffer.length, 2048, "Correct length");
+assert_true(
+  Math.abs(buffer.duration - 2048 / context.sampleRate) < 0.0001,
+  "Correct duration"
+);
+assert_equals(buffer.numberOfChannels, 2, "Correct number of channels");
+for (var i = 0; i < buffer.numberOfChannels; ++i) {
+  var buf = buffer.getChannelData(i);
+  assert_not_equals(buf, null, "Buffer index " + i + " exists");
+  assert_true(buf instanceof Float32Array, "Result is a typed array");
+  assert_equals(buf.length, buffer.length, "Correct length");
+  var foundNonZero = false;
+  for (var j = 0; j < buf.length; ++j) {
+    if (buf[j] != 0) {
+      foundNonZero = true;
+      break;
+    }
+    buf[j] = j;
+  }
+  assert_true(!foundNonZero, "Buffer " + i + " should be initialized to 0");
+}
+
+// Now test copying the channel data out of a normal buffer
+var copy = new Float32Array(100);
+buffer.copyFromChannel(copy, 0, 1024);
+for (var i = 0; i < copy.length; ++i) {
+  assert_equals(copy[i], 1024 + i, "Correct sample");
+}
+
+// Test copying the channel data out of a playing buffer
+var srcNode = context.createBufferSource();
+srcNode.buffer = buffer;
+srcNode.start(0);
+copy = new Float32Array(100);
+buffer.copyFromChannel(copy, 0, 1024);
+for (var i = 0; i < copy.length; ++i) {
+  assert_equals(copy[i], 1024 + i, "Correct sample");
+}
+
+// Test copying to the channel data
+var newData = new Float32Array(200);
+buffer.copyToChannel(newData, 0, 100);
+var changedData = buffer.getChannelData(0);
+for (var i = 0; i < changedData.length; ++i) {
+  if (i < 100 || i >= 300) {
+    assert_equals(changedData[i], i, "Untouched sample");
+  } else {
+    assert_equals(changedData[i], 0, "Correct sample");
+  }
+}
+
+// Now, detach the array buffer
+var worker = new Worker("audioBufferSourceNodeDetached_worker.js");
+var data = buffer.getChannelData(0).buffer;
+worker.postMessage(data, [data]);
+//SpecialPowers.gc();
+
+assert_throws("INDEX_SIZE_ERR", function() {
+  buffer.copyFromChannel(copy, 0, 1024);
+});
+
+assert_throws("INDEX_SIZE_ERR", function() {
+  buffer.copyToChannel(newData, 0, 100);
+});
+
+assert_throws("INDEX_SIZE_ERR", function() {
+  context.createBuffer(2, 2048, 7999);
+});
+assert_throws("INDEX_SIZE_ERR", function() {
+  context.createBuffer(2, 2048, 192001);
+});
+context.createBuffer(2, 2048, 8000); // no exception
+context.createBuffer(2, 2048, 192000); // no exception
+context.createBuffer(32, 2048, 48000); // no exception
+// Null length
+assert_throws("INDEX_SIZE_ERR", function() {
+  context.createBuffer(2, 0, 48000);
+});
+// Null number of channels
+assert_throws("INDEX_SIZE_ERR", function() {
+  context.createBuffer(0, 2048, 48000);
+});
+t.done();
+  </script>
+</head>
+</body>
+</html>