Bug 991981 - new DataView() index handling test. r=sfink
authorJeff Walden <jwalden@mit.edu>
Tue, 08 Apr 2014 17:06:50 -0700
changeset 210066 a91412e045d946f0835a73db9f1c84ef1c6273f2
parent 210065 84db6506625e65d2bbd8b10f267b10b0166313f1
child 210067 17e0e70a8b5458d39156aa1c475a5054bfd7719b
push id1
push userroot
push dateMon, 20 Oct 2014 17:29:22 +0000
reviewerssfink
bugs991981
milestone35.0a1
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");