sass 3.1.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING +1 -1
  3. data/MIT-LICENSE +2 -2
  4. data/README.md +29 -17
  5. data/Rakefile +43 -9
  6. data/VERSION +1 -1
  7. data/VERSION_DATE +1 -0
  8. data/VERSION_NAME +1 -1
  9. data/bin/sass +6 -1
  10. data/bin/sass-convert +6 -1
  11. data/bin/scss +6 -1
  12. data/ext/mkrf_conf.rb +27 -0
  13. data/lib/sass/cache_stores/base.rb +7 -3
  14. data/lib/sass/cache_stores/chain.rb +3 -2
  15. data/lib/sass/cache_stores/filesystem.rb +5 -7
  16. data/lib/sass/cache_stores/memory.rb +1 -1
  17. data/lib/sass/cache_stores/null.rb +2 -2
  18. data/lib/sass/callbacks.rb +2 -1
  19. data/lib/sass/css.rb +168 -53
  20. data/lib/sass/engine.rb +502 -174
  21. data/lib/sass/environment.rb +151 -111
  22. data/lib/sass/error.rb +7 -7
  23. data/lib/sass/exec.rb +176 -60
  24. data/lib/sass/features.rb +40 -0
  25. data/lib/sass/importers/base.rb +46 -7
  26. data/lib/sass/importers/deprecated_path.rb +51 -0
  27. data/lib/sass/importers/filesystem.rb +113 -30
  28. data/lib/sass/importers.rb +1 -0
  29. data/lib/sass/logger/base.rb +30 -0
  30. data/lib/sass/logger/log_level.rb +45 -0
  31. data/lib/sass/logger.rb +12 -0
  32. data/lib/sass/media.rb +213 -0
  33. data/lib/sass/plugin/compiler.rb +194 -104
  34. data/lib/sass/plugin/configuration.rb +18 -25
  35. data/lib/sass/plugin/merb.rb +1 -1
  36. data/lib/sass/plugin/staleness_checker.rb +37 -11
  37. data/lib/sass/plugin.rb +10 -13
  38. data/lib/sass/railtie.rb +2 -1
  39. data/lib/sass/repl.rb +5 -6
  40. data/lib/sass/script/css_lexer.rb +8 -4
  41. data/lib/sass/script/css_parser.rb +5 -2
  42. data/lib/sass/script/functions.rb +1547 -618
  43. data/lib/sass/script/lexer.rb +122 -72
  44. data/lib/sass/script/parser.rb +304 -135
  45. data/lib/sass/script/tree/funcall.rb +306 -0
  46. data/lib/sass/script/{interpolation.rb → tree/interpolation.rb} +43 -13
  47. data/lib/sass/script/tree/list_literal.rb +77 -0
  48. data/lib/sass/script/tree/literal.rb +45 -0
  49. data/lib/sass/script/tree/map_literal.rb +64 -0
  50. data/lib/sass/script/{node.rb → tree/node.rb} +30 -12
  51. data/lib/sass/script/{operation.rb → tree/operation.rb} +33 -21
  52. data/lib/sass/script/{string_interpolation.rb → tree/string_interpolation.rb} +14 -4
  53. data/lib/sass/script/{unary_operation.rb → tree/unary_operation.rb} +21 -9
  54. data/lib/sass/script/tree/variable.rb +57 -0
  55. data/lib/sass/script/tree.rb +15 -0
  56. data/lib/sass/script/value/arg_list.rb +36 -0
  57. data/lib/sass/script/value/base.rb +238 -0
  58. data/lib/sass/script/value/bool.rb +40 -0
  59. data/lib/sass/script/{color.rb → value/color.rb} +256 -74
  60. data/lib/sass/script/value/deprecated_false.rb +55 -0
  61. data/lib/sass/script/value/helpers.rb +155 -0
  62. data/lib/sass/script/value/list.rb +128 -0
  63. data/lib/sass/script/value/map.rb +70 -0
  64. data/lib/sass/script/value/null.rb +49 -0
  65. data/lib/sass/script/{number.rb → value/number.rb} +115 -62
  66. data/lib/sass/script/{string.rb → value/string.rb} +9 -11
  67. data/lib/sass/script/value.rb +12 -0
  68. data/lib/sass/script.rb +35 -9
  69. data/lib/sass/scss/css_parser.rb +2 -12
  70. data/lib/sass/scss/parser.rb +657 -230
  71. data/lib/sass/scss/rx.rb +17 -12
  72. data/lib/sass/scss/static_parser.rb +37 -6
  73. data/lib/sass/scss.rb +0 -1
  74. data/lib/sass/selector/abstract_sequence.rb +35 -3
  75. data/lib/sass/selector/comma_sequence.rb +29 -14
  76. data/lib/sass/selector/sequence.rb +371 -74
  77. data/lib/sass/selector/simple.rb +28 -13
  78. data/lib/sass/selector/simple_sequence.rb +163 -36
  79. data/lib/sass/selector.rb +138 -36
  80. data/lib/sass/shared.rb +3 -5
  81. data/lib/sass/source/map.rb +196 -0
  82. data/lib/sass/source/position.rb +39 -0
  83. data/lib/sass/source/range.rb +41 -0
  84. data/lib/sass/stack.rb +126 -0
  85. data/lib/sass/supports.rb +228 -0
  86. data/lib/sass/tree/at_root_node.rb +82 -0
  87. data/lib/sass/tree/comment_node.rb +34 -29
  88. data/lib/sass/tree/content_node.rb +9 -0
  89. data/lib/sass/tree/css_import_node.rb +60 -0
  90. data/lib/sass/tree/debug_node.rb +3 -3
  91. data/lib/sass/tree/directive_node.rb +33 -3
  92. data/lib/sass/tree/each_node.rb +9 -9
  93. data/lib/sass/tree/extend_node.rb +20 -6
  94. data/lib/sass/tree/for_node.rb +6 -6
  95. data/lib/sass/tree/function_node.rb +12 -4
  96. data/lib/sass/tree/if_node.rb +2 -15
  97. data/lib/sass/tree/import_node.rb +11 -5
  98. data/lib/sass/tree/media_node.rb +27 -11
  99. data/lib/sass/tree/mixin_def_node.rb +15 -4
  100. data/lib/sass/tree/mixin_node.rb +27 -7
  101. data/lib/sass/tree/node.rb +69 -35
  102. data/lib/sass/tree/prop_node.rb +47 -31
  103. data/lib/sass/tree/return_node.rb +4 -3
  104. data/lib/sass/tree/root_node.rb +20 -4
  105. data/lib/sass/tree/rule_node.rb +37 -26
  106. data/lib/sass/tree/supports_node.rb +38 -0
  107. data/lib/sass/tree/trace_node.rb +33 -0
  108. data/lib/sass/tree/variable_node.rb +10 -4
  109. data/lib/sass/tree/visitors/base.rb +5 -8
  110. data/lib/sass/tree/visitors/check_nesting.rb +67 -52
  111. data/lib/sass/tree/visitors/convert.rb +134 -53
  112. data/lib/sass/tree/visitors/cssize.rb +245 -51
  113. data/lib/sass/tree/visitors/deep_copy.rb +102 -0
  114. data/lib/sass/tree/visitors/extend.rb +68 -0
  115. data/lib/sass/tree/visitors/perform.rb +331 -105
  116. data/lib/sass/tree/visitors/set_options.rb +125 -0
  117. data/lib/sass/tree/visitors/to_css.rb +259 -95
  118. data/lib/sass/tree/warn_node.rb +3 -3
  119. data/lib/sass/tree/while_node.rb +3 -3
  120. data/lib/sass/util/cross_platform_random.rb +19 -0
  121. data/lib/sass/util/multibyte_string_scanner.rb +157 -0
  122. data/lib/sass/util/normalized_map.rb +130 -0
  123. data/lib/sass/util/ordered_hash.rb +192 -0
  124. data/lib/sass/util/subset_map.rb +11 -2
  125. data/lib/sass/util/test.rb +9 -0
  126. data/lib/sass/util.rb +565 -39
  127. data/lib/sass/version.rb +27 -15
  128. data/lib/sass.rb +39 -4
  129. data/test/sass/cache_test.rb +15 -0
  130. data/test/sass/compiler_test.rb +223 -0
  131. data/test/sass/conversion_test.rb +901 -107
  132. data/test/sass/css2sass_test.rb +94 -0
  133. data/test/sass/engine_test.rb +1059 -164
  134. data/test/sass/exec_test.rb +86 -0
  135. data/test/sass/extend_test.rb +933 -837
  136. data/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
  137. data/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
  138. data/test/sass/functions_test.rb +995 -136
  139. data/test/sass/importer_test.rb +338 -18
  140. data/test/sass/logger_test.rb +58 -0
  141. data/test/sass/more_results/more_import.css +2 -2
  142. data/test/sass/plugin_test.rb +114 -30
  143. data/test/sass/results/cached_import_option.css +3 -0
  144. data/test/sass/results/filename_fn.css +3 -0
  145. data/test/sass/results/import.css +2 -2
  146. data/test/sass/results/import_charset.css +1 -0
  147. data/test/sass/results/import_charset_1_8.css +1 -0
  148. data/test/sass/results/import_charset_ibm866.css +1 -0
  149. data/test/sass/results/import_content.css +1 -0
  150. data/test/sass/results/script.css +1 -1
  151. data/test/sass/results/scss_import.css +2 -2
  152. data/test/sass/results/units.css +2 -2
  153. data/test/sass/script_conversion_test.rb +43 -1
  154. data/test/sass/script_test.rb +380 -36
  155. data/test/sass/scss/css_test.rb +257 -75
  156. data/test/sass/scss/scss_test.rb +2322 -110
  157. data/test/sass/source_map_test.rb +887 -0
  158. data/test/sass/templates/_cached_import_option_partial.scss +1 -0
  159. data/test/sass/templates/_double_import_loop2.sass +1 -0
  160. data/test/sass/templates/_filename_fn_import.scss +11 -0
  161. data/test/sass/templates/_imported_content.sass +3 -0
  162. data/test/sass/templates/_same_name_different_partiality.scss +1 -0
  163. data/test/sass/templates/bork5.sass +3 -0
  164. data/test/sass/templates/cached_import_option.scss +3 -0
  165. data/test/sass/templates/double_import_loop1.sass +1 -0
  166. data/test/sass/templates/filename_fn.scss +18 -0
  167. data/test/sass/templates/import_charset.sass +2 -0
  168. data/test/sass/templates/import_charset_1_8.sass +2 -0
  169. data/test/sass/templates/import_charset_ibm866.sass +2 -0
  170. data/test/sass/templates/import_content.sass +4 -0
  171. data/test/sass/templates/same_name_different_ext.sass +2 -0
  172. data/test/sass/templates/same_name_different_ext.scss +1 -0
  173. data/test/sass/templates/same_name_different_partiality.scss +1 -0
  174. data/test/sass/templates/single_import_loop.sass +1 -0
  175. data/test/sass/templates/subdir/import_up1.scss +1 -0
  176. data/test/sass/templates/subdir/import_up2.scss +1 -0
  177. data/test/sass/test_helper.rb +1 -1
  178. data/test/sass/util/multibyte_string_scanner_test.rb +147 -0
  179. data/test/sass/util/normalized_map_test.rb +51 -0
  180. data/test/sass/util_test.rb +183 -0
  181. data/test/sass/value_helpers_test.rb +181 -0
  182. data/test/test_helper.rb +45 -5
  183. data/vendor/listen/CHANGELOG.md +228 -0
  184. data/vendor/listen/CONTRIBUTING.md +38 -0
  185. data/vendor/listen/Gemfile +30 -0
  186. data/vendor/listen/Guardfile +8 -0
  187. data/vendor/{fssm → listen}/LICENSE +1 -1
  188. data/vendor/listen/README.md +315 -0
  189. data/vendor/listen/Rakefile +47 -0
  190. data/vendor/listen/Vagrantfile +96 -0
  191. data/vendor/listen/lib/listen/adapter.rb +214 -0
  192. data/vendor/listen/lib/listen/adapters/bsd.rb +112 -0
  193. data/vendor/listen/lib/listen/adapters/darwin.rb +85 -0
  194. data/vendor/listen/lib/listen/adapters/linux.rb +113 -0
  195. data/vendor/listen/lib/listen/adapters/polling.rb +67 -0
  196. data/vendor/listen/lib/listen/adapters/windows.rb +87 -0
  197. data/vendor/listen/lib/listen/dependency_manager.rb +126 -0
  198. data/vendor/listen/lib/listen/directory_record.rb +371 -0
  199. data/vendor/listen/lib/listen/listener.rb +225 -0
  200. data/vendor/listen/lib/listen/multi_listener.rb +143 -0
  201. data/vendor/listen/lib/listen/turnstile.rb +28 -0
  202. data/vendor/listen/lib/listen/version.rb +3 -0
  203. data/vendor/listen/lib/listen.rb +40 -0
  204. data/vendor/listen/listen.gemspec +22 -0
  205. data/vendor/listen/spec/listen/adapter_spec.rb +183 -0
  206. data/vendor/listen/spec/listen/adapters/bsd_spec.rb +36 -0
  207. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +37 -0
  208. data/vendor/listen/spec/listen/adapters/linux_spec.rb +47 -0
  209. data/vendor/listen/spec/listen/adapters/polling_spec.rb +68 -0
  210. data/vendor/listen/spec/listen/adapters/windows_spec.rb +30 -0
  211. data/vendor/listen/spec/listen/dependency_manager_spec.rb +107 -0
  212. data/vendor/listen/spec/listen/directory_record_spec.rb +1225 -0
  213. data/vendor/listen/spec/listen/listener_spec.rb +169 -0
  214. data/vendor/listen/spec/listen/multi_listener_spec.rb +174 -0
  215. data/vendor/listen/spec/listen/turnstile_spec.rb +56 -0
  216. data/vendor/listen/spec/listen_spec.rb +73 -0
  217. data/vendor/listen/spec/spec_helper.rb +21 -0
  218. data/vendor/listen/spec/support/adapter_helper.rb +629 -0
  219. data/vendor/listen/spec/support/directory_record_helper.rb +55 -0
  220. data/vendor/listen/spec/support/fixtures_helper.rb +29 -0
  221. data/vendor/listen/spec/support/listeners_helper.rb +156 -0
  222. data/vendor/listen/spec/support/platform_helper.rb +15 -0
  223. metadata +344 -271
  224. data/lib/sass/less.rb +0 -382
  225. data/lib/sass/script/bool.rb +0 -18
  226. data/lib/sass/script/funcall.rb +0 -162
  227. data/lib/sass/script/list.rb +0 -76
  228. data/lib/sass/script/literal.rb +0 -245
  229. data/lib/sass/script/variable.rb +0 -54
  230. data/lib/sass/scss/sass_parser.rb +0 -11
  231. data/test/sass/less_conversion_test.rb +0 -653
  232. data/vendor/fssm/README.markdown +0 -55
  233. data/vendor/fssm/Rakefile +0 -59
  234. data/vendor/fssm/VERSION.yml +0 -5
  235. data/vendor/fssm/example.rb +0 -9
  236. data/vendor/fssm/fssm.gemspec +0 -77
  237. data/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
  238. data/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
  239. data/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
  240. data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
  241. data/vendor/fssm/lib/fssm/monitor.rb +0 -26
  242. data/vendor/fssm/lib/fssm/path.rb +0 -91
  243. data/vendor/fssm/lib/fssm/pathname.rb +0 -502
  244. data/vendor/fssm/lib/fssm/state/directory.rb +0 -57
  245. data/vendor/fssm/lib/fssm/state/file.rb +0 -24
  246. data/vendor/fssm/lib/fssm/support.rb +0 -63
  247. data/vendor/fssm/lib/fssm/tree.rb +0 -176
  248. data/vendor/fssm/lib/fssm.rb +0 -33
  249. data/vendor/fssm/profile/prof-cache.rb +0 -40
  250. data/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
  251. data/vendor/fssm/profile/prof-pathname.rb +0 -68
  252. data/vendor/fssm/profile/prof-plain-pathname.html +0 -988
  253. data/vendor/fssm/profile/prof.html +0 -2379
  254. data/vendor/fssm/spec/path_spec.rb +0 -75
  255. data/vendor/fssm/spec/root/duck/quack.txt +0 -0
  256. data/vendor/fssm/spec/root/file.css +0 -0
  257. data/vendor/fssm/spec/root/file.rb +0 -0
  258. data/vendor/fssm/spec/root/file.yml +0 -0
  259. data/vendor/fssm/spec/root/moo/cow.txt +0 -0
  260. data/vendor/fssm/spec/spec_helper.rb +0 -14
