Bug 991981 - Test for ArrayBuffer.prototype.slice. r=sfink
authorJeff Walden <jwalden@mit.edu>
Tue, 08 Apr 2014 17:06:53 -0700
changeset 233282 17e0e70a8b5458d39156aa1c475a5054bfd7719b
parent 233281 a91412e045d946f0835a73db9f1c84ef1c6273f2
child 233283 0f8cc6e38a1e0f8e3985d77c3569598ef198a3b7
push id4187
push userbhearsum@mozilla.com
push dateFri, 28 Nov 2014 15:29:12 +0000
treeherdermozilla-beta@f23cc6a30c11 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssfink
bugs991981
milestone35.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 991981 - Test for ArrayBuffer.prototype.slice. r=sfink
js/src/tests/ecma_6/ArrayBuffer/browser.js
js/src/tests/ecma_6/ArrayBuffer/shell.js
js/src/tests/ecma_6/extensions/ArrayBuffer-slice-arguments-neutering.js
new file mode 100644
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/ArrayBuffer-slice-arguments-neutering.js
@@ -0,0 +1,83 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs neuter()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "ArrayBuffer-slice-arguments-neutering.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 991981;
+var summary =
+  "ArrayBuffer.prototype.slice shouldn't misbehave horribly if " +
+  "index-argument conversion neuters the ArrayBuffer being sliced";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function testStart(dataType)
+{
+  var ab = new ArrayBuffer(0x1000);
+
+  var start =
+    {
+      valueOf: function()
+      {
+        neuter(ab, dataType);
+        gc();
+        return 0x800;
+      }
+    };
+
+  var ok = false;
+  try
+  {
+    ab.slice(start);
+  }
+  catch (e)
+  {
+    ok = true;
+  }
+  assertEq(ok, true, "start weirdness should have thrown");
+  assertEq(ab.byteLength, 0, "neutering should work for start weirdness");
+}
+testStart("change-data");
+testStart("same-data");
+
+function testEnd(dataType)
+{
+  var ab = new ArrayBuffer(0x1000);
+
+  var end =
+    {
+      valueOf: function()
+      {
+        neuter(ab, dataType);
+        gc();
+        return 0x1000;
+      }
+    };
+
+  var ok = false;
+  try
+  {
+    ab.slice(0x800, end);
+  }
+  catch (e)
+  {
+    ok = true;
+  }
+  assertEq(ok, true, "byteLength weirdness should have thrown");
+  assertEq(ab.byteLength, 0, "neutering should work for byteLength weirdness");
+}
+testEnd("change-data");
+testEnd("same-data");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+  reportCompare(true, true);
+
+print("Tests complete");