mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-25 20:29:33 +00:00
57 lines
1.1 KiB
JavaScript
57 lines
1.1 KiB
JavaScript
// Test that each yield* loop just checks "done", and "value" is only
|
|
// fetched once at the end.
|
|
|
|
var log = "";
|
|
|
|
function collect_results(iter) {
|
|
var ret = [];
|
|
var result;
|
|
do {
|
|
result = iter.next();
|
|
ret.push(result);
|
|
} while (!result.done);
|
|
return ret;
|
|
}
|
|
|
|
function Iter(val, count) {
|
|
function next() {
|
|
log += 'n';
|
|
return {
|
|
get done() { log += "d"; return count-- == 0; },
|
|
get value() { log += "v"; return val; }
|
|
}
|
|
}
|
|
|
|
function iterator() {
|
|
log += 'i';
|
|
return this;
|
|
}
|
|
|
|
this.next = next;
|
|
this[Symbol.iterator] = iterator;
|
|
}
|
|
|
|
function* delegate(iter) { return yield* iter; }
|
|
|
|
var inner = new Iter(42, 5);
|
|
var outer = delegate(inner);
|
|
|
|
// Five values, and one terminal value.
|
|
outer.next();
|
|
outer.next();
|
|
outer.next();
|
|
outer.next();
|
|
outer.next();
|
|
outer.next();
|
|
|
|
assertEq(log, "indndndndndndv");
|
|
|
|
// Outer's dead, man. Outer's dead.
|
|
assertDeepEq(outer.next(), {value: undefined, done: true});
|
|
|
|
// No more checking the iterator.
|
|
assertEq(log, "indndndndndndv");
|
|
|
|
if (typeof reportCompare == "function")
|
|
reportCompare(true, true);
|