summaryrefslogtreecommitdiffstats
path: root/js/src/tests/js1_8_5/reflect-parse/statements.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/js1_8_5/reflect-parse/statements.js')
-rw-r--r--js/src/tests/js1_8_5/reflect-parse/statements.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/js/src/tests/js1_8_5/reflect-parse/statements.js b/js/src/tests/js1_8_5/reflect-parse/statements.js
new file mode 100644
index 000000000..1df86508b
--- /dev/null
+++ b/js/src/tests/js1_8_5/reflect-parse/statements.js
@@ -0,0 +1,95 @@
+// |reftest| skip-if(!xulRuntime.shell)
+function test() {
+
+// statements
+
+assertStmt("throw 42", throwStmt(lit(42)));
+assertStmt("for (;;) break", forStmt(null, null, null, breakStmt(null)));
+assertStmt("for (x; y; z) break", forStmt(ident("x"), ident("y"), ident("z"), breakStmt(null)));
+assertStmt("for (var x; y; z) break", forStmt(varDecl([{ id: ident("x"), init: null }]), ident("y"), ident("z")));
+assertStmt("for (var x = 42; y; z) break", forStmt(varDecl([{ id: ident("x"), init: lit(42) }]), ident("y"), ident("z")));
+assertStmt("for (x; ; z) break", forStmt(ident("x"), null, ident("z"), breakStmt(null)));
+assertStmt("for (var x; ; z) break", forStmt(varDecl([{ id: ident("x"), init: null }]), null, ident("z")));
+assertStmt("for (var x = 42; ; z) break", forStmt(varDecl([{ id: ident("x"), init: lit(42) }]), null, ident("z")));
+assertStmt("for (x; y; ) break", forStmt(ident("x"), ident("y"), null, breakStmt(null)));
+assertStmt("for (var x; y; ) break", forStmt(varDecl([{ id: ident("x"), init: null }]), ident("y"), null, breakStmt(null)));
+assertStmt("for (var x = 42; y; ) break", forStmt(varDecl([{ id: ident("x"), init: lit(42) }]), ident("y"), null, breakStmt(null)));
+assertStmt("for (var x in y) break", forInStmt(varDecl([{ id: ident("x"), init: null }]), ident("y"), breakStmt(null)));
+assertStmt("for (x in y) break", forInStmt(ident("x"), ident("y"), breakStmt(null)));
+assertStmt("{ }", blockStmt([]));
+assertStmt("{ throw 1; throw 2; throw 3; }", blockStmt([ throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]));
+assertStmt(";", emptyStmt);
+assertStmt("if (foo) throw 42;", ifStmt(ident("foo"), throwStmt(lit(42)), null));
+assertStmt("if (foo) throw 42; else true;", ifStmt(ident("foo"), throwStmt(lit(42)), exprStmt(lit(true))));
+assertStmt("if (foo) { throw 1; throw 2; throw 3; }",
+ ifStmt(ident("foo"),
+ blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
+ null));
+assertStmt("if (foo) { throw 1; throw 2; throw 3; } else true;",
+ ifStmt(ident("foo"),
+ blockStmt([throwStmt(lit(1)), throwStmt(lit(2)), throwStmt(lit(3))]),
+ exprStmt(lit(true))));
+
+
+assertStmt("foo: for(;;) break foo;", labStmt(ident("foo"), forStmt(null, null, null, breakStmt(ident("foo")))));
+assertStmt("foo: for(;;) continue foo;", labStmt(ident("foo"), forStmt(null, null, null, continueStmt(ident("foo")))));
+assertStmt("with (obj) { }", withStmt(ident("obj"), blockStmt([])));
+assertStmt("with (obj) { obj; }", withStmt(ident("obj"), blockStmt([exprStmt(ident("obj"))])));
+assertStmt("while (foo) { }", whileStmt(ident("foo"), blockStmt([])));
+assertStmt("while (foo) { foo; }", whileStmt(ident("foo"), blockStmt([exprStmt(ident("foo"))])));
+assertStmt("do { } while (foo);", doStmt(blockStmt([]), ident("foo")));
+assertStmt("do { foo; } while (foo)", doStmt(blockStmt([exprStmt(ident("foo"))]), ident("foo")));
+assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; }",
+ switchStmt(ident("foo"),
+ [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
+ caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
+ defaultClause([ exprStmt(lit(3)) ]) ]));
+assertStmt("switch (foo) { case 1: 1; break; case 2: 2; break; default: 3; case 42: 42; }",
+ switchStmt(ident("foo"),
+ [ caseClause(lit(1), [ exprStmt(lit(1)), breakStmt(null) ]),
+ caseClause(lit(2), [ exprStmt(lit(2)), breakStmt(null) ]),
+ defaultClause([ exprStmt(lit(3)) ]),
+ caseClause(lit(42), [ exprStmt(lit(42)) ]) ]));
+assertStmt("try { } catch (e) { }",
+ tryStmt(blockStmt([]),
+ [],
+ catchClause(ident("e"), null, blockStmt([])),
+ null));
+assertStmt("try { } catch (e) { } finally { }",
+ tryStmt(blockStmt([]),
+ [],
+ catchClause(ident("e"), null, blockStmt([])),
+ blockStmt([])));
+assertStmt("try { } finally { }",
+ tryStmt(blockStmt([]),
+ [],
+ null,
+ blockStmt([])));
+assertStmt("try { } catch (e if foo) { } catch (e if bar) { } finally { }",
+ tryStmt(blockStmt([]),
+ [ catchClause(ident("e"), ident("foo"), blockStmt([])),
+ catchClause(ident("e"), ident("bar"), blockStmt([])) ],
+ null,
+ blockStmt([])));
+assertStmt("try { } catch (e if foo) { } catch (e if bar) { } catch (e) { } finally { }",
+ tryStmt(blockStmt([]),
+ [ catchClause(ident("e"), ident("foo"), blockStmt([])),
+ catchClause(ident("e"), ident("bar"), blockStmt([])) ],
+ catchClause(ident("e"), null, blockStmt([])),
+ blockStmt([])));
+
+
+// Bug 632028: yield outside of a function should throw
+(function() {
+ var threw = false;
+ try {
+ Reflect.parse("yield 0");
+ } catch (expected) {
+ threw = true;
+ }
+ assertEq(threw, true);
+})();
+
+}
+
+runtest(test);