less 4.5.1 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/bin/lessc +37 -23
  2. package/dist/less.js +14497 -11745
  3. package/dist/less.min.js +4 -4
  4. package/dist/less.min.js.map +1 -1
  5. package/lib/less/constants.js +5 -7
  6. package/lib/less/contexts.js +71 -55
  7. package/lib/less/data/colors.js +150 -153
  8. package/lib/less/data/index.js +4 -7
  9. package/lib/less/data/unit-conversions.js +2 -5
  10. package/lib/less/default-options.js +36 -26
  11. package/lib/less/deprecation.js +67 -0
  12. package/lib/less/environment/abstract-file-manager.js +62 -50
  13. package/lib/less/environment/abstract-plugin-loader.js +69 -46
  14. package/lib/less/environment/environment-api.ts +21 -0
  15. package/lib/less/environment/environment.js +34 -30
  16. package/lib/less/environment/file-manager-api.ts +77 -0
  17. package/lib/less/functions/boolean.js +13 -13
  18. package/lib/less/functions/color-blending.js +39 -31
  19. package/lib/less/functions/color.js +153 -137
  20. package/lib/less/functions/data-uri.js +73 -64
  21. package/lib/less/functions/default.js +9 -11
  22. package/lib/less/functions/function-caller.js +35 -34
  23. package/lib/less/functions/function-registry.js +16 -17
  24. package/lib/less/functions/index.js +33 -33
  25. package/lib/less/functions/list.js +88 -75
  26. package/lib/less/functions/math-helper.js +8 -11
  27. package/lib/less/functions/math.js +21 -21
  28. package/lib/less/functions/number.js +42 -53
  29. package/lib/less/functions/string.js +18 -22
  30. package/lib/less/functions/style.js +21 -20
  31. package/lib/less/functions/svg.js +83 -82
  32. package/lib/less/functions/types.js +28 -32
  33. package/lib/less/import-manager.js +73 -64
  34. package/lib/less/index.js +65 -65
  35. package/lib/less/less-error.js +63 -45
  36. package/lib/less/logger.js +11 -14
  37. package/lib/less/parse-tree.js +52 -53
  38. package/lib/less/parse.js +44 -44
  39. package/lib/less/parser/parser-input.js +151 -113
  40. package/lib/less/parser/parser.js +864 -658
  41. package/lib/less/plugin-manager.js +57 -46
  42. package/lib/less/render.js +17 -23
  43. package/lib/less/source-map-builder.js +52 -43
  44. package/lib/less/source-map-output.js +56 -43
  45. package/lib/less/transform-tree.js +40 -30
  46. package/lib/less/tree/anonymous.js +52 -28
  47. package/lib/less/tree/assignment.js +44 -27
  48. package/lib/less/tree/atrule-syntax.js +4 -6
  49. package/lib/less/tree/atrule.js +247 -140
  50. package/lib/less/tree/attribute.js +55 -24
  51. package/lib/less/tree/call.js +70 -42
  52. package/lib/less/tree/color.js +194 -145
  53. package/lib/less/tree/combinator.js +31 -21
  54. package/lib/less/tree/comment.js +44 -23
  55. package/lib/less/tree/condition.js +61 -36
  56. package/lib/less/tree/container.js +90 -34
  57. package/lib/less/tree/debug-info.js +28 -15
  58. package/lib/less/tree/declaration.js +97 -52
  59. package/lib/less/tree/detached-ruleset.js +42 -24
  60. package/lib/less/tree/dimension.js +127 -71
  61. package/lib/less/tree/element.js +82 -52
  62. package/lib/less/tree/expression.js +75 -50
  63. package/lib/less/tree/extend.js +71 -42
  64. package/lib/less/tree/import.js +184 -110
  65. package/lib/less/tree/index.js +52 -81
  66. package/lib/less/tree/javascript.js +43 -32
  67. package/lib/less/tree/js-eval-node.js +46 -32
  68. package/lib/less/tree/keyword.js +25 -17
  69. package/lib/less/tree/media.js +77 -35
  70. package/lib/less/tree/merge-rules.js +47 -0
  71. package/lib/less/tree/mixin-call.js +181 -98
  72. package/lib/less/tree/mixin-definition.js +211 -117
  73. package/lib/less/tree/namespace-value.js +63 -44
  74. package/lib/less/tree/negative.js +34 -21
  75. package/lib/less/tree/nested-at-rule.js +149 -66
  76. package/lib/less/tree/node.js +225 -90
  77. package/lib/less/tree/operation.js +59 -34
  78. package/lib/less/tree/paren.js +34 -17
  79. package/lib/less/tree/property.js +66 -35
  80. package/lib/less/tree/query-in-parens.js +52 -60
  81. package/lib/less/tree/quoted.js +93 -44
  82. package/lib/less/tree/ruleset.js +632 -318
  83. package/lib/less/tree/selector.js +151 -77
  84. package/lib/less/tree/unicode-descriptor.js +14 -12
  85. package/lib/less/tree/unit.js +111 -63
  86. package/lib/less/tree/url.js +62 -38
  87. package/lib/less/tree/value.js +50 -34
  88. package/lib/less/tree/variable-call.js +47 -30
  89. package/lib/less/tree/variable.js +53 -31
  90. package/lib/less/utils.js +44 -47
  91. package/lib/less/visitors/extend-visitor.js +233 -172
  92. package/lib/less/visitors/import-sequencer.js +24 -24
  93. package/lib/less/visitors/import-visitor.js +62 -52
  94. package/lib/less/visitors/index.js +14 -17
  95. package/lib/less/visitors/join-selector-visitor.js +40 -37
  96. package/lib/less/visitors/set-tree-visibility-visitor.js +32 -18
  97. package/lib/less/visitors/to-css-visitor.js +135 -128
  98. package/lib/less/visitors/visitor.js +60 -45
  99. package/lib/less-browser/add-default-options.js +23 -13
  100. package/lib/less-browser/bootstrap.js +23 -17
  101. package/lib/less-browser/browser.js +24 -21
  102. package/lib/less-browser/cache.js +17 -19
  103. package/lib/less-browser/error-reporting.js +52 -44
  104. package/lib/less-browser/file-manager.js +52 -42
  105. package/lib/less-browser/image-size.js +12 -12
  106. package/lib/less-browser/index.js +131 -105
  107. package/lib/less-browser/log-listener.js +30 -31
  108. package/lib/less-browser/plugin-loader.js +10 -10
  109. package/lib/less-browser/utils.js +19 -21
  110. package/lib/less-node/environment.js +32 -8
  111. package/lib/less-node/file-manager.js +62 -45
  112. package/lib/less-node/fs.js +11 -8
  113. package/lib/less-node/image-size.js +40 -31
  114. package/lib/less-node/index.js +28 -19
  115. package/lib/less-node/lessc-helper.js +20 -21
  116. package/lib/less-node/plugin-loader.js +35 -27
  117. package/lib/less-node/url-file-manager.js +33 -31
  118. package/package.json +25 -18
  119. package/.eslintignore +0 -6
  120. package/.eslintrc.js +0 -63
  121. package/Gruntfile.js +0 -403
  122. package/bower.json +0 -22
  123. package/lib/less/constants.js.map +0 -1
  124. package/lib/less/contexts.js.map +0 -1
  125. package/lib/less/data/colors.js.map +0 -1
  126. package/lib/less/data/index.js.map +0 -1
  127. package/lib/less/data/unit-conversions.js.map +0 -1
  128. package/lib/less/default-options.js.map +0 -1
  129. package/lib/less/environment/abstract-file-manager.js.map +0 -1
  130. package/lib/less/environment/abstract-plugin-loader.js.map +0 -1
  131. package/lib/less/environment/environment-api.js +0 -3
  132. package/lib/less/environment/environment-api.js.map +0 -1
  133. package/lib/less/environment/environment.js.map +0 -1
  134. package/lib/less/environment/file-manager-api.js +0 -3
  135. package/lib/less/environment/file-manager-api.js.map +0 -1
  136. package/lib/less/functions/boolean.js.map +0 -1
  137. package/lib/less/functions/color-blending.js.map +0 -1
  138. package/lib/less/functions/color.js.map +0 -1
  139. package/lib/less/functions/data-uri.js.map +0 -1
  140. package/lib/less/functions/default.js.map +0 -1
  141. package/lib/less/functions/function-caller.js.map +0 -1
  142. package/lib/less/functions/function-registry.js.map +0 -1
  143. package/lib/less/functions/index.js.map +0 -1
  144. package/lib/less/functions/list.js.map +0 -1
  145. package/lib/less/functions/math-helper.js.map +0 -1
  146. package/lib/less/functions/math.js.map +0 -1
  147. package/lib/less/functions/number.js.map +0 -1
  148. package/lib/less/functions/string.js.map +0 -1
  149. package/lib/less/functions/style.js.map +0 -1
  150. package/lib/less/functions/svg.js.map +0 -1
  151. package/lib/less/functions/types.js.map +0 -1
  152. package/lib/less/import-manager.js.map +0 -1
  153. package/lib/less/index.js.map +0 -1
  154. package/lib/less/less-error.js.map +0 -1
  155. package/lib/less/logger.js.map +0 -1
  156. package/lib/less/parse-tree.js.map +0 -1
  157. package/lib/less/parse.js.map +0 -1
  158. package/lib/less/parser/parser-input.js.map +0 -1
  159. package/lib/less/parser/parser.js.map +0 -1
  160. package/lib/less/plugin-manager.js.map +0 -1
  161. package/lib/less/render.js.map +0 -1
  162. package/lib/less/source-map-builder.js.map +0 -1
  163. package/lib/less/source-map-output.js.map +0 -1
  164. package/lib/less/transform-tree.js.map +0 -1
  165. package/lib/less/tree/anonymous.js.map +0 -1
  166. package/lib/less/tree/assignment.js.map +0 -1
  167. package/lib/less/tree/atrule-syntax.js.map +0 -1
  168. package/lib/less/tree/atrule.js.map +0 -1
  169. package/lib/less/tree/attribute.js.map +0 -1
  170. package/lib/less/tree/call.js.map +0 -1
  171. package/lib/less/tree/color.js.map +0 -1
  172. package/lib/less/tree/combinator.js.map +0 -1
  173. package/lib/less/tree/comment.js.map +0 -1
  174. package/lib/less/tree/condition.js.map +0 -1
  175. package/lib/less/tree/container.js.map +0 -1
  176. package/lib/less/tree/debug-info.js.map +0 -1
  177. package/lib/less/tree/declaration.js.map +0 -1
  178. package/lib/less/tree/detached-ruleset.js.map +0 -1
  179. package/lib/less/tree/dimension.js.map +0 -1
  180. package/lib/less/tree/element.js.map +0 -1
  181. package/lib/less/tree/expression.js.map +0 -1
  182. package/lib/less/tree/extend.js.map +0 -1
  183. package/lib/less/tree/import.js.map +0 -1
  184. package/lib/less/tree/index.js.map +0 -1
  185. package/lib/less/tree/javascript.js.map +0 -1
  186. package/lib/less/tree/js-eval-node.js.map +0 -1
  187. package/lib/less/tree/keyword.js.map +0 -1
  188. package/lib/less/tree/media.js.map +0 -1
  189. package/lib/less/tree/mixin-call.js.map +0 -1
  190. package/lib/less/tree/mixin-definition.js.map +0 -1
  191. package/lib/less/tree/namespace-value.js.map +0 -1
  192. package/lib/less/tree/negative.js.map +0 -1
  193. package/lib/less/tree/nested-at-rule.js.map +0 -1
  194. package/lib/less/tree/node.js.map +0 -1
  195. package/lib/less/tree/operation.js.map +0 -1
  196. package/lib/less/tree/paren.js.map +0 -1
  197. package/lib/less/tree/property.js.map +0 -1
  198. package/lib/less/tree/query-in-parens.js.map +0 -1
  199. package/lib/less/tree/quoted.js.map +0 -1
  200. package/lib/less/tree/ruleset.js.map +0 -1
  201. package/lib/less/tree/selector.js.map +0 -1
  202. package/lib/less/tree/unicode-descriptor.js.map +0 -1
  203. package/lib/less/tree/unit.js.map +0 -1
  204. package/lib/less/tree/url.js.map +0 -1
  205. package/lib/less/tree/value.js.map +0 -1
  206. package/lib/less/tree/variable-call.js.map +0 -1
  207. package/lib/less/tree/variable.js.map +0 -1
  208. package/lib/less/utils.js.map +0 -1
  209. package/lib/less/visitors/extend-visitor.js.map +0 -1
  210. package/lib/less/visitors/import-sequencer.js.map +0 -1
  211. package/lib/less/visitors/import-visitor.js.map +0 -1
  212. package/lib/less/visitors/index.js.map +0 -1
  213. package/lib/less/visitors/join-selector-visitor.js.map +0 -1
  214. package/lib/less/visitors/set-tree-visibility-visitor.js.map +0 -1
  215. package/lib/less/visitors/to-css-visitor.js.map +0 -1
  216. package/lib/less/visitors/visitor.js.map +0 -1
  217. package/lib/less-browser/add-default-options.js.map +0 -1
  218. package/lib/less-browser/bootstrap.js.map +0 -1
  219. package/lib/less-browser/browser.js.map +0 -1
  220. package/lib/less-browser/cache.js.map +0 -1
  221. package/lib/less-browser/error-reporting.js.map +0 -1
  222. package/lib/less-browser/file-manager.js.map +0 -1
  223. package/lib/less-browser/image-size.js.map +0 -1
  224. package/lib/less-browser/index.js.map +0 -1
  225. package/lib/less-browser/log-listener.js.map +0 -1
  226. package/lib/less-browser/plugin-loader.js.map +0 -1
  227. package/lib/less-browser/utils.js.map +0 -1
  228. package/lib/less-node/environment.js.map +0 -1
  229. package/lib/less-node/file-manager.js.map +0 -1
  230. package/lib/less-node/fs.js.map +0 -1
  231. package/lib/less-node/image-size.js.map +0 -1
  232. package/lib/less-node/index.js.map +0 -1
  233. package/lib/less-node/lessc-helper.js.map +0 -1
  234. package/lib/less-node/plugin-loader.js.map +0 -1
  235. package/lib/less-node/url-file-manager.js.map +0 -1
  236. package/scripts/coverage-lines.js +0 -207
  237. package/scripts/coverage-report.js +0 -158
  238. package/scripts/postinstall.js +0 -61
  239. package/test/.eslintrc.json +0 -9
  240. package/test/README.md +0 -3
  241. package/test/browser/common.js +0 -251
  242. package/test/browser/css/global-vars/simple.css +0 -3
  243. package/test/browser/css/modify-vars/simple.css +0 -8
  244. package/test/browser/css/plugin/plugin.css +0 -3
  245. package/test/browser/css/postProcessor/postProcessor.css +0 -4
  246. package/test/browser/css/relative-urls/urls.css +0 -36
  247. package/test/browser/css/rewrite-urls/urls.css +0 -36
  248. package/test/browser/css/rootpath/urls.css +0 -35
  249. package/test/browser/css/rootpath-relative/urls.css +0 -35
  250. package/test/browser/css/rootpath-rewrite-urls/urls.css +0 -35
  251. package/test/browser/css/urls.css +0 -54
  252. package/test/browser/generator/benchmark.config.js +0 -50
  253. package/test/browser/generator/generate.js +0 -78
  254. package/test/browser/generator/runner.config.js +0 -184
  255. package/test/browser/generator/runner.js +0 -2
  256. package/test/browser/generator/template.js +0 -104
  257. package/test/browser/generator/utils.js +0 -14
  258. package/test/browser/less/console-errors/test-error.less +0 -3
  259. package/test/browser/less/console-errors/test-error.txt +0 -2
  260. package/test/browser/less/errors/image-height-error.less +0 -3
  261. package/test/browser/less/errors/image-height-error.txt +0 -4
  262. package/test/browser/less/errors/image-size-error.less +0 -3
  263. package/test/browser/less/errors/image-size-error.txt +0 -4
  264. package/test/browser/less/errors/image-width-error.less +0 -3
  265. package/test/browser/less/errors/image-width-error.txt +0 -4
  266. package/test/browser/less/global-vars/simple.less +0 -3
  267. package/test/browser/less/imports/urls.less +0 -4
  268. package/test/browser/less/imports/urls2.less +0 -4
  269. package/test/browser/less/modify-vars/imports/simple2.less +0 -4
  270. package/test/browser/less/modify-vars/simple.less +0 -8
  271. package/test/browser/less/nested-gradient-with-svg-gradient/mixin-consumer.less +0 -5
  272. package/test/browser/less/nested-gradient-with-svg-gradient/svg-gradient-mixin.less +0 -15
  273. package/test/browser/less/plugin/plugin.js +0 -4
  274. package/test/browser/less/plugin/plugin.less +0 -4
  275. package/test/browser/less/postProcessor/postProcessor.less +0 -4
  276. package/test/browser/less/relative-urls/urls.less +0 -34
  277. package/test/browser/less/rewrite-urls/urls.less +0 -34
  278. package/test/browser/less/rootpath/urls.less +0 -33
  279. package/test/browser/less/rootpath-relative/urls.less +0 -33
  280. package/test/browser/less/rootpath-rewrite-urls/urls.less +0 -33
  281. package/test/browser/less/urls.less +0 -62
  282. package/test/browser/runner-VisitorPlugin-options.js +0 -3
  283. package/test/browser/runner-VisitorPlugin.js +0 -3
  284. package/test/browser/runner-browser-options.js +0 -51
  285. package/test/browser/runner-browser-spec.js +0 -12
  286. package/test/browser/runner-console-errors.js +0 -5
  287. package/test/browser/runner-errors-options.js +0 -6
  288. package/test/browser/runner-errors-spec.js +0 -3
  289. package/test/browser/runner-filemanagerPlugin-options.js +0 -5
  290. package/test/browser/runner-filemanagerPlugin.js +0 -3
  291. package/test/browser/runner-global-vars-options.js +0 -7
  292. package/test/browser/runner-global-vars-spec.js +0 -3
  293. package/test/browser/runner-main-options.js +0 -17
  294. package/test/browser/runner-main-spec.js +0 -7
  295. package/test/browser/runner-modify-vars-options.js +0 -5
  296. package/test/browser/runner-modify-vars-spec.js +0 -33
  297. package/test/browser/runner-no-js-errors-options.js +0 -4
  298. package/test/browser/runner-no-js-errors-spec.js +0 -3
  299. package/test/browser/runner-postProcessorPlugin-options.js +0 -3
  300. package/test/browser/runner-postProcessorPlugin.js +0 -3
  301. package/test/browser/runner-preProcessorPlugin-options.js +0 -3
  302. package/test/browser/runner-preProcessorPlugin.js +0 -3
  303. package/test/browser/runner-production-options.js +0 -3
  304. package/test/browser/runner-production-spec.js +0 -5
  305. package/test/browser/runner-relative-urls-options.js +0 -3
  306. package/test/browser/runner-relative-urls-spec.js +0 -3
  307. package/test/browser/runner-rewrite-urls-options.js +0 -3
  308. package/test/browser/runner-rewrite-urls-spec.js +0 -3
  309. package/test/browser/runner-rootpath-options.js +0 -3
  310. package/test/browser/runner-rootpath-relative-options.js +0 -4
  311. package/test/browser/runner-rootpath-relative-spec.js +0 -3
  312. package/test/browser/runner-rootpath-rewrite-urls-options.js +0 -4
  313. package/test/browser/runner-rootpath-rewrite-urls-spec.js +0 -3
  314. package/test/browser/runner-rootpath-spec.js +0 -3
  315. package/test/browser/runner-strict-units-options.js +0 -5
  316. package/test/browser/runner-strict-units-spec.js +0 -3
  317. package/test/index.js +0 -307
  318. package/test/less-test.js +0 -984
  319. package/test/mocha-playwright/runner.js +0 -210
  320. package/test/modify-vars.js +0 -28
  321. package/test/plugins/filemanager/index.js +0 -19
  322. package/test/plugins/postprocess/index.js +0 -14
  323. package/test/plugins/preprocess/index.js +0 -19
  324. package/test/plugins/visitor/index.js +0 -24
  325. package/test/sourcemaps/basic.json +0 -1
  326. package/test/sourcemaps/comprehensive.json +0 -1
  327. package/test/sourcemaps/custom-props.json +0 -1
  328. package/test/sourcemaps/index.html +0 -17
  329. package/test/sourcemaps/sourcemaps-basepath.json +0 -1
  330. package/test/sourcemaps/sourcemaps-include-source.json +0 -1
  331. package/test/sourcemaps/sourcemaps-rootpath.json +0 -1
  332. package/test/sourcemaps/sourcemaps-url.json +0 -1
  333. package/test/sourcemaps-disable-annotation/basic.json +0 -1
  334. package/test/sourcemaps-variable-selector/basic.json +0 -1
  335. package/test/test-es6.ts +0 -17
  336. package/test.less +0 -1
  337. package/tsconfig.build.json +0 -7
  338. package/tsconfig.json +0 -21
