string-escapes.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. test("hex escapes", () => {
  2. expect("\x55").toBe("U");
  3. expect("X55").toBe("X55");
  4. expect(`\x55`).toBe("U");
  5. expect(`\X55`).toBe("X55");
  6. expect("\xff").toBe(String.fromCharCode(0xff));
  7. expect("'\\x'").not.toEval();
  8. expect("'\\x1'").not.toEval();
  9. expect("'\\xz'").not.toEval();
  10. expect("'\\xzz'").not.toEval();
  11. expect("'\\x🐞'").not.toEval();
  12. });
  13. test("unicode escapes", () => {
  14. expect("\u26a0").toBe("⚠");
  15. expect(`\u26a0`).toBe("⚠");
  16. expect("\u{1f41e}").toBe("🐞");
  17. expect(`\u{1f41e}`).toBe("🐞");
  18. expect("\u00ff").toBe(String.fromCharCode(0xff));
  19. expect("'\\u'").not.toEval();
  20. expect("'\\u1'").not.toEval();
  21. expect("'\\uf'").not.toEval();
  22. expect("'\\u123'").not.toEval();
  23. expect("'\\u123z'").not.toEval();
  24. expect("'\\uz'").not.toEval();
  25. expect("'\\uzz'").not.toEval();
  26. expect("'\\uzzzz'").not.toEval();
  27. expect("'\\u{'").not.toEval();
  28. expect("'\\u{}'").not.toEval();
  29. expect("'\\u{z}'").not.toEval();
  30. expect("'\\u🐞'").not.toEval();
  31. });
  32. describe("octal escapes", () => {
  33. test("basic functionality", () => {
  34. expect("\1").toBe("\u0001");
  35. expect("\2").toBe("\u0002");
  36. expect("\3").toBe("\u0003");
  37. expect("\4").toBe("\u0004");
  38. expect("\5").toBe("\u0005");
  39. expect("\6").toBe("\u0006");
  40. expect("\7").toBe("\u0007");
  41. // prettier-ignore
  42. expect("\8").toBe("8");
  43. // prettier-ignore
  44. expect("\9").toBe("9");
  45. expect("\128").toBe("\n8");
  46. expect("\141bc").toBe("abc");
  47. expect("f\157o\142a\162").toBe("foobar");
  48. expect("\123\145\162\145\156\151\164\171\117\123").toBe("SerenityOS");
  49. });
  50. test("syntax error in template literal", () => {
  51. expect("`\\123`").not.toEval();
  52. });
  53. test("syntax error in strict mode", () => {
  54. expect("'use strict'; '\\123'").not.toEval();
  55. expect('"use strict"; "\\123"').not.toEval();
  56. // Special case, string literal precedes use strict directive
  57. expect("'\\123'; 'use strict'").not.toEval();
  58. // Because of the non string statement in the middle strict mode is not enabled.
  59. expect("'\\123'; somethingElse; 'use strict'").toEval();
  60. });
  61. });