haml 3.2.0.alpha.10 → 3.2.0.alpha.13

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of haml might be problematic. Click here for more details.

Files changed (389) hide show
  1. data/.yardopts +19 -7
  2. data/CHANGELOG.md +1224 -0
  3. data/FAQ.md +157 -0
  4. data/README.md +99 -62
  5. data/REFERENCE.md +1404 -0
  6. data/Rakefile +52 -341
  7. data/init.rb +1 -18
  8. data/lib/haml.rb +6 -30
  9. data/lib/haml/buffer.rb +37 -16
  10. data/lib/haml/compiler.rb +52 -13
  11. data/lib/haml/engine.rb +61 -44
  12. data/lib/haml/exec.rb +21 -4
  13. data/lib/haml/filters.rb +136 -166
  14. data/lib/haml/helpers.rb +37 -10
  15. data/lib/haml/helpers/action_view_extensions.rb +2 -1
  16. data/lib/haml/helpers/action_view_mods.rb +67 -181
  17. data/lib/haml/helpers/rails_323_textarea_fix.rb +39 -0
  18. data/lib/haml/helpers/xss_mods.rb +9 -11
  19. data/lib/haml/html.rb +22 -9
  20. data/lib/haml/html/erb.rb +1 -1
  21. data/lib/haml/parser.rb +22 -15
  22. data/lib/haml/railtie.rb +2 -13
  23. data/lib/haml/template.rb +18 -85
  24. data/lib/haml/template/options.rb +1 -1
  25. data/lib/haml/template/plugin.rb +15 -101
  26. data/lib/haml/util.rb +120 -603
  27. data/lib/haml/version.rb +1 -107
  28. data/test/{haml/engine_test.rb → engine_test.rb} +137 -143
  29. data/test/{haml/erb → erb}/_av_partial_1.erb +1 -1
  30. data/test/{haml/erb → erb}/_av_partial_2.erb +1 -1
  31. data/test/{haml/erb → erb}/action_view.erb +1 -1
  32. data/test/{haml/erb → erb}/standard.erb +0 -0
  33. data/test/filters_test.rb +141 -0
  34. data/test/gemfiles/Gemfile.rails-3.0.x +4 -6
  35. data/test/gemfiles/Gemfile.rails-3.1.x +5 -6
  36. data/test/gemfiles/Gemfile.rails-3.2.x +6 -0
  37. data/test/haml-spec/LICENSE +14 -0
  38. data/test/{haml/spec → haml-spec}/README.md +26 -17
  39. data/test/haml-spec/lua_haml_spec.lua +38 -0
  40. data/test/haml-spec/perl_haml_test.pl +81 -0
  41. data/test/haml-spec/ruby_haml_test.rb +23 -0
  42. data/test/{haml/spec → haml-spec}/tests.json +132 -54
  43. data/test/{haml/helper_test.rb → helper_test.rb} +50 -36
  44. data/test/{haml/html2haml → html2haml}/erb_tests.rb +0 -0
  45. data/test/{haml/html2haml_test.rb → html2haml_test.rb} +11 -5
  46. data/test/{haml/markaby → markaby}/standard.mab +0 -0
  47. data/test/{haml/mocks → mocks}/article.rb +0 -0
  48. data/test/{haml/results → results}/content_for_layout.xhtml +0 -0
  49. data/test/{haml/results → results}/eval_suppressed.xhtml +0 -0
  50. data/test/{haml/results → results}/helpers.xhtml +0 -0
  51. data/test/{haml/results → results}/helpful.xhtml +0 -0
  52. data/test/{haml/results → results}/just_stuff.xhtml +0 -0
  53. data/test/{haml/results → results}/list.xhtml +0 -0
  54. data/test/{haml/results → results}/nuke_inner_whitespace.xhtml +0 -0
  55. data/test/{haml/results → results}/nuke_outer_whitespace.xhtml +0 -0
  56. data/test/{haml/results → results}/original_engine.xhtml +0 -0
  57. data/test/{haml/results → results}/partial_layout.xhtml +0 -0
  58. data/test/{haml/results → results}/partials.xhtml +0 -0
  59. data/test/{haml/results → results}/render_layout.xhtml +0 -0
  60. data/test/{haml/results → results}/silent_script.xhtml +1 -1
  61. data/test/{haml/results → results}/standard.xhtml +0 -0
  62. data/test/{haml/results → results}/tag_parsing.xhtml +0 -0
  63. data/test/{haml/results → results}/very_basic.xhtml +0 -0
  64. data/test/{haml/results → results}/whitespace_handling.xhtml +46 -50
  65. data/test/{haml/template_test.rb → template_test.rb} +20 -81
  66. data/test/{haml/templates → templates}/_av_partial_1.haml +1 -1
  67. data/test/{haml/templates → templates}/_av_partial_1_ugly.haml +1 -1
  68. data/test/{haml/templates → templates}/_av_partial_2.haml +1 -1
  69. data/test/{haml/templates → templates}/_av_partial_2_ugly.haml +1 -1
  70. data/test/{haml/templates → templates}/_layout.erb +0 -0
  71. data/test/{haml/templates → templates}/_layout_for_partial.haml +0 -0
  72. data/test/{haml/templates → templates}/_partial.haml +0 -0
  73. data/test/{haml/templates → templates}/_text_area.haml +0 -0
  74. data/test/{haml/templates → templates}/action_view.haml +1 -1
  75. data/test/{haml/templates → templates}/action_view_ugly.haml +1 -1
  76. data/test/{haml/templates → templates}/breakage.haml +0 -0
  77. data/test/{haml/templates → templates}/content_for_layout.haml +0 -0
  78. data/test/{haml/templates → templates}/eval_suppressed.haml +0 -0
  79. data/test/{haml/templates → templates}/helpers.haml +0 -0
  80. data/test/{haml/templates → templates}/helpful.haml +0 -0
  81. data/test/{haml/templates → templates}/just_stuff.haml +0 -0
  82. data/test/{haml/templates → templates}/list.haml +0 -0
  83. data/test/{haml/templates → templates}/nuke_inner_whitespace.haml +0 -0
  84. data/test/{haml/templates → templates}/nuke_outer_whitespace.haml +0 -0
  85. data/test/{haml/templates → templates}/original_engine.haml +0 -0
  86. data/test/templates/partial_layout.haml +3 -0
  87. data/test/{haml/templates → templates}/partialize.haml +0 -0
  88. data/test/{haml/templates → templates}/partials.haml +0 -0
  89. data/test/{haml/templates → templates}/render_layout.haml +0 -0
  90. data/test/{haml/templates → templates}/silent_script.haml +2 -2
  91. data/test/{haml/templates → templates}/standard.haml +0 -0
  92. data/test/{haml/templates → templates}/standard_ugly.haml +0 -0
  93. data/test/{haml/templates → templates}/tag_parsing.haml +0 -0
  94. data/test/{haml/templates → templates}/very_basic.haml +0 -0
  95. data/test/{haml/templates → templates}/whitespace_handling.haml +0 -0
  96. data/test/test_helper.rb +42 -34
  97. data/test/util_test.rb +80 -0
  98. metadata +259 -427
  99. data/CONTRIBUTING +0 -3
  100. data/REVISION +0 -1
  101. data/VERSION +0 -1
  102. data/VERSION_NAME +0 -1
  103. data/extra/update_watch.rb +0 -13
  104. data/lib/haml/root.rb +0 -7
  105. data/lib/haml/shared.rb +0 -78
  106. data/lib/haml/template/patch.rb +0 -58
  107. data/lib/sass.rb +0 -8
  108. data/lib/sass/plugin.rb +0 -10
  109. data/lib/sass/rails2_shim.rb +0 -9
  110. data/lib/sass/rails3_shim.rb +0 -16
  111. data/test/benchmark.rb +0 -91
  112. data/test/gemfiles/Gemfile.rails-2.0.x +0 -8
  113. data/test/gemfiles/Gemfile.rails-2.0.x.lock +0 -38
  114. data/test/gemfiles/Gemfile.rails-2.1.x +0 -8
  115. data/test/gemfiles/Gemfile.rails-2.1.x.lock +0 -38
  116. data/test/gemfiles/Gemfile.rails-2.2.x +0 -8
  117. data/test/gemfiles/Gemfile.rails-2.2.x.lock +0 -38
  118. data/test/gemfiles/Gemfile.rails-2.3.x +0 -8
  119. data/test/gemfiles/Gemfile.rails-2.3.x.lock +0 -40
  120. data/test/gemfiles/Gemfile.rails-3.0.x.lock +0 -85
  121. data/test/gemfiles/Gemfile.rails-3.1.x.lock +0 -98
  122. data/test/gemfiles/Gemfile.rails-xss-2.3.x +0 -9
  123. data/test/gemfiles/Gemfile.rails-xss-2.3.x.lock +0 -42
  124. data/test/haml/results/filters.xhtml +0 -62
  125. data/test/haml/spec/lua_haml_spec.lua +0 -30
  126. data/test/haml/spec/ruby_haml_test.rb +0 -19
  127. data/test/haml/spec_test.rb +0 -44
  128. data/test/haml/templates/filters.haml +0 -66
  129. data/test/haml/templates/partial_layout.haml +0 -10
  130. data/test/haml/util_test.rb +0 -300
  131. data/test/linked_rails.rb +0 -42
  132. data/vendor/sass/CONTRIBUTING +0 -3
  133. data/vendor/sass/MIT-LICENSE +0 -20
  134. data/vendor/sass/README.md +0 -201
  135. data/vendor/sass/Rakefile +0 -339
  136. data/vendor/sass/TODO +0 -39
  137. data/vendor/sass/VERSION +0 -1
  138. data/vendor/sass/VERSION_NAME +0 -1
  139. data/vendor/sass/bin/sass +0 -8
  140. data/vendor/sass/bin/sass-convert +0 -7
  141. data/vendor/sass/bin/scss +0 -8
  142. data/vendor/sass/doc-src/FAQ.md +0 -35
  143. data/vendor/sass/doc-src/INDENTED_SYNTAX.md +0 -210
  144. data/vendor/sass/doc-src/SASS_CHANGELOG.md +0 -2327
  145. data/vendor/sass/doc-src/SASS_REFERENCE.md +0 -1965
  146. data/vendor/sass/doc-src/SCSS_FOR_SASS_USERS.md +0 -155
  147. data/vendor/sass/ext/extconf.rb +0 -10
  148. data/vendor/sass/extra/update_watch.rb +0 -13
  149. data/vendor/sass/init.rb +0 -18
  150. data/vendor/sass/lib/sass.rb +0 -73
  151. data/vendor/sass/lib/sass/cache_stores.rb +0 -15
  152. data/vendor/sass/lib/sass/cache_stores/base.rb +0 -86
  153. data/vendor/sass/lib/sass/cache_stores/chain.rb +0 -33
  154. data/vendor/sass/lib/sass/cache_stores/filesystem.rb +0 -60
  155. data/vendor/sass/lib/sass/cache_stores/memory.rb +0 -47
  156. data/vendor/sass/lib/sass/cache_stores/null.rb +0 -25
  157. data/vendor/sass/lib/sass/callbacks.rb +0 -66
  158. data/vendor/sass/lib/sass/css.rb +0 -295
  159. data/vendor/sass/lib/sass/engine.rb +0 -878
  160. data/vendor/sass/lib/sass/environment.rb +0 -166
  161. data/vendor/sass/lib/sass/error.rb +0 -201
  162. data/vendor/sass/lib/sass/exec.rb +0 -672
  163. data/vendor/sass/lib/sass/importers.rb +0 -22
  164. data/vendor/sass/lib/sass/importers/base.rb +0 -139
  165. data/vendor/sass/lib/sass/importers/filesystem.rb +0 -149
  166. data/vendor/sass/lib/sass/less.rb +0 -382
  167. data/vendor/sass/lib/sass/logger.rb +0 -15
  168. data/vendor/sass/lib/sass/logger/base.rb +0 -32
  169. data/vendor/sass/lib/sass/logger/log_level.rb +0 -49
  170. data/vendor/sass/lib/sass/plugin.rb +0 -132
  171. data/vendor/sass/lib/sass/plugin/compiler.rb +0 -383
  172. data/vendor/sass/lib/sass/plugin/configuration.rb +0 -123
  173. data/vendor/sass/lib/sass/plugin/generic.rb +0 -15
  174. data/vendor/sass/lib/sass/plugin/merb.rb +0 -48
  175. data/vendor/sass/lib/sass/plugin/rack.rb +0 -60
  176. data/vendor/sass/lib/sass/plugin/rails.rb +0 -47
  177. data/vendor/sass/lib/sass/plugin/staleness_checker.rb +0 -173
  178. data/vendor/sass/lib/sass/railtie.rb +0 -9
  179. data/vendor/sass/lib/sass/repl.rb +0 -58
  180. data/vendor/sass/lib/sass/root.rb +0 -7
  181. data/vendor/sass/lib/sass/script.rb +0 -40
  182. data/vendor/sass/lib/sass/script/bool.rb +0 -18
  183. data/vendor/sass/lib/sass/script/color.rb +0 -480
  184. data/vendor/sass/lib/sass/script/css_lexer.rb +0 -29
  185. data/vendor/sass/lib/sass/script/css_parser.rb +0 -31
  186. data/vendor/sass/lib/sass/script/funcall.rb +0 -175
  187. data/vendor/sass/lib/sass/script/functions.rb +0 -1386
  188. data/vendor/sass/lib/sass/script/interpolation.rb +0 -79
  189. data/vendor/sass/lib/sass/script/lexer.rb +0 -339
  190. data/vendor/sass/lib/sass/script/list.rb +0 -83
  191. data/vendor/sass/lib/sass/script/literal.rb +0 -250
  192. data/vendor/sass/lib/sass/script/node.rb +0 -99
  193. data/vendor/sass/lib/sass/script/number.rb +0 -452
  194. data/vendor/sass/lib/sass/script/operation.rb +0 -99
  195. data/vendor/sass/lib/sass/script/parser.rb +0 -474
  196. data/vendor/sass/lib/sass/script/string.rb +0 -51
  197. data/vendor/sass/lib/sass/script/string_interpolation.rb +0 -103
  198. data/vendor/sass/lib/sass/script/unary_operation.rb +0 -64
  199. data/vendor/sass/lib/sass/script/variable.rb +0 -59
  200. data/vendor/sass/lib/sass/scss.rb +0 -17
  201. data/vendor/sass/lib/sass/scss/css_parser.rb +0 -46
  202. data/vendor/sass/lib/sass/scss/parser.rb +0 -960
  203. data/vendor/sass/lib/sass/scss/rx.rb +0 -128
  204. data/vendor/sass/lib/sass/scss/sass_parser.rb +0 -11
  205. data/vendor/sass/lib/sass/scss/script_lexer.rb +0 -15
  206. data/vendor/sass/lib/sass/scss/script_parser.rb +0 -25
  207. data/vendor/sass/lib/sass/scss/static_parser.rb +0 -40
  208. data/vendor/sass/lib/sass/selector.rb +0 -361
  209. data/vendor/sass/lib/sass/selector/abstract_sequence.rb +0 -62
  210. data/vendor/sass/lib/sass/selector/comma_sequence.rb +0 -81
  211. data/vendor/sass/lib/sass/selector/sequence.rb +0 -233
  212. data/vendor/sass/lib/sass/selector/simple.rb +0 -113
  213. data/vendor/sass/lib/sass/selector/simple_sequence.rb +0 -134
  214. data/vendor/sass/lib/sass/shared.rb +0 -78
  215. data/vendor/sass/lib/sass/tree/charset_node.rb +0 -22
  216. data/vendor/sass/lib/sass/tree/comment_node.rb +0 -90
  217. data/vendor/sass/lib/sass/tree/debug_node.rb +0 -18
  218. data/vendor/sass/lib/sass/tree/directive_node.rb +0 -23
  219. data/vendor/sass/lib/sass/tree/each_node.rb +0 -24
  220. data/vendor/sass/lib/sass/tree/extend_node.rb +0 -29
  221. data/vendor/sass/lib/sass/tree/for_node.rb +0 -36
  222. data/vendor/sass/lib/sass/tree/function_node.rb +0 -27
  223. data/vendor/sass/lib/sass/tree/if_node.rb +0 -52
  224. data/vendor/sass/lib/sass/tree/import_node.rb +0 -68
  225. data/vendor/sass/lib/sass/tree/media_node.rb +0 -32
  226. data/vendor/sass/lib/sass/tree/mixin_def_node.rb +0 -27
  227. data/vendor/sass/lib/sass/tree/mixin_node.rb +0 -32
  228. data/vendor/sass/lib/sass/tree/node.rb +0 -201
  229. data/vendor/sass/lib/sass/tree/prop_node.rb +0 -148
  230. data/vendor/sass/lib/sass/tree/return_node.rb +0 -18
  231. data/vendor/sass/lib/sass/tree/root_node.rb +0 -28
  232. data/vendor/sass/lib/sass/tree/rule_node.rb +0 -136
  233. data/vendor/sass/lib/sass/tree/variable_node.rb +0 -30
  234. data/vendor/sass/lib/sass/tree/visitors/base.rb +0 -75
  235. data/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +0 -133
  236. data/vendor/sass/lib/sass/tree/visitors/convert.rb +0 -260
  237. data/vendor/sass/lib/sass/tree/visitors/cssize.rb +0 -175
  238. data/vendor/sass/lib/sass/tree/visitors/deep_copy.rb +0 -87
  239. data/vendor/sass/lib/sass/tree/visitors/perform.rb +0 -332
  240. data/vendor/sass/lib/sass/tree/visitors/set_options.rb +0 -97
  241. data/vendor/sass/lib/sass/tree/visitors/to_css.rb +0 -210
  242. data/vendor/sass/lib/sass/tree/warn_node.rb +0 -18
  243. data/vendor/sass/lib/sass/tree/while_node.rb +0 -18
  244. data/vendor/sass/lib/sass/util.rb +0 -721
  245. data/vendor/sass/lib/sass/util/subset_map.rb +0 -101
  246. data/vendor/sass/lib/sass/version.rb +0 -112
  247. data/vendor/sass/rails/init.rb +0 -1
  248. data/vendor/sass/sass.gemspec +0 -33
  249. data/vendor/sass/test/Gemfile +0 -4
  250. data/vendor/sass/test/Gemfile.lock +0 -19
  251. data/vendor/sass/test/sass/cache_test.rb +0 -89
  252. data/vendor/sass/test/sass/callbacks_test.rb +0 -61
  253. data/vendor/sass/test/sass/conversion_test.rb +0 -1199
  254. data/vendor/sass/test/sass/css2sass_test.rb +0 -373
  255. data/vendor/sass/test/sass/data/hsl-rgb.txt +0 -319
  256. data/vendor/sass/test/sass/engine_test.rb +0 -2567
  257. data/vendor/sass/test/sass/extend_test.rb +0 -1348
  258. data/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
  259. data/vendor/sass/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
  260. data/vendor/sass/test/sass/functions_test.rb +0 -1038
  261. data/vendor/sass/test/sass/importer_test.rb +0 -192
  262. data/vendor/sass/test/sass/less_conversion_test.rb +0 -653
  263. data/vendor/sass/test/sass/logger_test.rb +0 -58
  264. data/vendor/sass/test/sass/mock_importer.rb +0 -49
  265. data/vendor/sass/test/sass/more_results/more1.css +0 -9
  266. data/vendor/sass/test/sass/more_results/more1_with_line_comments.css +0 -26
  267. data/vendor/sass/test/sass/more_results/more_import.css +0 -29
  268. data/vendor/sass/test/sass/more_templates/_more_partial.sass +0 -2
  269. data/vendor/sass/test/sass/more_templates/more1.sass +0 -23
  270. data/vendor/sass/test/sass/more_templates/more_import.sass +0 -11
  271. data/vendor/sass/test/sass/plugin_test.rb +0 -472
  272. data/vendor/sass/test/sass/results/alt.css +0 -4
  273. data/vendor/sass/test/sass/results/basic.css +0 -9
  274. data/vendor/sass/test/sass/results/compact.css +0 -5
  275. data/vendor/sass/test/sass/results/complex.css +0 -86
  276. data/vendor/sass/test/sass/results/compressed.css +0 -1
  277. data/vendor/sass/test/sass/results/expanded.css +0 -19
  278. data/vendor/sass/test/sass/results/if.css +0 -3
  279. data/vendor/sass/test/sass/results/import.css +0 -31
  280. data/vendor/sass/test/sass/results/import_charset.css +0 -4
  281. data/vendor/sass/test/sass/results/import_charset_1_8.css +0 -4
  282. data/vendor/sass/test/sass/results/import_charset_ibm866.css +0 -4
  283. data/vendor/sass/test/sass/results/line_numbers.css +0 -49
  284. data/vendor/sass/test/sass/results/mixins.css +0 -95
  285. data/vendor/sass/test/sass/results/multiline.css +0 -24
  286. data/vendor/sass/test/sass/results/nested.css +0 -22
  287. data/vendor/sass/test/sass/results/options.css +0 -1
  288. data/vendor/sass/test/sass/results/parent_ref.css +0 -13
  289. data/vendor/sass/test/sass/results/script.css +0 -16
  290. data/vendor/sass/test/sass/results/scss_import.css +0 -31
  291. data/vendor/sass/test/sass/results/scss_importee.css +0 -2
  292. data/vendor/sass/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  293. data/vendor/sass/test/sass/results/subdir/subdir.css +0 -3
  294. data/vendor/sass/test/sass/results/units.css +0 -11
  295. data/vendor/sass/test/sass/results/warn.css +0 -0
  296. data/vendor/sass/test/sass/results/warn_imported.css +0 -0
  297. data/vendor/sass/test/sass/script_conversion_test.rb +0 -285
  298. data/vendor/sass/test/sass/script_test.rb +0 -514
  299. data/vendor/sass/test/sass/scss/css_test.rb +0 -922
  300. data/vendor/sass/test/sass/scss/rx_test.rb +0 -156
  301. data/vendor/sass/test/sass/scss/scss_test.rb +0 -1273
  302. data/vendor/sass/test/sass/scss/test_helper.rb +0 -37
  303. data/vendor/sass/test/sass/templates/_imported_charset_ibm866.sass +0 -4
  304. data/vendor/sass/test/sass/templates/_imported_charset_utf8.sass +0 -4
  305. data/vendor/sass/test/sass/templates/_partial.sass +0 -2
  306. data/vendor/sass/test/sass/templates/alt.sass +0 -16
  307. data/vendor/sass/test/sass/templates/basic.sass +0 -23
  308. data/vendor/sass/test/sass/templates/bork1.sass +0 -2
  309. data/vendor/sass/test/sass/templates/bork2.sass +0 -2
  310. data/vendor/sass/test/sass/templates/bork3.sass +0 -2
  311. data/vendor/sass/test/sass/templates/bork4.sass +0 -2
  312. data/vendor/sass/test/sass/templates/bork5.sass +0 -3
  313. data/vendor/sass/test/sass/templates/compact.sass +0 -17
  314. data/vendor/sass/test/sass/templates/complex.sass +0 -305
  315. data/vendor/sass/test/sass/templates/compressed.sass +0 -15
  316. data/vendor/sass/test/sass/templates/expanded.sass +0 -17
  317. data/vendor/sass/test/sass/templates/if.sass +0 -11
  318. data/vendor/sass/test/sass/templates/import.sass +0 -12
  319. data/vendor/sass/test/sass/templates/import_charset.sass +0 -7
  320. data/vendor/sass/test/sass/templates/import_charset_1_8.sass +0 -4
  321. data/vendor/sass/test/sass/templates/import_charset_ibm866.sass +0 -9
  322. data/vendor/sass/test/sass/templates/importee.less +0 -2
  323. data/vendor/sass/test/sass/templates/importee.sass +0 -19
  324. data/vendor/sass/test/sass/templates/line_numbers.sass +0 -13
  325. data/vendor/sass/test/sass/templates/mixin_bork.sass +0 -5
  326. data/vendor/sass/test/sass/templates/mixins.sass +0 -76
  327. data/vendor/sass/test/sass/templates/multiline.sass +0 -20
  328. data/vendor/sass/test/sass/templates/nested.sass +0 -25
  329. data/vendor/sass/test/sass/templates/nested_bork1.sass +0 -2
  330. data/vendor/sass/test/sass/templates/nested_bork2.sass +0 -2
  331. data/vendor/sass/test/sass/templates/nested_bork3.sass +0 -2
  332. data/vendor/sass/test/sass/templates/nested_bork4.sass +0 -2
  333. data/vendor/sass/test/sass/templates/nested_bork5.sass +0 -2
  334. data/vendor/sass/test/sass/templates/nested_import.sass +0 -2
  335. data/vendor/sass/test/sass/templates/nested_mixin_bork.sass +0 -6
  336. data/vendor/sass/test/sass/templates/options.sass +0 -2
  337. data/vendor/sass/test/sass/templates/parent_ref.sass +0 -25
  338. data/vendor/sass/test/sass/templates/script.sass +0 -101
  339. data/vendor/sass/test/sass/templates/scss_import.scss +0 -11
  340. data/vendor/sass/test/sass/templates/scss_importee.scss +0 -1
  341. data/vendor/sass/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  342. data/vendor/sass/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  343. data/vendor/sass/test/sass/templates/subdir/subdir.sass +0 -6
  344. data/vendor/sass/test/sass/templates/units.sass +0 -11
  345. data/vendor/sass/test/sass/templates/warn.sass +0 -3
  346. data/vendor/sass/test/sass/templates/warn_imported.sass +0 -4
  347. data/vendor/sass/test/sass/test_helper.rb +0 -8
  348. data/vendor/sass/test/sass/util/subset_map_test.rb +0 -91
  349. data/vendor/sass/test/sass/util_test.rb +0 -266
  350. data/vendor/sass/test/test_helper.rb +0 -69
  351. data/vendor/sass/vendor/fssm/Gemfile +0 -3
  352. data/vendor/sass/vendor/fssm/LICENSE +0 -20
  353. data/vendor/sass/vendor/fssm/README.markdown +0 -83
  354. data/vendor/sass/vendor/fssm/Rakefile +0 -11
  355. data/vendor/sass/vendor/fssm/example.rb +0 -12
  356. data/vendor/sass/vendor/fssm/fssm.gemspec +0 -24
  357. data/vendor/sass/vendor/fssm/lib/fssm.rb +0 -37
  358. data/vendor/sass/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
  359. data/vendor/sass/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
  360. data/vendor/sass/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
  361. data/vendor/sass/vendor/fssm/lib/fssm/backends/rbfsevent.rb +0 -42
  362. data/vendor/sass/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
  363. data/vendor/sass/vendor/fssm/lib/fssm/monitor.rb +0 -36
  364. data/vendor/sass/vendor/fssm/lib/fssm/path.rb +0 -94
  365. data/vendor/sass/vendor/fssm/lib/fssm/pathname.rb +0 -36
  366. data/vendor/sass/vendor/fssm/lib/fssm/state/directory.rb +0 -75
  367. data/vendor/sass/vendor/fssm/lib/fssm/state/file.rb +0 -24
  368. data/vendor/sass/vendor/fssm/lib/fssm/support.rb +0 -92
  369. data/vendor/sass/vendor/fssm/lib/fssm/tree.rb +0 -176
  370. data/vendor/sass/vendor/fssm/lib/fssm/version.rb +0 -3
  371. data/vendor/sass/vendor/fssm/profile/prof-cache.rb +0 -40
  372. data/vendor/sass/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
  373. data/vendor/sass/vendor/fssm/profile/prof-pathname-rubinius.rb +0 -35
  374. data/vendor/sass/vendor/fssm/profile/prof-pathname.rb +0 -68
  375. data/vendor/sass/vendor/fssm/profile/prof-plain-pathname.html +0 -988
  376. data/vendor/sass/vendor/fssm/profile/prof.html +0 -2379
  377. data/vendor/sass/vendor/fssm/spec/count_down_latch.rb +0 -151
  378. data/vendor/sass/vendor/fssm/spec/monitor_spec.rb +0 -202
  379. data/vendor/sass/vendor/fssm/spec/path_spec.rb +0 -96
  380. data/vendor/sass/vendor/fssm/spec/root/duck/quack.txt +0 -0
  381. data/vendor/sass/vendor/fssm/spec/root/file.css +0 -0
  382. data/vendor/sass/vendor/fssm/spec/root/file.rb +0 -0
  383. data/vendor/sass/vendor/fssm/spec/root/file.yml +0 -0
  384. data/vendor/sass/vendor/fssm/spec/root/moo/cow.txt +0 -0
  385. data/vendor/sass/vendor/fssm/spec/spec_helper.rb +0 -14
  386. data/vendor/sass/yard/callbacks.rb +0 -29
  387. data/vendor/sass/yard/default/fulldoc/html/css/common.sass +0 -26
  388. data/vendor/sass/yard/default/layout/html/footer.erb +0 -12
  389. data/vendor/sass/yard/inherited_hash.rb +0 -41