@@ -1,3 +0,0 @@
1
- describe('less.js Visitor Plugin', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,51 +0,0 @@
1
- var less = {
2
- logLevel: 4,
3
- errorReporting: 'console',
4
- javascriptEnabled: true,
5
- math: 'always'
6
- };
7
-
8
- // test inline less in style tags by grabbing an assortment of less files and doing `@import`s
9
- var testFiles = ['charsets/charsets', 'color-functions/basic', 'comments/comments', 'css-3/css-3', 'strings/strings', 'media/media', 'mixins/mixins'],
10
- testSheets = [];
11
-
12
- // setup style tags with less and link tags pointing to expected css output
13
-
14
- /**
15
- * @todo - generate the node_modules path for this file and in templates
16
- */
17
- var lessFolder = '../../node_modules/@less/test-data/tests-unit'
18
- var cssFolder = '../../node_modules/@less/test-data/tests-unit'
19
-
20
- for (var i = 0; i < testFiles.length; i++) {
21
- var file = testFiles[i],
22
- lessPath = lessFolder + '/' + file + '.less',
23
- cssPath = cssFolder + '/' + file + '.css',
24
- lessStyle = document.createElement('style'),
25
- cssLink = document.createElement('link'),
26
- lessText = '@import "' + lessPath + '";';
27
-
28
- lessStyle.type = 'text/less';
29
- lessStyle.id = file;
30
- lessStyle.href = file;
31
-
32
- if (lessStyle.styleSheet === undefined) {
33
- lessStyle.appendChild(document.createTextNode(lessText));
34
- }
35
-
36
- cssLink.rel = 'stylesheet';
37
- cssLink.type = 'text/css';
38
- cssLink.href = cssPath;
39
- cssLink.id = 'expected-' + file;
40
-
41
- var head = document.getElementsByTagName('head')[0];
42
-
43
- head.appendChild(lessStyle);
44
-
45
- if (lessStyle.styleSheet) {
46
- lessStyle.styleSheet.cssText = lessText;
47
- }
48
-
49
- head.appendChild(cssLink);
50
- testSheets[i] = lessStyle;
51
- }
@@ -1,12 +0,0 @@
1
- describe('less.js browser behaviour', function() {
2
- testLessEqualsInDocument();
3
-
4
- it('has some log messages', function() {
5
- expect(logMessages.length).to.be.above(0);
6
- });
7
-
8
- for (var i = 0; i < testFiles.length; i++) {
9
- var sheet = testSheets[i];
10
- testSheet(sheet);
11
- }
12
- });
@@ -1,5 +0,0 @@
1
- less.errorReporting = 'console';
2
-
3
- describe('less.js error reporting console test', function() {
4
- testLessErrorsInDocument(true);
5
- });
@@ -1,6 +0,0 @@
1
- var less = {
2
- strictUnits: true,
3
- math: 'strict-legacy',
4
- logLevel: 4,
5
- javascriptEnabled: true
6
- };
@@ -1,3 +0,0 @@
1
- describe('less.js error tests', function() {
2
- testLessErrorsInDocument();
3
- });
@@ -1,5 +0,0 @@
1
- var less = {
2
- logLevel: 4,
3
- errorReporting: 'console',
4
- plugins: [AddFilePlugin]
5
- };
@@ -1,3 +0,0 @@
1
- describe('less.js filemanager Plugin', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,7 +0,0 @@
1
- var less = {
2
- logLevel: 4,
3
- errorReporting: 'console',
4
- globalVars: {
5
- '@global-var': 'red'
6
- }
7
- };
@@ -1,3 +0,0 @@
1
- describe('less.js global vars', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,17 +0,0 @@
1
- var less = {
2
- logLevel: 4,
3
- errorReporting: 'console'
4
- };
5
- less.functions = {
6
- add: function(a, b) {
7
- return new(less.tree.Dimension)(a.value + b.value);
8
- },
9
- increment: function(a) {
10
- return new(less.tree.Dimension)(a.value + 1);
11
- },
12
- _color: function(str) {
13
- if (str.value === 'evil red') {
14
- return new(less.tree.Color)('600');
15
- }
16
- }
17
- };
@@ -1,7 +0,0 @@
1
- console.warn('start spec');
2
- describe('less.js main tests', function() {
3
- testLessEqualsInDocument();
4
- it('the global environment', function() {
5
- expect(window.require).to.be.undefined;
6
- });
7
- });
@@ -1,5 +0,0 @@
1
- /* exported less */
2
- var less = {
3
- logLevel: 4,
4
- errorReporting: 'console'
5
- };
@@ -1,33 +0,0 @@
1
- var alreadyRun = false;
2
-
3
- describe('less.js modify vars', function () {
4
- beforeEach(function (done) {
5
- // simulating "setUp" or "beforeAll" method
6
- if (alreadyRun) {
7
- done();
8
- return;
9
- }
10
-
11
- alreadyRun = true;
12
-
13
- less.pageLoadFinished
14
- .then(function () {
15
- less.modifyVars({
16
- var1: 'green',
17
- var2: 'purple',
18
- scale: 20
19
- }).then(function () {
20
- done();
21
- });
22
- });
23
- });
24
-
25
- testLessEqualsInDocument();
26
- it('Should log only 2 XHR requests', function (done) {
27
- var xhrLogMessages = logMessages.filter(function (item) {
28
- return (/XHR: Getting '/).test(item);
29
- });
30
- expect(xhrLogMessages.length).to.equal(2);
31
- done();
32
- });
33
- });
@@ -1,4 +0,0 @@
1
- var less = {logLevel: 4};
2
-
3
- less.strictUnits = true;
4
- less.javascriptEnabled = false;
@@ -1,3 +0,0 @@
1
- describe('less.js javascript disabled error tests', function() {
2
- testLessErrorsInDocument();
3
- });
@@ -1,3 +0,0 @@
1
- var less = {logLevel: 4,
2
- errorReporting: 'console',
3
- plugins: [postProcessorPlugin]};
@@ -1,3 +0,0 @@
1
- describe('less.js postProcessor Plugin', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,3 +0,0 @@
1
- var less = {logLevel: 4,
2
- errorReporting: 'console',
3
- plugins: [preProcessorPlugin]};
@@ -1,3 +0,0 @@
1
- describe('less.js preProcessor Plugin', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,3 +0,0 @@
1
- var less = {logLevel: 1,
2
- errorReporting: 'console'};
3
- less.env = 'production';
@@ -1,5 +0,0 @@
1
- describe('less.js production behaviour', function() {
2
- it('doesn\'t log any messages', function() {
3
- expect(logMessages.length).to.equal(0);
4
- });
5
- });
@@ -1,3 +0,0 @@
1
- var less = {logLevel: 4,
2
- errorReporting: 'console'};
3
- less.relativeUrls = true;
@@ -1,3 +0,0 @@
1
- describe('less.js browser test - relative url\'s', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,3 +0,0 @@
1
- var less = {logLevel: 4,
2
- errorReporting: 'console'};
3
- less.rewriteUrls = 'all';
@@ -1,3 +0,0 @@
1
- describe('less.js browser test - rewrite urls', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,3 +0,0 @@
1
- var less = {logLevel: 4,
2
- errorReporting: 'console'};
3
- less.rootpath = 'https://localhost/';
@@ -1,4 +0,0 @@
1
- var less = {logLevel: 4,
2
- errorReporting: 'console'};
3
- less.rootpath = 'https://www.github.com/cloudhead/less.js/';
4
- less.relativeUrls = true;
@@ -1,3 +0,0 @@
1
- describe('less.js browser test - rootpath and relative urls', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,4 +0,0 @@
1
- var less = {logLevel: 4,
2
- errorReporting: 'console'};
3
- less.rootpath = 'https://www.github.com/cloudhead/less.js/';
4
- less.rewriteUrls = 'all';
@@ -1,3 +0,0 @@
1
- describe('less.js browser test - rootpath and rewrite urls', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,3 +0,0 @@
1
- describe('less.js browser test - rootpath url\'s', function() {
2
- testLessEqualsInDocument();
3
- });
@@ -1,5 +0,0 @@
1
- var less = {
2
- logLevel: 4,
3
- errorReporting: 'console',
4
- strictMath: true,
5
- strictUnits: true };
@@ -1,3 +0,0 @@
1
- describe('less.js strict units tests', function() {
2
- testLessEqualsInDocument();
3
- });
package/test/index.js DELETED
@@ -1,307 +0,0 @@
1
- // Mock needle for HTTP requests BEFORE any other requires
2
- const Module = require('module');
3
- const originalRequire = Module.prototype.require;
4
- Module.prototype.require = function(id) {
5
- if (id === 'needle') {
6
- return {
7
- get: function(url, options, callback) {
8
-
9
- // Handle CDN requests
10
- if (url.includes('cdn.jsdelivr.net')) {
11
- if (url.includes('selectors.less')) {
12
- setTimeout(() => {
13
- callback(null, { statusCode: 200 }, fs.readFileSync(path.join(__dirname, '../../test-data/tests-unit/selectors/selectors.less'), 'utf8'));
14
- }, 10);
15
- return;
16
- }
17
- if (url.includes('media.less')) {
18
- setTimeout(() => {
19
- callback(null, { statusCode: 200 }, fs.readFileSync(path.join(__dirname, '../../test-data/tests-unit/media/media.less'), 'utf8'));
20
- }, 10);
21
- return;
22
- }
23
- if (url.includes('empty.less')) {
24
- setTimeout(() => {
25
- callback(null, { statusCode: 200 }, fs.readFileSync(path.join(__dirname, '../../test-data/tests-unit/empty/empty.less'), 'utf8'));
26
- }, 10);
27
- return;
28
- }
29
- }
30
-
31
- // Handle redirect test - simulate needle's automatic redirect handling
32
- if (url.includes('example.com/redirect.less')) {
33
- setTimeout(() => {
34
- // Simulate the final response after needle automatically follows the redirect
35
- callback(null, { statusCode: 200 }, 'h1 { color: blue; }');
36
- }, 10);
37
- return;
38
- }
39
-
40
- if (url.includes('example.com/target.less')) {
41
- setTimeout(() => {
42
- callback(null, { statusCode: 200 }, 'h1 { color: blue; }');
43
- }, 10);
44
- return;
45
- }
46
-
47
- // Default error for unmocked URLs
48
- setTimeout(() => {
49
- callback(new Error('Unmocked URL: ' + url), null, null);
50
- }, 10);
51
- }
52
- };
53
- }
54
- return originalRequire.apply(this, arguments);
55
- };
56
-
57
- // Now load other modules after mocking is set up
58
- var path = require('path'),
59
- fs = require('fs'),
60
- lessTest = require('./less-test'),
61
- stylize = require('../lib/less-node/lessc-helper').stylize;
62
-
63
- // Parse command line arguments for test filtering
64
- var args = process.argv.slice(2);
65
- var testFilter = args.length > 0 ? args[0] : null;
66
-
67
- // Create the test runner with the filter
68
- var lessTester = lessTest(testFilter);
69
-
70
- // HTTP mocking is now handled by needle mocking above
71
-
72
- // Test HTTP redirect functionality
73
- function testHttpRedirects() {
74
- const less = require('../lib/less-node').default;
75
-
76
- console.log('🧪 Testing HTTP redirect functionality...');
77
-
78
- const redirectTest = `
79
- @import "https://example.com/redirect.less";
80
-
81
- h1 { color: red; }
82
- `;
83
-
84
- return less.render(redirectTest, {
85
- filename: 'test-redirect.less'
86
- }).then(result => {
87
- console.log('✅ HTTP redirect test SUCCESS:');
88
- console.log(result.css);
89
-
90
- // Check if both imported and local content are present
91
- if (result.css.includes('color: blue') && result.css.includes('color: red')) {
92
- console.log('🎉 HTTP redirect test PASSED - both imported and local content found');
93
- return true;
94
- } else {
95
- console.log('❌ HTTP redirect test FAILED - missing expected content');
96
- return false;
97
- }
98
- }).catch(err => {
99
- console.log('❌ HTTP redirect test ERROR:');
100
- console.log(err.message);
101
- return false;
102
- });
103
- }
104
-
105
- // Test import-remote functionality
106
- function testImportRemote() {
107
- const less = require('../lib/less-node').default;
108
- const fs = require('fs');
109
- const path = require('path');
110
-
111
- console.log('🧪 Testing import-remote functionality...');
112
-
113
- const testFile = path.join(__dirname, '../../test-data/tests-unit/import/import-remote.less');
114
- const expectedFile = path.join(__dirname, '../../test-data/tests-unit/import/import-remote.css');
115
-
116
- const content = fs.readFileSync(testFile, 'utf8');
117
- const expected = fs.readFileSync(expectedFile, 'utf8');
118
-
119
- return less.render(content, {
120
- filename: testFile
121
- }).then(result => {
122
- console.log('✅ Import-remote test SUCCESS:');
123
- console.log('Expected:', expected.trim());
124
- console.log('Actual:', result.css.trim());
125
-
126
- if (result.css.trim() === expected.trim()) {
127
- console.log('🎉 Import-remote test PASSED - CDN imports and variable resolution working');
128
- return true;
129
- } else {
130
- console.log('❌ Import-remote test FAILED - output mismatch');
131
- return false;
132
- }
133
- }).catch(err => {
134
- console.log('❌ Import-remote test ERROR:');
135
- console.log(err.message);
136
- return false;
137
- });
138
- }
139
-
140
- console.log('\n' + stylize('Less', 'underline') + '\n');
141
-
142
- if (testFilter) {
143
- console.log('Running tests matching: ' + testFilter + '\n');
144
- }
145
-
146
- // Glob patterns for main test runs (excluding problematic tests that will run separately)
147
- var globPatterns = [
148
- 'tests-config/*/*.less',
149
- 'tests-unit/*/*.less',
150
- // Debug tests have nested subdirectories (comments/, mediaquery/, all/)
151
- 'tests-config/debug/*/linenumbers-*.less',
152
- '!tests-config/sourcemaps/**/*.less', // Exclude sourcemaps (need special handling)
153
- '!tests-config/sourcemaps-empty/*', // Exclude sourcemaps-empty (need special handling)
154
- '!tests-config/sourcemaps-disable-annotation/*', // Exclude sourcemaps-disable-annotation (need special handling)
155
- '!tests-config/sourcemaps-variable-selector/*', // Exclude sourcemaps-variable-selector (need special handling)
156
- '!tests-config/globalVars/*', // Exclude globalVars (need JSON config handling)
157
- '!tests-config/modifyVars/*', // Exclude modifyVars (need JSON config handling)
158
- '!tests-config/js-type-errors/*', // Exclude js-type-errors (need special test function)
159
- '!tests-config/no-js-errors/*', // Exclude no-js-errors (need special test function)
160
- '!tests-unit/import/import-remote.less', // Exclude import-remote (tested separately in isolation)
161
-
162
- // HTTP import tests are now included since we have needle mocking
163
- ];
164
-
165
- var testMap = [
166
- // Main test runs using glob patterns (cosmiconfig handles configs)
167
- {
168
- patterns: globPatterns
169
- },
170
-
171
- // Error tests
172
- {
173
- patterns: ['tests-error/eval/*.less'],
174
- verifyFunction: lessTester.testErrors
175
- },
176
- {
177
- patterns: ['tests-error/parse/*.less'],
178
- verifyFunction: lessTester.testErrors
179
- },
180
-
181
- // Special test cases with specific handling
182
- {
183
- patterns: ['tests-config/js-type-errors/*.less'],
184
- verifyFunction: lessTester.testTypeErrors
185
- },
186
- {
187
- patterns: ['tests-config/no-js-errors/*.less'],
188
- verifyFunction: lessTester.testErrors
189
- },
190
-
191
- // Sourcemap tests with special handling
192
- {
193
- patterns: [
194
- 'tests-config/sourcemaps/**/*.less',
195
- 'tests-config/sourcemaps-url/**/*.less',
196
- 'tests-config/sourcemaps-rootpath/**/*.less',
197
- 'tests-config/sourcemaps-basepath/**/*.less',
198
- 'tests-config/sourcemaps-include-source/**/*.less'
199
- ],
200
- verifyFunction: lessTester.testSourcemap,
201
- getFilename: function(filename, type, baseFolder) {
202
- if (type === 'vars') {
203
- return path.join(baseFolder, filename) + '.json';
204
- }
205
- // Extract just the filename (without directory) for the JSON file
206
- var jsonFilename = path.basename(filename);
207
- // For sourcemap type, return path relative to test directory
208
- if (type === 'sourcemap') {
209
- return path.join('test/sourcemaps', jsonFilename) + '.json';
210
- }
211
- return path.join('test/sourcemaps', jsonFilename) + '.json';
212
- }
213
- },
214
- {
215
- patterns: ['tests-config/sourcemaps-empty/*.less'],
216
- verifyFunction: lessTester.testEmptySourcemap
217
- },
218
- {
219
- patterns: ['tests-config/sourcemaps-disable-annotation/*.less'],
220
- verifyFunction: lessTester.testSourcemapWithoutUrlAnnotation
221
- },
222
- {
223
- patterns: ['tests-config/sourcemaps-variable-selector/*.less'],
224
- verifyFunction: lessTester.testSourcemapWithVariableInSelector
225
- },
226
-
227
- // Import tests with JSON configs
228
- {
229
- patterns: ['tests-config/globalVars/*.less'],
230
- lessOptions: {
231
- globalVars: function(file) {
232
- const fs = require('fs');
233
- const path = require('path');
234
- const basename = path.basename(file, '.less');
235
- const jsonPath = path.join(path.dirname(file), basename + '.json');
236
- try {
237
- return JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
238
- } catch (e) {
239
- return {};
240
- }
241
- }
242
- }
243
- },
244
- {
245
- patterns: ['tests-config/modifyVars/*.less'],
246
- lessOptions: {
247
- modifyVars: function(file) {
248
- const fs = require('fs');
249
- const path = require('path');
250
- const basename = path.basename(file, '.less');
251
- const jsonPath = path.join(path.dirname(file), basename + '.json');
252
- try {
253
- return JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
254
- } catch (e) {
255
- return {};
256
- }
257
- }
258
- }
259
- }
260
- ];
261
-
262
- // Note: needle mocking is set up globally at the top of the file
263
-
264
- testMap.forEach(function(testConfig) {
265
- // For glob patterns, pass lessOptions as the first parameter and patterns as the second
266
- if (testConfig.patterns) {
267
- lessTester.runTestSet(
268
- testConfig.lessOptions || {}, // First param: options (including lessOptions)
269
- testConfig.patterns, // Second param: patterns
270
- testConfig.verifyFunction || null, // Third param: verifyFunction
271
- testConfig.nameModifier || null, // Fourth param: nameModifier
272
- testConfig.doReplacements || null, // Fifth param: doReplacements
273
- testConfig.getFilename || null // Sixth param: getFilename
274
- );
275
- } else {
276
- // Legacy format for non-glob tests
277
- var args = [
278
- testConfig.options || {}, // First param: options
279
- testConfig.foldername, // Second param: foldername
280
- testConfig.verifyFunction || null, // Third param: verifyFunction
281
- testConfig.nameModifier || null, // Fourth param: nameModifier
282
- testConfig.doReplacements || null, // Fifth param: doReplacements
283
- testConfig.getFilename || null // Sixth param: getFilename
284
- ];
285
- lessTester.runTestSet.apply(lessTester, args);
286
- }
287
- });
288
-
289
- // Special synchronous tests
290
- lessTester.testSyncronous({syncImport: true}, 'tests-unit/import/import');
291
- lessTester.testSyncronous({syncImport: true}, 'tests-config/math-strict/css');
292
-
293
- lessTester.testNoOptions();
294
- lessTester.testDisablePluginRule();
295
- lessTester.testJSImport();
296
- lessTester.finished();
297
-
298
-
299
- // Test HTTP redirect functionality
300
- console.log('\nTesting HTTP redirect functionality...');
301
- testHttpRedirects();
302
- console.log('HTTP redirect test completed');
303
-
304
- // Test import-remote functionality in isolation
305
- console.log('\nTesting import-remote functionality...');
306
- testImportRemote();
307
- console.log('Import-remote test completed');