haml 3.1.0.alpha.33 → 3.1.0.alpha.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/EDGE_GEM_VERSION +1 -1
- data/VERSION +1 -1
- data/vendor/sass/doc-src/SASS_CHANGELOG.md +177 -2
- data/vendor/sass/doc-src/SASS_REFERENCE.md +140 -3
- data/vendor/sass/lib/sass/cache_stores.rb +14 -0
- data/vendor/sass/lib/sass/cache_stores/active_support.rb +28 -0
- data/vendor/sass/lib/sass/cache_stores/base.rb +84 -0
- data/vendor/sass/lib/sass/cache_stores/filesystem.rb +56 -0
- data/vendor/sass/lib/sass/cache_stores/memory.rb +51 -0
- data/vendor/sass/lib/sass/cache_stores/null.rb +25 -0
- data/vendor/sass/lib/sass/engine.rb +86 -25
- data/vendor/sass/lib/sass/exec.rb +10 -1
- data/vendor/sass/lib/sass/importers/rails.rb +75 -0
- data/vendor/sass/lib/sass/less.rb +1 -1
- data/vendor/sass/lib/sass/plugin/compiler.rb +4 -1
- data/vendor/sass/lib/sass/plugin/configuration.rb +4 -2
- data/vendor/sass/lib/sass/plugin/rack.rb +15 -2
- data/vendor/sass/lib/sass/plugin/rails.rb +89 -9
- data/vendor/sass/lib/sass/plugin/staleness_checker.rb +30 -2
- data/vendor/sass/lib/sass/script/css_parser.rb +1 -1
- data/vendor/sass/lib/sass/script/functions.rb +126 -5
- data/vendor/sass/lib/sass/script/lexer.rb +1 -1
- data/vendor/sass/lib/sass/script/list.rb +76 -0
- data/vendor/sass/lib/sass/script/literal.rb +10 -1
- data/vendor/sass/lib/sass/script/number.rb +1 -1
- data/vendor/sass/lib/sass/script/operation.rb +3 -2
- data/vendor/sass/lib/sass/script/parser.rb +25 -12
- data/vendor/sass/lib/sass/scss/css_parser.rb +0 -5
- data/vendor/sass/lib/sass/scss/parser.rb +46 -7
- data/vendor/sass/lib/sass/scss/static_parser.rb +1 -1
- data/vendor/sass/lib/sass/tree/charset_node.rb +37 -0
- data/vendor/sass/lib/sass/tree/directive_node.rb +2 -2
- data/vendor/sass/lib/sass/tree/each_node.rb +54 -0
- data/vendor/sass/lib/sass/tree/if_node.rb +19 -0
- data/vendor/sass/lib/sass/tree/media_node.rb +75 -0
- data/vendor/sass/lib/sass/tree/prop_node.rb +1 -1
- data/vendor/sass/lib/sass/tree/root_node.rb +37 -5
- data/vendor/sass/lib/sass/tree/rule_node.rb +4 -6
- data/vendor/sass/lib/sass/util.rb +18 -1
- data/vendor/sass/test/sass/cache_test.rb +7 -7
- data/vendor/sass/test/sass/conversion_test.rb +28 -0
- data/vendor/sass/test/sass/engine_test.rb +214 -11
- data/vendor/sass/test/sass/functions_test.rb +69 -0
- data/vendor/sass/test/sass/plugin_test.rb +13 -4
- data/vendor/sass/test/sass/results/import_charset.css +4 -0
- data/vendor/sass/test/sass/results/import_charset_1_8.css +4 -0
- data/vendor/sass/test/sass/results/import_charset_ibm866.css +4 -0
- data/vendor/sass/test/sass/script_conversion_test.rb +27 -25
- data/vendor/sass/test/sass/script_test.rb +12 -1
- data/vendor/sass/test/sass/scss/css_test.rb +27 -8
- data/vendor/sass/test/sass/scss/scss_test.rb +77 -0
- data/vendor/sass/test/sass/templates/_imported_charset_ibm866.sass +4 -0
- data/vendor/sass/test/sass/templates/_imported_charset_utf8.sass +4 -0
- data/vendor/sass/test/sass/templates/import_charset.sass +7 -0
- data/vendor/sass/test/sass/templates/import_charset_1_8.sass +4 -0
- data/vendor/sass/test/sass/templates/import_charset_ibm866.sass +9 -0
- data/vendor/sass/test/sass/templates/script.sass +2 -2
- data/vendor/sass/test/test_helper.rb +8 -0
- metadata +27 -10
- data/REVISION +0 -1
- data/vendor/sass/lib/sass/cache_store.rb +0 -208
|
@@ -599,6 +599,75 @@ MSG
|
|
|
599
599
|
assert_error_message("#ff0000 is not a number for `comparable'", "comparable(1px, #f00)")
|
|
600
600
|
end
|
|
601
601
|
|
|
602
|
+
def test_length
|
|
603
|
+
assert_equal("5", evaluate("length(1 2 3 4 5)"))
|
|
604
|
+
assert_equal("4", evaluate("length((foo, bar, baz, bip))"))
|
|
605
|
+
assert_equal("3", evaluate("length((foo, bar, baz bip))"))
|
|
606
|
+
assert_equal("3", evaluate("length((foo, bar, (baz, bip)))"))
|
|
607
|
+
assert_equal("1", evaluate("length(#f00)"))
|
|
608
|
+
end
|
|
609
|
+
|
|
610
|
+
def test_nth
|
|
611
|
+
assert_equal("1", evaluate("nth(1 2 3, 1)"))
|
|
612
|
+
assert_equal("2", evaluate("nth(1 2 3, 2)"))
|
|
613
|
+
assert_equal("3", evaluate("nth((1, 2, 3), 3)"))
|
|
614
|
+
assert_equal("foo", evaluate("nth(foo, 1)"))
|
|
615
|
+
assert_equal("bar baz", evaluate("nth(foo (bar baz) bang, 2)"))
|
|
616
|
+
assert_error_message("List index 0 must be greater than or equal to 1 for `nth'", "nth(foo, 0)")
|
|
617
|
+
assert_error_message("List index -10 must be greater than or equal to 1 for `nth'", "nth(foo, -10)")
|
|
618
|
+
assert_error_message("List index 1.5 must be an integer for `nth'", "nth(foo, 1.5)")
|
|
619
|
+
assert_error_message("List index is 5 but list is only 4 items long for `nth'", "nth(1 2 3 4, 5)")
|
|
620
|
+
assert_error_message("List index is 2 but list is only 1 item long for `nth'", "nth(foo, 2)")
|
|
621
|
+
end
|
|
622
|
+
|
|
623
|
+
def test_join
|
|
624
|
+
assert_equal("1 2 3", evaluate("join(1 2, 3)"))
|
|
625
|
+
assert_equal("1 2 3", evaluate("join(1, 2 3)"))
|
|
626
|
+
assert_equal("1 2 3 4", evaluate("join(1 2, 3 4)"))
|
|
627
|
+
assert_equal("true", evaluate("(1 2 3 4) == join(1 2, 3 4)"))
|
|
628
|
+
assert_equal("false", evaluate("(1 2 (3 4)) == join(1 2, 3 4)"))
|
|
629
|
+
assert_equal("1, 2, 3", evaluate("join((1, 2), 3)"))
|
|
630
|
+
assert_equal("1, 2, 3", evaluate("join(1, (2, 3))"))
|
|
631
|
+
assert_equal("1, 2, 3, 4", evaluate("join((1, 2), (3, 4))"))
|
|
632
|
+
assert_equal("true", evaluate("(1, 2, 3, 4) == join((1, 2), (3, 4))"))
|
|
633
|
+
assert_equal("false", evaluate("(1, 2, (3, 4)) == join((1, 2), (3, 4))"))
|
|
634
|
+
|
|
635
|
+
assert_equal("1 2", evaluate("join(1, 2)"))
|
|
636
|
+
assert_equal("1 2 3 4", evaluate("join(1 2, (3, 4))"))
|
|
637
|
+
assert_equal("1, 2, 3, 4", evaluate("join((1, 2), 3 4)"))
|
|
638
|
+
|
|
639
|
+
assert_equal("1 2", evaluate("join(1, 2, auto)"))
|
|
640
|
+
assert_equal("1, 2, 3, 4", evaluate("join(1 2, 3 4, comma)"))
|
|
641
|
+
assert_equal("1 2 3 4", evaluate("join((1, 2), (3, 4), space)"))
|
|
642
|
+
assert_equal("1, 2", evaluate("join(1, 2, comma)"))
|
|
643
|
+
|
|
644
|
+
assert_error_message("Separator name must be space, comma, or auto for `join'", "join(1, 2, baboon)")
|
|
645
|
+
end
|
|
646
|
+
|
|
647
|
+
def test_append
|
|
648
|
+
assert_equal("1 2 3", evaluate("append(1 2, 3)"))
|
|
649
|
+
assert_equal("1 2 3 4", evaluate("append(1 2, 3 4)"))
|
|
650
|
+
assert_equal("false", evaluate("(1 2 3 4) == append(1 2, 3 4)"))
|
|
651
|
+
assert_equal("true", evaluate("(1 2 (3 4)) == append(1 2, 3 4)"))
|
|
652
|
+
assert_equal("1, 2, 3", evaluate("append((1, 2), 3)"))
|
|
653
|
+
assert_equal("1, 2, 3, 4", evaluate("append((1, 2), (3, 4))"))
|
|
654
|
+
assert_equal("false", evaluate("(1, 2, 3, 4) == append((1, 2), (3, 4))"))
|
|
655
|
+
assert_equal("true", evaluate("(1, 2, (3, 4)) == append((1, 2), (3, 4))"))
|
|
656
|
+
|
|
657
|
+
assert_equal("1 2", evaluate("append(1, 2)"))
|
|
658
|
+
assert_equal("1 2 3, 4", evaluate("append(1 2, (3, 4))"))
|
|
659
|
+
assert_equal("true", evaluate("(1 2 (3, 4)) == append(1 2, (3, 4))"))
|
|
660
|
+
assert_equal("1, 2, 3 4", evaluate("append((1, 2), 3 4)"))
|
|
661
|
+
assert_equal("true", evaluate("(1, 2, 3 4) == append((1, 2), 3 4)"))
|
|
662
|
+
|
|
663
|
+
assert_equal("1 2", evaluate("append(1, 2, auto)"))
|
|
664
|
+
assert_equal("1, 2, 3 4", evaluate("append(1 2, 3 4, comma)"))
|
|
665
|
+
assert_equal("1 2 3, 4", evaluate("append((1, 2), (3, 4), space)"))
|
|
666
|
+
assert_equal("1, 2", evaluate("append(1, 2, comma)"))
|
|
667
|
+
|
|
668
|
+
assert_error_message("Separator name must be space, comma, or auto for `append'", "append(1, 2, baboon)")
|
|
669
|
+
end
|
|
670
|
+
|
|
602
671
|
def test_keyword_args_rgb
|
|
603
672
|
assert_equal(%Q{white}, evaluate("rgb($red: 255, $green: 255, $blue: 255)"))
|
|
604
673
|
end
|
|
@@ -10,8 +10,10 @@ class SassPluginTest < Test::Unit::TestCase
|
|
|
10
10
|
subdir/subdir subdir/nested_subdir/nested_subdir
|
|
11
11
|
options
|
|
12
12
|
}
|
|
13
|
+
@@templates += %w[import_charset import_charset_ibm866] unless Sass::Util.ruby1_8?
|
|
14
|
+
@@templates << 'import_charset_1_8' if Sass::Util.ruby1_8?
|
|
13
15
|
|
|
14
|
-
@@cache_store = Sass::
|
|
16
|
+
@@cache_store = Sass::CacheStores::Memory.new
|
|
15
17
|
|
|
16
18
|
def setup
|
|
17
19
|
FileUtils.mkdir_p tempfile_loc
|
|
@@ -279,11 +281,18 @@ CSS
|
|
|
279
281
|
prefix = options[:prefix]
|
|
280
282
|
result_name = arguments.shift
|
|
281
283
|
tempfile_name = arguments.shift || result_name
|
|
282
|
-
|
|
283
|
-
|
|
284
|
+
|
|
285
|
+
expected_str = File.read(result_loc(result_name, prefix))
|
|
286
|
+
actual_str = File.read(tempfile_loc(tempfile_name, prefix))
|
|
287
|
+
unless Sass::Util.ruby1_8?
|
|
288
|
+
expected_str = expected_str.force_encoding('IBM866') if result_name == 'import_charset_ibm866'
|
|
289
|
+
actual_str = actual_str.force_encoding('IBM866') if tempfile_name == 'import_charset_ibm866'
|
|
290
|
+
end
|
|
291
|
+
expected_lines = expected_str.split("\n")
|
|
292
|
+
actual_lines = actual_str.split("\n")
|
|
284
293
|
|
|
285
294
|
if actual_lines.first == "/*" && expected_lines.first != "/*"
|
|
286
|
-
assert(false, actual_lines[0..
|
|
295
|
+
assert(false, actual_lines[0..Sass::Util.enum_with_index(actual_lines).find {|l, i| l == "*/"}.last].join("\n"))
|
|
287
296
|
end
|
|
288
297
|
|
|
289
298
|
expected_lines.zip(actual_lines).each_with_index do |pair, line|
|
|
@@ -82,28 +82,6 @@ WARN
|
|
|
82
82
|
assert_renders "$foo !important"
|
|
83
83
|
end
|
|
84
84
|
|
|
85
|
-
def test_comma_operator
|
|
86
|
-
assert_renders "$foo, $bar $baz"
|
|
87
|
-
assert_renders "$foo $bar, $baz"
|
|
88
|
-
|
|
89
|
-
assert_renders "($foo, $bar) $baz"
|
|
90
|
-
assert_renders "$foo ($bar, $baz)"
|
|
91
|
-
|
|
92
|
-
assert_equal "$foo, $bar $baz", render("$foo, ($bar $baz)")
|
|
93
|
-
assert_equal "$foo $bar, $baz", render("($foo $bar), $baz")
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def test_concat_operator
|
|
97
|
-
assert_renders "$foo $bar or $baz"
|
|
98
|
-
assert_renders "$foo or $bar $baz"
|
|
99
|
-
|
|
100
|
-
assert_renders "($foo $bar) or $baz"
|
|
101
|
-
assert_renders "$foo or ($bar $baz)"
|
|
102
|
-
|
|
103
|
-
assert_equal "$foo $bar or $baz", render("$foo ($bar or $baz)")
|
|
104
|
-
assert_equal "$foo or $bar $baz", render("($foo or $bar) $baz")
|
|
105
|
-
end
|
|
106
|
-
|
|
107
85
|
def self.test_precedence(outer, inner)
|
|
108
86
|
op_outer = Sass::Script::Lexer::OPERATORS_REVERSE[outer]
|
|
109
87
|
op_inner = Sass::Script::Lexer::OPERATORS_REVERSE[inner]
|
|
@@ -146,7 +124,7 @@ RUBY
|
|
|
146
124
|
def self.separator_for(op_name)
|
|
147
125
|
case op_name
|
|
148
126
|
when :comma; ", "
|
|
149
|
-
when :
|
|
127
|
+
when :space; " "
|
|
150
128
|
else; " #{Sass::Script::Lexer::OPERATORS_REVERSE[op_name]} "
|
|
151
129
|
end
|
|
152
130
|
end
|
|
@@ -182,8 +160,6 @@ RUBY
|
|
|
182
160
|
test_precedence :plus, :div
|
|
183
161
|
test_precedence :plus, :mod
|
|
184
162
|
|
|
185
|
-
assert_associative :comma, :concat
|
|
186
|
-
assert_associative :concat, :or
|
|
187
163
|
assert_associative :plus, :minus
|
|
188
164
|
assert_associative :times, :div
|
|
189
165
|
assert_associative :times, :mod
|
|
@@ -196,6 +172,32 @@ RUBY
|
|
|
196
172
|
assert_non_associative :lt, :lte
|
|
197
173
|
assert_non_associative :lte, :gt
|
|
198
174
|
|
|
175
|
+
def test_comma_precedence
|
|
176
|
+
assert_renders "$foo, $bar, $baz"
|
|
177
|
+
|
|
178
|
+
assert_renders "$foo ($bar, $baz)"
|
|
179
|
+
assert_renders "($foo, $bar) $baz"
|
|
180
|
+
|
|
181
|
+
assert_equal "$foo, $bar $baz", render("$foo, ($bar $baz)")
|
|
182
|
+
assert_equal "$foo $bar, $baz", render("($foo $bar), $baz")
|
|
183
|
+
|
|
184
|
+
assert_equal "$foo, ($bar, $baz)", render("$foo, ($bar, $baz)")
|
|
185
|
+
assert_equal "($foo, $bar), $baz", render("($foo, $bar), $baz")
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def test_space_precedence
|
|
189
|
+
assert_renders "$foo $bar $baz"
|
|
190
|
+
|
|
191
|
+
assert_renders "$foo or ($bar $baz)"
|
|
192
|
+
assert_renders "($foo $bar) or $baz"
|
|
193
|
+
|
|
194
|
+
assert_equal "$foo $bar or $baz", render("$foo ($bar or $baz)")
|
|
195
|
+
assert_equal "$foo or $bar $baz", render("($foo or $bar) $baz")
|
|
196
|
+
|
|
197
|
+
assert_equal "$foo ($bar $baz)", render("$foo ($bar $baz)")
|
|
198
|
+
assert_equal "($foo $bar) $baz", render("($foo $bar) $baz")
|
|
199
|
+
end
|
|
200
|
+
|
|
199
201
|
def test_unary_op
|
|
200
202
|
assert_renders "-12px"
|
|
201
203
|
assert_renders '/"foo"'
|
|
@@ -103,7 +103,6 @@ class SassScriptTest < Test::Unit::TestCase
|
|
|
103
103
|
|
|
104
104
|
def test_implicit_strings
|
|
105
105
|
assert_equal Sass::Script::String.new("foo"), eval("foo")
|
|
106
|
-
assert_equal Sass::Script::String.new("foo bar"), eval("foo bar")
|
|
107
106
|
assert_equal Sass::Script::String.new("foo/bar"), eval("foo/bar")
|
|
108
107
|
end
|
|
109
108
|
|
|
@@ -235,6 +234,10 @@ SASS
|
|
|
235
234
|
def test_ruby_equality
|
|
236
235
|
assert_equal eval('"foo"'), eval('"foo"')
|
|
237
236
|
assert_equal eval('1'), eval('1.0')
|
|
237
|
+
assert_equal eval('1 2 3.0'), eval('1 2 3')
|
|
238
|
+
assert_equal eval('1, 2, 3.0'), eval('1, 2, 3')
|
|
239
|
+
assert_equal eval('(1 2), (3, 4), (5 6)'), eval('(1 2), (3, 4), (5 6)')
|
|
240
|
+
assert_not_equal eval('1, 2, 3'), eval('1 2 3')
|
|
238
241
|
assert_not_equal eval('1'), eval('"1"')
|
|
239
242
|
end
|
|
240
243
|
|
|
@@ -313,6 +316,14 @@ SASS
|
|
|
313
316
|
assert_equal "true", resolve("false != true")
|
|
314
317
|
assert_equal "false", resolve("1em == 1px")
|
|
315
318
|
assert_equal "false", resolve("12 != 12")
|
|
319
|
+
assert_equal "true", resolve("(foo bar baz) == (foo bar baz)")
|
|
320
|
+
assert_equal "true", resolve("(foo, bar, baz) == (foo, bar, baz)")
|
|
321
|
+
assert_equal "true", resolve('((1 2), (3, 4), (5 6)) == ((1 2), (3, 4), (5 6))')
|
|
322
|
+
assert_equal "true", resolve('((1 2), (3 4)) == (1 2, 3 4)')
|
|
323
|
+
assert_equal "false", resolve('((1 2) 3) == (1 2 3)')
|
|
324
|
+
assert_equal "false", resolve('(1 (2 3)) == (1 2 3)')
|
|
325
|
+
assert_equal "false", resolve('((1, 2) (3, 4)) == (1, 2 3, 4)')
|
|
326
|
+
assert_equal "false", resolve('(1 2 3) == (1, 2, 3)')
|
|
316
327
|
end
|
|
317
328
|
|
|
318
329
|
def test_operation_precedence
|
|
@@ -49,11 +49,34 @@ baz {bar: baz}
|
|
|
49
49
|
SCSS
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
if Sass::Util.ruby1_8?
|
|
53
|
+
def test_unicode
|
|
54
|
+
assert_parses <<SCSS
|
|
55
|
+
@charset "UTF-8";
|
|
56
|
+
foo {
|
|
57
|
+
bar: föö bâr; }
|
|
58
|
+
SCSS
|
|
59
|
+
assert_parses <<SCSS
|
|
54
60
|
foo {
|
|
55
61
|
bar: föö bâr; }
|
|
56
62
|
SCSS
|
|
63
|
+
end
|
|
64
|
+
else
|
|
65
|
+
def test_unicode
|
|
66
|
+
assert_parses <<SCSS
|
|
67
|
+
@charset "UTF-8";
|
|
68
|
+
foo {
|
|
69
|
+
bar: föö bâr; }
|
|
70
|
+
SCSS
|
|
71
|
+
assert_equal <<CSS, render(<<SCSS)
|
|
72
|
+
@charset "UTF-8";
|
|
73
|
+
foo {
|
|
74
|
+
bar: föö bâr; }
|
|
75
|
+
CSS
|
|
76
|
+
foo {
|
|
77
|
+
bar: föö bâr; }
|
|
78
|
+
SCSS
|
|
79
|
+
end
|
|
57
80
|
end
|
|
58
81
|
|
|
59
82
|
def test_invisible_comments
|
|
@@ -429,10 +452,6 @@ SCSS
|
|
|
429
452
|
|
|
430
453
|
## Directives
|
|
431
454
|
|
|
432
|
-
def test_charset_directive
|
|
433
|
-
assert_parses '@charset "utf-8";'
|
|
434
|
-
end
|
|
435
|
-
|
|
436
455
|
def test_namespace_directive
|
|
437
456
|
assert_parses '@namespace "http://www.w3.org/Profiles/xhtml1-strict";'
|
|
438
457
|
assert_parses '@namespace url(http://www.w3.org/Profiles/xhtml1-strict);'
|
|
@@ -508,11 +527,11 @@ SCSS
|
|
|
508
527
|
end
|
|
509
528
|
|
|
510
529
|
def test_blockless_directive_without_semicolon
|
|
511
|
-
assert_equal "@
|
|
530
|
+
assert_equal "@foo \"bar\";\n", render('@foo "bar"')
|
|
512
531
|
end
|
|
513
532
|
|
|
514
533
|
def test_directive_with_lots_of_whitespace
|
|
515
|
-
assert_equal "@
|
|
534
|
+
assert_equal "@foo \"bar\";\n", render('@foo "bar" ;')
|
|
516
535
|
end
|
|
517
536
|
|
|
518
537
|
def test_empty_blockless_directive
|
|
@@ -235,6 +235,33 @@ $i: 1;
|
|
|
235
235
|
SCSS
|
|
236
236
|
end
|
|
237
237
|
|
|
238
|
+
def test_each_directive
|
|
239
|
+
assert_equal <<CSS, render(<<SCSS)
|
|
240
|
+
a {
|
|
241
|
+
b: 1px;
|
|
242
|
+
b: 2px;
|
|
243
|
+
b: 3px;
|
|
244
|
+
b: 4px; }
|
|
245
|
+
|
|
246
|
+
c {
|
|
247
|
+
d: foo;
|
|
248
|
+
d: bar;
|
|
249
|
+
d: baz;
|
|
250
|
+
d: bang; }
|
|
251
|
+
CSS
|
|
252
|
+
a {
|
|
253
|
+
@each $number in 1px 2px 3px 4px {
|
|
254
|
+
b: $number;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
c {
|
|
258
|
+
@each $str in foo, bar, baz, bang {
|
|
259
|
+
d: $str;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
SCSS
|
|
263
|
+
end
|
|
264
|
+
|
|
238
265
|
def test_css_import_directive
|
|
239
266
|
assert_equal "@import url(foo.css);\n", render('@import "foo.css";')
|
|
240
267
|
assert_equal "@import url(foo.css);\n", render("@import 'foo.css';")
|
|
@@ -441,6 +468,22 @@ baz {
|
|
|
441
468
|
SCSS
|
|
442
469
|
end
|
|
443
470
|
|
|
471
|
+
def test_trailing_comma_in_selector
|
|
472
|
+
assert_equal <<CSS, render(<<SCSS)
|
|
473
|
+
#foo #bar,
|
|
474
|
+
#baz #boom {
|
|
475
|
+
a: b; }
|
|
476
|
+
|
|
477
|
+
#bip #bop {
|
|
478
|
+
c: d; }
|
|
479
|
+
CSS
|
|
480
|
+
#foo #bar,,
|
|
481
|
+
,#baz #boom, {a: b}
|
|
482
|
+
|
|
483
|
+
#bip #bop, ,, {c: d}
|
|
484
|
+
SCSS
|
|
485
|
+
end
|
|
486
|
+
|
|
444
487
|
def test_parent_selectors
|
|
445
488
|
assert_equal <<CSS, render(<<SCSS)
|
|
446
489
|
foo:hover {
|
|
@@ -1023,6 +1066,14 @@ MESSAGE
|
|
|
1023
1066
|
SCSS
|
|
1024
1067
|
end
|
|
1025
1068
|
|
|
1069
|
+
def test_no_lonely_else
|
|
1070
|
+
assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
|
|
1071
|
+
Invalid CSS: @else must come after @if
|
|
1072
|
+
MESSAGE
|
|
1073
|
+
@else {foo: bar}
|
|
1074
|
+
SCSS
|
|
1075
|
+
end
|
|
1076
|
+
|
|
1026
1077
|
# Regression
|
|
1027
1078
|
|
|
1028
1079
|
def test_weird_added_space
|
|
@@ -1146,6 +1197,32 @@ b {
|
|
|
1146
1197
|
}
|
|
1147
1198
|
}
|
|
1148
1199
|
SCSS
|
|
1200
|
+
end
|
|
1201
|
+
|
|
1202
|
+
def test_if_error_line
|
|
1203
|
+
assert_raise_line(2) {render(<<SCSS)}
|
|
1204
|
+
@if true {foo: bar}
|
|
1205
|
+
}
|
|
1206
|
+
SCSS
|
|
1207
|
+
end
|
|
1149
1208
|
|
|
1209
|
+
def test_multiline_var
|
|
1210
|
+
assert_equal <<CSS, render(<<SCSS)
|
|
1211
|
+
foo {
|
|
1212
|
+
a: 3;
|
|
1213
|
+
b: false;
|
|
1214
|
+
c: a b c; }
|
|
1215
|
+
CSS
|
|
1216
|
+
foo {
|
|
1217
|
+
$var1: 1 +
|
|
1218
|
+
2;
|
|
1219
|
+
$var2: true and
|
|
1220
|
+
false;
|
|
1221
|
+
$var3: a b
|
|
1222
|
+
c;
|
|
1223
|
+
a: $var1;
|
|
1224
|
+
b: $var2;
|
|
1225
|
+
c: $var3; }
|
|
1226
|
+
SCSS
|
|
1150
1227
|
end
|
|
1151
1228
|
end
|
|
@@ -9,7 +9,7 @@ $esc: 10\+12
|
|
|
9
9
|
$str: Hello\!
|
|
10
10
|
$qstr: "Quo\"ted\"!"
|
|
11
11
|
$hstr: Hyph-en\!
|
|
12
|
-
$
|
|
12
|
+
$space: #{5 + 4} hi there
|
|
13
13
|
$percent: 11%
|
|
14
14
|
$complex: 1px/1em
|
|
15
15
|
|
|
@@ -22,7 +22,7 @@ $complex: 1px/1em
|
|
|
22
22
|
:color $main_text
|
|
23
23
|
:short-color #123
|
|
24
24
|
:named-color olive
|
|
25
|
-
:con "foo" bar ($
|
|
25
|
+
:con "foo" bar ($space "boom")
|
|
26
26
|
:con2 "noquo" quo
|
|
27
27
|
#sidebar
|
|
28
28
|
:background-color $color
|