switch-basic.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. });
  64. describe("errors", () => {
  65. test("syntax errors", () => {
  66. expect("switch () {}").not.toEval();
  67. expect("switch (foo) { bar }").not.toEval();
  68. expect("switch (foo) { default: default: }").not.toEval();
  69. });
  70. });