Serenity Operating System
at master 110 lines 3.0 kB view raw
1describe("basic switch tests", () => { 2 test("string case does not match number target", () => { 3 switch (1 + 2) { 4 case "3": 5 expect().fail(); 6 case 3: 7 return; 8 case 5: 9 case 1: 10 break; 11 default: 12 break; 13 } 14 15 expect().fail(); 16 }); 17 18 test("string concatenation in target", () => { 19 var a = "foo"; 20 21 switch (a + "bar") { 22 case 1: 23 expect().fail(); 24 case "foobar": 25 case 2: 26 return; 27 } 28 expect().fail(); 29 }); 30 31 test("default", () => { 32 switch (100) { 33 default: 34 return; 35 } 36 37 expect().fail(); 38 }); 39 40 test("return from switch statement", () => { 41 function foo(value) { 42 switch (value) { 43 case 42: 44 return "return from 'case 42'"; 45 default: 46 return "return from 'default'"; 47 } 48 } 49 expect(foo(42)).toBe("return from 'case 42'"); 50 expect(foo(43)).toBe("return from 'default'"); 51 }); 52 53 test("continue from switch statement", () => { 54 let i = 0; 55 for (; i < 5; ++i) { 56 switch (i) { 57 case 0: 58 continue; 59 expect().fail(); 60 case 0: 61 expect().fail(); 62 default: 63 continue; 64 expect().fail(); 65 } 66 expect().fail(); 67 } 68 expect(i).toBe(5); 69 }); 70 71 test("default branch is not taken if more exact branch exists", () => { 72 function switchTest(i) { 73 let result = 0; 74 switch (i) { 75 case 1: 76 result += 1; 77 break; 78 case 1: 79 expect().fail(); 80 case 2: 81 result += 2; 82 default: 83 result += 4; 84 case 3: 85 result += 8; 86 break; 87 case 2: 88 expect().fail(); 89 } 90 return result; 91 } 92 93 expect(switchTest(1)).toBe(1); 94 expect(switchTest(2)).toBe(14); 95 expect(switchTest(3)).toBe(8); 96 expect(switchTest(4)).toBe(12); 97 }); 98}); 99 100describe("errors", () => { 101 test("syntax errors", () => { 102 expect("switch () {}").not.toEval(); 103 expect("switch () { case 1: continue; }").not.toEval(); 104 expect("switch () { case 1: break doesnotexist; }").not.toEval(); 105 expect("label: switch () { case 1: break not_the_right_label; }").not.toEval(); 106 expect("label: switch () { case 1: continue label; }").not.toEval(); 107 expect("switch (foo) { bar }").not.toEval(); 108 expect("switch (foo) { default: default: }").not.toEval(); 109 }); 110});