tor-browser

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

async-eval-state.js (4807B)


      1 // Test module fields related to asynchronous evaluation.
      2 
      3 const UNSET = -1;
      4 const DONE = -2;
      5 
      6 {
      7  let m = parseModule('');
      8  assertEq(m.status, "New");
      9 
     10  moduleLink(m);
     11  assertEq(m.asyncEvaluationOrder, UNSET);
     12  assertEq(m.status, "Linked");
     13 
     14  moduleEvaluate(m);
     15  assertEq(m.asyncEvaluationOrder, UNSET);
     16  assertEq(m.status, "Evaluated");
     17 }
     18 
     19 {
     20  let m = parseModule('await 1;');
     21 
     22  moduleLink(m);
     23  assertEq(m.asyncEvaluationOrder, UNSET);
     24 
     25  moduleEvaluate(m);
     26  assertEq(m.status, "EvaluatingAsync");
     27  assertEq(m.asyncEvaluationOrder, 0);
     28 
     29  drainJobQueue();
     30  assertEq(m.status, "Evaluated");
     31  assertEq(m.asyncEvaluationOrder, DONE);
     32 }
     33 
     34 {
     35  let m = parseModule('await 1; throw 2;');
     36 
     37  moduleLink(m);
     38  moduleEvaluate(m).catch(() => 0);
     39  assertEq(m.status, "EvaluatingAsync");
     40  assertEq(m.asyncEvaluationOrder, 0);
     41 
     42  drainJobQueue();
     43  assertEq(m.status, "Evaluated");
     44  assertEq(m.evaluationError, 2);
     45  assertEq(m.asyncEvaluationOrder, DONE);
     46 }
     47 
     48 {
     49  let m = parseModule('throw 1; await 2;');
     50  moduleLink(m);
     51  moduleEvaluate(m).catch(() => 0);
     52  assertEq(m.status, "EvaluatingAsync");
     53  assertEq(m.asyncEvaluationOrder, 0);
     54 
     55  drainJobQueue();
     56  assertEq(m.status, "Evaluated");
     57  assertEq(m.evaluationError, 1);
     58  assertEq(m.asyncEvaluationOrder, DONE);
     59 }
     60 
     61 {
     62  clearModules();
     63  let a = registerModule('a', parseModule(''));
     64  let b = registerModule('b', parseModule('import {} from "a"; await 1;'));
     65 
     66  moduleLink(b);
     67  moduleEvaluate(b);
     68  assertEq(a.status, "Evaluated");
     69  assertEq(a.asyncEvaluationOrder, UNSET);
     70  assertEq(b.status, "EvaluatingAsync");
     71  assertEq(b.asyncEvaluationOrder, 0);
     72 
     73  drainJobQueue();
     74  assertEq(a.status, "Evaluated");
     75  assertEq(a.asyncEvaluationOrder, UNSET);
     76  assertEq(b.status, "Evaluated");
     77  assertEq(b.asyncEvaluationOrder, DONE);
     78 }
     79 
     80 {
     81  clearModules();
     82  let a = registerModule('a', parseModule('await 1;'));
     83  let b = registerModule('b', parseModule('import {} from "a";'));
     84 
     85  moduleLink(b);
     86  moduleEvaluate(b);
     87  assertEq(a.status, "EvaluatingAsync");
     88  assertEq(a.asyncEvaluationOrder, 0);
     89  assertEq(b.status, "EvaluatingAsync");
     90  assertEq(b.asyncEvaluationOrder, 1);
     91 
     92  drainJobQueue();
     93  assertEq(a.status, "Evaluated");
     94  assertEq(a.asyncEvaluationOrder, DONE);
     95  assertEq(b.status, "Evaluated");
     96  assertEq(b.asyncEvaluationOrder, DONE);
     97 }
     98 
     99 {
    100  clearModules();
    101  let resolve;
    102  var promise = new Promise(r => { resolve = r; });
    103  let a = registerModule('a', parseModule('await promise;'));
    104  let b = registerModule('b', parseModule('await 2;'));
    105  let c = registerModule('c', parseModule('import {} from "a"; import {} from "b";'));
    106 
    107  moduleLink(c);
    108  moduleEvaluate(c);
    109  assertEq(a.status, "EvaluatingAsync");
    110  assertEq(a.asyncEvaluationOrder, 0);
    111  assertEq(b.status, "EvaluatingAsync");
    112  assertEq(b.asyncEvaluationOrder, 1);
    113  assertEq(c.status, "EvaluatingAsync");
    114  assertEq(c.asyncEvaluationOrder, 2);
    115 
    116  resolve(1);
    117  drainJobQueue();
    118  assertEq(a.status, "Evaluated");
    119  assertEq(a.asyncEvaluationOrder, DONE);
    120  assertEq(b.status, "Evaluated");
    121  assertEq(b.asyncEvaluationOrder, DONE);
    122  assertEq(c.status, "Evaluated");
    123  assertEq(c.asyncEvaluationOrder, DONE);
    124 }
    125 
    126 {
    127  clearModules();
    128  let a = registerModule('a', parseModule('throw 1;'));
    129  let b = registerModule('b', parseModule('import {} from "a"; await 2;'));
    130 
    131  moduleLink(b);
    132  moduleEvaluate(b).catch(() => 0);
    133  assertEq(a.status, "Evaluated");
    134  assertEq(a.asyncEvaluationOrder, UNSET);
    135  assertEq(a.evaluationError, 1);
    136  assertEq(b.status, "Evaluated");
    137  assertEq(b.asyncEvaluationOrder, UNSET);
    138  assertEq(b.evaluationError, 1);
    139 }
    140 
    141 {
    142  clearModules();
    143  let a = registerModule('a', parseModule('throw 1; await 2;'));
    144  let b = registerModule('b', parseModule('import {} from "a";'));
    145 
    146  moduleLink(b);
    147  moduleEvaluate(b).catch(() => 0);
    148  assertEq(a.asyncEvaluationOrder, 0);
    149  assertEq(a.status, "EvaluatingAsync");
    150  assertEq(b.asyncEvaluationOrder, 1);
    151  assertEq(b.status, "EvaluatingAsync");
    152 
    153  drainJobQueue();
    154  assertEq(a.status, "Evaluated");
    155  assertEq(a.evaluationError, 1);
    156  assertEq(a.asyncEvaluationOrder, DONE);
    157  assertEq(b.status, "Evaluated");
    158  assertEq(b.evaluationError, 1);
    159  assertEq(b.asyncEvaluationOrder, DONE);
    160 }
    161 
    162 {
    163  clearModules();
    164  let a = registerModule('a', parseModule('await 1; throw 2;'));
    165  let b = registerModule('b', parseModule('import {} from "a";'));
    166 
    167  moduleLink(b);
    168  moduleEvaluate(b).catch(() => 0);
    169  assertEq(a.status, "EvaluatingAsync");
    170  assertEq(a.asyncEvaluationOrder, 0);
    171  assertEq(b.status, "EvaluatingAsync");
    172  assertEq(b.asyncEvaluationOrder, 1);
    173 
    174  drainJobQueue();
    175  assertEq(a.status, "Evaluated");
    176  assertEq(a.evaluationError, 2);
    177  assertEq(a.asyncEvaluationOrder, DONE);
    178  assertEq(b.status, "Evaluated");
    179  assertEq(b.evaluationError, 2);
    180  assertEq(b.asyncEvaluationOrder, DONE);
    181 }