tor-browser

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

statements.js (4725B)


      1 // |reftest| skip-if(!xulRuntime.shell)
      2 function test() {
      3 
      4 // statements
      5 
      6 assertStmt("throw 42", throwStmt(lit(42)));
      7 assertStmt("for (;;) break", forStmt(null, null, null, breakStmt(null)));
      8 assertStmt("for (x; y; z) break", forStmt(ident("x"), ident("y"), ident("z"), breakStmt(null)));
      9 assertStmt("for (var x; y; z) break", forStmt(varDecl([{ id: ident("x"), init: null }]), ident("y"), ident("z"), breakStmt(null)));
     10 assertStmt("for (var x = 42; y; z) break", forStmt(varDecl([{ id: ident("x"), init: lit(42) }]), ident("y"), ident("z"), breakStmt(null)));
     11 assertStmt("for (x; ; z) break", forStmt(ident("x"), null, ident("z"), breakStmt(null)));
     12 assertStmt("for (var x; ; z) break", forStmt(varDecl([{ id: ident("x"), init: null }]), null, ident("z"), breakStmt(null)));
     13 assertStmt("for (var x = 42; ; z) break", forStmt(varDecl([{ id: ident("x"), init: lit(42) }]), null, ident("z"), breakStmt(null)));
     14 assertStmt("for (x; y; ) break", forStmt(ident("x"), ident("y"), null, breakStmt(null)));
     15 assertStmt("for (var x; y; ) break", forStmt(varDecl([{ id: ident("x"), init: null }]), ident("y"), null, breakStmt(null)));
     16 assertStmt("for (var x = 42; y; ) break", forStmt(varDecl([{ id: ident("x"), init: lit(42) }]), ident("y"), null, breakStmt(null)));
     17 assertStmt("for (var x in y) break", forInStmt(varDecl([{ id: ident("x"), init: null }]), ident("y"), breakStmt(null)));
     18 assertStmt("for (x in y) break", forInStmt(ident("x"), ident("y"), breakStmt(null)));
     19 assertStmt("{ }", blockStmt([]));
     20 assertStmt("{ throw 1; throw 2; throw 3; }", blockStmt([ throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]));
     21 assertStmt(";", emptyStmt);
     22 assertStmt("if (foo) throw 42;", ifStmt(ident("foo"), throwStmt(lit(42)), null));
     23 assertStmt("if (foo) throw 42; else true;", ifStmt(ident("foo"), throwStmt(lit(42)), exprStmt(lit(true))));
     24 assertStmt("if (foo) { throw 1; throw 2; throw 3; }",
     25           ifStmt(ident("foo"),
     26                  blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
     27                  null));
     28 assertStmt("if (foo) { throw 1; throw 2; throw 3; } else true;",
     29           ifStmt(ident("foo"),
     30                  blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
     31                  exprStmt(lit(true))));
     32 
     33 
     34 assertStmt("foo: for(;;) break foo;", labStmt(ident("foo"), forStmt(null, null, null, breakStmt(ident("foo")))));
     35 assertStmt("foo: for(;;) continue foo;", labStmt(ident("foo"), forStmt(null, null, null, continueStmt(ident("foo")))));
     36 assertStmt("with (obj) { }", withStmt(ident("obj"), blockStmt([])));
     37 assertStmt("with (obj) { obj; }", withStmt(ident("obj"), blockStmt([exprStmt(ident("obj"))])));
     38 assertStmt("while (foo) { }", whileStmt(ident("foo"), blockStmt([])));
     39 assertStmt("while (foo) { foo; }", whileStmt(ident("foo"), blockStmt([exprStmt(ident("foo"))])));
     40 assertStmt("do { } while (foo);", doStmt(blockStmt([]), ident("foo")));
     41 assertStmt("do { foo; } while (foo)", doStmt(blockStmt([exprStmt(ident("foo"))]), ident("foo")));
     42 assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; }",
     43           switchStmt(ident("foo"),
     44                      [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
     45                        caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
     46                        defaultClause([ exprStmt(lit(3)) ]) ]));
     47 assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; case 42: 42; }",
     48           switchStmt(ident("foo"),
     49                      [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
     50                        caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
     51                        defaultClause([ exprStmt(lit(3)) ]),
     52                        caseClause(lit(42), [ exprStmt(lit(42)) ]) ]));
     53 assertStmt("try { } catch (e) { }",
     54           tryStmt(blockStmt([]),
     55 	   catchClause(ident("e"), blockStmt([])),
     56                   null));
     57 assertStmt("try { } catch (e) { } finally { }",
     58           tryStmt(blockStmt([]),
     59 	   catchClause(ident("e"), blockStmt([])),
     60                   blockStmt([])));
     61 assertStmt("try { } finally { }",
     62           tryStmt(blockStmt([]),
     63 	   null,
     64                   blockStmt([])));
     65 assertStmt("try { } catch { }",
     66           tryStmt(blockStmt([]),
     67       catchClause(null, blockStmt([])),
     68                   null));
     69 assertStmt("try { } catch { } finally { }",
     70           tryStmt(blockStmt([]),
     71       catchClause(null, blockStmt([])),
     72                   blockStmt([])));
     73 
     74 
     75 // Bug 632028: yield outside of a function should throw
     76 (function() {
     77    var threw = false;
     78    try {
     79        Reflect.parse("yield 0");
     80    } catch (expected) {
     81        threw = true;
     82    }
     83    assertEq(threw, true);
     84 })();
     85 
     86 }
     87 
     88 runtest(test);