123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- describe("basic switch tests", () => {
- test("string case does not match number target", () => {
- switch (1 + 2) {
- case "3":
- expect().fail();
- case 3:
- return;
- case 5:
- case 1:
- break;
- default:
- break;
- }
- expect().fail();
- });
- test("string concatenation in target", () => {
- var a = "foo";
- switch (a + "bar") {
- case 1:
- expect().fail();
- case "foobar":
- case 2:
- return;
- }
- expect().fail();
- });
- test("default", () => {
- switch (100) {
- default:
- return;
- }
- expect().fail();
- });
- test("return from switch statement", () => {
- function foo(value) {
- switch (value) {
- case 42:
- return "return from 'case 42'";
- default:
- return "return from 'default'";
- }
- }
- expect(foo(42)).toBe("return from 'case 42'");
- expect(foo(43)).toBe("return from 'default'");
- });
- test("continue from switch statement", () => {
- let i = 0;
- for (; i < 5; ++i) {
- switch (i) {
- case 0:
- continue;
- expect().fail();
- case 0:
- expect().fail();
- default:
- continue;
- expect().fail();
- }
- expect().fail();
- }
- expect(i).toBe(5);
- });
- test("default branch is not taken if more exact branch exists", () => {
- function switchTest(i) {
- let result = 0;
- switch (i) {
- case 1:
- result += 1;
- break;
- case 1:
- expect().fail();
- case 2:
- result += 2;
- default:
- result += 4;
- case 3:
- result += 8;
- break;
- case 2:
- expect().fail();
- }
- return result;
- }
- expect(switchTest(1)).toBe(1);
- expect(switchTest(2)).toBe(14);
- expect(switchTest(3)).toBe(8);
- expect(switchTest(4)).toBe(12);
- });
- });
- describe("errors", () => {
- test("syntax errors", () => {
- expect("switch () {}").not.toEval();
- expect("switch () { case 1: continue; }").not.toEval();
- expect("switch () { case 1: break doesnotexist; }").not.toEval();
- expect("label: switch () { case 1: break not_the_right_label; }").not.toEval();
- expect("label: switch () { case 1: continue label; }").not.toEval();
- expect("switch (foo) { bar }").not.toEval();
- expect("switch (foo) { default: default: }").not.toEval();
- });
- });
|