tagged-template-literals.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. load("test-common.js");
  2. try {
  3. assertThrowsError(() => {
  4. foo`bar${baz}`;
  5. }, {
  6. error: ReferenceError,
  7. message: "'foo' is not defined"
  8. });
  9. assertThrowsError(() => {
  10. function foo() { }
  11. foo`bar${baz}`;
  12. }, {
  13. error: ReferenceError,
  14. message: "'baz' is not defined"
  15. });
  16. assertThrowsError(() => {
  17. undefined``````;
  18. }, {
  19. error: TypeError,
  20. message: "undefined is not a function"
  21. });
  22. function test1(strings) {
  23. assert(strings instanceof Array);
  24. assert(strings.length === 1);
  25. assert(strings[0] === "");
  26. return 42;
  27. }
  28. assert(test1`` === 42);
  29. function test2(s) {
  30. return function (strings) {
  31. assert(strings instanceof Array);
  32. assert(strings.length === 1);
  33. assert(strings[0] === "bar");
  34. return s + strings[0];
  35. }
  36. }
  37. assert(test2("foo")`bar` === "foobar");
  38. var test3 = {
  39. foo(strings, p1) {
  40. assert(strings instanceof Array);
  41. assert(strings.length === 2);
  42. assert(strings[0] === "");
  43. assert(strings[1] === "");
  44. assert(p1 === "bar");
  45. }
  46. };
  47. test3.foo`${"bar"}`;
  48. function test4(strings, p1) {
  49. assert(strings instanceof Array);
  50. assert(strings.length === 2);
  51. assert(strings[0] === "foo");
  52. assert(strings[1] === "");
  53. assert(p1 === 42);
  54. }
  55. var bar = 42;
  56. test4`foo${bar}`;
  57. function test5(strings, p1, p2) {
  58. assert(strings instanceof Array);
  59. assert(strings.length === 3);
  60. assert(strings[0] === "foo");
  61. assert(strings[1] === "baz");
  62. assert(strings[2] === "");
  63. assert(p1 === 42);
  64. assert(p2 === "qux");
  65. return (strings, value) => `${value}${strings[0]}`;
  66. }
  67. var bar = 42;
  68. assert(test5`foo${bar}baz${"qux"}``test${123}` === "123test");
  69. function review(strings, name, rating) {
  70. return `${strings[0]}**${name}**${strings[1]}_${rating}_${strings[2]}`;
  71. }
  72. var name = "SerenityOS";
  73. var rating = "great";
  74. assert(review`${name} is a ${rating} project!` === "**SerenityOS** is a _great_ project!");
  75. const getTemplateObject = (...rest) => rest;
  76. const getRawTemplateStrings = arr => arr.raw;
  77. let o = getTemplateObject`foo\nbar`;
  78. assert(Object.getOwnPropertyNames(o[0]).includes('raw'));
  79. let raw = getRawTemplateStrings`foo${1 + 3}\nbar`;
  80. assert(!Object.getOwnPropertyNames(raw).includes('raw'));
  81. assert(raw.length === 2);
  82. assert(raw[0] === 'foo');
  83. assert(raw[1].length === 5 && raw[1] === '\\nbar');
  84. console.log("PASS");
  85. } catch (e) {
  86. console.log("FAIL: " + e);
  87. }