tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

named-yield-star-async-next.js (7214B)


      1 // |reftest| async
      2 // This file was procedurally generated from the following sources:
      3 // - src/async-generators/yield-star-async-next.case
      4 // - src/async-generators/default/async-expression-named.template
      5 /*---
      6 description: Execution order for yield* with async iterator and next() (Named async generator expression)
      7 esid: prod-AsyncGeneratorExpression
      8 features: [Symbol.iterator, async-iteration, Symbol.asyncIterator]
      9 flags: [generated, async]
     10 info: |
     11    Async Generator Function Definitions
     12 
     13    AsyncGeneratorExpression :
     14      async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) {
     15        AsyncGeneratorBody }
     16 
     17 
     18    
     19 ---*/
     20 var log = [];
     21 var obj = {
     22  get [Symbol.iterator]() {
     23    log.push({ name: "get [Symbol.iterator]" });
     24  },
     25  get [Symbol.asyncIterator]() {
     26    log.push({
     27      name: "get [Symbol.asyncIterator]",
     28      thisValue: this
     29    });
     30    return function() {
     31      log.push({
     32        name: "call [Symbol.asyncIterator]",
     33        thisValue: this,
     34        args: [...arguments]
     35      });
     36      var nextCount = 0;
     37      return {
     38        name: "asyncIterator",
     39        get next() {
     40          log.push({
     41            name: "get next",
     42            thisValue: this
     43          });
     44          return function() {
     45            log.push({
     46              name: "call next",
     47              thisValue: this,
     48              args: [...arguments]
     49            });
     50 
     51            nextCount++;
     52            if (nextCount == 1) {
     53              return {
     54                name: "next-promise-1",
     55                get then() {
     56                  log.push({
     57                    name: "get next then (1)",
     58                    thisValue: this
     59                  });
     60                  return function(resolve) {
     61                    log.push({
     62                      name: "call next then (1)",
     63                      thisValue: this,
     64                      args: [...arguments]
     65                    });
     66 
     67                    resolve({
     68                      name: "next-result-1",
     69                      get value() {
     70                        log.push({
     71                          name: "get next value (1)",
     72                          thisValue: this
     73                        });
     74                        return "next-value-1";
     75                      },
     76                      get done() {
     77                        log.push({
     78                          name: "get next done (1)",
     79                          thisValue: this
     80                        });
     81                        return false;
     82                      }
     83                    });
     84                  };
     85                }
     86              };
     87            }
     88 
     89            return {
     90              name: "next-promise-2",
     91              get then() {
     92                log.push({
     93                  name: "get next then (2)",
     94                  thisValue: this
     95                });
     96                return function(resolve) {
     97                  log.push({
     98                    name: "call next then (2)",
     99                    thisValue: this,
    100                    args: [...arguments]
    101                  });
    102 
    103                  resolve({
    104                    name: "next-result-2",
    105                    get value() {
    106                      log.push({
    107                        name: "get next value (2)",
    108                        thisValue: this
    109                      });
    110                      return "next-value-2";
    111                    },
    112                    get done() {
    113                      log.push({
    114                        name: "get next done (2)",
    115                        thisValue: this
    116                      });
    117                      return true;
    118                    }
    119                  });
    120                };
    121              }
    122            };
    123          };
    124        }
    125      };
    126    };
    127  }
    128 };
    129 
    130 
    131 
    132 var callCount = 0;
    133 
    134 var gen = async function *g() {
    135  callCount += 1;
    136  log.push({ name: "before yield*" });
    137    var v = yield* obj;
    138    log.push({
    139      name: "after yield*",
    140      value: v
    141    });
    142    return "return-value";
    143 
    144 };
    145 
    146 var iter = gen();
    147 
    148 assert.sameValue(log.length, 0, "log.length");
    149 
    150 iter.next("next-arg-1").then(v => {
    151  assert.sameValue(log[0].name, "before yield*");
    152 
    153  assert.sameValue(log[1].name, "get [Symbol.asyncIterator]");
    154  assert.sameValue(log[1].thisValue, obj, "get [Symbol.asyncIterator] thisValue");
    155 
    156  assert.sameValue(log[2].name, "call [Symbol.asyncIterator]");
    157  assert.sameValue(log[2].thisValue, obj, "[Symbol.asyncIterator] thisValue");
    158  assert.sameValue(log[2].args.length, 0, "[Symbol.asyncIterator] args.length");
    159 
    160  assert.sameValue(log[3].name, "get next");
    161  assert.sameValue(log[3].thisValue.name, "asyncIterator", "get next thisValue");
    162 
    163  assert.sameValue(log[4].name, "call next");
    164  assert.sameValue(log[4].thisValue.name, "asyncIterator", "next thisValue");
    165  assert.sameValue(log[4].args.length, 1, "next args.length");
    166  assert.sameValue(log[4].args[0], undefined, "next args[0]");
    167 
    168  assert.sameValue(log[5].name, "get next then (1)");
    169  assert.sameValue(log[5].thisValue.name, "next-promise-1", "get next then thisValue");
    170 
    171  assert.sameValue(log[6].name, "call next then (1)");
    172  assert.sameValue(log[6].thisValue.name, "next-promise-1", "next then thisValue");
    173  assert.sameValue(log[6].args.length, 2, "next then args.length");
    174  assert.sameValue(typeof log[6].args[0], "function", "next then args[0]");
    175  assert.sameValue(typeof log[6].args[1], "function", "next then args[1]");
    176 
    177  assert.sameValue(log[7].name, "get next done (1)");
    178  assert.sameValue(log[7].thisValue.name, "next-result-1", "get next done thisValue");
    179 
    180  assert.sameValue(log[8].name, "get next value (1)");
    181  assert.sameValue(log[8].thisValue.name, "next-result-1", "get next value thisValue");
    182 
    183  assert.sameValue(v.value, "next-value-1");
    184  assert.sameValue(v.done, false);
    185 
    186  assert.sameValue(log.length, 9, "log.length");
    187 
    188  iter.next("next-arg-2").then(v => {
    189    assert.sameValue(log[9].name, "call next");
    190    assert.sameValue(log[9].thisValue.name, "asyncIterator", "next thisValue");
    191    assert.sameValue(log[9].args.length, 1, "next args.length");
    192    assert.sameValue(log[9].args[0], "next-arg-2", "next args[0]");
    193 
    194    assert.sameValue(log[10].name, "get next then (2)");
    195    assert.sameValue(log[10].thisValue.name, "next-promise-2", "get next then thisValue");
    196 
    197    assert.sameValue(log[11].name, "call next then (2)");
    198    assert.sameValue(log[11].thisValue.name, "next-promise-2", "next then thisValue");
    199    assert.sameValue(log[11].args.length, 2, "next then args.length");
    200    assert.sameValue(typeof log[11].args[0], "function", "next then args[0]");
    201    assert.sameValue(typeof log[11].args[1], "function", "next then args[1]");
    202 
    203    assert.sameValue(log[12].name, "get next done (2)");
    204    assert.sameValue(log[12].thisValue.name, "next-result-2", "get next done thisValue");
    205 
    206    assert.sameValue(log[13].name, "get next value (2)");
    207    assert.sameValue(log[13].thisValue.name, "next-result-2", "get next value thisValue");
    208 
    209    assert.sameValue(log[14].name, "after yield*");
    210    assert.sameValue(log[14].value, "next-value-2");
    211 
    212    assert.sameValue(v.value, "return-value");
    213    assert.sameValue(v.done, true);
    214 
    215    assert.sameValue(log.length, 15, "log.length");
    216  }).then($DONE, $DONE);
    217 }).catch($DONE);
    218 
    219 assert.sameValue(callCount, 1);