Bug 991981 - new DataView() index handling test. r=sfink
authorJeff Walden <jwalden@mit.edu>
Tue, 08 Apr 2014 17:06:50 -0700
changeset 234601 a91412e045d946f0835a73db9f1c84ef1c6273f2
parent 234600 84db6506625e65d2bbd8b10f267b10b0166313f1
child 234602 17e0e70a8b5458d39156aa1c475a5054bfd7719b
push id611
push userraliiev@mozilla.com
push dateMon, 05 Jan 2015 23:23:16 +0000
treeherdermozilla-release@345cd3b9c445 [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");