mirror of
https://github.com/tc39/test262.git
synced 2025-04-08 19:35:28 +02:00
Improve for..of
control flow tests
- Expand ambiguous assertion messages and assert execution paths more finely. - Improve variable names in `for..of` tests While the object created by a GeneratorFunction may be considered an "iterable", it is being used as an iterator in these tests. Naming the variable according to the way it is used improves the readability of the test body. - Add 'features' attribute to test frontmatter - Move tests - Introduce additional `for..of` control flow tests
This commit is contained in:
parent
8af82000ed
commit
3bf5652774
test/language/statements/for-of
Array.prototype.Symbol.iterator.jsArray.prototype.entries.jsArray.prototype.keys.jsarray.jsbreak-from-catch.jsbreak-from-finally.jsbreak-from-try.jsbreak-label-from-catch.jsbreak-label-from-finally.jsbreak-label-from-try.jsbreak-label.jsbreak.jscontinue-from-catch.jscontinue-from-finally.jscontinue-from-try.jscontinue-label-from-catch.jscontinue-label-from-finally.jscontinue-label-from-try.jscontinue-label.jscontinue.jsgenerator.jsgeneric-iterable.jshead-expr-obj-iterator-method.jshead-expr-primitive-iterator-method.jshead-expr-to-obj.jsiterator-as-proxy.jsiterator-next-reference.jsiterator-next-result-done-attr.jsiterator-next-result-type.jsiterator-next-result-value-attr.jsnested.jsreturn-from-catch.jsreturn-from-finally.jsreturn-from-try.jsreturn.jsthrow-from-catch.jsthrow-from-finally.jsthrow.jsyield-from-catch.jsyield-from-finally.jsyield-from-try.jsyield-star-from-catch.jsyield-star-from-finally.jsyield-star-from-try.jsyield-star.jsyield.js
@ -5,25 +5,27 @@ es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `break` statements within
|
||||
the `catch` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
i++;
|
||||
for (var x of iterator) {
|
||||
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
i++;
|
||||
break;
|
||||
$ERROR('This code is unreachable (following `break` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
30
test/language/statements/for-of/break-from-finally.js
Normal file
30
test/language/statements/for-of/break-from-finally.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `break` statements within
|
||||
`finally` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
} finally {
|
||||
i++;
|
||||
break;
|
||||
|
||||
$ERROR('This code is unreachable (following `break` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
@ -5,24 +5,25 @@ es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `break` statements within
|
||||
`try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
i++;
|
||||
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
i++;
|
||||
break;
|
||||
$ERROR('This code is unreachable.');
|
||||
|
||||
$ERROR('This code is unreachable (following `break` statement).');
|
||||
} catch (err) {}
|
||||
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
35
test/language/statements/for-of/break-label-from-catch.js
Normal file
35
test/language/statements/for-of/break-label-from-catch.js
Normal file
@ -0,0 +1,35 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `break` statements within
|
||||
`try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
outer:
|
||||
while (true) {
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
i++;
|
||||
break outer;
|
||||
$ERROR('This code is unreachable (following `break` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
34
test/language/statements/for-of/break-label-from-finally.js
Normal file
34
test/language/statements/for-of/break-label-from-finally.js
Normal file
@ -0,0 +1,34 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `break` statements within
|
||||
`try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
outer:
|
||||
while (true) {
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
} finally {
|
||||
i++;
|
||||
break outer;
|
||||
$ERROR('This code is unreachable (following `break` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
33
test/language/statements/for-of/break-label-from-try.js
Normal file
33
test/language/statements/for-of/break-label-from-try.js
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `break` statements within
|
||||
`try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
outer:
|
||||
while (true) {
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
i++;
|
||||
break outer;
|
||||
$ERROR('This code is unreachable (following `break` statement).');
|
||||
} catch (err) {}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
@ -5,24 +5,25 @@ es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor labeled `break`
|
||||
statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
outer:
|
||||
while (true) {
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
break outer;
|
||||
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `break` statement).');
|
||||
}
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
@ -4,16 +4,17 @@
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `break` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
break;
|
||||
|
11
test/language/for-of/continue-from-catch.js → test/language/statements/for-of/continue-from-catch.js
11
test/language/for-of/continue-from-catch.js → test/language/statements/for-of/continue-from-catch.js
@ -5,24 +5,27 @@ es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `continue` statements
|
||||
within the `catch` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
i++;
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
i++;
|
||||
continue;
|
||||
|
||||
$ERROR('This code is unreachable (following `continue` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 2);
|
32
test/language/statements/for-of/continue-from-finally.js
Normal file
32
test/language/statements/for-of/continue-from-finally.js
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `continue` statements
|
||||
within the `finally` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
} finally {
|
||||
i++;
|
||||
continue;
|
||||
|
||||
$ERROR('This code is unreachable (following `continue` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 2);
|
@ -5,23 +5,25 @@ es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `continue` statements
|
||||
within `try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
i++;
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
i++;
|
||||
continue;
|
||||
$ERROR('This code is unreachable.');
|
||||
|
||||
$ERROR('This code is unreachable (following `continue` statement).');
|
||||
} catch (err) {}
|
||||
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 2);
|
38
test/language/statements/for-of/continue-label-from-catch.js
Normal file
38
test/language/statements/for-of/continue-label-from-catch.js
Normal file
@ -0,0 +1,38 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `continue` statements
|
||||
within the `catch` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var iterator = values();
|
||||
var loop = true;
|
||||
var i = 0;
|
||||
|
||||
outer:
|
||||
while (loop) {
|
||||
loop = false;
|
||||
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
i++;
|
||||
continue outer;
|
||||
$ERROR('This code is unreachable (following `continue` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
@ -0,0 +1,40 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `continue` statements
|
||||
within the `finally` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var iterator = values();
|
||||
var loop = true;
|
||||
var i = 0;
|
||||
|
||||
outer:
|
||||
while (loop) {
|
||||
loop = false;
|
||||
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
} finally {
|
||||
i++;
|
||||
continue outer;
|
||||
|
||||
$ERROR('This code is unreachable (following `continue` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
35
test/language/statements/for-of/continue-label-from-try.js
Normal file
35
test/language/statements/for-of/continue-label-from-try.js
Normal file
@ -0,0 +1,35 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `continue` statements
|
||||
within `try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var iterator = values();
|
||||
var loop = true;
|
||||
var i = 0;
|
||||
|
||||
outer:
|
||||
while (loop) {
|
||||
loop = false;
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
i++;
|
||||
continue outer;
|
||||
$ERROR('This code is unreachable (following `continue` statement).');
|
||||
} catch (err) {}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statment).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||
}
|
||||
|
||||
assert.sameValue(i, 1);
|
@ -5,12 +5,13 @@ es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor labeled `continue`
|
||||
statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
var loop = true;
|
||||
|
||||
@ -18,7 +19,7 @@ outer:
|
||||
while (loop) {
|
||||
loop = false;
|
||||
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
continue outer;
|
||||
|
@ -4,16 +4,17 @@
|
||||
es6id: 13.6.4.13 S5.n
|
||||
description: >
|
||||
Control flow during body evaluation should honor `continue` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
continue;
|
||||
|
36
test/language/statements/for-of/return-from-catch.js
Normal file
36
test/language/statements/for-of/return-from-catch.js
Normal file
@ -0,0 +1,36 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `return` statements within
|
||||
the `catch` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
var result = (function() {
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
} catch(err) {
|
||||
i++;
|
||||
return 34;
|
||||
|
||||
$ERROR('This code is unreachable (following `return` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||
})();
|
||||
|
||||
assert.sameValue(result, 34);
|
||||
assert.sameValue(i, 1);
|
35
test/language/statements/for-of/return-from-finally.js
Normal file
35
test/language/statements/for-of/return-from-finally.js
Normal file
@ -0,0 +1,35 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `return` statements within
|
||||
the `finally` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
var result = (function() {
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
} finally {
|
||||
i++;
|
||||
return 34;
|
||||
|
||||
$ERROR('This code is unreachable (following `return` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||
})();
|
||||
|
||||
assert.sameValue(result, 34);
|
||||
assert.sameValue(i, 1);
|
36
test/language/statements/for-of/return-from-try.js
Normal file
36
test/language/statements/for-of/return-from-try.js
Normal file
@ -0,0 +1,36 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `return` statements within
|
||||
`try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
var result = (function() {
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
i++;
|
||||
return 34;
|
||||
|
||||
$ERROR('This code is unreachable (following `return` statement).');
|
||||
} catch(err) {
|
||||
$ERROR('This code is unreachable (within `catch` block).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||
})();
|
||||
|
||||
assert.sameValue(result, 34);
|
||||
assert.sameValue(i, 1);
|
@ -4,24 +4,25 @@
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `return` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var iterable = values();
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
|
||||
var result = (function() {
|
||||
for (var x of iterable) {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
return 34;
|
||||
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `return` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable.');
|
||||
$ERROR('This code is unreachable (following `for..of` statement).');
|
||||
})();
|
||||
|
||||
assert.sameValue(result, 34);
|
37
test/language/statements/for-of/throw-from-catch.js
Normal file
37
test/language/statements/for-of/throw-from-catch.js
Normal file
@ -0,0 +1,37 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `throw` statements within
|
||||
the `catch` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var CustomError = function() {};
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
var error = new CustomError();
|
||||
|
||||
assert.throws(CustomError, function() {
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
} catch (err) {
|
||||
i++;
|
||||
throw error;
|
||||
|
||||
$ERROR('This code is unreachable (following `throw` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||
});
|
||||
|
||||
assert.sameValue(i, 1);
|
36
test/language/statements/for-of/throw-from-finally.js
Normal file
36
test/language/statements/for-of/throw-from-finally.js
Normal file
@ -0,0 +1,36 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `throw` statements within
|
||||
the `finally` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var CustomError = function() {};
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
var error = new CustomError();
|
||||
|
||||
assert.throws(CustomError, function() {
|
||||
for (var x of iterator) {
|
||||
try {
|
||||
} finally {
|
||||
i++;
|
||||
throw error;
|
||||
|
||||
$ERROR('This code is unreachable (following `throw` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `try` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||
});
|
||||
|
||||
assert.sameValue(i, 1);
|
30
test/language/statements/for-of/throw.js
Normal file
30
test/language/statements/for-of/throw.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `throw` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
$ERROR('This code is unreachable (following `yield` statement).');
|
||||
}
|
||||
var CustomError = function() {};
|
||||
var iterator = values();
|
||||
var i = 0;
|
||||
var error = new CustomError();
|
||||
|
||||
assert.throws(CustomError, function() {
|
||||
for (var x of iterator) {
|
||||
i++;
|
||||
throw error;
|
||||
|
||||
$ERROR('This code is unreachable (following `throw` statement).');
|
||||
}
|
||||
|
||||
$ERROR('This code is unreachable (following `for..in` statement).');
|
||||
});
|
||||
|
||||
assert.sameValue(i, 1);
|
52
test/language/statements/for-of/yield-from-catch.js
Normal file
52
test/language/statements/for-of/yield-from-catch.js
Normal file
@ -0,0 +1,52 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `yield` statements within
|
||||
the `catch` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var dataIterator = values();
|
||||
var controlIterator = (function*() {
|
||||
for (var x of dataIterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
$ERROR('This code is unreachable.');
|
||||
} catch (err) {
|
||||
i++;
|
||||
yield;
|
||||
j++;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
|
||||
l++;
|
||||
})();
|
||||
var i = 0;
|
||||
var j = 0;
|
||||
var k = 0;
|
||||
var l = 0;
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Second iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Second iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Second iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||
assert.sameValue(j, 2, 'Third iteration: post-yield');
|
||||
assert.sameValue(k, 2, 'Third iteration: post-try');
|
||||
assert.sameValue(l, 1, 'Third iteration: post-for-of');
|
50
test/language/statements/for-of/yield-from-finally.js
Normal file
50
test/language/statements/for-of/yield-from-finally.js
Normal file
@ -0,0 +1,50 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `yield` statements within
|
||||
the `finally` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var dataIterator = values();
|
||||
var controlIterator = (function*() {
|
||||
for (var x of dataIterator) {
|
||||
try {
|
||||
} finally {
|
||||
i++;
|
||||
yield;
|
||||
j++;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
|
||||
l++;
|
||||
})();
|
||||
var i = 0;
|
||||
var j = 0;
|
||||
var k = 0;
|
||||
var l = 0;
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Second iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Second iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Second iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||
assert.sameValue(j, 2, 'Third iteration: post-yield');
|
||||
assert.sameValue(k, 2, 'Third iteration: post-try');
|
||||
assert.sameValue(l, 1, 'Third iteration: post-for-of');
|
49
test/language/statements/for-of/yield-from-try.js
Normal file
49
test/language/statements/for-of/yield-from-try.js
Normal file
@ -0,0 +1,49 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `yield` statements within
|
||||
`try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var dataIterator = values();
|
||||
var controlIterator = (function*() {
|
||||
for (var x of dataIterator) {
|
||||
try {
|
||||
i++;
|
||||
yield;
|
||||
j++;
|
||||
} catch (err) {}
|
||||
k++;
|
||||
}
|
||||
|
||||
l++;
|
||||
})();
|
||||
var i = 0;
|
||||
var j = 0;
|
||||
var k = 0;
|
||||
var l = 0;
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Second iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Second iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Second iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||
assert.sameValue(j, 2, 'Third iteration: post-yield');
|
||||
assert.sameValue(k, 2, 'Third iteration: post-try');
|
||||
assert.sameValue(l, 1, 'Third iteration: post-for-of');
|
64
test/language/statements/for-of/yield-star-from-catch.js
Normal file
64
test/language/statements/for-of/yield-star-from-catch.js
Normal file
@ -0,0 +1,64 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `yield *` statements
|
||||
within the `catch` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var dataIterator = values();
|
||||
var controlIterator = (function*() {
|
||||
for (var x of dataIterator) {
|
||||
try {
|
||||
throw new Error();
|
||||
$ERROR('This code is unreachable.');
|
||||
} catch (err) {
|
||||
i++;
|
||||
yield * values();
|
||||
j++;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
|
||||
l++;
|
||||
})();
|
||||
var i = 0;
|
||||
var j = 0;
|
||||
var k = 0;
|
||||
var l = 0;
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'Second iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'Second iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'Second iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Third iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Third iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Third iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Fourth iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Fourth iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Fourth iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Fourth iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Fifth iteration: pre-yield');
|
||||
assert.sameValue(j, 2, 'Fifth iteration: post-yield');
|
||||
assert.sameValue(k, 2, 'Fifth iteration: post-try');
|
||||
assert.sameValue(l, 1, 'Fifth iteration: post-for-of');
|
62
test/language/statements/for-of/yield-star-from-finally.js
Normal file
62
test/language/statements/for-of/yield-star-from-finally.js
Normal file
@ -0,0 +1,62 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `yield *` statements
|
||||
within the `finally` block of `try` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var dataIterator = values();
|
||||
var controlIterator = (function*() {
|
||||
for (var x of dataIterator) {
|
||||
try {
|
||||
} finally {
|
||||
i++;
|
||||
yield * values();
|
||||
j++;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
|
||||
l++;
|
||||
})();
|
||||
var i = 0;
|
||||
var j = 0;
|
||||
var k = 0;
|
||||
var l = 0;
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'Second iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'Second iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'Second iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Third iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Third iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Third iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Fourth iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Fourth iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Fourth iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Fourth iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Fifth iteration: pre-yield');
|
||||
assert.sameValue(j, 2, 'Fifth iteration: post-yield');
|
||||
assert.sameValue(k, 2, 'Fifth iteration: post-try');
|
||||
assert.sameValue(l, 1, 'Fifth iteration: post-for-of');
|
61
test/language/statements/for-of/yield-star-from-try.js
Normal file
61
test/language/statements/for-of/yield-star-from-try.js
Normal file
@ -0,0 +1,61 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `yield *` statements
|
||||
within `try` blocks.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var dataIterator = values();
|
||||
var controlIterator = (function*() {
|
||||
for (var x of dataIterator) {
|
||||
try {
|
||||
i++;
|
||||
yield * values();
|
||||
j++;
|
||||
} catch (err) {}
|
||||
k++;
|
||||
}
|
||||
|
||||
l++;
|
||||
})();
|
||||
var i = 0;
|
||||
var j = 0;
|
||||
var k = 0;
|
||||
var l = 0;
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'First iteration: post-try');
|
||||
assert.sameValue(l, 0, 'First iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'Second iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'Second iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'Second iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Second iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Third iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Third iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Third iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Fourth iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Fourth iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Fourth iteration: post-try');
|
||||
assert.sameValue(l, 0, 'Fourth iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Fifth iteration: pre-yield');
|
||||
assert.sameValue(j, 2, 'Fifth iteration: post-yield');
|
||||
assert.sameValue(k, 2, 'Fifth iteration: post-try');
|
||||
assert.sameValue(l, 1, 'Fifth iteration: post-for-of');
|
51
test/language/statements/for-of/yield-star.js
Normal file
51
test/language/statements/for-of/yield-star.js
Normal file
@ -0,0 +1,51 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `yield *` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var dataIterator = values();
|
||||
var controlIterator = (function*() {
|
||||
for (var x of dataIterator) {
|
||||
i++;
|
||||
yield * values();
|
||||
j++;
|
||||
}
|
||||
|
||||
k++;
|
||||
})();
|
||||
var i = 0;
|
||||
var j = 0;
|
||||
var k = 0;
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'First iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'Second iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'Second iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'Second iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Third iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'Third iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Fourth iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Fourth iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'Fourth iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Fifth iteration: pre-yield');
|
||||
assert.sameValue(j, 2, 'Fifth iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Fifth iteration: post-for-of');
|
41
test/language/statements/for-of/yield.js
Normal file
41
test/language/statements/for-of/yield.js
Normal file
@ -0,0 +1,41 @@
|
||||
// Copyright (C) 2015 the V8 project authors. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
/*---
|
||||
es6id: 13.6.4.13
|
||||
description: >
|
||||
Control flow during body evaluation should honor `yield` statements.
|
||||
features: [generators]
|
||||
---*/
|
||||
|
||||
function* values() {
|
||||
yield 1;
|
||||
yield 1;
|
||||
}
|
||||
var dataIterator = values();
|
||||
var controlIterator = (function*() {
|
||||
for (var x of dataIterator) {
|
||||
i++;
|
||||
yield;
|
||||
j++;
|
||||
}
|
||||
|
||||
k++;
|
||||
})();
|
||||
var i = 0;
|
||||
var j = 0;
|
||||
var k = 0;
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 1, 'First iteration: pre-yield');
|
||||
assert.sameValue(j, 0, 'First iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'First iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Second iteration: pre-yield');
|
||||
assert.sameValue(j, 1, 'Second iteration: post-yield');
|
||||
assert.sameValue(k, 0, 'Second iteration: post-for-of');
|
||||
|
||||
controlIterator.next();
|
||||
assert.sameValue(i, 2, 'Third iteration: pre-yield');
|
||||
assert.sameValue(j, 2, 'Third iteration: post-yield');
|
||||
assert.sameValue(k, 1, 'Third iteration: post-for-of');
|
Loading…
x
Reference in New Issue
Block a user