Bug 991981 - new DataView() index handling test. r=sfink
authorJeff Walden <jwalden@mit.edu>
Tue, 08 Apr 2014 17:06:50 -0700
changeset 233281 a91412e045d946f0835a73db9f1c84ef1c6273f2
parent 233280 84db6506625e65d2bbd8b10f267b10b0166313f1
child 233282 17e0e70a8b5458d39156aa1c475a5054bfd7719b
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 - new DataView() index handling test. r=sfink
js/src/tests/ecma_6/extensions/DataView-construct-arguments-neutering.js
new file mode 100644
--- /dev/null
+++ b/js/src/tests/ecma_6/extensions/DataView-construct-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 = "DataView-construct-arguments-neutering.js";
+//-----------------------------------------------------------------------------
+var BUGNUMBER = 991981;
+var summary =
+  "new DataView(...) shouldn't misbehave horribly if index-argument " +
+  "conversion neuters the ArrayBuffer to be viewed";
+
+print(BUGNUMBER + ": " + summary);
+
+/**************
+ * BEGIN TEST *
+ **************/
+
+function testByteOffset(dataType)
+{
+  var ab = new ArrayBuffer(0x1000);
+
+  var start =
+    {
+      valueOf: function()
+      {
+        neuter(ab, dataType);
+        gc();
+        return 0x800;
+      }
+    };
+
+  var ok = false;
+  try
+  {
+    new DataView(ab, start);
+  }
+  catch (e)
+  {
+    ok = true;
+  }
+  assertEq(ok, true, "byteOffset weirdness should have thrown");
+  assertEq(ab.byteLength, 0, "neutering should work for byteOffset weirdness");
+}
+testByteOffset("change-data");
+testByteOffset("same-data");
+
+function testByteLength(dataType)
+{
+  var ab = new ArrayBuffer(0x1000);
+
+  var len =
+    {
+      valueOf: function()
+      {
+        neuter(ab, dataType);
+        gc();
+        return 0x800;
+      }
+    };
+
+  var ok = false;
+  try
+  {
+    new DataView(ab, 0x800, len);
+  }
+  catch (e)
+  {
+    ok = true;
+  }
+  assertEq(ok, true, "byteLength weirdness should have thrown");
+  assertEq(ab.byteLength, 0, "neutering should work for byteLength weirdness");
+}
+testByteLength("change-data");
+testByteLength("same-data");
+
+/******************************************************************************/
+
+if (typeof reportCompare === "function")
+  reportCompare(true, true);
+
+print("Tests complete");