tor-browser

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

Frame-environment-08.js (2237B)


      1 // |jit-test| error:all-jobs-completed-successfully
      2 // Test that Debugger.Frame.prototype.environment works on suspended
      3 // async generators.
      4 
      5 load(libdir + "asserts.js");
      6 
      7 const g = newGlobal({ newCompartment: true });
      8 const dbg = new Debugger(g);
      9 
     10 g.eval(`
     11 var resolveTop;
     12 var resolveBlock;
     13 var resolveLoop;
     14 var resolveCatch;
     15 
     16 async function* f() {
     17  var promises = {
     18    top: new Promise(r => { resolveTop = r; }),
     19    block: new Promise(r => { resolveBlock = r; }),
     20    loop: new Promise(r => { resolveLoop = r; }),
     21    catch: new Promise(r => { resolveCatch = r; }),
     22  };
     23 
     24  var value = 42;
     25  await promises.top;
     26  {
     27    let block = "block";
     28    await promises.block;
     29  }
     30  for (let loop of ["loop"]) {
     31    await promises.loop;
     32  }
     33  try {
     34    throw "err";
     35  } catch (err) {
     36    await promises.catch;
     37  }
     38  return value;
     39 }
     40 `);
     41 
     42 const waitForOnPop = frame => new Promise(r => {
     43  assertEq(frame.onPop, undefined);
     44  frame.onPop = () => {
     45    frame.onPop = undefined;
     46    r();
     47  };
     48 });
     49 
     50 let frame;
     51 dbg.onEnterFrame = f => {
     52  frame = f;
     53  dbg.onEnterFrame = undefined;
     54 };
     55 
     56 (async () => {
     57  const it = g.f();
     58 
     59  assertEq(!!frame, true);
     60 
     61  let promise = it.next();
     62 
     63  assertEq(
     64    JSON.stringify(frame.environment.names()),
     65    JSON.stringify(["arguments", "promises", "value"])
     66  );
     67 
     68  //FIXME assertEq(frame.environment.getVariable("value"), 42);
     69 
     70  frame.environment.setVariable("value", 43);
     71 
     72  g.resolveTop();
     73  await waitForOnPop(frame);
     74 
     75  assertEq(
     76    JSON.stringify(frame.environment.names()),
     77    JSON.stringify(["block"])
     78  );
     79  assertEq(frame.environment.getVariable("block"), "block");
     80 
     81  g.resolveBlock();
     82  await waitForOnPop(frame);
     83 
     84  assertEq(
     85    JSON.stringify(frame.environment.names()),
     86    JSON.stringify(["loop"])
     87  );
     88  assertEq(frame.environment.getVariable("loop"), "loop");
     89 
     90  g.resolveLoop();
     91  await waitForOnPop(frame);
     92 
     93  assertEq(
     94    JSON.stringify(frame.environment.names()),
     95    JSON.stringify(["err"])
     96  );
     97  assertEq(frame.environment.getVariable("err"), "err");
     98 
     99  g.resolveCatch();
    100  const result = await promise;
    101 
    102  assertEq(result.done, true);
    103  //FIXME assertEq(result.value, 43);
    104 
    105  assertThrowsInstanceOf(() => frame.environment, Error);
    106 
    107  throw "all-jobs-completed-successfully";
    108 })();