switch-basic.js 2.9 KB

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