haml 3.0.25 → 3.1.0.alpha.2

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 (212) hide show
  1. data/.yardopts +1 -1
  2. data/CONTRIBUTING +0 -1
  3. data/EDGE_GEM_VERSION +1 -0
  4. data/MIT-LICENSE +1 -1
  5. data/README.md +10 -175
  6. data/Rakefile +56 -84
  7. data/VERSION +1 -1
  8. data/VERSION_NAME +1 -1
  9. data/init.rb +1 -1
  10. data/lib/haml.rb +14 -12
  11. data/lib/haml/engine.rb +1 -1
  12. data/lib/haml/exec.rb +19 -316
  13. data/lib/haml/helpers/action_view_extensions.rb +1 -1
  14. data/lib/haml/html.rb +69 -76
  15. data/lib/haml/precompiler.rb +34 -41
  16. data/lib/haml/railtie.rb +4 -6
  17. data/lib/haml/template/plugin.rb +6 -16
  18. data/lib/haml/util.rb +91 -107
  19. data/lib/haml/version.rb +7 -0
  20. data/test/benchmark.rb +2 -9
  21. data/test/haml/engine_test.rb +195 -92
  22. data/test/haml/html2haml/erb_tests.rb +0 -14
  23. data/test/haml/util_test.rb +32 -0
  24. data/test/test_helper.rb +0 -39
  25. metadata +96 -324
  26. data/bin/css2sass +0 -13
  27. data/bin/sass +0 -8
  28. data/bin/sass-convert +0 -7
  29. data/extra/haml-mode.el +0 -753
  30. data/extra/sass-mode.el +0 -207
  31. data/lib/haml/util/subset_map.rb +0 -101
  32. data/lib/sass.rb +0 -29
  33. data/lib/sass/callbacks.rb +0 -52
  34. data/lib/sass/css.rb +0 -294
  35. data/lib/sass/engine.rb +0 -720
  36. data/lib/sass/environment.rb +0 -143
  37. data/lib/sass/error.rb +0 -198
  38. data/lib/sass/files.rb +0 -160
  39. data/lib/sass/less.rb +0 -382
  40. data/lib/sass/plugin.rb +0 -279
  41. data/lib/sass/plugin/configuration.rb +0 -221
  42. data/lib/sass/plugin/generic.rb +0 -15
  43. data/lib/sass/plugin/merb.rb +0 -37
  44. data/lib/sass/plugin/rack.rb +0 -47
  45. data/lib/sass/plugin/rails.rb +0 -32
  46. data/lib/sass/plugin/staleness_checker.rb +0 -123
  47. data/lib/sass/repl.rb +0 -58
  48. data/lib/sass/script.rb +0 -63
  49. data/lib/sass/script/bool.rb +0 -18
  50. data/lib/sass/script/color.rb +0 -491
  51. data/lib/sass/script/css_lexer.rb +0 -29
  52. data/lib/sass/script/css_parser.rb +0 -31
  53. data/lib/sass/script/funcall.rb +0 -77
  54. data/lib/sass/script/functions.rb +0 -861
  55. data/lib/sass/script/interpolation.rb +0 -70
  56. data/lib/sass/script/lexer.rb +0 -337
  57. data/lib/sass/script/literal.rb +0 -236
  58. data/lib/sass/script/node.rb +0 -112
  59. data/lib/sass/script/number.rb +0 -423
  60. data/lib/sass/script/operation.rb +0 -95
  61. data/lib/sass/script/parser.rb +0 -401
  62. data/lib/sass/script/string.rb +0 -67
  63. data/lib/sass/script/string_interpolation.rb +0 -93
  64. data/lib/sass/script/unary_operation.rb +0 -57
  65. data/lib/sass/script/variable.rb +0 -48
  66. data/lib/sass/scss.rb +0 -17
  67. data/lib/sass/scss/css_parser.rb +0 -46
  68. data/lib/sass/scss/parser.rb +0 -855
  69. data/lib/sass/scss/rx.rb +0 -126
  70. data/lib/sass/scss/sass_parser.rb +0 -11
  71. data/lib/sass/scss/script_lexer.rb +0 -15
  72. data/lib/sass/scss/script_parser.rb +0 -25
  73. data/lib/sass/scss/static_parser.rb +0 -40
  74. data/lib/sass/selector.rb +0 -361
  75. data/lib/sass/selector/abstract_sequence.rb +0 -62
  76. data/lib/sass/selector/comma_sequence.rb +0 -82
  77. data/lib/sass/selector/sequence.rb +0 -237
  78. data/lib/sass/selector/simple.rb +0 -113
  79. data/lib/sass/selector/simple_sequence.rb +0 -136
  80. data/lib/sass/tree/charset_node.rb +0 -37
  81. data/lib/sass/tree/comment_node.rb +0 -128
  82. data/lib/sass/tree/debug_node.rb +0 -36
  83. data/lib/sass/tree/directive_node.rb +0 -75
  84. data/lib/sass/tree/extend_node.rb +0 -65
  85. data/lib/sass/tree/for_node.rb +0 -55
  86. data/lib/sass/tree/if_node.rb +0 -69
  87. data/lib/sass/tree/import_node.rb +0 -102
  88. data/lib/sass/tree/mixin_def_node.rb +0 -48
  89. data/lib/sass/tree/mixin_node.rb +0 -111
  90. data/lib/sass/tree/node.rb +0 -464
  91. data/lib/sass/tree/prop_node.rb +0 -220
  92. data/lib/sass/tree/root_node.rb +0 -163
  93. data/lib/sass/tree/rule_node.rb +0 -261
  94. data/lib/sass/tree/variable_node.rb +0 -39
  95. data/lib/sass/tree/warn_node.rb +0 -42
  96. data/lib/sass/tree/while_node.rb +0 -36
  97. data/test/haml/util/subset_map_test.rb +0 -91
  98. data/test/sass/callbacks_test.rb +0 -61
  99. data/test/sass/conversion_test.rb +0 -1218
  100. data/test/sass/css2sass_test.rb +0 -364
  101. data/test/sass/data/hsl-rgb.txt +0 -319
  102. data/test/sass/engine_test.rb +0 -2267
  103. data/test/sass/extend_test.rb +0 -1348
  104. data/test/sass/functions_test.rb +0 -556
  105. data/test/sass/less_conversion_test.rb +0 -653
  106. data/test/sass/more_results/more1.css +0 -9
  107. data/test/sass/more_results/more1_with_line_comments.css +0 -26
  108. data/test/sass/more_results/more_import.css +0 -29
  109. data/test/sass/more_templates/_more_partial.sass +0 -2
  110. data/test/sass/more_templates/more1.sass +0 -23
  111. data/test/sass/more_templates/more_import.sass +0 -11
  112. data/test/sass/plugin_test.rb +0 -433
  113. data/test/sass/results/alt.css +0 -4
  114. data/test/sass/results/basic.css +0 -9
  115. data/test/sass/results/compact.css +0 -5
  116. data/test/sass/results/complex.css +0 -86
  117. data/test/sass/results/compressed.css +0 -1
  118. data/test/sass/results/expanded.css +0 -19
  119. data/test/sass/results/import.css +0 -31
  120. data/test/sass/results/import_charset.css +0 -4
  121. data/test/sass/results/import_charset_1_8.css +0 -4
  122. data/test/sass/results/import_charset_ibm866.css +0 -4
  123. data/test/sass/results/line_numbers.css +0 -49
  124. data/test/sass/results/mixins.css +0 -95
  125. data/test/sass/results/multiline.css +0 -24
  126. data/test/sass/results/nested.css +0 -22
  127. data/test/sass/results/options.css +0 -1
  128. data/test/sass/results/parent_ref.css +0 -13
  129. data/test/sass/results/script.css +0 -16
  130. data/test/sass/results/scss_import.css +0 -31
  131. data/test/sass/results/scss_importee.css +0 -2
  132. data/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  133. data/test/sass/results/subdir/subdir.css +0 -3
  134. data/test/sass/results/units.css +0 -11
  135. data/test/sass/results/warn.css +0 -0
  136. data/test/sass/results/warn_imported.css +0 -0
  137. data/test/sass/script_conversion_test.rb +0 -314
  138. data/test/sass/script_test.rb +0 -470
  139. data/test/sass/scss/css_test.rb +0 -916
  140. data/test/sass/scss/rx_test.rb +0 -156
  141. data/test/sass/scss/scss_test.rb +0 -1122
  142. data/test/sass/scss/test_helper.rb +0 -37
  143. data/test/sass/templates/_imported_charset_ibm866.sass +0 -4
  144. data/test/sass/templates/_imported_charset_utf8.sass +0 -4
  145. data/test/sass/templates/_partial.sass +0 -2
  146. data/test/sass/templates/alt.sass +0 -16
  147. data/test/sass/templates/basic.sass +0 -23
  148. data/test/sass/templates/bork1.sass +0 -2
  149. data/test/sass/templates/bork2.sass +0 -2
  150. data/test/sass/templates/bork3.sass +0 -2
  151. data/test/sass/templates/bork4.sass +0 -2
  152. data/test/sass/templates/compact.sass +0 -17
  153. data/test/sass/templates/complex.sass +0 -305
  154. data/test/sass/templates/compressed.sass +0 -15
  155. data/test/sass/templates/expanded.sass +0 -17
  156. data/test/sass/templates/import.sass +0 -12
  157. data/test/sass/templates/import_charset.sass +0 -7
  158. data/test/sass/templates/import_charset_1_8.sass +0 -4
  159. data/test/sass/templates/import_charset_ibm866.sass +0 -9
  160. data/test/sass/templates/importee.less +0 -2
  161. data/test/sass/templates/importee.sass +0 -19
  162. data/test/sass/templates/line_numbers.sass +0 -13
  163. data/test/sass/templates/mixin_bork.sass +0 -5
  164. data/test/sass/templates/mixins.sass +0 -76
  165. data/test/sass/templates/multiline.sass +0 -20
  166. data/test/sass/templates/nested.sass +0 -25
  167. data/test/sass/templates/nested_bork1.sass +0 -2
  168. data/test/sass/templates/nested_bork2.sass +0 -2
  169. data/test/sass/templates/nested_bork3.sass +0 -2
  170. data/test/sass/templates/nested_bork4.sass +0 -2
  171. data/test/sass/templates/nested_mixin_bork.sass +0 -6
  172. data/test/sass/templates/options.sass +0 -2
  173. data/test/sass/templates/parent_ref.sass +0 -25
  174. data/test/sass/templates/script.sass +0 -101
  175. data/test/sass/templates/scss_import.scss +0 -11
  176. data/test/sass/templates/scss_importee.scss +0 -1
  177. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  178. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  179. data/test/sass/templates/subdir/subdir.sass +0 -6
  180. data/test/sass/templates/units.sass +0 -11
  181. data/test/sass/templates/warn.sass +0 -3
  182. data/test/sass/templates/warn_imported.sass +0 -4
  183. data/vendor/fssm/LICENSE +0 -20
  184. data/vendor/fssm/README.markdown +0 -55
  185. data/vendor/fssm/Rakefile +0 -59
  186. data/vendor/fssm/VERSION.yml +0 -5
  187. data/vendor/fssm/example.rb +0 -9
  188. data/vendor/fssm/fssm.gemspec +0 -77
  189. data/vendor/fssm/lib/fssm.rb +0 -33
  190. data/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
  191. data/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
  192. data/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
  193. data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
  194. data/vendor/fssm/lib/fssm/monitor.rb +0 -26
  195. data/vendor/fssm/lib/fssm/path.rb +0 -91
  196. data/vendor/fssm/lib/fssm/pathname.rb +0 -502
  197. data/vendor/fssm/lib/fssm/state/directory.rb +0 -57
  198. data/vendor/fssm/lib/fssm/state/file.rb +0 -24
  199. data/vendor/fssm/lib/fssm/support.rb +0 -63
  200. data/vendor/fssm/lib/fssm/tree.rb +0 -176
  201. data/vendor/fssm/profile/prof-cache.rb +0 -40
  202. data/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
  203. data/vendor/fssm/profile/prof-pathname.rb +0 -68
  204. data/vendor/fssm/profile/prof-plain-pathname.html +0 -988
  205. data/vendor/fssm/profile/prof.html +0 -2379
  206. data/vendor/fssm/spec/path_spec.rb +0 -75
  207. data/vendor/fssm/spec/root/duck/quack.txt +0 -0
  208. data/vendor/fssm/spec/root/file.css +0 -0
  209. data/vendor/fssm/spec/root/file.rb +0 -0
  210. data/vendor/fssm/spec/root/file.yml +0 -0
  211. data/vendor/fssm/spec/root/moo/cow.txt +0 -0
  212. 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