js/src/tests/ecma_6/Generators/delegating-yield-6.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Test that each yield* loop just checks "done", and "value" is only
     2 // fetched once at the end.
     4 var log = "";
     6 function collect_results(iter) {
     7     var ret = [];
     8     var result;
     9     do {
    10         result = iter.next();
    11         ret.push(result);
    12     } while (!result.done);
    13     return ret;
    14 }
    16 function Iter(val, count) {
    17     function next() {
    18         log += 'n';
    19         return {
    20             get done() { log += "d"; return count-- == 0; },
    21             get value() { log += "v"; return val; }
    22         }
    23     }
    25     function iterator() {
    26         log += 'i';
    27         return this;
    28     }
    30     this.next = next;
    31     this[std_iterator] = iterator;
    32 }
    34 function* delegate(iter) { return yield* iter; }
    36 var inner = new Iter(42, 5);
    37 var outer = delegate(inner);
    39 // Five values, and one terminal value.
    40 outer.next();
    41 outer.next();
    42 outer.next();
    43 outer.next();
    44 outer.next();
    45 outer.next();
    47 assertEq(log, "indndndndndndv");
    49 // Outer's dead, man.  Outer's dead.
    50 assertDeepEq(outer.next(), {value: undefined, done: true});
    52 // No more checking the iterator.
    53 assertEq(log, "indndndndndndv");
    55 if (typeof reportCompare == "function")
    56     reportCompare(true, true);

mercurial