summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/Array/fromAsync/this-constructor.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/built-ins/Array/fromAsync/this-constructor.js')
-rw-r--r--js/src/tests/test262/built-ins/Array/fromAsync/this-constructor.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Array/fromAsync/this-constructor.js b/js/src/tests/test262/built-ins/Array/fromAsync/this-constructor.js
new file mode 100644
index 0000000000..e8c2c1948f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Array/fromAsync/this-constructor.js
@@ -0,0 +1,53 @@
+// |reftest| async
+// Copyright (C) 2023 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-array.fromasync
+description: >
+ Constructs the this-value once if asyncItems is iterable, twice if not, and
+ length and element properties are set correctly on the result
+info: |
+ 3.e. If IsConstructor(_C_) is *true*, then
+ i. Let _A_ be ? Construct(_C_).
+ ...
+ j. If _iteratorRecord_ is not *undefined*, then
+ ...
+ k. Else,
+ ...
+ iv. If IsConstructor(_C_) is *true*, then
+ 1. Let _A_ be ? Construct(_C_, « 𝔽(_len_) »).
+includes: [compareArray.js, asyncHelpers.js]
+flags: [async]
+features: [Array.fromAsync]
+---*/
+
+asyncTest(async function () {
+ const constructorCalls = [];
+
+ function MyArray(...args) {
+ constructorCalls.push(args);
+ }
+
+ let result = await Array.fromAsync.call(MyArray, [1, 2]);
+ assert(result instanceof MyArray, "result is an instance of the constructor this-value");
+ assert.sameValue(result.length, 2, "length is set on result");
+ assert.sameValue(result[0], 1, "element 0 is set on result");
+ assert.sameValue(result[1], 2, "element 1 is set on result");
+ assert.sameValue(constructorCalls.length, 1, "constructor is called once");
+ assert.compareArray(constructorCalls[0], [], "constructor is called with no arguments");
+
+ constructorCalls.splice(0); // reset
+
+ result = await Array.fromAsync.call(MyArray, {
+ length: 2,
+ 0: 1,
+ 1: 2
+ });
+ assert(result instanceof MyArray, "result is an instance of the constructor this-value");
+ assert.sameValue(result.length, 2, "length is set on result");
+ assert.sameValue(result[0], 1, "element 0 is set on result");
+ assert.sameValue(result[1], 2, "element 1 is set on result");
+ assert.sameValue(constructorCalls.length, 1, "constructor is called once");
+ assert.compareArray(constructorCalls[0], [2], "constructor is called with a length argument");
+});