Bug 991981 - Test for %TypedArray%.prototype.copyWithin. r=sfink
authorJeff Walden <jwalden@mit.edu>
Tue, 08 Apr 2014 17:08:15 -0700
changeset 233279 b4c32d72735f23784bec6f544c8a5d1937fc92e6
parent 233278 fdbabd7946abf3e56d7e1ff7a4f4e20331937796
child 233280 84db6506625e65d2bbd8b10f267b10b0166313f1
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 %TypedArray%.prototype.copyWithin. r=sfink
js/src/tests/js1_8_5/extensions/typedarray-copyWithin-arguments-neutering.js
new file mode 100644
--- /dev/null
+++ b/js/src/tests/js1_8_5/extensions/typedarray-copyWithin-arguments-neutering.js
@@ -0,0 +1,115 @@
+// |reftest| skip-if(!xulRuntime.shell) -- needs neuter()
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var gTestfile = "typedarray-copyWithin-arguments-neutering.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 991981;
+var summary =
+  "%TypedArray.prototype.copyWithin shouldn't misbehave horribly if " +
+  "index-argument conversion neuters the underlying ArrayBuffer";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function testBegin(dataType)
+{
+  var ab = new ArrayBuffer(0x1000);
+
+  var begin =
+    {
+      valueOf: function()
+      {
+        neuter(ab, dataType);
+        return 0x800;
+      }
+    };
+
+  var ta = new Uint8Array(ab);
+
+  var ok = false;
+  try
+  {
+    ta.copyWithin(0, begin, 0x1000);
+  }
+  catch (e)
+  {
+    ok = true;
+  }
+  assertEq(ok, true, "start weirdness should have thrown");
+  assertEq(ab.byteLength, 0, "neutering should work for start weirdness");
+}
+testBegin("change-data");
+testBegin("same-data");
+
+function testEnd(dataType)
+{
+  var ab = new ArrayBuffer(0x1000);
+
+  var end =
+    {
+      valueOf: function()
+      {
+        neuter(ab, dataType);
+        return 0x1000;
+      }
+    };
+
+  var ta = new Uint8Array(ab);
+
+  var ok = false;
+  try
+  {
+    ta.copyWithin(0, 0x800, end);
+  }
+  catch (e)
+  {
+    ok = true;
+  }
+  assertEq(ok, true, "start weirdness should have thrown");
+  assertEq(ab.byteLength, 0, "neutering should work for start weirdness");
+}
+testEnd("change-data");
+testEnd("same-data");
+
+function testDest(dataType)
+{
+  var ab = new ArrayBuffer(0x1000);
+
+  var dest =
+    {
+      valueOf: function()
+      {
+        neuter(ab, dataType);
+        return 0;
+      }
+    };
+
+  var ta = new Uint8Array(ab);
+
+  var ok = false;
+  try
+  {
+    ta.copyWithin(dest, 0x800, 0x1000);
+  }
+  catch (e)
+  {
+    ok = true;
+  }
+  assertEq(ok, true, "start weirdness should have thrown");
+  assertEq(ab.byteLength, 0, "neutering should work for start weirdness");
+}
+testDest("change-data");
+testDest("same-data");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+  reportCompare(true, true);
+
+print("Tests complete");