mirror of https://github.com/tc39/test262.git
Add tests for recursively calling IteratorHelper generators
This commit is contained in:
parent
8a7b686502
commit
e273cd470a
39
test/built-ins/Iterator/prototype/drop/throws-typeerror-when-generator-is-running.js
vendored
Normal file
39
test/built-ins/Iterator/prototype/drop/throws-typeerror-when-generator-is-running.js
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
// Copyright (C) 2023 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-iteratorprototype.drop
|
||||||
|
description: >
|
||||||
|
Throws a TypeError when the closure generator is already running.
|
||||||
|
info: |
|
||||||
|
%IteratorHelperPrototype%.next ( )
|
||||||
|
1. Return ? GeneratorResume(this value, undefined, "Iterator Helper").
|
||||||
|
|
||||||
|
27.5.3.3 GeneratorResume ( generator, value, generatorBrand )
|
||||||
|
1. Let state be ? GeneratorValidate(generator, generatorBrand).
|
||||||
|
...
|
||||||
|
|
||||||
|
27.5.3.2 GeneratorValidate ( generator, generatorBrand )
|
||||||
|
...
|
||||||
|
6. If state is executing, throw a TypeError exception.
|
||||||
|
...
|
||||||
|
|
||||||
|
features: [iterator-helpers]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var enterCount = 0;
|
||||||
|
|
||||||
|
class TestIterator extends Iterator {
|
||||||
|
next() {
|
||||||
|
enterCount++;
|
||||||
|
iter.next();
|
||||||
|
return {done: false};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var iter = new TestIterator().drop(100);
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
iter.next();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.sameValue(enterCount, 1);
|
46
test/built-ins/Iterator/prototype/filter/throws-typeerror-when-generator-is-running.js
vendored
Normal file
46
test/built-ins/Iterator/prototype/filter/throws-typeerror-when-generator-is-running.js
vendored
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
// Copyright (C) 2023 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-iteratorprototype.filter
|
||||||
|
description: >
|
||||||
|
Throws a TypeError when the closure generator is already running.
|
||||||
|
info: |
|
||||||
|
%IteratorHelperPrototype%.next ( )
|
||||||
|
1. Return ? GeneratorResume(this value, undefined, "Iterator Helper").
|
||||||
|
|
||||||
|
27.5.3.3 GeneratorResume ( generator, value, generatorBrand )
|
||||||
|
1. Let state be ? GeneratorValidate(generator, generatorBrand).
|
||||||
|
...
|
||||||
|
|
||||||
|
27.5.3.2 GeneratorValidate ( generator, generatorBrand )
|
||||||
|
...
|
||||||
|
6. If state is executing, throw a TypeError exception.
|
||||||
|
...
|
||||||
|
|
||||||
|
features: [iterator-helpers]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var loopCount = 0;
|
||||||
|
|
||||||
|
function* g() {
|
||||||
|
while (true) {
|
||||||
|
loopCount++;
|
||||||
|
yield;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var enterCount = 0;
|
||||||
|
|
||||||
|
function predicate() {
|
||||||
|
enterCount++;
|
||||||
|
iter.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
var iter = g().filter(predicate);
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
iter.next();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.sameValue(loopCount, 1);
|
||||||
|
assert.sameValue(enterCount, 1);
|
46
test/built-ins/Iterator/prototype/flatMap/throws-typeerror-when-generator-is-running.js
vendored
Normal file
46
test/built-ins/Iterator/prototype/flatMap/throws-typeerror-when-generator-is-running.js
vendored
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
// Copyright (C) 2023 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-iteratorprototype.flatmap
|
||||||
|
description: >
|
||||||
|
Throws a TypeError when the closure generator is already running.
|
||||||
|
info: |
|
||||||
|
%IteratorHelperPrototype%.next ( )
|
||||||
|
1. Return ? GeneratorResume(this value, undefined, "Iterator Helper").
|
||||||
|
|
||||||
|
27.5.3.3 GeneratorResume ( generator, value, generatorBrand )
|
||||||
|
1. Let state be ? GeneratorValidate(generator, generatorBrand).
|
||||||
|
...
|
||||||
|
|
||||||
|
27.5.3.2 GeneratorValidate ( generator, generatorBrand )
|
||||||
|
...
|
||||||
|
6. If state is executing, throw a TypeError exception.
|
||||||
|
...
|
||||||
|
|
||||||
|
features: [iterator-helpers]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var loopCount = 0;
|
||||||
|
|
||||||
|
function* g() {
|
||||||
|
while (true) {
|
||||||
|
loopCount++;
|
||||||
|
yield;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var enterCount = 0;
|
||||||
|
|
||||||
|
function mapper() {
|
||||||
|
enterCount++;
|
||||||
|
iter.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
var iter = g().flatMap(mapper);
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
iter.next();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.sameValue(loopCount, 1);
|
||||||
|
assert.sameValue(enterCount, 1);
|
46
test/built-ins/Iterator/prototype/map/throws-typeerror-when-generator-is-running.js
vendored
Normal file
46
test/built-ins/Iterator/prototype/map/throws-typeerror-when-generator-is-running.js
vendored
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
// Copyright (C) 2023 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-iteratorprototype.map
|
||||||
|
description: >
|
||||||
|
Throws a TypeError when the closure generator is already running.
|
||||||
|
info: |
|
||||||
|
%IteratorHelperPrototype%.next ( )
|
||||||
|
1. Return ? GeneratorResume(this value, undefined, "Iterator Helper").
|
||||||
|
|
||||||
|
27.5.3.3 GeneratorResume ( generator, value, generatorBrand )
|
||||||
|
1. Let state be ? GeneratorValidate(generator, generatorBrand).
|
||||||
|
...
|
||||||
|
|
||||||
|
27.5.3.2 GeneratorValidate ( generator, generatorBrand )
|
||||||
|
...
|
||||||
|
6. If state is executing, throw a TypeError exception.
|
||||||
|
...
|
||||||
|
|
||||||
|
features: [iterator-helpers]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var loopCount = 0;
|
||||||
|
|
||||||
|
function* g() {
|
||||||
|
while (true) {
|
||||||
|
loopCount++;
|
||||||
|
yield;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var enterCount = 0;
|
||||||
|
|
||||||
|
function mapper() {
|
||||||
|
enterCount++;
|
||||||
|
iter.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
var iter = g().map(mapper);
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
iter.next();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.sameValue(loopCount, 1);
|
||||||
|
assert.sameValue(enterCount, 1);
|
39
test/built-ins/Iterator/prototype/take/throws-typeerror-when-generator-is-running.js
vendored
Normal file
39
test/built-ins/Iterator/prototype/take/throws-typeerror-when-generator-is-running.js
vendored
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
// Copyright (C) 2023 André Bargull. All rights reserved.
|
||||||
|
// This code is governed by the BSD license found in the LICENSE file.
|
||||||
|
/*---
|
||||||
|
esid: sec-iteratorprototype.take
|
||||||
|
description: >
|
||||||
|
Throws a TypeError when the closure generator is already running.
|
||||||
|
info: |
|
||||||
|
%IteratorHelperPrototype%.next ( )
|
||||||
|
1. Return ? GeneratorResume(this value, undefined, "Iterator Helper").
|
||||||
|
|
||||||
|
27.5.3.3 GeneratorResume ( generator, value, generatorBrand )
|
||||||
|
1. Let state be ? GeneratorValidate(generator, generatorBrand).
|
||||||
|
...
|
||||||
|
|
||||||
|
27.5.3.2 GeneratorValidate ( generator, generatorBrand )
|
||||||
|
...
|
||||||
|
6. If state is executing, throw a TypeError exception.
|
||||||
|
...
|
||||||
|
|
||||||
|
features: [iterator-helpers]
|
||||||
|
---*/
|
||||||
|
|
||||||
|
var enterCount = 0;
|
||||||
|
|
||||||
|
class TestIterator extends Iterator {
|
||||||
|
next() {
|
||||||
|
enterCount++;
|
||||||
|
iter.next();
|
||||||
|
return {done: false};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var iter = new TestIterator().take(100);
|
||||||
|
|
||||||
|
assert.throws(TypeError, function() {
|
||||||
|
iter.next();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.sameValue(enterCount, 1);
|
Loading…
Reference in New Issue