mirror of https://github.com/tc39/test262.git
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
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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;
|
||||
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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;
|
||||
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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);
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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');
|
|
@ -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…
Reference in New Issue