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