summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Tuple/prototype/toReversed
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/non262/Tuple/prototype/toReversed')
-rw-r--r--js/src/tests/non262/Tuple/prototype/toReversed/indexed-setters.js16
-rw-r--r--js/src/tests/non262/Tuple/prototype/toReversed/invoked-as-func.js10
-rw-r--r--js/src/tests/non262/Tuple/prototype/toReversed/invoked-as-method.js10
-rw-r--r--js/src/tests/non262/Tuple/prototype/toReversed/length.js27
-rw-r--r--js/src/tests/non262/Tuple/prototype/toReversed/this-is-not-tuple.js21
-rw-r--r--js/src/tests/non262/Tuple/prototype/toReversed/toReversed.js29
6 files changed, 113 insertions, 0 deletions
diff --git a/js/src/tests/non262/Tuple/prototype/toReversed/indexed-setters.js b/js/src/tests/non262/Tuple/prototype/toReversed/indexed-setters.js
new file mode 100644
index 0000000000..a2477d37e3
--- /dev/null
+++ b/js/src/tests/non262/Tuple/prototype/toReversed/indexed-setters.js
@@ -0,0 +1,16 @@
+// |reftest| skip-if(!this.hasOwnProperty("Tuple"))
+
+// If an indexed Array setter is overridden, TupleSplice shouldn't use it
+// when constructing the intermediate array
+
+var z = 5;
+print("1111");
+Object.defineProperty(Array.prototype, '0', { set: function(y) { z = 42; }});
+print("2222");
+let newT = #[1,2,3].toReversed();
+print("3333");
+assertEq(z, 5);
+print("4444");
+
+reportCompare(0, 0);
+
diff --git a/js/src/tests/non262/Tuple/prototype/toReversed/invoked-as-func.js b/js/src/tests/non262/Tuple/prototype/toReversed/invoked-as-func.js
new file mode 100644
index 0000000000..2e2c6facce
--- /dev/null
+++ b/js/src/tests/non262/Tuple/prototype/toReversed/invoked-as-func.js
@@ -0,0 +1,10 @@
+// |reftest| skip-if(!this.hasOwnProperty("Tuple"))
+var toReversed = Tuple.prototype.toReversed;
+
+assertEq(typeof toReversed, 'function');
+
+assertThrowsInstanceOf(function() {
+ toReversed();
+}, TypeError, "toReversed() invoked as function");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/non262/Tuple/prototype/toReversed/invoked-as-method.js b/js/src/tests/non262/Tuple/prototype/toReversed/invoked-as-method.js
new file mode 100644
index 0000000000..4014c97e4f
--- /dev/null
+++ b/js/src/tests/non262/Tuple/prototype/toReversed/invoked-as-method.js
@@ -0,0 +1,10 @@
+// |reftest| skip-if(!this.hasOwnProperty("Tuple"))
+var TuplePrototype = Tuple.prototype;
+
+assertEq(typeof TuplePrototype.toReversed, 'function');
+
+assertThrowsInstanceOf(function() {
+ TuplePrototype.toReversed();
+}, TypeError, "toReversed() invoked as method");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/non262/Tuple/prototype/toReversed/length.js b/js/src/tests/non262/Tuple/prototype/toReversed/length.js
new file mode 100644
index 0000000000..ff4d7e6114
--- /dev/null
+++ b/js/src/tests/non262/Tuple/prototype/toReversed/length.js
@@ -0,0 +1,27 @@
+// |reftest| skip-if(!this.hasOwnProperty("Tuple"))
+var desc = Object.getOwnPropertyDescriptor(Tuple.prototype.toReversed, "length");
+assertEq(desc.value, 0);
+assertEq(desc.writable, false);
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, true);
+
+
+desc = Object.getOwnPropertyDescriptor(Tuple.prototype.toReversed, "name");
+assertEq(desc.value, "toReversed");
+assertEq(desc.writable, false);
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, true);
+
+desc = Object.getOwnPropertyDescriptor(Tuple.prototype, "toReversed");
+assertEq(desc.writable, true);
+assertEq(desc.enumerable, false);
+assertEq(desc.configurable, true);
+
+assertEq(isConstructor(Tuple.prototype.toReversed), false);
+
+assertThrowsInstanceOf(() => {
+ let t = #[1];
+ new t.toReversed();
+}, TypeError, '`let t = #[1]; new t.toReversed()` throws TypeError');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/non262/Tuple/prototype/toReversed/this-is-not-tuple.js b/js/src/tests/non262/Tuple/prototype/toReversed/this-is-not-tuple.js
new file mode 100644
index 0000000000..7df6300533
--- /dev/null
+++ b/js/src/tests/non262/Tuple/prototype/toReversed/this-is-not-tuple.js
@@ -0,0 +1,21 @@
+// |reftest| skip-if(!this.hasOwnProperty("Tuple"))
+var withReversed = Tuple.prototype.withReversed;
+
+var thisVals = [[undefined, "undefined"],
+ [null, "null"],
+ [42, "42"],
+ ["1", "1"],
+ [true, "true"],
+ [false, "false"],
+ [Symbol("s"), "Symbol(\"s\")"],
+ [[], "[]"],
+ [{}, "{}"]];
+
+for (pair of thisVals) {
+ thisVal = pair[0];
+ errorMsg = "this is: " + pair[1];
+ assertThrowsInstanceOf(() => withReversed.call(thisVal),
+ TypeError, errorMsg);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/non262/Tuple/prototype/toReversed/toReversed.js b/js/src/tests/non262/Tuple/prototype/toReversed/toReversed.js
new file mode 100644
index 0000000000..2c672ef1ce
--- /dev/null
+++ b/js/src/tests/non262/Tuple/prototype/toReversed/toReversed.js
@@ -0,0 +1,29 @@
+// |reftest| skip-if(!this.hasOwnProperty("Tuple"))
+/*
+8.2.3.28 Tuple.prototype.toReversed ( )
+When the toReversed method is called, the following steps are taken:
+
+1. Let T be ? thisTupleValue(this value).
+2. Let oldList be a new List containing the elements of T.[[Sequence]].
+3. Let newList be a new empty List.
+4. Repeat, while oldList is not empty,
+a. Remove the last element from oldList, and let E be the value of the element.
+b. Append E to the end of List newList.
+5. Return a new Tuple value whose [[Sequence]] is newList.
+*/
+/* Step 1 */
+/* toReversed() should throw on a non-Tuple */
+let method = Tuple.prototype.toReversed;
+assertEq(method.call(#[1,2,3,4,5,6]), #[6,5,4,3,2,1]);
+assertEq(method.call(Object(#[1,2,3,4,5,6])), #[6,5,4,3,2,1]);
+assertThrowsInstanceOf(() => method.call("monkeys"), TypeError,
+ "value of TupleObject must be a Tuple");
+
+assertEq(#[].toReversed(), #[]);
+assertEq(#[1].toReversed(), #[1]);
+
+/* Test that length is still handled correctly if it's overridden */
+Object.defineProperty(Tuple.prototype, "length", { get() { return 0 } })
+assertEq(#[1,2,3,4,5].toReversed(), #[5,4,3,2,1]);
+
+reportCompare(0, 0);