diff options
Diffstat (limited to 'js/src/tests/non262/AsyncIterator/prototype/take')
5 files changed, 142 insertions, 0 deletions
diff --git a/js/src/tests/non262/AsyncIterator/prototype/take/close-iterator-when-none-remaining.js b/js/src/tests/non262/AsyncIterator/prototype/take/close-iterator-when-none-remaining.js new file mode 100644 index 0000000000..6ae3e34b5d --- /dev/null +++ b/js/src/tests/non262/AsyncIterator/prototype/take/close-iterator-when-none-remaining.js @@ -0,0 +1,45 @@ +// |reftest| skip-if(!this.hasOwnProperty('AsyncIterator')) + +// +// +/*--- +esid: pending +description: %AsyncIterator.prototype%.take closes the iterator when remaining is 0. +info: > + Iterator Helpers proposal 2.1.6.4 +features: [iterator-helpers] +---*/ + +class TestIterator extends AsyncIterator { + async next() { + return {done: false, value: 'value'}; + } + + closed = false; + async return() { + this.closed = true; + return {done: true}; + } +} + +const iter = new TestIterator(); +const iterTake = iter.take(1); + +iterTake.next().then( + ({done, value}) => { + assertEq(done, false); + assertEq(value, 'value'); + assertEq(iter.closed, false); + + iterTake.next().then( + ({done, value}) => { + assertEq(done, true); + assertEq(value, undefined); + assertEq(iter.closed, true); + } + ); + } +); + +if (typeof reportCompare == 'function') + reportCompare(0, 0); diff --git a/js/src/tests/non262/AsyncIterator/prototype/take/length.js b/js/src/tests/non262/AsyncIterator/prototype/take/length.js new file mode 100644 index 0000000000..0daf649a58 --- /dev/null +++ b/js/src/tests/non262/AsyncIterator/prototype/take/length.js @@ -0,0 +1,21 @@ +// |reftest| skip-if(!this.hasOwnProperty('AsyncIterator')) +// + +/*--- +esid: pending +description: %AsyncIterator.prototype%.take length value and descriptor. +info: > + 17 ECMAScript Standard Built-in Objects +features: [iterator-helpers] +---*/ + +assertEq(AsyncIterator.prototype.take.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.take, 'length'); +assertEq(propertyDescriptor.value, 1); +assertEq(propertyDescriptor.enumerable, false); +assertEq(propertyDescriptor.writable, false); +assertEq(propertyDescriptor.configurable, true); + +if (typeof reportCompare == 'function') + reportCompare(0, 0); diff --git a/js/src/tests/non262/AsyncIterator/prototype/take/name.js b/js/src/tests/non262/AsyncIterator/prototype/take/name.js new file mode 100644 index 0000000000..6d126390fb --- /dev/null +++ b/js/src/tests/non262/AsyncIterator/prototype/take/name.js @@ -0,0 +1,19 @@ +// |reftest| skip-if(!this.hasOwnProperty('AsyncIterator')) +/*--- +esid: pending +description: %AsyncIterator.prototype%.take.name value and descriptor. +info: > + 17 ECMAScript Standard Built-in Objects +features: [iterator-helpers] +---*/ + +assertEq(AsyncIterator.prototype.take.name, 'take'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(AsyncIterator.prototype.take, 'name'); +assertEq(propertyDescriptor.value, 'take'); +assertEq(propertyDescriptor.enumerable, false); +assertEq(propertyDescriptor.writable, false); +assertEq(propertyDescriptor.configurable, true); + +if (typeof reportCompare == 'function') + reportCompare(0, 0); diff --git a/js/src/tests/non262/AsyncIterator/prototype/take/take-more-than-available.js b/js/src/tests/non262/AsyncIterator/prototype/take/take-more-than-available.js new file mode 100644 index 0000000000..65355704ae --- /dev/null +++ b/js/src/tests/non262/AsyncIterator/prototype/take/take-more-than-available.js @@ -0,0 +1,34 @@ +// |reftest| skip-if(!this.hasOwnProperty('AsyncIterator')) + +// +// +/*--- +esid: pending +description: %AsyncIterator.prototype%.take returns if the iterator is done. +info: > + Iterator Helpers proposal 2.1.6.4 + 2. Repeat, + ... + c. Let next be ? Await(? IteratorNext(iterated, lastValue)). + d. If ? IteratorComplete(next) is false, return undefined. +features: [iterator-helpers] +---*/ + +async function* gen(values) { + yield* values; +} + +(async () => { + const iter = gen([1, 2]).take(10); + for (const expected of [1, 2]) { + const result = await iter.next(); + assertEq(result.value, expected); + assertEq(result.done, false); + } + const result = await iter.next(); + assertEq(result.value, undefined); + assertEq(result.done, true); +})(); + +if (typeof reportCompare == 'function') + reportCompare(0, 0); diff --git a/js/src/tests/non262/AsyncIterator/prototype/take/take.js b/js/src/tests/non262/AsyncIterator/prototype/take/take.js new file mode 100644 index 0000000000..a734da8c2c --- /dev/null +++ b/js/src/tests/non262/AsyncIterator/prototype/take/take.js @@ -0,0 +1,23 @@ +// |reftest| skip-if(!this.hasOwnProperty('AsyncIterator')) + +async function* gen() { + yield 1; + yield 2; + yield 3; +} + +let iter = gen().take(2); + +for (const v of [1, 2]) { + iter.next().then( + ({done, value}) => { + assertEq(done, false); + assertEq(value, v); + } + ); +} + +iter.next().then(({done}) => assertEq(done, true)); + +if (typeof reportCompare === 'function') + reportCompare(0, 0); |