next-shenanigans.js (684B)
1 // Test for-of with iter.next and monkeypatching. 2 3 function* g(n) { for (var i=0; i<n; i++) yield i; } 4 var GeneratorObjectPrototype = Object.getPrototypeOf(g).prototype; 5 var GeneratorObjectPrototype_next = GeneratorObjectPrototype.next; 6 7 // Monkeypatch next on an iterator. 8 var inner = g(20); 9 var n = 0; 10 for (let x of inner) { 11 assertEq(x, n++); 12 if (n == 1) { 13 inner.next = function() { throw 'not reached'; }; 14 } 15 } 16 assertEq(n, 20); 17 18 // Monkeypatch next on the prototype. 19 var inner = g(20); 20 var n = 0; 21 for (let x of inner) { 22 assertEq(x, n++); 23 if (n == 1) { 24 GeneratorObjectPrototype.next = function() { throw 'not reached'; }; 25 } 26 } 27 assertEq(n, 20);