@@ -1,653 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require File.dirname(__FILE__) + '/../test_helper'
3
-
4
- begin
5
- require 'sass/less'
6
-
7
- class LessConversionTest < Test::Unit::TestCase
8
- def test_variable_declarations
9
- assert_renders <<SCSS, <<LESS
10
- $var1: 2px 3px;
11
- $var2: $var1 + 7px;
12
-
13
- $var3: fizz;
14
-
15
- foo {
16
- prop: $var1 $var2 $var3; }
17
- SCSS
18
- @var1: 2px 3px;
19
- @var2: @var1 + 7px;
20
-
21
- @var3: fizz;
22
-
23
- foo {prop: @var1 @var2 @var3}
24
- LESS
25
- end
26
-
27
- def test_nested_variable_declarations
28
- assert_renders <<SCSS, <<LESS
29
- .foo {
30
- $var: 2px;
31
- prop: $var; }
32
- SCSS
33
- .foo {
34
- @var: 2px;
35
- prop: @var; }
36
- LESS
37
- end
38
-
39
- def test_import
40
- path = relative_path_to(File.dirname(__FILE__) + "/templates/importee.less")
41
- resolved_path = relative_path_to(File.dirname(__FILE__) + "/templates/importee")
42
- assert_renders <<SCSS, <<LESS
43
- @import "#{resolved_path}";
44
- @import "#{resolved_path}";
45
-
46
- @import "#{resolved_path}";
47
- @import "#{resolved_path}";
48
- @import "#{resolved_path}";
49
- SCSS
50
- @import url(#{path});
51
- @import url("#{path}");
52
-
53
- @import url('#{path}');
54
- @import '#{path}';
55
- @import "#{path}";
56
- LESS
57
- end
58
-
59
- def test_mixins_found_through_import
60
- path = relative_path_to(File.dirname(__FILE__) + "/templates/importee.less")
61
- resolved_path = relative_path_to(File.dirname(__FILE__) + "/templates/importee")
62
- assert_renders <<SCSS, <<LESS
63
- @import "#{resolved_path}";
64
-
65
- .baz {
66
- @extend .foo;
67
- @include bar; }
68
- SCSS
69
- @import "#{path}";
70
-
71
- .baz {.foo; .bar;}
72
- LESS
73
- end
74
-
75
- # Selectors
76
-
77
- def test_element_selector
78
- assert_renders <<SCSS, <<LESS
79
- foo {
80
- a: b; }
81
- SCSS
82
- foo {a: b}
83
- LESS
84
- end
85
-
86
- def test_class_selector
87
- assert_renders <<SCSS, <<LESS
88
- .foo {
89
- a: b; }
90
- SCSS
91
- .foo {a: b}
92
- LESS
93
- end
94
-
95
- def test_id_selector
96
- assert_renders <<SCSS, <<LESS
97
- #foo {
98
- a: b; }
99
- SCSS
100
- #foo {a: b}
101
- LESS
102
- end
103
-
104
- def test_pseudoclass_selector
105
- assert_renders <<SCSS, <<LESS
106
- :foo {
107
- a: b; }
108
- SCSS
109
- :foo {a: b}
110
- LESS
111
- end
112
-
113
- def test_pseudoelement_selector
114
- assert_renders <<SCSS, <<LESS
115
- ::foo {
116
- a: b; }
117
- SCSS
118
- ::foo {a: b}
119
- LESS
120
- end
121
-
122
- def test_comma_selector
123
- assert_renders <<SCSS, <<LESS
124
- foo, .bar .baz, :bang {
125
- a: b; }
126
- SCSS
127
- foo, .bar .baz, :bang {a: b}
128
- LESS
129
- end
130
-
131
- def test_nested_comma_selector
132
- assert_renders <<SCSS, <<LESS
133
- foo bar, .baz {
134
- .bang, &:bip bap {
135
- a: b; } }
136
- SCSS
137
- foo bar, .baz {
138
- .bang, :bip bap {a: b} }
139
- LESS
140
- end
141
-
142
- def test_simple_selector_sequence
143
- assert_renders <<SCSS, <<LESS
144
- a.foo#bar[attr=val] {
145
- a: b; }
146
- SCSS
147
- a.foo#bar[attr=val] {a: b}
148
- LESS
149
- end
150
-
151
- def test_descendant_selector
152
- assert_renders <<SCSS, <<LESS
153
- .foo .bar {
154
- a: b; }
155
- SCSS
156
- .foo .bar {a: b}
157
- LESS
158
- end
159
-
160
- def test_child_selector
161
- assert_renders <<SCSS, <<LESS
162
- .foo > .bar {
163
- a: b; }
164
- SCSS
165
- .foo > .bar {a: b}
166
- LESS
167
- end
168
-
169
- def test_adjacent_selector
170
- assert_renders <<SCSS, <<LESS
171
- .foo + .bar {
172
- a: b; }
173
- SCSS
174
- .foo + .bar {a: b}
175
- LESS
176
- end
177
-
178
- def test_pseudoclass_in_sequence
179
- assert_renders <<SCSS, <<LESS
180
- .foo:bar {
181
- a: b; }
182
- SCSS
183
- .foo:bar {a: b}
184
- LESS
185
- end
186
-
187
- def test_pseudoelement_in_sequence
188
- assert_renders <<SCSS, <<LESS
189
- .foo::bar {
190
- a: b; }
191
- SCSS
192
- .foo::bar {a: b}
193
- LESS
194
- end
195
-
196
- # Properties
197
-
198
- def test_space_separated_props
199
- assert_renders <<SCSS, <<LESS
200
- foo {
201
- a: foo bar baz; }
202
- SCSS
203
- foo {a: foo bar baz}
204
- LESS
205
- end
206
-
207
- def test_comma_separated_props
208
- assert_renders <<SCSS, <<LESS
209
- foo {
210
- a: foo, bar, baz; }
211
- SCSS
212
- foo {a: foo, bar, baz}
213
- LESS
214
- end
215
-
216
- def test_numbers
217
- assert_renders <<SCSS, <<LESS
218
- foo {
219
- a: 1 2.3 -8 5px 3%; }
220
- SCSS
221
- foo {a: 1 2.3 -8 5px 3%}
222
- LESS
223
- end
224
-
225
- def test_colors
226
- assert_renders <<SCSS, <<LESS
227
- foo {
228
- a: red #abcdef blue; }
229
- SCSS
230
- foo {a: #f00 #abcdef blue}
231
- LESS
232
- end
233
-
234
- def test_strings
235
- assert_renders <<SCSS, <<LESS
236
- foo {
237
- a: "foo @var bar" "baz bang" "quote'quote" 'quote"quote'; }
238
- SCSS
239
- foo {a: "foo @var bar" 'baz bang' "quote'quote" 'quote"quote'}
240
- LESS
241
- end
242
-
243
- def test_slash
244
- assert_renders <<SCSS, <<LESS
245
- foo {
246
- a: small/8px 7em/8px;
247
- b: 8/4;
248
- c: (8 / 4); }
249
- SCSS
250
- foo {
251
- a: small/8px 7em/8px;
252
- b: 8/4;
253
- c: 8 / 4; }
254
- LESS
255
- end
256
-
257
- def test_url
258
- assert_renders <<SCSS, <<LESS
259
- foo {
260
- a: url("http://foobar.com/fizzle.html?foo=bar&bar=baz");
261
- b: url("http://foobar.com/fizzle.html?foo=bar&bar=baz");
262
- c: url("http://foobar.com/fizzle.html?foo=bar&bar=baz"); }
263
- SCSS
264
- foo {
265
- a: url(http://foobar.com/fizzle.html?foo=bar&bar=baz);
266
- b: url("http://foobar.com/fizzle.html?foo=bar&bar=baz");
267
- c: url('http://foobar.com/fizzle.html?foo=bar&bar=baz'); }
268
- LESS
269
- end
270
-
271
- def test_functions
272
- assert_renders <<SCSS, <<LESS
273
- foo {
274
- a: baz(12px) rgba(80, 70 120, 0.76);
275
- b: faz(1px + 3px) bang($var, #aaaaaa * 3); }
276
- SCSS
277
- foo {
278
- a: baz(12px) rgba(80, 70 120, 0.76);
279
- b: faz(1px + 3px) bang(@var, #aaa * 3); }
280
- LESS
281
- end
282
-
283
- def test_alpha_function
284
- assert_renders <<SCSS, <<LESS
285
- foo {
286
- a: alpha(opacity=2px);
287
- b: alpha(opacity = $var); }
288
- SCSS
289
- foo {
290
- a: alpha(opacity=2px);
291
- b: alpha(opacity=@var); }
292
- LESS
293
- end
294
-
295
- def test_variables
296
- assert_renders <<SCSS, <<LESS
297
- foo {
298
- a: $var1 $var-foo; }
299
- SCSS
300
- foo {a: @var1 @var-foo}
301
- LESS
302
- end
303
-
304
- def test_operators
305
- assert_renders <<SCSS, <<LESS
306
- foo {
307
- a: 1px + 2px;
308
- b: #bbaa88 - #aa1122;
309
- c: 5 * 3;
310
- d: (8 / 4); }
311
- SCSS
312
- foo {
313
- a: 1px + 2px;
314
- b: #ba8 - #a12;
315
- c: 5 * 3;
316
- d: 8 / 4; }
317
- LESS
318
- end
319
-
320
- def test_operator_precedence
321
- assert_renders <<SCSS, <<LESS
322
- foo {
323
- a: 1 + 2 * 3 + 4;
324
- b: 1 * 2 + 3 * 4;
325
- c: 1 - 2 + 2 - 4;
326
- d: 1 + 2 - 3 + 4;
327
- e: 1 / 2 - 3 / 4;
328
- f: 1 - 2 / 3 - 4;
329
- g: 1 / 2 * 3 / 4;
330
- h: (1 + 2) * (3 + 4);
331
- i: 1 * (2 + 3) * 4;
332
- j: 1 - (2 + 2) - 4;
333
- k: 1 + 2 - (3 + 4);
334
- l: 1 / (2 - 3) / 4;
335
- m: (1 - 2) / (3 - 4);
336
- n: 1 / (2 * 3) / 4; }
337
- SCSS
338
- foo {
339
- a: 1 + 2 * 3 + 4;
340
- b: 1 * 2 + 3 * 4;
341
- c: 1 - 2 + 2 - 4;
342
- d: 1 + 2 - 3 + 4;
343
- e: 1 / 2 - 3 / 4;
344
- f: 1 - 2 / 3 - 4;
345
- g: 1 / 2 * 3 / 4;
346
- h: (1 + 2) * (3 + 4);
347
- i: 1 * (2 + 3) * 4;
348
- j: 1 - (2 + 2) - 4;
349
- k: 1 + 2 - (3 + 4);
350
- l: 1 / (2 - 3) / 4;
351
- m: (1 - 2) / (3 - 4);
352
- n: 1 / (2 * 3) / 4; }
353
- LESS
354
- end
355
-
356
- def test_operators_with_parens
357
- assert_renders <<SCSS, <<LESS
358
- foo {
359
- a: 1px + 2px * 3;
360
- b: (1px - 2px) / 3; }
361
- SCSS
362
- foo {
363
- a: 1px + (2px * 3);
364
- b: (1px - (2px)) / 3; }
365
- LESS
366
- end
367
-
368
- def test_unary_minus
369
- assert_renders <<SCSS, <<LESS
370
- foo {
371
- a: 1px + -3px; }
372
- SCSS
373
- foo {a: 1px + (- 3px)}
374
- LESS
375
- end
376
-
377
- # Nested Rules
378
-
379
- def test_single_nested_rule
380
- assert_renders <<SCSS, <<LESS
381
- foo bar {
382
- a: b; }
383
- SCSS
384
- foo {bar {a: b}}
385
- LESS
386
- end
387
-
388
- def test_single_nested_rule_with_props
389
- assert_renders <<SCSS, <<LESS
390
- foo {
391
- bar {
392
- a: b; }
393
- c: d;
394
- e: f; }
395
- SCSS
396
- foo {
397
- bar {a: b}
398
- c: d;
399
- e: f; }
400
- LESS
401
- end
402
-
403
- def test_two_nested_rules
404
- assert_renders <<SCSS, <<LESS
405
- foo {
406
- bar {
407
- a: b; }
408
- baz {
409
- c: d; } }
410
- SCSS
411
- foo {
412
- bar {a: b}
413
- baz {c: d} }
414
- LESS
415
- end
416
-
417
- def test_two_nested_rules_with_props
418
- assert_renders <<SCSS, <<LESS
419
- foo {
420
- bar {
421
- a: b; }
422
- baz {
423
- c: d; }
424
- e: f;
425
- g: h; }
426
- SCSS
427
- foo {
428
- bar {a: b}
429
- baz {c: d}
430
- e: f;
431
- g: h; }
432
- LESS
433
- end
434
-
435
- def test_nested_rules_with_combinators
436
- assert_renders <<SCSS, <<LESS
437
- foo {
438
- > bar {
439
- a: b; }
440
- + baz {
441
- c: d; } }
442
- SCSS
443
- foo {
444
- > bar {a: b}
445
- + baz {c: d} }
446
- LESS
447
- end
448
-
449
- def test_nested_pseudo_rules
450
- assert_renders <<SCSS, <<LESS
451
- foo {
452
- &:bar {
453
- a: b; }
454
- &::baz {
455
- c: d; } }
456
- SCSS
457
- foo {
458
- :bar {a: b}
459
- ::baz {c: d} }
460
- LESS
461
- end
462
-
463
- # Mixins
464
-
465
- def test_class_inheritance
466
- assert_renders <<SCSS, <<LESS
467
- .foo {
468
- a: b; }
469
-
470
- .bar {
471
- @extend .foo; }
472
- SCSS
473
- .foo {a: b}
474
- .bar {.foo;}
475
- LESS
476
- end
477
-
478
- def test_multiple_class_inheritance
479
- assert_renders <<SCSS, <<LESS
480
- .foo {
481
- a: b; }
482
-
483
- .bar {
484
- c: d; }
485
-
486
- .baz {
487
- @extend .foo;
488
- @extend .bar; }
489
- SCSS
490
- .foo {a: b}
491
- .bar {c: d}
492
- .baz {.foo, .bar;}
493
- LESS
494
- end
495
-
496
- def test_pseudoclass_inheritance
497
- assert_renders <<SCSS, <<LESS
498
- :foo {
499
- a: b; }
500
-
501
- :bar {
502
- @extend :foo; }
503
- SCSS
504
- :foo {a: b}
505
- :bar {:foo;}
506
- LESS
507
- end
508
-
509
- def test_multiple_pseudoclass_inheritance
510
- assert_renders <<SCSS, <<LESS
511
- :foo:bar {
512
- a: b; }
513
-
514
- :baz {
515
- @extend :foo:bar; }
516
- SCSS
517
- :foo:bar {a: b}
518
- :baz {:foo:bar;}
519
- LESS
520
- end
521
-
522
- def test_abstract_mixin
523
- assert_renders <<SCSS, <<LESS
524
- @mixin foo {
525
- a: b; }
526
-
527
- .bar {
528
- @include foo; }
529
- SCSS
530
- .foo() {a: b}
531
- .bar {.foo;}
532
- LESS
533
- end
534
-
535
- def test_mixin_with_args
536
- assert_renders <<SCSS, <<LESS
537
- @mixin foo($a: 2px, $b: red) {
538
- a: $a; }
539
-
540
- .bar {
541
- @include foo; }
542
- SCSS
543
- .foo(@a: 2px, @b: #f00) {a: @a}
544
- .bar {.foo;}
545
- LESS
546
-
547
- assert_renders <<SCSS, <<LESS
548
- @mixin foo($a: 2px + 3px, $b: red) {
549
- a: $a; }
550
-
551
- .bar {
552
- @include foo(5px); }
553
- SCSS
554
- .foo(@a: 2px + 3px, @b: #f00) {a: @a}
555
- .bar {.foo(5px);}
556
- LESS
557
- end
558
-
559
- ## Disallowed Mixins
560
-
561
- def test_nested_mixin
562
- assert_warning(<<WARN) {assert_renders <<SCSS, <<LESS}
563
- WARNING: Sass doesn't support mixing in selector sequences.
564
- Replacing ".foo .bar" with "@extend .bar"
565
- WARN
566
- .foo .bar {
567
- a: b; }
568
-
569
- .bar {
570
- // .foo .bar;
571
- @extend .bar; }
572
- SCSS
573
- .foo .bar {a: b}
574
- .bar {.foo .bar;}
575
- LESS
576
- end
577
-
578
- def test_child_selector_mixin
579
- assert_warning(<<WARN) {assert_renders <<SCSS, <<LESS}
580
- WARNING: Sass doesn't support mixing in selector sequences.
581
- Replacing "> .bar" with "@extend .bar"
582
- WARN
583
- .foo > .bar {
584
- a: b; }
585
-
586
- .bar {
587
- // > .bar;
588
- @extend .bar; }
589
- SCSS
590
- .foo > .bar {a: b}
591
- .bar {> .bar;}
592
- LESS
593
- end
594
-
595
- # Accessors
596
-
597
- def test_property_accessor
598
- assert_warning(<<WARN) {assert_renders <<SCSS, <<LESS}
599
- WARNING: Sass doesn't support attribute accessors.
600
- Ignoring .magic-box['content']
601
- WARN
602
- .magic-box {
603
- content: "gold"; }
604
-
605
- .foo {
606
- content: /* .magic-box['content'] */; }
607
- SCSS
608
- .magic-box {content: "gold"}
609
- .foo {content: .magic-box['content']}
610
- LESS
611
- end
612
-
613
- def test_variable_accessor
614
- assert_warning(<<WARN) {assert_renders <<SCSS, <<LESS}
615
- WARNING: Sass doesn't support attribute accessors.
616
- Ignoring .magic-box[@content]
617
- WARN
618
- .magic-box {
619
- $content: "gold";
620
- content: $content; }
621
-
622
- .foo {
623
- content: /* .magic-box[@content] */; }
624
- SCSS
625
- .magic-box {@content: "gold"; content: @content}
626
- .foo {content: .magic-box[@content]}
627
- LESS
628
- end
629
-
630
- private
631
-
632
- def assert_renders(scss, less)
633
- assert_equal(scss, Less::Engine.new(less).to_tree.to_sass_tree.to_scss)
634
- end
635
-
636
- # Necessary because Less can't import absolute files
637
- def relative_path_to(file)
638
- file = Pathname.new(file)
639
- pwd = file.absolute? ? Dir.pwd : "."
640
- file.relative_path_from(Pathname.new(pwd))
641
- end
642
- end
643
-
644
- rescue LoadError => e
645
- unless defined?(Gem)
646
- begin
647
- require 'rubygems'
648
- retry
649
- rescue Exception
650
- end
651
- end
652
- puts "\nCouldn't require less, skipping some tests."
653
- end
@@ -1,55 +0,0 @@
1
- Monitor API
2
- ===========
3
-
4
- There are three ways you can run the monitor.
5
-
6
- 1. call monitor with a path parameter, and define callbacks in a block
7
- 2. call monitor with a block to configure multiple paths and callbacks
8
- 3. create a monitor object and run each step manually
9
-
10
- Monitor with path
11
- -----------------
12
-
13
- This form watches one path, and enters the run loop automatically. The first parameter is the path to watch, and the second parameter is an optional glob pattern or array of glob patterns that a file must match in order to trigger a callback. The default glob, if ommitted, is `'**/*'`.
14
-
15
- FSSM.monitor('/some/directory/', '**/*') do
16
- update {|base, relative|}
17
- delete {|base, relative|}
18
- create {|base, relative|}
19
- end
20
-
21
- Monitor with block
22
- ------------------
23
-
24
- This form watches one or more paths, and enters the run loop automatically. The glob configuration call can be ommitted, and defaults to `'**/*'`.
25
-
26
- FSSM.monitor do
27
- path '/some/directory/' do
28
- glob '**/*.yml'
29
-
30
- update {|base, relative|}
31
- delete {|base, relative|}
32
- create {|base, relative|}
33
- end
34
-
35
- path '/some/other/directory/' do
36
- update {|base, relative|}
37
- delete {|base, relative|}
38
- create {|base, relative|}
39
- end
40
- end
41
-
42
- Monitor object
43
- --------------
44
-
45
- This form doesn't enter the run loop automatically.
46
-
47
- monitor = FSSM::Monitor.new
48
-
49
- monitor.path '/some/directory/' do
50
- update {|base, relative|}
51
- delete {|base, relative|}
52
- create {|base, relative|}
53
- end
54
-
55
- monitor.run