@@ -1,1038 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'test/unit'
3
- require File.dirname(__FILE__) + '/../test_helper'
4
- require 'sass/script'
5
-
6
- module Sass::Script::Functions
7
- def no_kw_args
8
- Sass::Script::String.new("no-kw-args")
9
- end
10
-
11
- def only_var_args(*args)
12
- Sass::Script::String.new("only-var-args("+args.map{|a| a.plus(Sass::Script::Number.new(1)).to_s }.join(", ")+")")
13
- end
14
- declare :only_var_args, [], :var_args => true
15
-
16
- def only_kw_args(kwargs)
17
- Sass::Script::String.new("only-kw-args(" + kwargs.keys.map {|a| a.to_s}.sort.join(", ") + ")")
18
- end
19
- declare :only_kw_args, [], :var_kwargs => true
20
- end
21
-
22
- module Sass::Script::Functions::UserFunctions
23
- def call_options_on_new_literal
24
- str = Sass::Script::String.new("foo")
25
- str.options[:foo]
26
- str
27
- end
28
-
29
- def user_defined
30
- Sass::Script::String.new("I'm a user-defined string!")
31
- end
32
-
33
- def _preceding_underscore
34
- Sass::Script::String.new("I'm another user-defined string!")
35
- end
36
- end
37
-
38
- module Sass::Script::Functions
39
- include Sass::Script::Functions::UserFunctions
40
- end
41
-
42
- class SassFunctionTest < Test::Unit::TestCase
43
- # Tests taken from:
44
- # http://www.w3.org/Style/CSS/Test/CSS3/Color/20070927/html4/t040204-hsl-h-rotating-b.htm
45
- # http://www.w3.org/Style/CSS/Test/CSS3/Color/20070927/html4/t040204-hsl-values-b.htm
46
- File.read(File.dirname(__FILE__) + "/data/hsl-rgb.txt").split("\n\n").each do |chunk|
47
- hsls, rgbs = chunk.strip.split("====")
48
- hsls.strip.split("\n").zip(rgbs.strip.split("\n")) do |hsl, rgb|
49
- hsl_method = "test_hsl: #{hsl} = #{rgb}"
50
- define_method(hsl_method) do
51
- assert_equal(evaluate(rgb), evaluate(hsl))
52
- end
53
-
54
- rgb_to_hsl_method = "test_rgb_to_hsl: #{rgb} = #{hsl}"
55
- define_method(rgb_to_hsl_method) do
56
- rgb_color = perform(rgb)
57
- hsl_color = perform(hsl)
58
-
59
- white = hsl_color.lightness == 100
60
- black = hsl_color.lightness == 0
61
- grayscale = white || black || hsl_color.saturation == 0
62
-
63
- assert_in_delta(hsl_color.hue, rgb_color.hue, 0.0001,
64
- "Hues should be equal") unless grayscale
65
- assert_in_delta(hsl_color.saturation, rgb_color.saturation, 0.0001,
66
- "Saturations should be equal") unless white || black
67
- assert_in_delta(hsl_color.lightness, rgb_color.lightness, 0.0001,
68
- "Lightnesses should be equal")
69
- end
70
- end
71
- end
72
-
73
- def test_hsl_kwargs
74
- assert_equal "#33cccc", evaluate("hsl($hue: 180, $saturation: 60%, $lightness: 50%)")
75
- end
76
-
77
- def test_hsl_checks_bounds
78
- assert_error_message("Saturation -114 must be between 0% and 100% for `hsl'", "hsl(10, -114, 12)");
79
- assert_error_message("Lightness 256 must be between 0% and 100% for `hsl'", "hsl(10, 10, 256%)");
80
- end
81
-
82
- def test_hsl_checks_types
83
- assert_error_message("\"foo\" is not a number for `hsl'", "hsl(\"foo\", 10, 12)");
84
- assert_error_message("\"foo\" is not a number for `hsl'", "hsl(10, \"foo\", 12)");
85
- assert_error_message("\"foo\" is not a number for `hsl'", "hsl(10, 10, \"foo\")");
86
- end
87
-
88
- def test_hsla
89
- assert_equal "rgba(51, 204, 204, 0.4)", evaluate("hsla(180, 60%, 50%, 0.4)")
90
- assert_equal "#33cccc", evaluate("hsla(180, 60%, 50%, 1)")
91
- assert_equal "rgba(51, 204, 204, 0)", evaluate("hsla(180, 60%, 50%, 0)")
92
- assert_equal "rgba(51, 204, 204, 0.4)", evaluate("hsla($hue: 180, $saturation: 60%, $lightness: 50%, $alpha: 0.4)")
93
- end
94
-
95
- def test_hsla_checks_bounds
96
- assert_error_message("Saturation -114 must be between 0% and 100% for `hsla'", "hsla(10, -114, 12, 1)");
97
- assert_error_message("Lightness 256 must be between 0% and 100% for `hsla'", "hsla(10, 10, 256%, 0)");
98
- assert_error_message("Alpha channel -0.1 must be between 0 and 1 for `hsla'", "hsla(10, 10, 10, -0.1)");
99
- assert_error_message("Alpha channel 1.1 must be between 0 and 1 for `hsla'", "hsla(10, 10, 10, 1.1)");
100
- end
101
-
102
- def test_hsla_checks_types
103
- assert_error_message("\"foo\" is not a number for `hsla'", "hsla(\"foo\", 10, 12, 0.3)");
104
- assert_error_message("\"foo\" is not a number for `hsla'", "hsla(10, \"foo\", 12, 0)");
105
- assert_error_message("\"foo\" is not a number for `hsla'", "hsla(10, 10, \"foo\", 1)");
106
- assert_error_message("\"foo\" is not a number for `hsla'", "hsla(10, 10, 10, \"foo\")");
107
- end
108
-
109
- def test_percentage
110
- assert_equal("50%", evaluate("percentage(.5)"))
111
- assert_equal("100%", evaluate("percentage(1)"))
112
- assert_equal("25%", evaluate("percentage(25px / 100px)"))
113
- assert_equal("50%", evaluate("percentage($value: 0.5)"))
114
- end
115
-
116
- def test_percentage_checks_types
117
- assert_error_message("25px is not a unitless number for `percentage'", "percentage(25px)")
118
- assert_error_message("#cccccc is not a unitless number for `percentage'", "percentage(#ccc)")
119
- assert_error_message("\"string\" is not a unitless number for `percentage'", %Q{percentage("string")})
120
- end
121
-
122
- def test_round
123
- assert_equal("5", evaluate("round(4.8)"))
124
- assert_equal("5px", evaluate("round(4.8px)"))
125
- assert_equal("5px", evaluate("round(5.49px)"))
126
- assert_equal("5px", evaluate("round($value: 5.49px)"))
127
-
128
- assert_error_message("#cccccc is not a number for `round'", "round(#ccc)")
129
- end
130
-
131
- def test_floor
132
- assert_equal("4", evaluate("floor(4.8)"))
133
- assert_equal("4px", evaluate("floor(4.8px)"))
134
- assert_equal("4px", evaluate("floor($value: 4.8px)"))
135
-
136
- assert_error_message("\"foo\" is not a number for `floor'", "floor(\"foo\")")
137
- end
138
-
139
- def test_ceil
140
- assert_equal("5", evaluate("ceil(4.1)"))
141
- assert_equal("5px", evaluate("ceil(4.8px)"))
142
- assert_equal("5px", evaluate("ceil($value: 4.8px)"))
143
-
144
- assert_error_message("\"a\" is not a number for `ceil'", "ceil(\"a\")")
145
- end
146
-
147
- def test_abs
148
- assert_equal("5", evaluate("abs(-5)"))
149
- assert_equal("5px", evaluate("abs(-5px)"))
150
- assert_equal("5", evaluate("abs(5)"))
151
- assert_equal("5px", evaluate("abs(5px)"))
152
- assert_equal("5px", evaluate("abs($value: 5px)"))
153
-
154
- assert_error_message("#aaaaaa is not a number for `abs'", "abs(#aaa)")
155
- end
156
-
157
- def test_rgb
158
- assert_equal("#123456", evaluate("rgb(18, 52, 86)"))
159
- assert_equal("#beaded", evaluate("rgb(190, 173, 237)"))
160
- assert_equal("#00ff7f", evaluate("rgb(0, 255, 127)"))
161
- assert_equal("#00ff7f", evaluate("rgb($red: 0, $green: 255, $blue: 127)"))
162
- end
163
-
164
- def test_rgb_percent
165
- assert_equal("#123456", evaluate("rgb(7.1%, 20.4%, 34%)"))
166
- assert_equal("#beaded", evaluate("rgb(74.7%, 173, 93%)"))
167
- assert_equal("#beaded", evaluate("rgb(190, 68%, 237)"))
168
- assert_equal("#00ff7f", evaluate("rgb(0%, 100%, 50%)"))
169
- end
170
-
171
- def test_rgb_tests_bounds
172
- assert_error_message("Color value 256 must be between 0 and 255 inclusive for `rgb'",
173
- "rgb(256, 1, 1)")
174
- assert_error_message("Color value 256 must be between 0 and 255 inclusive for `rgb'",
175
- "rgb(1, 256, 1)")
176
- assert_error_message("Color value 256 must be between 0 and 255 inclusive for `rgb'",
177
- "rgb(1, 1, 256)")
178
- assert_error_message("Color value 256 must be between 0 and 255 inclusive for `rgb'",
179
- "rgb(1, 256, 257)")
180
- assert_error_message("Color value -1 must be between 0 and 255 inclusive for `rgb'",
181
- "rgb(-1, 1, 1)")
182
- end
183
-
184
- def test_rgb_test_percent_bounds
185
- assert_error_message("Color value 100.1% must be between 0% and 100% inclusive for `rgb'",
186
- "rgb(100.1%, 0, 0)")
187
- assert_error_message("Color value -0.1% must be between 0% and 100% inclusive for `rgb'",
188
- "rgb(0, -0.1%, 0)")
189
- assert_error_message("Color value 101% must be between 0% and 100% inclusive for `rgb'",
190
- "rgb(0, 0, 101%)")
191
- end
192
-
193
- def test_rgb_tests_types
194
- assert_error_message("\"foo\" is not a number for `rgb'", "rgb(\"foo\", 10, 12)");
195
- assert_error_message("\"foo\" is not a number for `rgb'", "rgb(10, \"foo\", 12)");
196
- assert_error_message("\"foo\" is not a number for `rgb'", "rgb(10, 10, \"foo\")");
197
- end
198
-
199
- def test_rgba
200
- assert_equal("rgba(18, 52, 86, 0.5)", evaluate("rgba(18, 52, 86, 0.5)"))
201
- assert_equal("#beaded", evaluate("rgba(190, 173, 237, 1)"))
202
- assert_equal("rgba(0, 255, 127, 0)", evaluate("rgba(0, 255, 127, 0)"))
203
- assert_equal("rgba(0, 255, 127, 0)", evaluate("rgba($red: 0, $green: 255, $blue: 127, $alpha: 0)"))
204
- end
205
-
206
- def test_rgb_tests_bounds
207
- assert_error_message("Color value 256 must be between 0 and 255 inclusive for `rgba'",
208
- "rgba(256, 1, 1, 0.3)")
209
- assert_error_message("Color value 256 must be between 0 and 255 inclusive for `rgba'",
210
- "rgba(1, 256, 1, 0.3)")
211
- assert_error_message("Color value 256 must be between 0 and 255 inclusive for `rgba'",
212
- "rgba(1, 1, 256, 0.3)")
213
- assert_error_message("Color value 256 must be between 0 and 255 inclusive for `rgba'",
214
- "rgba(1, 256, 257, 0.3)")
215
- assert_error_message("Color value -1 must be between 0 and 255 inclusive for `rgba'",
216
- "rgba(-1, 1, 1, 0.3)")
217
- assert_error_message("Alpha channel -0.2 must be between 0 and 1 inclusive for `rgba'",
218
- "rgba(1, 1, 1, -0.2)")
219
- assert_error_message("Alpha channel 1.2 must be between 0 and 1 inclusive for `rgba'",
220
- "rgba(1, 1, 1, 1.2)")
221
- end
222
-
223
- def test_rgba_tests_types
224
- assert_error_message("\"foo\" is not a number for `rgba'", "rgba(\"foo\", 10, 12, 0.2)");
225
- assert_error_message("\"foo\" is not a number for `rgba'", "rgba(10, \"foo\", 12, 0.1)");
226
- assert_error_message("\"foo\" is not a number for `rgba'", "rgba(10, 10, \"foo\", 0)");
227
- assert_error_message("\"foo\" is not a number for `rgba'", "rgba(10, 10, 10, \"foo\")");
228
- end
229
-
230
- def test_rgba_with_color
231
- assert_equal "rgba(16, 32, 48, 0.5)", evaluate("rgba(#102030, 0.5)")
232
- assert_equal "rgba(0, 0, 255, 0.5)", evaluate("rgba(blue, 0.5)")
233
- assert_equal "rgba(0, 0, 255, 0.5)", evaluate("rgba($color: blue, $alpha: 0.5)")
234
- end
235
-
236
- def test_rgba_with_color_tests_types
237
- assert_error_message("\"foo\" is not a color for `rgba'", "rgba(\"foo\", 0.2)");
238
- assert_error_message("\"foo\" is not a number for `rgba'", "rgba(blue, \"foo\")");
239
- end
240
-
241
- def test_rgba_tests_num_args
242
- assert_error_message("wrong number of arguments (0 for 4) for `rgba'", "rgba()");
243
- assert_error_message("wrong number of arguments (1 for 4) for `rgba'", "rgba(blue)");
244
- assert_error_message("wrong number of arguments (3 for 4) for `rgba'", "rgba(1, 2, 3)");
245
- assert_error_message("wrong number of arguments (5 for 4) for `rgba'", "rgba(1, 2, 3, 0.4, 5)");
246
- end
247
-
248
- def test_red
249
- assert_equal("18", evaluate("red(#123456)"))
250
- assert_equal("18", evaluate("red($color: #123456)"))
251
- end
252
-
253
- def test_red_exception
254
- assert_error_message("12 is not a color for `red'", "red(12)")
255
- end
256
-
257
- def test_green
258
- assert_equal("52", evaluate("green(#123456)"))
259
- assert_equal("52", evaluate("green($color: #123456)"))
260
- end
261
-
262
- def test_green_exception
263
- assert_error_message("12 is not a color for `green'", "green(12)")
264
- end
265
-
266
- def test_blue
267
- assert_equal("86", evaluate("blue(#123456)"))
268
- assert_equal("86", evaluate("blue($color: #123456)"))
269
- end
270
-
271
- def test_blue_exception
272
- assert_error_message("12 is not a color for `blue'", "blue(12)")
273
- end
274
-
275
- def test_hue
276
- assert_equal("18deg", evaluate("hue(hsl(18, 50%, 20%))"))
277
- assert_equal("18deg", evaluate("hue($color: hsl(18, 50%, 20%))"))
278
- end
279
-
280
- def test_hue_exception
281
- assert_error_message("12 is not a color for `hue'", "hue(12)")
282
- end
283
-
284
- def test_saturation
285
- assert_equal("52%", evaluate("saturation(hsl(20, 52%, 20%))"))
286
- assert_equal("52%", evaluate("saturation(hsl(20, 52, 20%))"))
287
- assert_equal("52%", evaluate("saturation($color: hsl(20, 52, 20%))"))
288
- end
289
-
290
- def test_saturation_exception
291
- assert_error_message("12 is not a color for `saturation'", "saturation(12)")
292
- end
293
-
294
- def test_lightness
295
- assert_equal("86%", evaluate("lightness(hsl(120, 50%, 86%))"))
296
- assert_equal("86%", evaluate("lightness(hsl(120, 50%, 86))"))
297
- assert_equal("86%", evaluate("lightness($color: hsl(120, 50%, 86))"))
298
- end
299
-
300
- def test_lightness_exception
301
- assert_error_message("12 is not a color for `lightness'", "lightness(12)")
302
- end
303
-
304
- def test_alpha
305
- assert_equal("1", evaluate("alpha(#123456)"))
306
- assert_equal("0.34", evaluate("alpha(rgba(0, 1, 2, 0.34))"))
307
- assert_equal("0", evaluate("alpha(hsla(0, 1, 2, 0))"))
308
- assert_equal("0", evaluate("alpha($color: hsla(0, 1, 2, 0))"))
309
- end
310
-
311
- def test_alpha_exception
312
- assert_error_message("12 is not a color for `alpha'", "alpha(12)")
313
- end
314
-
315
- def test_opacify
316
- assert_equal("rgba(0, 0, 0, 0.75)", evaluate("opacify(rgba(0, 0, 0, 0.5), 0.25)"))
317
- assert_equal("rgba(0, 0, 0, 0.3)", evaluate("opacify(rgba(0, 0, 0, 0.2), 0.1)"))
318
- assert_equal("rgba(0, 0, 0, 0.7)", evaluate("fade-in(rgba(0, 0, 0, 0.2), 0.5px)"))
319
- assert_equal("black", evaluate("fade_in(rgba(0, 0, 0, 0.2), 0.8)"))
320
- assert_equal("black", evaluate("opacify(rgba(0, 0, 0, 0.2), 1)"))
321
- assert_equal("rgba(0, 0, 0, 0.2)", evaluate("opacify(rgba(0, 0, 0, 0.2), 0%)"))
322
- assert_equal("rgba(0, 0, 0, 0.2)", evaluate("opacify($color: rgba(0, 0, 0, 0.2), $amount: 0%)"))
323
- assert_equal("rgba(0, 0, 0, 0.2)", evaluate("fade-in($color: rgba(0, 0, 0, 0.2), $amount: 0%)"))
324
- end
325
-
326
- def test_opacify_tests_bounds
327
- assert_error_message("Amount -0.001 must be between 0 and 1 for `opacify'",
328
- "opacify(rgba(0, 0, 0, 0.2), -0.001)")
329
- assert_error_message("Amount 1.001 must be between 0 and 1 for `opacify'",
330
- "opacify(rgba(0, 0, 0, 0.2), 1.001)")
331
- end
332
-
333
- def test_opacify_tests_types
334
- assert_error_message("\"foo\" is not a color for `opacify'", "opacify(\"foo\", 10%)")
335
- assert_error_message("\"foo\" is not a number for `opacify'", "opacify(#fff, \"foo\")")
336
- end
337
-
338
- def test_transparentize
339
- assert_equal("rgba(0, 0, 0, 0.3)", evaluate("transparentize(rgba(0, 0, 0, 0.5), 0.2)"))
340
- assert_equal("rgba(0, 0, 0, 0.1)", evaluate("transparentize(rgba(0, 0, 0, 0.2), 0.1)"))
341
- assert_equal("rgba(0, 0, 0, 0.2)", evaluate("fade-out(rgba(0, 0, 0, 0.5), 0.3px)"))
342
- assert_equal("rgba(0, 0, 0, 0)", evaluate("fade_out(rgba(0, 0, 0, 0.2), 0.2)"))
343
- assert_equal("rgba(0, 0, 0, 0)", evaluate("transparentize(rgba(0, 0, 0, 0.2), 1)"))
344
- assert_equal("rgba(0, 0, 0, 0.2)", evaluate("transparentize(rgba(0, 0, 0, 0.2), 0)"))
345
- assert_equal("rgba(0, 0, 0, 0.2)", evaluate("transparentize($color: rgba(0, 0, 0, 0.2), $amount: 0)"))
346
- assert_equal("rgba(0, 0, 0, 0.2)", evaluate("fade-out($color: rgba(0, 0, 0, 0.2), $amount: 0)"))
347
- end
348
-
349
- def test_transparentize_tests_bounds
350
- assert_error_message("Amount -0.001 must be between 0 and 1 for `transparentize'",
351
- "transparentize(rgba(0, 0, 0, 0.2), -0.001)")
352
- assert_error_message("Amount 1.001 must be between 0 and 1 for `transparentize'",
353
- "transparentize(rgba(0, 0, 0, 0.2), 1.001)")
354
- end
355
-
356
- def test_transparentize_tests_types
357
- assert_error_message("\"foo\" is not a color for `transparentize'", "transparentize(\"foo\", 10%)")
358
- assert_error_message("\"foo\" is not a number for `transparentize'", "transparentize(#fff, \"foo\")")
359
- end
360
-
361
- def test_lighten
362
- assert_equal("#4d4d4d", evaluate("lighten(hsl(0, 0, 0), 30%)"))
363
- assert_equal("#ee0000", evaluate("lighten(#800, 20%)"))
364
- assert_equal("white", evaluate("lighten(#fff, 20%)"))
365
- assert_equal("white", evaluate("lighten(#800, 100%)"))
366
- assert_equal("#880000", evaluate("lighten(#800, 0%)"))
367
- assert_equal("rgba(238, 0, 0, 0.5)", evaluate("lighten(rgba(136, 0, 0, 0.5), 20%)"))
368
- assert_equal("rgba(238, 0, 0, 0.5)", evaluate("lighten($color: rgba(136, 0, 0, 0.5), $amount: 20%)"))
369
- end
370
-
371
- def test_lighten_tests_bounds
372
- assert_error_message("Amount -0.001 must be between 0% and 100% for `lighten'",
373
- "lighten(#123, -0.001)")
374
- assert_error_message("Amount 100.001 must be between 0% and 100% for `lighten'",
375
- "lighten(#123, 100.001)")
376
- end
377
-
378
- def test_lighten_tests_types
379
- assert_error_message("\"foo\" is not a color for `lighten'", "lighten(\"foo\", 10%)")
380
- assert_error_message("\"foo\" is not a number for `lighten'", "lighten(#fff, \"foo\")")
381
- end
382
-
383
- def test_darken
384
- assert_equal("#ff6a00", evaluate("darken(hsl(25, 100, 80), 30%)"))
385
- assert_equal("#220000", evaluate("darken(#800, 20%)"))
386
- assert_equal("black", evaluate("darken(#000, 20%)"))
387
- assert_equal("black", evaluate("darken(#800, 100%)"))
388
- assert_equal("#880000", evaluate("darken(#800, 0%)"))
389
- assert_equal("rgba(34, 0, 0, 0.5)", evaluate("darken(rgba(136, 0, 0, 0.5), 20%)"))
390
- assert_equal("rgba(34, 0, 0, 0.5)", evaluate("darken($color: rgba(136, 0, 0, 0.5), $amount: 20%)"))
391
- end
392
-
393
- def test_darken_tests_bounds
394
- assert_error_message("Amount -0.001 must be between 0% and 100% for `darken'",
395
- "darken(#123, -0.001)")
396
- assert_error_message("Amount 100.001 must be between 0% and 100% for `darken'",
397
- "darken(#123, 100.001)")
398
- end
399
-
400
- def test_darken_tests_types
401
- assert_error_message("\"foo\" is not a color for `darken'", "darken(\"foo\", 10%)")
402
- assert_error_message("\"foo\" is not a number for `darken'", "darken(#fff, \"foo\")")
403
- end
404
-
405
- def test_saturate
406
- assert_equal("#d9f2d9", evaluate("saturate(hsl(120, 30, 90), 20%)"))
407
- assert_equal("#9e3f3f", evaluate("saturate(#855, 20%)"))
408
- assert_equal("black", evaluate("saturate(#000, 20%)"))
409
- assert_equal("white", evaluate("saturate(#fff, 20%)"))
410
- assert_equal("#33ff33", evaluate("saturate(#8a8, 100%)"))
411
- assert_equal("#88aa88", evaluate("saturate(#8a8, 0%)"))
412
- assert_equal("rgba(158, 63, 63, 0.5)", evaluate("saturate(rgba(136, 85, 85, 0.5), 20%)"))
413
- assert_equal("rgba(158, 63, 63, 0.5)", evaluate("saturate($color: rgba(136, 85, 85, 0.5), $amount: 20%)"))
414
- end
415
-
416
- def test_saturate_tests_bounds
417
- assert_error_message("Amount -0.001 must be between 0% and 100% for `saturate'",
418
- "saturate(#123, -0.001)")
419
- assert_error_message("Amount 100.001 must be between 0% and 100% for `saturate'",
420
- "saturate(#123, 100.001)")
421
- end
422
-
423
- def test_saturate_tests_types
424
- assert_error_message("\"foo\" is not a color for `saturate'", "saturate(\"foo\", 10%)")
425
- assert_error_message("\"foo\" is not a number for `saturate'", "saturate(#fff, \"foo\")")
426
- end
427
-
428
- def test_desaturate
429
- assert_equal("#e3e8e3", evaluate("desaturate(hsl(120, 30, 90), 20%)"))
430
- assert_equal("#726b6b", evaluate("desaturate(#855, 20%)"))
431
- assert_equal("black", evaluate("desaturate(#000, 20%)"))
432
- assert_equal("white", evaluate("desaturate(#fff, 20%)"))
433
- assert_equal("#999999", evaluate("desaturate(#8a8, 100%)"))
434
- assert_equal("#88aa88", evaluate("desaturate(#8a8, 0%)"))
435
- assert_equal("rgba(114, 107, 107, 0.5)", evaluate("desaturate(rgba(136, 85, 85, 0.5), 20%)"))
436
- assert_equal("rgba(114, 107, 107, 0.5)", evaluate("desaturate($color: rgba(136, 85, 85, 0.5), $amount: 20%)"))
437
- end
438
-
439
- def test_desaturate_tests_bounds
440
- assert_error_message("Amount -0.001 must be between 0% and 100% for `desaturate'",
441
- "desaturate(#123, -0.001)")
442
- assert_error_message("Amount 100.001 must be between 0% and 100% for `desaturate'",
443
- "desaturate(#123, 100.001)")
444
- end
445
-
446
- def test_desaturate_tests_types
447
- assert_error_message("\"foo\" is not a color for `desaturate'", "desaturate(\"foo\", 10%)")
448
- assert_error_message("\"foo\" is not a number for `desaturate'", "desaturate(#fff, \"foo\")")
449
- end
450
-
451
- def test_adjust_hue
452
- assert_equal("#deeded", evaluate("adjust-hue(hsl(120, 30, 90), 60deg)"))
453
- assert_equal("#ededde", evaluate("adjust-hue(hsl(120, 30, 90), -60deg)"))
454
- assert_equal("#886a11", evaluate("adjust-hue(#811, 45deg)"))
455
- assert_equal("black", evaluate("adjust-hue(#000, 45deg)"))
456
- assert_equal("white", evaluate("adjust-hue(#fff, 45deg)"))
457
- assert_equal("#88aa88", evaluate("adjust-hue(#8a8, 360deg)"))
458
- assert_equal("#88aa88", evaluate("adjust-hue(#8a8, 0deg)"))
459
- assert_equal("rgba(136, 106, 17, 0.5)", evaluate("adjust-hue(rgba(136, 17, 17, 0.5), 45deg)"))
460
- assert_equal("rgba(136, 106, 17, 0.5)", evaluate("adjust-hue($color: rgba(136, 17, 17, 0.5), $degrees: 45deg)"))
461
- end
462
-
463
- def test_adjust_hue_tests_types
464
- assert_error_message("\"foo\" is not a color for `adjust-hue'", "adjust-hue(\"foo\", 10%)")
465
- assert_error_message("\"foo\" is not a number for `adjust-hue'", "adjust-hue(#fff, \"foo\")")
466
- end
467
-
468
- def test_adjust_color
469
- # HSL
470
- assert_equal(evaluate("hsl(180, 30, 90)"),
471
- evaluate("adjust-color(hsl(120, 30, 90), $hue: 60deg)"))
472
- assert_equal(evaluate("hsl(120, 50, 90)"),
473
- evaluate("adjust-color(hsl(120, 30, 90), $saturation: 20%)"))
474
- assert_equal(evaluate("hsl(120, 30, 60)"),
475
- evaluate("adjust-color(hsl(120, 30, 90), $lightness: -30%)"))
476
- # RGB
477
- assert_equal(evaluate("rgb(15, 20, 30)"),
478
- evaluate("adjust-color(rgb(10, 20, 30), $red: 5)"))
479
- assert_equal(evaluate("rgb(10, 15, 30)"),
480
- evaluate("adjust-color(rgb(10, 20, 30), $green: -5)"))
481
- assert_equal(evaluate("rgb(10, 20, 40)"),
482
- evaluate("adjust-color(rgb(10, 20, 30), $blue: 10)"))
483
- # Alpha
484
- assert_equal(evaluate("hsla(120, 30, 90, 0.65)"),
485
- evaluate("adjust-color(hsl(120, 30, 90), $alpha: -0.35)"))
486
- assert_equal(evaluate("rgba(10, 20, 30, 0.9)"),
487
- evaluate("adjust-color(rgba(10, 20, 30, 0.4), $alpha: 0.5)"))
488
-
489
- # HSL composability
490
- assert_equal(evaluate("hsl(180, 20, 90)"),
491
- evaluate("adjust-color(hsl(120, 30, 90), $hue: 60deg, $saturation: -10%)"))
492
- assert_equal(evaluate("hsl(180, 20, 95)"),
493
- evaluate("adjust-color(hsl(120, 30, 90), $hue: 60deg, $saturation: -10%, $lightness: 5%)"))
494
- assert_equal(evaluate("hsla(120, 20, 95, 0.3)"),
495
- evaluate("adjust-color(hsl(120, 30, 90), $saturation: -10%, $lightness: 5%, $alpha: -0.7)"))
496
-
497
- # RGB composability
498
- assert_equal(evaluate("rgb(15, 20, 29)"),
499
- evaluate("adjust-color(rgb(10, 20, 30), $red: 5, $blue: -1)"))
500
- assert_equal(evaluate("rgb(15, 45, 29)"),
501
- evaluate("adjust-color(rgb(10, 20, 30), $red: 5, $green: 25, $blue: -1)"))
502
- assert_equal(evaluate("rgba(10, 25, 29, 0.7)"),
503
- evaluate("adjust-color(rgb(10, 20, 30), $green: 5, $blue: -1, $alpha: -0.3)"))
504
-
505
- # HSL range restriction
506
- assert_equal(evaluate("hsl(120, 30, 90)"),
507
- evaluate("adjust-color(hsl(120, 30, 90), $hue: 720deg)"))
508
- assert_equal(evaluate("hsl(120, 0, 90)"),
509
- evaluate("adjust-color(hsl(120, 30, 90), $saturation: -90%)"))
510
- assert_equal(evaluate("hsl(120, 30, 100)"),
511
- evaluate("adjust-color(hsl(120, 30, 90), $lightness: 30%)"))
512
-
513
- # RGB range restriction
514
- assert_equal(evaluate("rgb(255, 20, 30)"),
515
- evaluate("adjust-color(rgb(10, 20, 30), $red: 250)"))
516
- assert_equal(evaluate("rgb(10, 0, 30)"),
517
- evaluate("adjust-color(rgb(10, 20, 30), $green: -30)"))
518
- assert_equal(evaluate("rgb(10, 20, 0)"),
519
- evaluate("adjust-color(rgb(10, 20, 30), $blue: -40)"))
520
- end
521
-
522
- def test_adjust_color_tests_types
523
- assert_error_message("\"foo\" is not a color for `adjust-color'", "adjust-color(foo, $hue: 10)")
524
- # HSL
525
- assert_error_message("$hue: \"foo\" is not a number for `adjust-color'",
526
- "adjust-color(blue, $hue: foo)")
527
- assert_error_message("$saturation: \"foo\" is not a number for `adjust-color'",
528
- "adjust-color(blue, $saturation: foo)")
529
- assert_error_message("$lightness: \"foo\" is not a number for `adjust-color'",
530
- "adjust-color(blue, $lightness: foo)")
531
- # RGB
532
- assert_error_message("$red: \"foo\" is not a number for `adjust-color'",
533
- "adjust-color(blue, $red: foo)")
534
- assert_error_message("$green: \"foo\" is not a number for `adjust-color'",
535
- "adjust-color(blue, $green: foo)")
536
- assert_error_message("$blue: \"foo\" is not a number for `adjust-color'",
537
- "adjust-color(blue, $blue: foo)")
538
- # Alpha
539
- assert_error_message("$alpha: \"foo\" is not a number for `adjust-color'",
540
- "adjust-color(blue, $alpha: foo)")
541
- end
542
-
543
- def test_adjust_color_tests_arg_range
544
- # HSL
545
- assert_error_message("$saturation: Amount 101% must be between -100% and 100% for `adjust-color'",
546
- "adjust-color(blue, $saturation: 101%)")
547
- assert_error_message("$saturation: Amount -101% must be between -100% and 100% for `adjust-color'",
548
- "adjust-color(blue, $saturation: -101%)")
549
- assert_error_message("$lightness: Amount 101% must be between -100% and 100% for `adjust-color'",
550
- "adjust-color(blue, $lightness: 101%)")
551
- assert_error_message("$lightness: Amount -101% must be between -100% and 100% for `adjust-color'",
552
- "adjust-color(blue, $lightness: -101%)")
553
- # RGB
554
- assert_error_message("$red: Amount 256 must be between -255 and 255 for `adjust-color'",
555
- "adjust-color(blue, $red: 256)")
556
- assert_error_message("$red: Amount -256 must be between -255 and 255 for `adjust-color'",
557
- "adjust-color(blue, $red: -256)")
558
- assert_error_message("$green: Amount 256 must be between -255 and 255 for `adjust-color'",
559
- "adjust-color(blue, $green: 256)")
560
- assert_error_message("$green: Amount -256 must be between -255 and 255 for `adjust-color'",
561
- "adjust-color(blue, $green: -256)")
562
- assert_error_message("$blue: Amount 256 must be between -255 and 255 for `adjust-color'",
563
- "adjust-color(blue, $blue: 256)")
564
- assert_error_message("$blue: Amount -256 must be between -255 and 255 for `adjust-color'",
565
- "adjust-color(blue, $blue: -256)")
566
- # Alpha
567
- assert_error_message("$alpha: Amount 1.1 must be between -1 and 1 for `adjust-color'",
568
- "adjust-color(blue, $alpha: 1.1)")
569
- assert_error_message("$alpha: Amount -1.1 must be between -1 and 1 for `adjust-color'",
570
- "adjust-color(blue, $alpha: -1.1)")
571
- end
572
-
573
- def test_adjust_color_argument_errors
574
- assert_error_message("Unknown argument $hoo (260deg) for `adjust-color'",
575
- "adjust-color(blue, $hoo: 260deg)")
576
- assert_error_message("Cannot specify HSL and RGB values for a color at the same time for `adjust-color'",
577
- "adjust-color(blue, $hue: 120deg, $red: 10)");
578
- assert_error_message("10px is not a keyword argument for `adjust_color'",
579
- "adjust-color(blue, 10px)")
580
- assert_error_message("10px is not a keyword argument for `adjust_color'",
581
- "adjust-color(blue, 10px, 20px)")
582
- assert_error_message("10px is not a keyword argument for `adjust_color'",
583
- "adjust-color(blue, 10px, $hue: 180deg)")
584
- end
585
-
586
- def test_scale_color
587
- # HSL
588
- assert_equal(evaluate("hsl(120, 51, 90)"),
589
- evaluate("scale-color(hsl(120, 30, 90), $saturation: 30%)"))
590
- assert_equal(evaluate("hsl(120, 30, 76.5)"),
591
- evaluate("scale-color(hsl(120, 30, 90), $lightness: -15%)"))
592
- # RGB
593
- assert_equal(evaluate("rgb(157, 20, 30)"),
594
- evaluate("scale-color(rgb(10, 20, 30), $red: 60%)"))
595
- assert_equal(evaluate("rgb(10, 38.8, 30)"),
596
- evaluate("scale-color(rgb(10, 20, 30), $green: 8%)"))
597
- assert_equal(evaluate("rgb(10, 20, 20)"),
598
- evaluate("scale-color(rgb(10, 20, 30), $blue: -(1/3)*100%)"))
599
- # Alpha
600
- assert_equal(evaluate("hsla(120, 30, 90, 0.86)"),
601
- evaluate("scale-color(hsl(120, 30, 90), $alpha: -14%)"))
602
- assert_equal(evaluate("rgba(10, 20, 30, 0.82)"),
603
- evaluate("scale-color(rgba(10, 20, 30, 0.8), $alpha: 10%)"))
604
-
605
- # HSL composability
606
- assert_equal(evaluate("hsl(120, 51, 76.5)"),
607
- evaluate("scale-color(hsl(120, 30, 90), $saturation: 30%, $lightness: -15%)"))
608
- assert_equal(evaluate("hsla(120, 51, 90, 0.2)"),
609
- evaluate("scale-color(hsl(120, 30, 90), $saturation: 30%, $alpha: -80%)"))
610
-
611
- # RGB composability
612
- assert_equal(evaluate("rgb(157, 38.8, 30)"),
613
- evaluate("scale-color(rgb(10, 20, 30), $red: 60%, $green: 8%)"))
614
- assert_equal(evaluate("rgb(157, 38.8, 20)"),
615
- evaluate("scale-color(rgb(10, 20, 30), $red: 60%, $green: 8%, $blue: -(1/3)*100%)"))
616
- assert_equal(evaluate("rgba(10, 38.8, 20, 0.55)"),
617
- evaluate("scale-color(rgba(10, 20, 30, 0.5), $green: 8%, $blue: -(1/3)*100%, $alpha: 10%)"))
618
-
619
- # Extremes
620
- assert_equal(evaluate("hsl(120, 100, 90)"),
621
- evaluate("scale-color(hsl(120, 30, 90), $saturation: 100%)"))
622
- assert_equal(evaluate("hsl(120, 30, 90)"),
623
- evaluate("scale-color(hsl(120, 30, 90), $saturation: 0%)"))
624
- assert_equal(evaluate("hsl(120, 0, 90)"),
625
- evaluate("scale-color(hsl(120, 30, 90), $saturation: -100%)"))
626
- end
627
-
628
- def test_scale_color_tests_types
629
- assert_error_message("\"foo\" is not a color for `scale-color'", "scale-color(foo, $red: 10%)")
630
- # HSL
631
- assert_error_message("$saturation: \"foo\" is not a number for `scale-color'",
632
- "scale-color(blue, $saturation: foo)")
633
- assert_error_message("$lightness: \"foo\" is not a number for `scale-color'",
634
- "scale-color(blue, $lightness: foo)")
635
- # RGB
636
- assert_error_message("$red: \"foo\" is not a number for `scale-color'",
637
- "scale-color(blue, $red: foo)")
638
- assert_error_message("$green: \"foo\" is not a number for `scale-color'",
639
- "scale-color(blue, $green: foo)")
640
- assert_error_message("$blue: \"foo\" is not a number for `scale-color'",
641
- "scale-color(blue, $blue: foo)")
642
- # Alpha
643
- assert_error_message("$alpha: \"foo\" is not a number for `scale-color'",
644
- "scale-color(blue, $alpha: foo)")
645
- end
646
-
647
- def test_scale_color_argument_errors
648
- # Range
649
- assert_error_message("$saturation: Amount 101% must be between -100% and 100% for `scale-color'",
650
- "scale-color(blue, $saturation: 101%)")
651
- assert_error_message("$red: Amount -101% must be between -100% and 100% for `scale-color'",
652
- "scale-color(blue, $red: -101%)")
653
- assert_error_message("$alpha: Amount -101% must be between -100% and 100% for `scale-color'",
654
- "scale-color(blue, $alpha: -101%)")
655
-
656
- # Unit
657
- assert_error_message("$saturation: Amount 80 must be a % (e.g. 80%) for `scale-color'",
658
- "scale-color(blue, $saturation: 80)")
659
- assert_error_message("$alpha: Amount 0.5 must be a % (e.g. 0.5%) for `scale-color'",
660
- "scale-color(blue, $alpha: 0.5)")
661
-
662
- # Unknown argument
663
- assert_error_message("Unknown argument $hue (80%) for `scale-color'", "scale-color(blue, $hue: 80%)")
664
-
665
- # Non-keyword arg
666
- assert_error_message("10px is not a keyword argument for `scale_color'", "scale-color(blue, 10px)")
667
-
668
- # HSL/RGB
669
- assert_error_message("Cannot specify HSL and RGB values for a color at the same time for `scale-color'",
670
- "scale-color(blue, $lightness: 10%, $red: 20%)");
671
- end
672
-
673
- def test_change_color
674
- # HSL
675
- assert_equal(evaluate("hsl(195, 30, 90)"),
676
- evaluate("change-color(hsl(120, 30, 90), $hue: 195deg)"))
677
- assert_equal(evaluate("hsl(120, 50, 90)"),
678
- evaluate("change-color(hsl(120, 30, 90), $saturation: 50%)"))
679
- assert_equal(evaluate("hsl(120, 30, 40)"),
680
- evaluate("change-color(hsl(120, 30, 90), $lightness: 40%)"))
681
- # RGB
682
- assert_equal(evaluate("rgb(123, 20, 30)"),
683
- evaluate("change-color(rgb(10, 20, 30), $red: 123)"))
684
- assert_equal(evaluate("rgb(10, 234, 30)"),
685
- evaluate("change-color(rgb(10, 20, 30), $green: 234)"))
686
- assert_equal(evaluate("rgb(10, 20, 198)"),
687
- evaluate("change-color(rgb(10, 20, 30), $blue: 198)"))
688
- # Alpha
689
- assert_equal(evaluate("rgba(10, 20, 30, 0.76)"),
690
- evaluate("change-color(rgb(10, 20, 30), $alpha: 0.76)"))
691
-
692
- # HSL composability
693
- assert_equal(evaluate("hsl(56, 30, 47)"),
694
- evaluate("change-color(hsl(120, 30, 90), $hue: 56deg, $lightness: 47%)"))
695
- assert_equal(evaluate("hsla(56, 30, 47, 0.9)"),
696
- evaluate("change-color(hsl(120, 30, 90), $hue: 56deg, $lightness: 47%, $alpha: 0.9)"))
697
- end
698
-
699
- def test_change_color_tests_types
700
- assert_error_message("\"foo\" is not a color for `change-color'", "change-color(foo, $red: 10%)")
701
- # HSL
702
- assert_error_message("$saturation: \"foo\" is not a number for `change-color'",
703
- "change-color(blue, $saturation: foo)")
704
- assert_error_message("$lightness: \"foo\" is not a number for `change-color'",
705
- "change-color(blue, $lightness: foo)")
706
- # RGB
707
- assert_error_message("$red: \"foo\" is not a number for `change-color'", "change-color(blue, $red: foo)")
708
- assert_error_message("$green: \"foo\" is not a number for `change-color'", "change-color(blue, $green: foo)")
709
- assert_error_message("$blue: \"foo\" is not a number for `change-color'", "change-color(blue, $blue: foo)")
710
- # Alpha
711
- assert_error_message("$alpha: \"foo\" is not a number for `change-color'", "change-color(blue, $alpha: foo)")
712
- end
713
-
714
- def test_change_color_argument_errors
715
- # Range
716
- assert_error_message("Saturation must be between 0 and 100 for `change-color'",
717
- "change-color(blue, $saturation: 101%)")
718
- assert_error_message("Lightness must be between 0 and 100 for `change-color'",
719
- "change-color(blue, $lightness: 101%)")
720
- assert_error_message("Red value must be between 0 and 255 for `change-color'",
721
- "change-color(blue, $red: -1)")
722
- assert_error_message("Green value must be between 0 and 255 for `change-color'",
723
- "change-color(blue, $green: 256)")
724
- assert_error_message("Blue value must be between 0 and 255 for `change-color'",
725
- "change-color(blue, $blue: 500)")
726
-
727
- # Unknown argument
728
- assert_error_message("Unknown argument $hoo (80%) for `change-color'", "change-color(blue, $hoo: 80%)")
729
-
730
- # Non-keyword arg
731
- assert_error_message("10px is not a keyword argument for `change_color'", "change-color(blue, 10px)")
732
-
733
- # HSL/RGB
734
- assert_error_message("Cannot specify HSL and RGB values for a color at the same time for `change-color'",
735
- "change-color(blue, $lightness: 10%, $red: 120)");
736
- end
737
-
738
- def test_mix
739
- assert_equal("#7f007f", evaluate("mix(#f00, #00f)"))
740
- assert_equal("#7f7f7f", evaluate("mix(#f00, #0ff)"))
741
- assert_equal("#7f9055", evaluate("mix(#f70, #0aa)"))
742
- assert_equal("#3f00bf", evaluate("mix(#f00, #00f, 25%)"))
743
- assert_equal("rgba(63, 0, 191, 0.75)", evaluate("mix(rgba(255, 0, 0, 0.5), #00f)"))
744
- assert_equal("red", evaluate("mix(#f00, #00f, 100%)"))
745
- assert_equal("blue", evaluate("mix(#f00, #00f, 0%)"))
746
- assert_equal("rgba(255, 0, 0, 0.5)", evaluate("mix(#f00, transparentize(#00f, 1))"))
747
- assert_equal("rgba(0, 0, 255, 0.5)", evaluate("mix(transparentize(#f00, 1), #00f)"))
748
- assert_equal("red", evaluate("mix(#f00, transparentize(#00f, 1), 100%)"))
749
- assert_equal("blue", evaluate("mix(transparentize(#f00, 1), #00f, 0%)"))
750
- assert_equal("rgba(0, 0, 255, 0)", evaluate("mix(#f00, transparentize(#00f, 1), 0%)"))
751
- assert_equal("rgba(255, 0, 0, 0)", evaluate("mix(transparentize(#f00, 1), #00f, 100%)"))
752
- assert_equal("rgba(255, 0, 0, 0)", evaluate("mix($color-1: transparentize(#f00, 1), $color-2: #00f, $weight: 100%)"))
753
- end
754
-
755
- def test_mix_tests_types
756
- assert_error_message("\"foo\" is not a color for `mix'", "mix(\"foo\", #f00, 10%)")
757
- assert_error_message("\"foo\" is not a color for `mix'", "mix(#f00, \"foo\", 10%)")
758
- assert_error_message("\"foo\" is not a number for `mix'", "mix(#f00, #baf, \"foo\")")
759
- end
760
-
761
- def test_mix_tests_bounds
762
- assert_error_message("Weight -0.001 must be between 0% and 100% for `mix'",
763
- "mix(#123, #456, -0.001)")
764
- assert_error_message("Weight 100.001 must be between 0% and 100% for `mix'",
765
- "mix(#123, #456, 100.001)")
766
- end
767
-
768
- def test_grayscale
769
- assert_equal("#bbbbbb", evaluate("grayscale(#abc)"))
770
- assert_equal("gray", evaluate("grayscale(#f00)"))
771
- assert_equal("gray", evaluate("grayscale(#00f)"))
772
- assert_equal("white", evaluate("grayscale(white)"))
773
- assert_equal("black", evaluate("grayscale(black)"))
774
- assert_equal("black", evaluate("grayscale($color: black)"))
775
- end
776
-
777
- def tets_grayscale_tests_types
778
- assert_error_message("\"foo\" is not a color for `grayscale'", "grayscale(\"foo\")")
779
- end
780
-
781
- def test_complement
782
- assert_equal("#ccbbaa", evaluate("complement(#abc)"))
783
- assert_equal("aqua", evaluate("complement(red)"))
784
- assert_equal("red", evaluate("complement(aqua)"))
785
- assert_equal("white", evaluate("complement(white)"))
786
- assert_equal("black", evaluate("complement(black)"))
787
- assert_equal("black", evaluate("complement($color: black)"))
788
- end
789
-
790
- def tets_complement_tests_types
791
- assert_error_message("\"foo\" is not a color for `complement'", "complement(\"foo\")")
792
- end
793
-
794
- def test_invert
795
- assert_equal("#112233", evaluate("invert(#edc)"))
796
- assert_equal("rgba(245, 235, 225, 0.5)", evaluate("invert(rgba(10, 20, 30, 0.5))"))
797
- end
798
-
799
- def test_invert_tests_types
800
- assert_error_message("\"foo\" is not a color for `invert'", "invert(\"foo\")")
801
- end
802
-
803
- def test_unquote
804
- assert_equal('foo', evaluate('unquote("foo")'))
805
- assert_equal('foo', evaluate('unquote(foo)'))
806
- assert_equal('foo', evaluate('unquote($string: foo)'))
807
- end
808
-
809
- def test_quote
810
- assert_equal('"foo"', evaluate('quote(foo)'))
811
- assert_equal('"foo"', evaluate('quote("foo")'))
812
- assert_equal('"foo"', evaluate('quote($string: "foo")'))
813
- end
814
-
815
- def test_quote_tests_type
816
- assert_error_message("#ff0000 is not a string for `quote'", "quote(#f00)")
817
- end
818
-
819
- def test_user_defined_function
820
- assert_equal("I'm a user-defined string!", evaluate("user_defined()"))
821
- end
822
-
823
- def test_user_defined_function_with_preceding_underscore
824
- assert_equal("I'm another user-defined string!", evaluate("_preceding_underscore()"))
825
- assert_equal("I'm another user-defined string!", evaluate("-preceding-underscore()"))
826
- end
827
-
828
- def test_options_on_new_literals_fails
829
- assert_error_message(<<MSG, "call-options-on-new-literal()")
830
- The #options attribute is not set on this Sass::Script::String.
831
- This error is probably occurring because #to_s was called
832
- on this literal within a custom Sass function without first
833
- setting the #option attribute.
834
- MSG
835
- end
836
-
837
- def test_type_of
838
- assert_equal("string", evaluate("type-of(\"asdf\")"))
839
- assert_equal("string", evaluate("type-of(asdf)"))
840
- assert_equal("number", evaluate("type-of(1px)"))
841
- assert_equal("bool", evaluate("type-of(true)"))
842
- assert_equal("color", evaluate("type-of(#fff)"))
843
- assert_equal("color", evaluate("type-of($value: #fff)"))
844
- end
845
-
846
- def test_unit
847
- assert_equal(%Q{""}, evaluate("unit(100)"))
848
- assert_equal(%Q{"px"}, evaluate("unit(100px)"))
849
- assert_equal(%Q{"em*px"}, evaluate("unit(10px * 5em)"))
850
- assert_equal(%Q{"em*px"}, evaluate("unit(5em * 10px)"))
851
- assert_equal(%Q{"em*px/cm*rem"}, evaluate("unit(10px * 5em / 30cm / 1rem)"))
852
- assert_equal(%Q{"px"}, evaluate("unit($number: 100px)"))
853
- assert_error_message("#ff0000 is not a number for `unit'", "unit(#f00)")
854
- end
855
-
856
- def test_unitless
857
- assert_equal(%Q{true}, evaluate("unitless(100)"))
858
- assert_equal(%Q{false}, evaluate("unitless(100px)"))
859
- assert_equal(%Q{false}, evaluate("unitless($number: 100px)"))
860
- assert_error_message("#ff0000 is not a number for `unitless'", "unitless(#f00)")
861
- end
862
-
863
- def test_comparable
864
- assert_equal(%Q{true}, evaluate("comparable(2px, 1px)"))
865
- assert_equal(%Q{true}, evaluate("comparable(10cm, 3mm)"))
866
- assert_equal(%Q{false}, evaluate("comparable(100px, 3em)"))
867
- assert_equal(%Q{false}, evaluate("comparable($number-1: 100px, $number-2: 3em)"))
868
- assert_error_message("#ff0000 is not a number for `comparable'", "comparable(#f00, 1px)")
869
- assert_error_message("#ff0000 is not a number for `comparable'", "comparable(1px, #f00)")
870
- end
871
-
872
- def test_length
873
- assert_equal("5", evaluate("length(1 2 3 4 5)"))
874
- assert_equal("4", evaluate("length((foo, bar, baz, bip))"))
875
- assert_equal("3", evaluate("length((foo, bar, baz bip))"))
876
- assert_equal("3", evaluate("length((foo, bar, (baz, bip)))"))
877
- assert_equal("1", evaluate("length(#f00)"))
878
- assert_equal("0", evaluate("length(())"))
879
- assert_equal("4", evaluate("length(1 2 () 3)"))
880
- end
881
-
882
- def test_nth
883
- assert_equal("1", evaluate("nth(1 2 3, 1)"))
884
- assert_equal("2", evaluate("nth(1 2 3, 2)"))
885
- assert_equal("3", evaluate("nth((1, 2, 3), 3)"))
886
- assert_equal("foo", evaluate("nth(foo, 1)"))
887
- assert_equal("bar baz", evaluate("nth(foo (bar baz) bang, 2)"))
888
- assert_error_message("List index 0 must be greater than or equal to 1 for `nth'", "nth(foo, 0)")
889
- assert_error_message("List index -10 must be greater than or equal to 1 for `nth'", "nth(foo, -10)")
890
- assert_error_message("List index 1.5 must be an integer for `nth'", "nth(foo, 1.5)")
891
- assert_error_message("List index is 5 but list is only 4 items long for `nth'", "nth(1 2 3 4, 5)")
892
- assert_error_message("List index is 2 but list is only 1 item long for `nth'", "nth(foo, 2)")
893
- assert_error_message("List index is 1 but list has no items for `nth'", "nth((), 1)")
894
- end
895
-
896
- def test_join
897
- assert_equal("1 2 3", evaluate("join(1 2, 3)"))
898
- assert_equal("1 2 3", evaluate("join(1, 2 3)"))
899
- assert_equal("1 2 3 4", evaluate("join(1 2, 3 4)"))
900
- assert_equal("true", evaluate("(1 2 3 4) == join(1 2, 3 4)"))
901
- assert_equal("false", evaluate("(1 2 (3 4)) == join(1 2, 3 4)"))
902
- assert_equal("1, 2, 3", evaluate("join((1, 2), 3)"))
903
- assert_equal("1, 2, 3", evaluate("join(1, (2, 3))"))
904
- assert_equal("1, 2, 3, 4", evaluate("join((1, 2), (3, 4))"))
905
- assert_equal("true", evaluate("(1, 2, 3, 4) == join((1, 2), (3, 4))"))
906
- assert_equal("false", evaluate("(1, 2, (3, 4)) == join((1, 2), (3, 4))"))
907
-
908
- assert_equal("1 2", evaluate("join(1, 2)"))
909
- assert_equal("1 2 3 4", evaluate("join(1 2, (3, 4))"))
910
- assert_equal("1, 2, 3, 4", evaluate("join((1, 2), 3 4)"))
911
-
912
- assert_equal("1 2", evaluate("join(1, 2, auto)"))
913
- assert_equal("1, 2, 3, 4", evaluate("join(1 2, 3 4, comma)"))
914
- assert_equal("1 2 3 4", evaluate("join((1, 2), (3, 4), space)"))
915
- assert_equal("1, 2", evaluate("join(1, 2, comma)"))
916
-
917
- assert_equal("1 2", evaluate("join(1 2, ())"))
918
- assert_equal("1, 2", evaluate("join((1, 2), ())"))
919
- assert_equal("true", evaluate("(1 2) == join(1 2, ())"))
920
- assert_equal("true", evaluate("(1, 2) == join((1, 2), ())"))
921
- assert_equal("false", evaluate("(1 2 ()) == join(1 2, ())"))
922
- assert_equal("false", evaluate("(1, 2, ()) == join((1, 2), ())"))
923
-
924
- assert_equal("1 2", evaluate("join((), 1 2)"))
925
- assert_equal("1, 2", evaluate("join((), (1, 2))"))
926
- assert_equal("true", evaluate("(1 2) == join((), 1 2)"))
927
- assert_equal("true", evaluate("(1, 2) == join((), (1, 2))"))
928
- assert_equal("false", evaluate("(1 2 ()) == join((), 1 2)"))
929
- assert_equal("false", evaluate("(1, 2, ()) == join((), (1, 2))"))
930
-
931
- assert_error_message("Separator name must be space, comma, or auto for `join'", "join(1, 2, baboon)")
932
- end
933
-
934
- def test_append
935
- assert_equal("1 2 3", evaluate("append(1 2, 3)"))
936
- assert_equal("1 2 3 4", evaluate("append(1 2, 3 4)"))
937
- assert_equal("false", evaluate("(1 2 3 4) == append(1 2, 3 4)"))
938
- assert_equal("true", evaluate("(1 2 (3 4)) == append(1 2, 3 4)"))
939
- assert_equal("1, 2, 3", evaluate("append((1, 2), 3)"))
940
- assert_equal("1, 2, 3, 4", evaluate("append((1, 2), (3, 4))"))
941
- assert_equal("false", evaluate("(1, 2, 3, 4) == append((1, 2), (3, 4))"))
942
- assert_equal("true", evaluate("(1, 2, (3, 4)) == append((1, 2), (3, 4))"))
943
-
944
- assert_equal("1 2", evaluate("append(1, 2)"))
945
- assert_equal("1 2 3, 4", evaluate("append(1 2, (3, 4))"))
946
- assert_equal("true", evaluate("(1 2 (3, 4)) == append(1 2, (3, 4))"))
947
- assert_equal("1, 2, 3 4", evaluate("append((1, 2), 3 4)"))
948
- assert_equal("true", evaluate("(1, 2, 3 4) == append((1, 2), 3 4)"))
949
-
950
- assert_equal("1 2", evaluate("append(1, 2, auto)"))
951
- assert_equal("1, 2, 3 4", evaluate("append(1 2, 3 4, comma)"))
952
- assert_equal("1 2 3, 4", evaluate("append((1, 2), (3, 4), space)"))
953
- assert_equal("1, 2", evaluate("append(1, 2, comma)"))
954
-
955
- assert_equal("1 2", evaluate("append(1 2, ())"))
956
- assert_equal("1, 2", evaluate("append((1, 2), ())"))
957
- assert_equal("true", evaluate("(1 2 ()) == append(1 2, ())"))
958
- assert_equal("true", evaluate("(1, 2, ()) == append((1, 2), ())"))
959
-
960
- assert_equal("1 2", evaluate("append((), 1 2)"))
961
- assert_equal("1, 2", evaluate("append((), (1, 2))"))
962
- assert_equal("false", evaluate("(1 2) == append((), 1 2)"))
963
- assert_equal("true", evaluate("(1 2) == nth(append((), 1 2), 1)"))
964
-
965
- assert_error_message("Separator name must be space, comma, or auto for `append'", "append(1, 2, baboon)")
966
- end
967
-
968
- def test_zip
969
- assert_equal("1 3 5, 2 4 6", evaluate("zip(1 2, 3 4, 5 6)"))
970
- assert_equal("1 4 7, 2 5 8", evaluate("zip(1 2 3, 4 5 6, 7 8)"))
971
- end
972
-
973
- def test_index
974
- assert_equal("1", evaluate("index(1px solid blue, 1px)"))
975
- assert_equal("2", evaluate("index(1px solid blue, solid)"))
976
- assert_equal("3", evaluate("index(1px solid blue, #00f)"))
977
- assert_equal("false", evaluate("index(1px solid blue, 1em)"))
978
- assert_equal("false", evaluate("index(1px solid blue, notfound)"))
979
- end
980
-
981
- def test_if
982
- assert_equal("1px", evaluate("if(true, 1px, 2px)"))
983
- assert_equal("2px", evaluate("if(false, 1px, 2px)"))
984
- end
985
-
986
- def test_keyword_args_rgb
987
- assert_equal(%Q{white}, evaluate("rgb($red: 255, $green: 255, $blue: 255)"))
988
- end
989
-
990
- def test_keyword_args_rgba
991
- assert_equal(%Q{rgba(255, 255, 255, 0.5)}, evaluate("rgba($red: 255, $green: 255, $blue: 255, $alpha: 0.5)"))
992
- assert_equal(%Q{rgba(255, 255, 255, 0.5)}, evaluate("rgba($color: #fff, $alpha: 0.5)"))
993
- end
994
-
995
- def test_keyword_args_rgba_with_extra_args
996
- assert_equal(%Q{rgba(255, 255, 255, 0.5)}, evaluate("rgba($red: 255, $green: 255, $blue: 255, $alpha: 0.5, $extra: error)"))
997
- rescue Sass::SyntaxError => e
998
- assert_equal("Function rgba doesn't take an argument named $extra", e.message)
999
- end
1000
-
1001
- def test_keyword_args_must_have_signature
1002
- evaluate("no-kw-args($fake: value)")
1003
- rescue Sass::SyntaxError => e
1004
- assert_equal("Function no_kw_args doesn't support keyword arguments", e.message)
1005
- end
1006
-
1007
- def test_keyword_args_with_missing_argument
1008
- evaluate("rgb($red: 255, $green: 255)")
1009
- rescue Sass::SyntaxError => e
1010
- assert_equal("Function rgb requires an argument named $blue", e.message)
1011
- end
1012
-
1013
- def test_only_var_args
1014
- assert_equal "only-var-args(2px, 3px, 4px)", evaluate("only-var-args(1px, 2px, 3px)")
1015
- end
1016
-
1017
- def test_only_kw_args
1018
- assert_equal "only-kw-args(a, b, c)", evaluate("only-kw-args($a: 1, $b: 2, $c: 3)")
1019
- end
1020
-
1021
- private
1022
-
1023
- def evaluate(value)
1024
- Sass::Script::Parser.parse(value, 0, 0).perform(Sass::Environment.new).to_s
1025
- end
1026
-
1027
- def perform(value)
1028
- Sass::Script::Parser.parse(value, 0, 0).perform(Sass::Environment.new)
1029
- end
1030
-
1031
- def assert_error_message(message, value)
1032
- evaluate(value)
1033
- flunk("Error message expected but not raised: #{message}")
1034
- rescue Sass::SyntaxError => e
1035
- assert_equal(message, e.message)
1036
- end
1037
-
1038
- end