Index: test/mjsunit/es6/generators-iteration.js |
diff --git a/test/mjsunit/es6/generators-iteration.js b/test/mjsunit/es6/generators-iteration.js |
index e61a7c3a9a5c8a44060ab5f380bc347c38291a19..ae4c682e7e8504c70e62dfae4b17d7ac908b3ca6 100644 |
--- a/test/mjsunit/es6/generators-iteration.js |
+++ b/test/mjsunit/es6/generators-iteration.js |
@@ -397,39 +397,17 @@ TestGenerator( |
"foo", |
[42, undefined]); |
-// Test that yield* re-yields received results without re-boxing. |
-function TestDelegatingYield() { |
- function results(results) { |
- var i = 0; |
- function next() { |
- return results[i++]; |
- } |
- var iter = { next: next }; |
- var ret = {}; |
- ret[Symbol.iterator] = function() { return iter; }; |
- return ret; |
- } |
- function* yield_results(expected) { |
- return yield* results(expected); |
- } |
- function collect_results(iterable) { |
- var iter = iterable[Symbol.iterator](); |
- var ret = []; |
- var result; |
- do { |
- result = iter.next(); |
- ret.push(result); |
- } while (!result.done); |
- return ret; |
- } |
- // We have to put a full result for the end, because the return will re-box. |
- var expected = [{value: 1}, 13, "foo", {value: 34, done: true}]; |
- |
- // Sanity check. |
- assertEquals(expected, collect_results(results(expected))); |
- assertEquals(expected, collect_results(yield_results(expected))); |
+// Test that yield* validates iterator results. |
+function TestDelegatingYield(junk) { |
+ var iterator = {next: () => junk}; |
+ var iterable = {[Symbol.iterator]: () => iterator}; |
+ function* g() { return yield* iterable }; |
+ assertThrows(() => g().next(), TypeError); |
} |
TestDelegatingYield(); |
+TestDelegatingYield(null); |
+TestDelegatingYield(42); |
+TestDelegatingYield(true); |
function TestTryCatch(instantiate) { |
function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } |
@@ -681,3 +659,16 @@ function TestRecursion() { |
assertThrows(TestThrowRecursion, Error); |
} |
TestRecursion(); |
+ |
+ |
+// Test yield* on non-iterable objects. |
+function* g(junk) { return yield* junk } |
+var non_iterables = [ |
+ 42, |
+ {[Symbol.iterator]: 42}, |
+ {[Symbol.iterator]: () => 42}, |
+ {[Symbol.iterator]: () => ({next: 42})}, |
+]; |
+for (let junk of non_iterables) { |
+ assertThrows(() => g(junk).next(), TypeError); |
+} |