diff options
Diffstat (limited to 'js/src/tests/non262/Tuple/prototype/toReversed')
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); |