tor-browser

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

onEnterFrame-async-resumption-09.js (1230B)


      1 // Resume execution of async generator when initially yielding.
      2 
      3 let g = newGlobal({newCompartment: true});
      4 let dbg = new Debugger();
      5 let gw = dbg.addDebuggee(g);
      6 
      7 g.eval(`
      8    async function* f() {
      9        await 123;
     10        return "ponies";
     11    }
     12 `);
     13 
     14 let counter = 0;
     15 let thenCalled = false;
     16 dbg.onEnterFrame = frame => {
     17    frame.onPop = completion => {
     18        if (counter++ === 0) {
     19            let genObj = completion.return.unsafeDereference();
     20 
     21            // The following call enqueues the request before it becomes
     22            // suspendedStart, that breaks the assumption in the spec,
     23            // and there's no correct interpretation.
     24            genObj.next().then(() => {
     25                thenCalled = true;
     26            });
     27        }
     28    };
     29 };
     30 
     31 let it = g.f();
     32 
     33 assertEq(counter, 1);
     34 
     35 let caught = false;
     36 try {
     37  // The async generator is already in the invalid state, and the following
     38  // call fails.
     39  it.next();
     40 } catch (e) {
     41  caught = true;
     42 }
     43 assertEq(caught, true);
     44 
     45 caught = false;
     46 try {
     47  it.throw();
     48 } catch (e) {
     49  caught = true;
     50 }
     51 assertEq(caught, true);
     52 
     53 caught = false;
     54 try {
     55  it.return();
     56 } catch (e) {
     57  caught = true;
     58 }
     59 assertEq(caught, true);
     60 
     61 drainJobQueue();
     62 
     63 assertEq(thenCalled, false);