id.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. "use strict";
  2. var _helpers = require("./util/helpers");
  3. (0, _helpers.test)('id selector', '#one', function (t, tree) {
  4. t.deepEqual(tree.nodes[0].nodes[0].value, 'one');
  5. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  6. });
  7. (0, _helpers.test)('id hack', '#one#two', function (t, tree) {
  8. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  9. t.deepEqual(tree.nodes[0].nodes[1].type, 'id');
  10. });
  11. (0, _helpers.test)('id and class names mixed', '#one.two.three', function (t, tree) {
  12. t.deepEqual(tree.nodes[0].nodes[0].value, 'one');
  13. t.deepEqual(tree.nodes[0].nodes[1].value, 'two');
  14. t.deepEqual(tree.nodes[0].nodes[2].value, 'three');
  15. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  16. t.deepEqual(tree.nodes[0].nodes[1].type, 'class');
  17. t.deepEqual(tree.nodes[0].nodes[2].type, 'class');
  18. });
  19. (0, _helpers.test)('qualified id', 'button#one', function (t, tree) {
  20. t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
  21. t.deepEqual(tree.nodes[0].nodes[1].type, 'id');
  22. });
  23. (0, _helpers.test)('qualified id & class name', 'h1#one.two', function (t, tree) {
  24. t.deepEqual(tree.nodes[0].nodes[0].type, 'tag');
  25. t.deepEqual(tree.nodes[0].nodes[1].type, 'id');
  26. t.deepEqual(tree.nodes[0].nodes[2].type, 'class');
  27. });
  28. (0, _helpers.test)('extraneous non-combinating whitespace', ' #h1 , #h2 ', function (t, tree) {
  29. t.deepEqual(tree.nodes[0].nodes[0].value, 'h1');
  30. t.deepEqual(tree.nodes[0].nodes[0].spaces.before, ' ');
  31. t.deepEqual(tree.nodes[0].nodes[0].spaces.after, ' ');
  32. t.deepEqual(tree.nodes[1].nodes[0].value, 'h2');
  33. t.deepEqual(tree.nodes[1].nodes[0].spaces.before, ' ');
  34. t.deepEqual(tree.nodes[1].nodes[0].spaces.after, ' ');
  35. });
  36. (0, _helpers.test)('Sass interpolation within a class', '.#{foo}', function (t, tree) {
  37. t.deepEqual(tree.nodes[0].nodes.length, 1);
  38. t.deepEqual(tree.nodes[0].nodes[0].type, 'class');
  39. t.deepEqual(tree.nodes[0].nodes[0].value, '#{foo}');
  40. });
  41. (0, _helpers.test)('Sass interpolation within an id', '#foo#{bar}', function (t, tree) {
  42. t.deepEqual(tree.nodes[0].nodes.length, 1);
  43. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  44. t.deepEqual(tree.nodes[0].nodes[0].value, 'foo#{bar}');
  45. });
  46. (0, _helpers.test)('Less interpolation within an id', '#foo@{bar}', function (t, tree) {
  47. t.deepEqual(tree.nodes[0].nodes.length, 1);
  48. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  49. t.deepEqual(tree.nodes[0].nodes[0].value, 'foo@{bar}');
  50. });
  51. (0, _helpers.test)('id selector with escaping', '#\\#test', function (t, tree) {
  52. t.deepEqual(tree.nodes[0].nodes[0].value, '#test');
  53. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  54. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#test');
  55. });
  56. (0, _helpers.test)('id selector with escaping (2)', '#-a-b-c-', function (t, tree) {
  57. t.deepEqual(tree.nodes[0].nodes[0].value, '-a-b-c-');
  58. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  59. });
  60. (0, _helpers.test)('id selector with escaping (3)', '#u-m\\00002b', function (t, tree) {
  61. t.deepEqual(tree.nodes[0].nodes[0].value, 'u-m+');
  62. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  63. t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'u-m\\00002b');
  64. });
  65. (0, _helpers.test)('id selector with escaping (4)', '#♥', function (t, tree) {
  66. t.deepEqual(tree.nodes[0].nodes[0].value, '♥');
  67. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  68. });
  69. (0, _helpers.test)('id selector with escaping (5)', '#©', function (t, tree) {
  70. t.deepEqual(tree.nodes[0].nodes[0].value, '©');
  71. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  72. });
  73. (0, _helpers.test)('id selector with escaping (6)', '#“‘’”', function (t, tree) {
  74. t.deepEqual(tree.nodes[0].nodes[0].value, '“‘’”');
  75. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  76. });
  77. (0, _helpers.test)('id selector with escaping (7)', '#☺☃', function (t, tree) {
  78. t.deepEqual(tree.nodes[0].nodes[0].value, '☺☃');
  79. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  80. });
  81. (0, _helpers.test)('id selector with escaping (8)', '#⌘⌥', function (t, tree) {
  82. t.deepEqual(tree.nodes[0].nodes[0].value, '⌘⌥');
  83. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  84. });
  85. (0, _helpers.test)('id selector with escaping (9)', '#𝄞♪♩♫♬', function (t, tree) {
  86. t.deepEqual(tree.nodes[0].nodes[0].value, '𝄞♪♩♫♬');
  87. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  88. });
  89. (0, _helpers.test)('id selector with escaping (10)', '#💩', function (t, tree) {
  90. t.deepEqual(tree.nodes[0].nodes[0].value, '💩');
  91. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  92. });
  93. (0, _helpers.test)('id selector with escaping (11)', '#\\?', function (t, tree) {
  94. t.deepEqual(tree.nodes[0].nodes[0].value, '?');
  95. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  96. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\?');
  97. });
  98. (0, _helpers.test)('id selector with escaping (12)', '#\\@', function (t, tree) {
  99. t.deepEqual(tree.nodes[0].nodes[0].value, '@');
  100. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  101. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\@');
  102. });
  103. (0, _helpers.test)('id selector with escaping (13)', '#\\.', function (t, tree) {
  104. t.deepEqual(tree.nodes[0].nodes[0].value, '.');
  105. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  106. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\.');
  107. });
  108. (0, _helpers.test)('id selector with escaping (14)', '#\\3A \\)', function (t, tree) {
  109. t.deepEqual(tree.nodes[0].nodes[0].value, ':)');
  110. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  111. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A \\)');
  112. });
  113. (0, _helpers.test)('id selector with escaping (15)', '#\\3A \\`\\(', function (t, tree) {
  114. t.deepEqual(tree.nodes[0].nodes[0].value, ':`(');
  115. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  116. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A \\`\\(');
  117. });
  118. (0, _helpers.test)('id selector with escaping (16)', '#\\31 23', function (t, tree) {
  119. t.deepEqual(tree.nodes[0].nodes[0].value, '123');
  120. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  121. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\31 23');
  122. });
  123. (0, _helpers.test)('id selector with escaping (17)', '#\\31 a2b3c', function (t, tree) {
  124. t.deepEqual(tree.nodes[0].nodes[0].value, '1a2b3c');
  125. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  126. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\31 a2b3c');
  127. });
  128. (0, _helpers.test)('id selector with escaping (18)', '#\\<p\\>', function (t, tree) {
  129. t.deepEqual(tree.nodes[0].nodes[0].value, '<p>');
  130. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  131. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\<p\\>');
  132. });
  133. (0, _helpers.test)('id selector with escaping (19)', '#\\<\\>\\<\\<\\<\\>\\>\\<\\>', function (t, tree) {
  134. t.deepEqual(tree.nodes[0].nodes[0].value, '<><<<>><>');
  135. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  136. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\<\\>\\<\\<\\<\\>\\>\\<\\>');
  137. });
  138. (0, _helpers.test)('id selector with escaping (20)', '#\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\[\\>\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\>\\+\\<\\<\\<\\<\\-\\]\\>\\+\\+\\.\\>\\+\\.\\+\\+\\+\\+\\+\\+\\+\\.\\.\\+\\+\\+\\.\\>\\+\\+\\.\\<\\<\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\.\\>\\.\\+\\+\\+\\.\\-\\-\\-\\-\\-\\-\\.\\-\\-\\-\\-\\-\\-\\-\\-\\.\\>\\+\\.\\>\\.', function (t, tree) {
  139. t.deepEqual(tree.nodes[0].nodes[0].value, '++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.');
  140. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  141. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\[\\>\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\>\\+\\+\\+\\>\\+\\<\\<\\<\\<\\-\\]\\>\\+\\+\\.\\>\\+\\.\\+\\+\\+\\+\\+\\+\\+\\.\\.\\+\\+\\+\\.\\>\\+\\+\\.\\<\\<\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\+\\.\\>\\.\\+\\+\\+\\.\\-\\-\\-\\-\\-\\-\\.\\-\\-\\-\\-\\-\\-\\-\\-\\.\\>\\+\\.\\>\\.');
  142. });
  143. (0, _helpers.test)('id selector with escaping (21)', '#\\#', function (t, tree) {
  144. t.deepEqual(tree.nodes[0].nodes[0].value, '#');
  145. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  146. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#');
  147. });
  148. (0, _helpers.test)('id selector with escaping (22)', '#\\#\\#', function (t, tree) {
  149. t.deepEqual(tree.nodes[0].nodes[0].value, '##');
  150. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  151. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#\\#');
  152. });
  153. (0, _helpers.test)('id selector with escaping (23)', '#\\#\\.\\#\\.\\#', function (t, tree) {
  154. t.deepEqual(tree.nodes[0].nodes[0].value, '#.#.#');
  155. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  156. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\#\\.\\#\\.\\#');
  157. });
  158. (0, _helpers.test)('id selector with escaping (24)', '#\\_', function (t, tree) {
  159. t.deepEqual(tree.nodes[0].nodes[0].value, '_');
  160. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  161. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\_');
  162. });
  163. (0, _helpers.test)('id selector with escaping (25)', '#\\{\\}', function (t, tree) {
  164. t.deepEqual(tree.nodes[0].nodes[0].value, '{}');
  165. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  166. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\{\\}');
  167. });
  168. (0, _helpers.test)('id selector with escaping (26)', '#\\.fake\\-class', function (t, tree) {
  169. t.deepEqual(tree.nodes[0].nodes[0].value, '.fake-class');
  170. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  171. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\.fake\\-class');
  172. });
  173. (0, _helpers.test)('id selector with escaping (27)', '#foo\\.bar', function (t, tree) {
  174. t.deepEqual(tree.nodes[0].nodes[0].value, 'foo.bar');
  175. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  176. t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'foo\\.bar');
  177. });
  178. (0, _helpers.test)('id selector with escaping (28)', '#\\3A hover', function (t, tree) {
  179. t.deepEqual(tree.nodes[0].nodes[0].value, ':hover');
  180. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  181. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A hover');
  182. });
  183. (0, _helpers.test)('id selector with escaping (29)', '#\\3A hover\\3A focus\\3A active', function (t, tree) {
  184. t.deepEqual(tree.nodes[0].nodes[0].value, ':hover:focus:active');
  185. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  186. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\3A hover\\3A focus\\3A active');
  187. });
  188. (0, _helpers.test)('id selector with escaping (30)', '#\\[attr\\=value\\]', function (t, tree) {
  189. t.deepEqual(tree.nodes[0].nodes[0].value, '[attr=value]');
  190. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  191. t.deepEqual(tree.nodes[0].nodes[0].raws.value, '\\[attr\\=value\\]');
  192. });
  193. (0, _helpers.test)('id selector with escaping (31)', '#f\\/o\\/o', function (t, tree) {
  194. t.deepEqual(tree.nodes[0].nodes[0].value, 'f/o/o');
  195. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  196. t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\/o\\/o');
  197. });
  198. (0, _helpers.test)('id selector with escaping (32)', '#f\\\\o\\\\o', function (t, tree) {
  199. t.deepEqual(tree.nodes[0].nodes[0].value, 'f\\o\\o');
  200. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  201. t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\\\o\\\\o');
  202. });
  203. (0, _helpers.test)('id selector with escaping (33)', '#f\\*o\\*o', function (t, tree) {
  204. t.deepEqual(tree.nodes[0].nodes[0].value, 'f*o*o');
  205. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  206. t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\*o\\*o');
  207. });
  208. (0, _helpers.test)('id selector with escaping (34)', '#f\\!o\\!o', function (t, tree) {
  209. t.deepEqual(tree.nodes[0].nodes[0].value, 'f!o!o');
  210. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  211. t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\!o\\!o');
  212. });
  213. (0, _helpers.test)('id selector with escaping (35)', '#f\\\'o\\\'o', function (t, tree) {
  214. t.deepEqual(tree.nodes[0].nodes[0].value, 'f\'o\'o');
  215. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  216. t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\\'o\\\'o');
  217. });
  218. (0, _helpers.test)('id selector with escaping (36)', '#f\\~o\\~o', function (t, tree) {
  219. t.deepEqual(tree.nodes[0].nodes[0].value, 'f~o~o');
  220. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  221. t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\~o\\~o');
  222. });
  223. (0, _helpers.test)('id selector with escaping (37)', '#f\\+o\\+o', function (t, tree) {
  224. t.deepEqual(tree.nodes[0].nodes[0].value, 'f+o+o');
  225. t.deepEqual(tree.nodes[0].nodes[0].type, 'id');
  226. t.deepEqual(tree.nodes[0].nodes[0].raws.value, 'f\\+o\\+o');
  227. });