diff options
Diffstat (limited to 'js/src/tests/non262/Iterator/prototype/take')
5 files changed, 159 insertions, 0 deletions
diff --git a/js/src/tests/non262/Iterator/prototype/take/close-iterator-when-none-remaining.js b/js/src/tests/non262/Iterator/prototype/take/close-iterator-when-none-remaining.js new file mode 100644 index 0000000000..1c78db378b --- /dev/null +++ b/js/src/tests/non262/Iterator/prototype/take/close-iterator-when-none-remaining.js @@ -0,0 +1,40 @@ +// |reftest| skip-if(!this.hasOwnProperty('Iterator')) + +// +// +/*--- +esid: pending +description: %Iterator.prototype%.take closes the iterator when remaining is 0. +info: > + Iterator Helpers proposal 2.1.5.4 +features: [iterator-helpers] +---*/ + +class TestIterator extends Iterator { + next() { + return {done: false, value: 1}; + } + + closed = false; + return() { + this.closed = true; + return {done: true}; + } +} + +const iter = new TestIterator(); +const iterTake = iter.take(1); + +let result = iterTake.next(); +assertEq(result.done, false); +assertEq(result.value, 1); +assertEq(iter.closed, false); + +result = iterTake.next(); +assertEq(result.done, true); +assertEq(result.value, undefined); +assertEq(iter.closed, true); + +if (typeof reportCompare == 'function') + reportCompare(0, 0); + diff --git a/js/src/tests/non262/Iterator/prototype/take/length.js b/js/src/tests/non262/Iterator/prototype/take/length.js new file mode 100644 index 0000000000..4e5efa6cea --- /dev/null +++ b/js/src/tests/non262/Iterator/prototype/take/length.js @@ -0,0 +1,22 @@ +// |reftest| skip-if(!this.hasOwnProperty('Iterator')) +// + +/*--- +esid: pending +description: %Iterator.prototype%.take length value and descriptor. +info: > + 17 ECMAScript Standard Built-in Objects +includes: [propertyHelper.js] +features: [Symbol.iterator] +---*/ + +assertEq(Iterator.prototype.take.length, 1); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.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/Iterator/prototype/take/name.js b/js/src/tests/non262/Iterator/prototype/take/name.js new file mode 100644 index 0000000000..87f75b63dd --- /dev/null +++ b/js/src/tests/non262/Iterator/prototype/take/name.js @@ -0,0 +1,19 @@ +// |reftest| skip-if(!this.hasOwnProperty('Iterator')) +/*--- +esid: pending +description: %Iterator.prototype%.take.name value and descriptor. +info: > + 17 ECMAScript Standard Built-in Objects +features: [iterator-helpers] +---*/ + +assertEq(Iterator.prototype.take.name, 'take'); + +const propertyDescriptor = Reflect.getOwnPropertyDescriptor(Iterator.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/Iterator/prototype/take/take-more-than-available.js b/js/src/tests/non262/Iterator/prototype/take/take-more-than-available.js new file mode 100644 index 0000000000..b9d07b6122 --- /dev/null +++ b/js/src/tests/non262/Iterator/prototype/take/take-more-than-available.js @@ -0,0 +1,52 @@ +// |reftest| skip-if(!this.hasOwnProperty('Iterator')) + +// +// +/*--- +esid: pending +description: %Iterator.prototype%.take returns if the iterator is done. +info: > + Iterator Helpers proposal 2.1.5.4 + 2. Repeat, + ... + c. Let next be ? IteratorStep(iterated, lastValue). + d. If next is false, return undefined. +features: [iterator-helpers] +---*/ + +let iter = [1, 2].values().take(3); +for (const expected of [1, 2]) { + const result = iter.next(); + assertEq(result.value, expected); + assertEq(result.done, false); +} +let result = iter.next(); +assertEq(result.value, undefined); +assertEq(result.done, true); + +class TestIterator extends Iterator { + counter = 0; + next() { + return {done: ++this.counter >= 2, value: undefined}; + } + + closed = false; + return(value) { + this.closed = true; + return {done: true, value}; + } +} + +iter = new TestIterator(); +let taken = iter.take(10); +for (const value of taken) { + assertEq(value, undefined); +} +result = taken.next(); +assertEq(result.value, undefined); +assertEq(result.done, true); +assertEq(iter.counter, 2); +assertEq(iter.closed, false); + +if (typeof reportCompare == 'function') + reportCompare(0, 0); diff --git a/js/src/tests/non262/Iterator/prototype/take/take.js b/js/src/tests/non262/Iterator/prototype/take/take.js new file mode 100644 index 0000000000..d94671c664 --- /dev/null +++ b/js/src/tests/non262/Iterator/prototype/take/take.js @@ -0,0 +1,26 @@ +// |reftest| skip-if(!this.hasOwnProperty('AsyncIterator')) + +/*--- +esid: pending +description: Smoketest of %Iterator.prototype%.take. +info: > + Iterator Helpers proposal 2.1.5.4 +features: [iterator-helpers] +---*/ + +let iter = [1, 2, 3].values().take(2); + +for (const v of [1, 2]) { + let result = iter.next(); + assertEq(result.done, false); + assertEq(result.value, v); +} + +assertEq(iter.next().done, true); + +// `take`, when called without arguments, has a limit of undefined, +// which converts to 0. +assertEq(['test'].values().take().next().done, true); + +if (typeof reportCompare === 'function') + reportCompare(0, 0); |