tests.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /*!
  2. * Escaper
  3. * https://github.com/kobezzza/Escaper
  4. *
  5. * Released under the MIT license
  6. * https://github.com/kobezzza/Escaper/blob/master/LICENSE
  7. */
  8. describe('Escaper', function () {
  9. it('should work with " ... "', function () {
  10. var str = Escaper.replace('Hello "friend\\\""!');
  11. expect(str)
  12. .toBe('Hello __ESCAPER_QUOT__0_!');
  13. expect(Escaper.paste(str))
  14. .toBe('Hello "friend\\\""!');
  15. var str2 = Escaper.replace('Hello "friend\\\""!');
  16. expect(str2)
  17. .toBe('Hello __ESCAPER_QUOT__0_!');
  18. expect(Escaper.paste(str2))
  19. .toBe('Hello "friend\\\""!');
  20. var stack = [];
  21. var str3 = Escaper.replace('Hello "friend\\\""!', false, stack);
  22. expect(str3)
  23. .toBe('Hello __ESCAPER_QUOT__0_!');
  24. expect(Escaper.paste(str3, stack))
  25. .toBe('Hello "friend\\\""!');
  26. stack = [];
  27. var str4 = Escaper.replace('Hello "friend\\\""!', {'"': -1}, stack);
  28. expect(str4)
  29. .toBe('Hello !');
  30. expect(Escaper.paste(str4, stack))
  31. .toBe('Hello !');
  32. });
  33. it("should work with ' ... '", function () {
  34. var str = Escaper.replace("Hello 'friend\\\''!");
  35. expect(str)
  36. .toBe('Hello __ESCAPER_QUOT__1_!');
  37. expect(Escaper.paste(str))
  38. .toBe("Hello 'friend\\\''!");
  39. var stack = [];
  40. var str2 = Escaper.replace("Hello 'friend\\\''!", false, stack);
  41. expect(str2)
  42. .toBe('Hello __ESCAPER_QUOT__0_!');
  43. expect(Escaper.paste(str2, stack))
  44. .toBe("Hello 'friend\\\''!");
  45. });
  46. it('should work with ` ... `', function () {
  47. var stack = [];
  48. var str = Escaper.replace('Hello `friend`!', false, stack);
  49. expect(str)
  50. .toBe('Hello __ESCAPER_QUOT__0_!');
  51. expect(Escaper.paste(str, stack))
  52. .toBe("Hello `friend`!");
  53. var str2 = Escaper.replace('Hello `friend${1 + {foo: {}} + `foo` + /1/}`!', false, stack);
  54. expect(str2)
  55. .toBe('Hello __ESCAPER_QUOT__1_1 + {foo: {}} + __ESCAPER_QUOT__2_ + __ESCAPER_QUOT__3___ESCAPER_QUOT__4_!');
  56. expect(Escaper.paste(str2, stack))
  57. .toBe("Hello `friend${1 + {foo: {}} + `foo` + /1/}`!");
  58. var str3 = Escaper.replace('Hello `friend\\${foo}`!', false, stack);
  59. expect(str3)
  60. .toBe('Hello __ESCAPER_QUOT__5_!');
  61. expect(Escaper.paste(str3, stack))
  62. .toBe('Hello `friend\\${foo}`!');
  63. var str4 = Escaper.replace('Hello `friend${foo/* fooo */}`!', true, stack);
  64. expect(str4)
  65. .toBe('Hello __ESCAPER_QUOT__6_foo__ESCAPER_QUOT__7___ESCAPER_QUOT__8_!');
  66. expect(Escaper.paste(str4, stack))
  67. .toBe('Hello `friend${foo/* fooo */}`!');
  68. });
  69. it("should work with / ... /", function () {
  70. var stack = [];
  71. var str = Escaper.replace("Hello + /friend\\//gmi!", false, stack);
  72. expect(str)
  73. .toBe('Hello + __ESCAPER_QUOT__0_!');
  74. expect(Escaper.paste(str, stack))
  75. .toBe('Hello + /friend\\//gmi!');
  76. var str2 = Escaper.replace("Hello, /friend\\/[//.]/gmi!", false, stack);
  77. expect(str2)
  78. .toBe('Hello, __ESCAPER_QUOT__1_!');
  79. expect(Escaper.paste(str2, stack))
  80. .toBe('Hello, /friend\\/[//.]/gmi!');
  81. var str3 = Escaper.replace('/friend\\/[//.]/gmi!, /friend\\/[//.]/gmi', false, stack);
  82. expect(str3)
  83. .toBe('__ESCAPER_QUOT__2_!, __ESCAPER_QUOT__3_');
  84. expect(Escaper.paste(str3, stack))
  85. .toBe('/friend\\/[//.]/gmi!, /friend\\/[//.]/gmi');
  86. });
  87. it("should work with / ... / (advanced test)", function () {
  88. var stack = [];
  89. var str = Escaper.replace('2 >> /foo/ < /bar/ ^ /car/ [/bar/] foo typeof /mu/ /mu/', true, stack);
  90. expect(str)
  91. .toBe('2 >> __ESCAPER_QUOT__0_ < __ESCAPER_QUOT__1_ ^ __ESCAPER_QUOT__2_ [__ESCAPER_QUOT__3_] foo typeof __ESCAPER_QUOT__4_ /mu/');
  92. expect(Escaper.paste(str, stack))
  93. .toBe('2 >> /foo/ < /bar/ ^ /car/ [/bar/] foo typeof /mu/ /mu/');
  94. });
  95. it("should work with single-line comments", function () {
  96. var stack = [];
  97. var str = Escaper.replace(
  98. ("Hello // the comment\
  99. \n Friend!"), true, stack);
  100. expect(str)
  101. .toBe('Hello __ESCAPER_QUOT__0_\n\t\t\tFriend!');
  102. expect(Escaper.paste(str, stack))
  103. .toBe('Hello // the comment\n\t\t\tFriend!');
  104. });
  105. it("should work with //!", function () {
  106. var stack = [];
  107. var str = Escaper.replace(
  108. ("Hello // the comment //! fffuuu\
  109. \n//! fffuuuu\
  110. \n Friend!"), {'//!': true}, stack);
  111. expect(str)
  112. .toBe('Hello // the comment //! fffuuu\n__ESCAPER_QUOT__0_\n\t\t\tFriend!');
  113. expect(Escaper.paste(str, stack))
  114. .toBe('Hello // the comment //! fffuuu\n//! fffuuuu\n\t\t\tFriend!');
  115. });
  116. it("should work with multiline comments", function () {
  117. var stack = [];
  118. var str = Escaper.replace('Hello /*/ the comment */ Friend!', true, stack);
  119. expect(str)
  120. .toBe('Hello __ESCAPER_QUOT__0_ Friend!');
  121. expect(Escaper.paste(str, stack))
  122. .toBe('Hello /*/ the comment */ Friend!');
  123. });
  124. it("should work with Snakeskin", function () {
  125. var stack = [];
  126. var str = Escaper.replace('foo|replace /hello/g|join "world"', true, stack, true);
  127. expect(str)
  128. .toBe('foo|replace __ESCAPER_QUOT__0_|join __ESCAPER_QUOT__1_');
  129. expect(Escaper.paste(str, stack))
  130. .toBe('foo|replace /hello/g|join "world"');
  131. });
  132. it("should work with custom parameters", function () {
  133. var stack = [];
  134. var str = Escaper.replace('"Hello" /* the comment */ + /Friend/gim /** foo */!', {
  135. '"': true,
  136. '/': true,
  137. '/*': true
  138. }, stack);
  139. expect(str)
  140. .toBe('__ESCAPER_QUOT__0_ __ESCAPER_QUOT__1_ + __ESCAPER_QUOT__2_ /** foo */!');
  141. expect(Escaper.paste(str, stack))
  142. .toBe('"Hello" /* the comment */ + /Friend/gim /** foo */!');
  143. });
  144. it("should work with deep literals", function () {
  145. var stack = [];
  146. var str = Escaper.replace('"Hello" /** "foo" */', {'"': true}, stack);
  147. expect(str)
  148. .toBe('__ESCAPER_QUOT__0_ /** "foo" */');
  149. expect(Escaper.paste(str, stack))
  150. .toBe('"Hello" /** "foo" */');
  151. });
  152. it("should work with @all", function () {
  153. var stack = [];
  154. var str = Escaper.replace('"Hello" /* the comment */ + /Friend/gim /** foo */!', {'@all': true, '/*': -1}, stack);
  155. expect(str)
  156. .toBe('__ESCAPER_QUOT__0_ + __ESCAPER_QUOT__1_ __ESCAPER_QUOT__2_!');
  157. expect(Escaper.paste(str, stack))
  158. .toBe('"Hello" + /Friend/gim /** foo */!');
  159. });
  160. it("should work with @comments", function () {
  161. var stack = [];
  162. var str = Escaper.replace('"Hello" /* the comment */ + /Friend/gim /** foo */!', {'@comments': -1}, stack);
  163. expect(str)
  164. .toBe('"Hello" + /Friend/gim !');
  165. expect(Escaper.paste(str, stack))
  166. .toBe('"Hello" + /Friend/gim !');
  167. });
  168. it("should work with @comments, @literals and @all", function () {
  169. var stack = [];
  170. var str = Escaper.replace('"Hello" /* the comment */ + /Friend/gim /** foo */!', {
  171. '@all': -1,
  172. '@comments': false,
  173. '@literals': true
  174. }, stack);
  175. expect(str)
  176. .toBe('__ESCAPER_QUOT__0_ /* the comment */ + __ESCAPER_QUOT__1_ /** foo */!');
  177. expect(Escaper.paste(str, stack))
  178. .toBe('"Hello" /* the comment */ + /Friend/gim /** foo */!');
  179. });
  180. });