sass 3.4.0 → 3.4.25
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.
- checksums.yaml +4 -4
- data/.yardopts +3 -1
- data/CODE_OF_CONDUCT.md +10 -0
- data/CONTRIBUTING.md +148 -0
- data/MIT-LICENSE +1 -1
- data/README.md +26 -20
- data/Rakefile +103 -20
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/extra/sass-spec-ref.sh +32 -0
- data/extra/update_watch.rb +1 -1
- data/lib/sass/cache_stores/filesystem.rb +7 -7
- data/lib/sass/cache_stores/memory.rb +4 -5
- data/lib/sass/callbacks.rb +2 -2
- data/lib/sass/css.rb +11 -10
- data/lib/sass/deprecation.rb +55 -0
- data/lib/sass/engine.rb +83 -38
- data/lib/sass/environment.rb +26 -2
- data/lib/sass/error.rb +12 -12
- data/lib/sass/exec/base.rb +15 -3
- data/lib/sass/exec/sass_convert.rb +34 -15
- data/lib/sass/exec/sass_scss.rb +23 -7
- data/lib/sass/features.rb +2 -2
- data/lib/sass/importers/base.rb +1 -1
- data/lib/sass/importers/deprecated_path.rb +51 -0
- data/lib/sass/importers/filesystem.rb +24 -16
- data/lib/sass/importers.rb +1 -0
- data/lib/sass/logger/base.rb +8 -2
- data/lib/sass/logger/delayed.rb +50 -0
- data/lib/sass/logger.rb +8 -3
- data/lib/sass/plugin/compiler.rb +42 -25
- data/lib/sass/plugin/configuration.rb +38 -22
- data/lib/sass/plugin/merb.rb +2 -2
- data/lib/sass/plugin/rack.rb +3 -3
- data/lib/sass/plugin/rails.rb +1 -1
- data/lib/sass/plugin/staleness_checker.rb +3 -3
- data/lib/sass/plugin.rb +3 -2
- data/lib/sass/script/css_parser.rb +2 -3
- data/lib/sass/script/css_variable_warning.rb +52 -0
- data/lib/sass/script/functions.rb +140 -73
- data/lib/sass/script/lexer.rb +37 -22
- data/lib/sass/script/parser.rb +235 -40
- data/lib/sass/script/tree/funcall.rb +12 -5
- data/lib/sass/script/tree/interpolation.rb +109 -4
- data/lib/sass/script/tree/list_literal.rb +31 -4
- data/lib/sass/script/tree/literal.rb +4 -0
- data/lib/sass/script/tree/node.rb +21 -3
- data/lib/sass/script/tree/operation.rb +54 -1
- data/lib/sass/script/tree/string_interpolation.rb +58 -37
- data/lib/sass/script/tree/variable.rb +1 -1
- data/lib/sass/script/value/base.rb +10 -9
- data/lib/sass/script/value/color.rb +42 -24
- data/lib/sass/script/value/helpers.rb +16 -6
- data/lib/sass/script/value/map.rb +1 -1
- data/lib/sass/script/value/number.rb +52 -19
- data/lib/sass/script/value/string.rb +46 -5
- data/lib/sass/script.rb +3 -3
- data/lib/sass/scss/css_parser.rb +16 -2
- data/lib/sass/scss/parser.rb +120 -75
- data/lib/sass/scss/rx.rb +9 -10
- data/lib/sass/scss/static_parser.rb +19 -14
- data/lib/sass/scss.rb +0 -2
- data/lib/sass/selector/abstract_sequence.rb +8 -6
- data/lib/sass/selector/comma_sequence.rb +25 -9
- data/lib/sass/selector/pseudo.rb +45 -35
- data/lib/sass/selector/sequence.rb +54 -18
- data/lib/sass/selector/simple.rb +11 -11
- data/lib/sass/selector/simple_sequence.rb +34 -15
- data/lib/sass/selector.rb +7 -10
- data/lib/sass/shared.rb +1 -1
- data/lib/sass/source/map.rb +7 -4
- data/lib/sass/source/position.rb +4 -4
- data/lib/sass/stack.rb +2 -2
- data/lib/sass/supports.rb +8 -10
- data/lib/sass/tree/comment_node.rb +1 -1
- data/lib/sass/tree/css_import_node.rb +9 -1
- data/lib/sass/tree/function_node.rb +8 -3
- data/lib/sass/tree/import_node.rb +6 -5
- data/lib/sass/tree/node.rb +5 -3
- data/lib/sass/tree/prop_node.rb +5 -6
- data/lib/sass/tree/rule_node.rb +14 -4
- data/lib/sass/tree/visitors/check_nesting.rb +18 -22
- data/lib/sass/tree/visitors/convert.rb +43 -26
- data/lib/sass/tree/visitors/cssize.rb +5 -1
- data/lib/sass/tree/visitors/deep_copy.rb +1 -1
- data/lib/sass/tree/visitors/extend.rb +15 -13
- data/lib/sass/tree/visitors/perform.rb +42 -17
- data/lib/sass/tree/visitors/set_options.rb +1 -1
- data/lib/sass/tree/visitors/to_css.rb +58 -30
- data/lib/sass/util/multibyte_string_scanner.rb +0 -2
- data/lib/sass/util/normalized_map.rb +0 -1
- data/lib/sass/util/subset_map.rb +1 -2
- data/lib/sass/util.rb +125 -68
- data/lib/sass/version.rb +2 -2
- data/lib/sass.rb +10 -3
- data/test/sass/compiler_test.rb +6 -2
- data/test/sass/conversion_test.rb +187 -53
- data/test/sass/css2sass_test.rb +50 -1
- data/test/sass/css_variable_test.rb +132 -0
- data/test/sass/engine_test.rb +207 -61
- data/test/sass/exec_test.rb +10 -0
- data/test/sass/extend_test.rb +101 -29
- data/test/sass/functions_test.rb +60 -9
- data/test/sass/importer_test.rb +9 -0
- data/test/sass/more_templates/more1.sass +10 -10
- data/test/sass/more_templates/more_import.sass +2 -2
- data/test/sass/plugin_test.rb +10 -8
- data/test/sass/results/script.css +3 -3
- data/test/sass/script_conversion_test.rb +58 -29
- data/test/sass/script_test.rb +430 -53
- data/test/sass/scss/css_test.rb +73 -7
- data/test/sass/scss/rx_test.rb +4 -0
- data/test/sass/scss/scss_test.rb +309 -4
- data/test/sass/source_map_test.rb +152 -74
- data/test/sass/superselector_test.rb +19 -0
- data/test/sass/templates/_partial.sass +1 -1
- data/test/sass/templates/basic.sass +10 -10
- data/test/sass/templates/bork1.sass +1 -1
- data/test/sass/templates/bork5.sass +1 -1
- data/test/sass/templates/compact.sass +10 -10
- data/test/sass/templates/complex.sass +187 -187
- data/test/sass/templates/compressed.sass +10 -10
- data/test/sass/templates/expanded.sass +10 -10
- data/test/sass/templates/import.sass +2 -2
- data/test/sass/templates/importee.sass +3 -3
- data/test/sass/templates/mixins.sass +22 -22
- data/test/sass/templates/multiline.sass +4 -4
- data/test/sass/templates/nested.sass +13 -13
- data/test/sass/templates/parent_ref.sass +12 -12
- data/test/sass/templates/script.sass +70 -70
- data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +1 -1
- data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +2 -2
- data/test/sass/templates/subdir/subdir.sass +3 -3
- data/test/sass/templates/units.sass +10 -10
- data/test/sass/util/multibyte_string_scanner_test.rb +10 -2
- data/test/sass/util_test.rb +15 -44
- data/test/sass-spec.yml +3 -0
- data/test/test_helper.rb +5 -4
- metadata +302 -295
- data/CONTRIBUTING +0 -3
- data/lib/sass/scss/script_lexer.rb +0 -15
- data/lib/sass/scss/script_parser.rb +0 -25
data/test/sass/engine_test.rb
CHANGED
@@ -78,7 +78,6 @@ MSG
|
|
78
78
|
"& a\n :b c" => ["Base-level rules cannot contain the parent-selector-referencing character '&'.", 1],
|
79
79
|
"a\n :b\n c" => "Illegal nesting: Only properties may be nested beneath properties.",
|
80
80
|
"$a: b\n :c d\n" => "Illegal nesting: Nothing may be nested beneath variable declarations.",
|
81
|
-
"$a: b\n :c d\n" => "Illegal nesting: Nothing may be nested beneath variable declarations.",
|
82
81
|
"@import templates/basic\n foo" => "Illegal nesting: Nothing may be nested beneath import directives.",
|
83
82
|
"foo\n @import foo.css" => "CSS import directives may only be used at the root of a document.",
|
84
83
|
"@if true\n @import foo" => "Import directives may not be used within control directives or mixins.",
|
@@ -178,6 +177,8 @@ MSG
|
|
178
177
|
"& foo\n bar: baz\n blat: bang" => ["Base-level rules cannot contain the parent-selector-referencing character '&'.", 1],
|
179
178
|
"a\n b: c\n& foo\n bar: baz\n blat: bang" => ["Base-level rules cannot contain the parent-selector-referencing character '&'.", 3],
|
180
179
|
"@" => "Invalid directive: '@'.",
|
180
|
+
"$r: 20em * #ccc" => ["Cannot multiply a number with units (20em) to a color (#ccc).", 1],
|
181
|
+
"$r: #ccc / 1em" => ["Cannot divide a number with units (1em) to a color (#ccc).", 1],
|
181
182
|
}
|
182
183
|
|
183
184
|
def teardown
|
@@ -287,10 +288,10 @@ ERROR
|
|
287
288
|
def test_exception_line
|
288
289
|
to_render = <<SASS
|
289
290
|
rule
|
290
|
-
:
|
291
|
+
prop: val
|
291
292
|
// comment!
|
292
293
|
|
293
|
-
:
|
294
|
+
broken:
|
294
295
|
SASS
|
295
296
|
begin
|
296
297
|
Sass::Engine.new(to_render).render
|
@@ -304,10 +305,10 @@ SASS
|
|
304
305
|
def test_exception_location
|
305
306
|
to_render = <<SASS
|
306
307
|
rule
|
307
|
-
:
|
308
|
+
prop: val
|
308
309
|
// comment!
|
309
310
|
|
310
|
-
:
|
311
|
+
broken:
|
311
312
|
SASS
|
312
313
|
begin
|
313
314
|
Sass::Engine.new(to_render, :filename => FAKE_FILE_NAME, :line => (__LINE__-7)).render
|
@@ -680,7 +681,6 @@ SASS
|
|
680
681
|
def test_nonexistent_import
|
681
682
|
assert_raise_message(Sass::SyntaxError, <<ERR.rstrip) do
|
682
683
|
File to import not found or unreadable: nonexistent.sass.
|
683
|
-
Load path: #{Dir.pwd}
|
684
684
|
ERR
|
685
685
|
render("@import nonexistent.sass")
|
686
686
|
end
|
@@ -689,7 +689,6 @@ ERR
|
|
689
689
|
def test_nonexistent_extensionless_import
|
690
690
|
assert_raise_message(Sass::SyntaxError, <<ERR.rstrip) do
|
691
691
|
File to import not found or unreadable: nonexistent.
|
692
|
-
Load path: #{Dir.pwd}
|
693
692
|
ERR
|
694
693
|
render("@import nonexistent")
|
695
694
|
end
|
@@ -750,22 +749,22 @@ SASS
|
|
750
749
|
|
751
750
|
def test_basic_multiline_selector
|
752
751
|
assert_equal("#foo #bar,\n#baz #boom {\n foo: bar; }\n",
|
753
|
-
render("#foo #bar,\n#baz #boom\n :
|
752
|
+
render("#foo #bar,\n#baz #boom\n foo: bar"))
|
754
753
|
assert_equal("#foo #bar,\n#foo #baz {\n foo: bar; }\n",
|
755
|
-
render("#foo\n #bar,\n #baz\n :
|
754
|
+
render("#foo\n #bar,\n #baz\n foo: bar"))
|
756
755
|
assert_equal("#foo,\n#bar {\n foo: bar; }\n #foo #baz,\n #bar #baz {\n foo: bar; }\n",
|
757
|
-
render("#foo,\n#bar\n :
|
756
|
+
render("#foo,\n#bar\n foo: bar\n #baz\n foo: bar"))
|
758
757
|
assert_equal("#foo #bar, #baz #boom { foo: bar; }\n",
|
759
|
-
render("#foo #bar,\n#baz #boom\n :
|
758
|
+
render("#foo #bar,\n#baz #boom\n foo: bar", :style => :compact))
|
760
759
|
|
761
760
|
assert_equal("#foo #bar,#baz #boom{foo:bar}\n",
|
762
|
-
render("#foo #bar,\n#baz #boom\n :
|
761
|
+
render("#foo #bar,\n#baz #boom\n foo: bar", :style => :compressed))
|
763
762
|
|
764
763
|
assert_equal("#foo #bar,\n#baz #boom {\n foo: bar; }\n",
|
765
|
-
render("#foo #bar,,\n,#baz #boom,\n :
|
764
|
+
render("#foo #bar,,\n,#baz #boom,\n foo: bar"))
|
766
765
|
|
767
766
|
assert_equal("#bip #bop {\n foo: bar; }\n",
|
768
|
-
render("#bip #bop,, ,\n :
|
767
|
+
render("#bip #bop,, ,\n foo: bar"))
|
769
768
|
end
|
770
769
|
|
771
770
|
def test_complex_multiline_selector
|
@@ -784,7 +783,7 @@ SASS
|
|
784
783
|
end
|
785
784
|
|
786
785
|
begin
|
787
|
-
render("a\n :b c", :property_syntax => :new)
|
786
|
+
silence_warnings {render("a\n :b c", :property_syntax => :new)}
|
788
787
|
assert_equal(2, e.sass_line)
|
789
788
|
rescue Sass::SyntaxError => e
|
790
789
|
assert_equal("Illegal property syntax: can't use old syntax when :property_syntax => :new is set.",
|
@@ -807,53 +806,53 @@ SASS
|
|
807
806
|
def test_directive
|
808
807
|
assert_equal("@a b;\n", render("@a b"))
|
809
808
|
|
810
|
-
assert_equal("@a {\n b: c; }\n", render("@a\n :
|
811
|
-
assert_equal("@a { b: c; }\n", render("@a\n :
|
812
|
-
assert_equal("@a {\n b: c;\n}\n", render("@a\n :
|
813
|
-
assert_equal("@a{b:c}\n", render("@a\n :
|
809
|
+
assert_equal("@a {\n b: c; }\n", render("@a\n b: c"))
|
810
|
+
assert_equal("@a { b: c; }\n", render("@a\n b: c", :style => :compact))
|
811
|
+
assert_equal("@a {\n b: c;\n}\n", render("@a\n b: c", :style => :expanded))
|
812
|
+
assert_equal("@a{b:c}\n", render("@a\n b: c", :style => :compressed))
|
814
813
|
|
815
814
|
assert_equal("@a {\n b: c;\n d: e; }\n",
|
816
|
-
render("@a\n :
|
815
|
+
render("@a\n b: c\n d: e"))
|
817
816
|
assert_equal("@a { b: c; d: e; }\n",
|
818
|
-
render("@a\n :
|
817
|
+
render("@a\n b: c\n d: e", :style => :compact))
|
819
818
|
assert_equal("@a {\n b: c;\n d: e;\n}\n",
|
820
|
-
render("@a\n :
|
819
|
+
render("@a\n b: c\n d: e", :style => :expanded))
|
821
820
|
assert_equal("@a{b:c;d:e}\n",
|
822
|
-
render("@a\n :
|
821
|
+
render("@a\n b: c\n d: e", :style => :compressed))
|
823
822
|
|
824
823
|
assert_equal("@a {\n #b {\n c: d; } }\n",
|
825
|
-
render("@a\n #b\n :
|
824
|
+
render("@a\n #b\n c: d"))
|
826
825
|
assert_equal("@a { #b { c: d; } }\n",
|
827
|
-
render("@a\n #b\n :
|
826
|
+
render("@a\n #b\n c: d", :style => :compact))
|
828
827
|
assert_equal("@a {\n #b {\n c: d;\n }\n}\n",
|
829
|
-
render("@a\n #b\n :
|
828
|
+
render("@a\n #b\n c: d", :style => :expanded))
|
830
829
|
assert_equal("@a{#b{c:d}}\n",
|
831
|
-
render("@a\n #b\n :
|
830
|
+
render("@a\n #b\n c: d", :style => :compressed))
|
832
831
|
|
833
832
|
assert_equal("@a {\n #b {\n a: b; }\n #b #c {\n d: e; } }\n",
|
834
|
-
render("@a\n #b\n :
|
833
|
+
render("@a\n #b\n a: b\n #c\n d: e"))
|
835
834
|
assert_equal("@a { #b { a: b; }\n #b #c { d: e; } }\n",
|
836
|
-
render("@a\n #b\n :
|
835
|
+
render("@a\n #b\n a: b\n #c\n d: e", :style => :compact))
|
837
836
|
assert_equal("@a {\n #b {\n a: b;\n }\n #b #c {\n d: e;\n }\n}\n",
|
838
|
-
render("@a\n #b\n :
|
837
|
+
render("@a\n #b\n a: b\n #c\n d: e", :style => :expanded))
|
839
838
|
assert_equal("@a{#b{a:b}#b #c{d:e}}\n",
|
840
|
-
render("@a\n #b\n :
|
839
|
+
render("@a\n #b\n a: b\n #c\n d: e", :style => :compressed))
|
841
840
|
|
842
841
|
assert_equal("@a {\n #foo,\n #bar {\n b: c; } }\n",
|
843
|
-
render("@a\n #foo, \n #bar\n :
|
842
|
+
render("@a\n #foo, \n #bar\n b: c"))
|
844
843
|
assert_equal("@a { #foo, #bar { b: c; } }\n",
|
845
|
-
render("@a\n #foo, \n #bar\n :
|
844
|
+
render("@a\n #foo, \n #bar\n b: c", :style => :compact))
|
846
845
|
assert_equal("@a {\n #foo,\n #bar {\n b: c;\n }\n}\n",
|
847
|
-
render("@a\n #foo, \n #bar\n :
|
846
|
+
render("@a\n #foo, \n #bar\n b: c", :style => :expanded))
|
848
847
|
assert_equal("@a{#foo,#bar{b:c}}\n",
|
849
|
-
render("@a\n #foo, \n #bar\n :
|
848
|
+
render("@a\n #foo, \n #bar\n b: c", :style => :compressed))
|
850
849
|
|
851
850
|
to_render = <<END
|
852
851
|
@a
|
853
|
-
:
|
852
|
+
b: c
|
854
853
|
#d
|
855
|
-
:
|
856
|
-
:
|
854
|
+
e: f
|
855
|
+
g: h
|
857
856
|
END
|
858
857
|
rendered = <<END
|
859
858
|
@a { b: c;
|
@@ -1142,7 +1141,7 @@ black {
|
|
1142
1141
|
color: #000; }
|
1143
1142
|
CSS
|
1144
1143
|
=foo($a: #FFF)
|
1145
|
-
:
|
1144
|
+
color: $a
|
1146
1145
|
white
|
1147
1146
|
+foo
|
1148
1147
|
black
|
@@ -1166,9 +1165,9 @@ three {
|
|
1166
1165
|
CSS
|
1167
1166
|
$a: 5px
|
1168
1167
|
=foo($a, $b: 1px, $c: 3px + $b)
|
1169
|
-
:
|
1170
|
-
:
|
1171
|
-
:
|
1168
|
+
color: $a
|
1169
|
+
padding: $b
|
1170
|
+
margin: $c
|
1172
1171
|
one
|
1173
1172
|
+foo(#fff)
|
1174
1173
|
two
|
@@ -2059,20 +2058,21 @@ SASS
|
|
2059
2058
|
end
|
2060
2059
|
|
2061
2060
|
def test_warn_with_imports
|
2061
|
+
prefix = Sass::Util.cleanpath(File.dirname(__FILE__)).to_s
|
2062
2062
|
expected_warning = <<WARN
|
2063
2063
|
WARNING: In the main file
|
2064
|
-
on line 1 of #{
|
2064
|
+
on line 1 of #{prefix}/templates/warn.sass
|
2065
2065
|
|
2066
2066
|
WARNING: Imported
|
2067
|
-
on line 1 of #{
|
2068
|
-
from line 2 of #{
|
2067
|
+
on line 1 of #{prefix}/templates/warn_imported.sass
|
2068
|
+
from line 2 of #{prefix}/templates/warn.sass
|
2069
2069
|
|
2070
2070
|
WARNING: In an imported mixin
|
2071
|
-
on line 4 of #{
|
2072
|
-
from line 3 of #{
|
2071
|
+
on line 4 of #{prefix}/templates/warn_imported.sass, in `emits-a-warning'
|
2072
|
+
from line 3 of #{prefix}/templates/warn.sass
|
2073
2073
|
WARN
|
2074
2074
|
assert_warning expected_warning do
|
2075
|
-
renders_correctly "warn", :style => :compact, :load_paths => [
|
2075
|
+
renders_correctly "warn", :style => :compact, :load_paths => ["#{prefix}/templates"]
|
2076
2076
|
end
|
2077
2077
|
end
|
2078
2078
|
|
@@ -2457,6 +2457,18 @@ SASS
|
|
2457
2457
|
|
2458
2458
|
# Regression tests
|
2459
2459
|
|
2460
|
+
def test_interpolation_in_multiline_selector
|
2461
|
+
assert_equal(<<CSS, render(<<SASS))
|
2462
|
+
.foo,
|
2463
|
+
.bar {
|
2464
|
+
a: b; }
|
2465
|
+
CSS
|
2466
|
+
.foo,
|
2467
|
+
\#{".bar"}
|
2468
|
+
a: b
|
2469
|
+
SASS
|
2470
|
+
end
|
2471
|
+
|
2460
2472
|
def test_list_separator_with_arg_list
|
2461
2473
|
assert_equal(<<CSS, render(<<SASS))
|
2462
2474
|
.test {
|
@@ -2586,29 +2598,29 @@ SASS
|
|
2586
2598
|
border-style: solid; }
|
2587
2599
|
RESULT
|
2588
2600
|
.box
|
2589
|
-
:
|
2590
|
-
|
2591
|
-
:
|
2601
|
+
border:
|
2602
|
+
//color: black
|
2603
|
+
style: solid
|
2592
2604
|
SOURCE
|
2593
2605
|
|
2594
2606
|
assert_equal(<<RESULT, render(<<SOURCE))
|
2595
2607
|
.box {
|
2596
|
-
/* :
|
2608
|
+
/* color: black */
|
2597
2609
|
border-style: solid; }
|
2598
2610
|
RESULT
|
2599
2611
|
.box
|
2600
|
-
:
|
2601
|
-
/* :
|
2602
|
-
:
|
2612
|
+
border:
|
2613
|
+
/* color: black
|
2614
|
+
style: solid
|
2603
2615
|
SOURCE
|
2604
2616
|
|
2605
2617
|
assert_equal(<<RESULT, render(<<SOURCE, :style => :compressed))
|
2606
2618
|
.box{border-style:solid}
|
2607
2619
|
RESULT
|
2608
2620
|
.box
|
2609
|
-
:
|
2610
|
-
|
2611
|
-
:
|
2621
|
+
border:
|
2622
|
+
/*color: black
|
2623
|
+
style: solid
|
2612
2624
|
SOURCE
|
2613
2625
|
end
|
2614
2626
|
|
@@ -2903,7 +2915,7 @@ SASS
|
|
2903
2915
|
assert_equal <<CSS, render(<<SASS)
|
2904
2916
|
div {
|
2905
2917
|
maximum: 1.00000001;
|
2906
|
-
too-much: 1
|
2918
|
+
too-much: 1; }
|
2907
2919
|
CSS
|
2908
2920
|
div
|
2909
2921
|
maximum : 1.00000001
|
@@ -3252,10 +3264,143 @@ CSS
|
|
3252
3264
|
SASS
|
3253
3265
|
end
|
3254
3266
|
|
3267
|
+
def test_compressed_unknown_directive
|
3268
|
+
assert_equal(<<CSS, render(<<SASS, :style => :compressed))
|
3269
|
+
x{@foo;a:b;@bar}
|
3270
|
+
CSS
|
3271
|
+
x
|
3272
|
+
@foo
|
3273
|
+
a: b
|
3274
|
+
@bar
|
3275
|
+
SASS
|
3276
|
+
end
|
3277
|
+
|
3278
|
+
def test_compressed_unknown_directive_in_directive
|
3279
|
+
assert_equal(<<CSS, render(<<SASS, :style => :compressed))
|
3280
|
+
@x{@foo;a:b;@bar}
|
3281
|
+
CSS
|
3282
|
+
@x
|
3283
|
+
@foo
|
3284
|
+
a: b
|
3285
|
+
@bar
|
3286
|
+
SASS
|
3287
|
+
end
|
3288
|
+
|
3289
|
+
def test_compressed_unknown_directive_with_children_in_directive
|
3290
|
+
assert_equal(<<CSS, render(<<SASS, :style => :compressed))
|
3291
|
+
@x{@foo{a:b}c:d;@bar{e:f}}
|
3292
|
+
CSS
|
3293
|
+
@x
|
3294
|
+
@foo
|
3295
|
+
a: b
|
3296
|
+
c: d
|
3297
|
+
@bar
|
3298
|
+
e: f
|
3299
|
+
SASS
|
3300
|
+
end
|
3301
|
+
|
3302
|
+
def test_compressed_rule_in_directive
|
3303
|
+
assert_equal(<<CSS, render(<<SASS, :style => :compressed))
|
3304
|
+
@x{foo{a:b}c:d;bar{e:f}}
|
3305
|
+
CSS
|
3306
|
+
@x
|
3307
|
+
foo
|
3308
|
+
a: b
|
3309
|
+
c: d
|
3310
|
+
bar
|
3311
|
+
e: f
|
3312
|
+
SASS
|
3313
|
+
end
|
3314
|
+
|
3315
|
+
def test_import_two_css_files_issue_1806
|
3316
|
+
assert_equal(<<CSS, render(<<SASS, :syntax => :scss, :style => :compressed))
|
3317
|
+
@import url(\"foo.css\");@import url(\"bar.css\");@import url(\"baz.css\")
|
3318
|
+
CSS
|
3319
|
+
@import url("foo.css");
|
3320
|
+
@import url("bar.css");
|
3321
|
+
@import url("baz.css");
|
3322
|
+
SASS
|
3323
|
+
end
|
3324
|
+
|
3325
|
+
def test_numeric_formatting_of_integers
|
3326
|
+
assert_equal(<<CSS, render(<<SASS, :syntax => :scss, :style => :compressed))
|
3327
|
+
a{near:3.00001;plus:3;minus:3;negative:-3}
|
3328
|
+
CSS
|
3329
|
+
a {
|
3330
|
+
near: (3 + 0.00001);
|
3331
|
+
plus: (3 + 0.0000001);
|
3332
|
+
minus: (3 - 0.0000001);
|
3333
|
+
negative: (-3 + 0.0000001);
|
3334
|
+
}
|
3335
|
+
SASS
|
3336
|
+
end
|
3337
|
+
|
3338
|
+
def test_escaped_semicolons_are_not_compressed
|
3339
|
+
assert_equal(<<'CSS', render(<<'SASS', :syntax => :scss, :style => :compressed))
|
3340
|
+
div{color:#f00000\9\0\;}
|
3341
|
+
CSS
|
3342
|
+
div {
|
3343
|
+
color: #f00000\9\0\;
|
3344
|
+
}
|
3345
|
+
SASS
|
3346
|
+
end
|
3347
|
+
|
3348
|
+
def test_compressed_output_of_nth_selectors
|
3349
|
+
assert_equal(<<CSS, render(<<SASS, :syntax => :scss, :style => :compressed))
|
3350
|
+
:nth-of-type(2n-1),:nth-child(2n-1),:nth(2n-1),:nth-of-type(2n-1),:nth-of-type(2n-1){color:red}:nth-of-type(2n+1),:nth-child(2n+1),:nth(2n+1),:nth-of-type(2n+1),:nth-of-type(2n+1){color:red}
|
3351
|
+
CSS
|
3352
|
+
:nth-of-type(2n-1), :nth-child(2n- 1), :nth(2n -1), :nth-of-type(2n - 1), :nth-of-type( 2n - 1 ) {
|
3353
|
+
color: red }
|
3354
|
+
:nth-of-type(2n+1), :nth-child(2n+ 1), :nth(2n +1), :nth-of-type(2n + 1), :nth-of-type( 2n + 1 ) {
|
3355
|
+
color: red }
|
3356
|
+
SASS
|
3357
|
+
end
|
3358
|
+
|
3359
|
+
def test_descendant_selectors_with_leading_dash
|
3360
|
+
assert_equal(<<CSS, render(<<SASS, :syntax => :scss, :style => :compressed))
|
3361
|
+
a -b{color:red}
|
3362
|
+
CSS
|
3363
|
+
a -b {
|
3364
|
+
color: red }
|
3365
|
+
SASS
|
3366
|
+
end
|
3367
|
+
|
3368
|
+
def test_import_with_supports_clause_interp
|
3369
|
+
assert_equal(<<CSS, render(<<'SASS', :style => :compressed))
|
3370
|
+
@import url("fallback-layout.css") supports(not (display: flex))
|
3371
|
+
CSS
|
3372
|
+
$display-type: flex
|
3373
|
+
@import url("fallback-layout.css") supports(not (display: #{$display-type}))
|
3374
|
+
SASS
|
3375
|
+
end
|
3376
|
+
|
3377
|
+
def test_import_with_supports_clause
|
3378
|
+
assert_equal(<<CSS, render(<<SASS, :style => :compressed))
|
3379
|
+
@import url("fallback-layout.css") supports(not (display: flex))
|
3380
|
+
CSS
|
3381
|
+
@import url("fallback-layout.css") supports(not (display: flex))
|
3382
|
+
SASS
|
3383
|
+
end
|
3384
|
+
|
3385
|
+
def test_compressed_commas_in_attribute_selectors
|
3386
|
+
assert_equal(<<CSS, render(<<SASS, :style => :compressed))
|
3387
|
+
.classname[a="1, 2, 3"],.another[b="4, 5, 6"]{color:red}
|
3388
|
+
CSS
|
3389
|
+
.classname[a="1, 2, 3"], .another[b="4, 5, 6"]
|
3390
|
+
color: red
|
3391
|
+
SASS
|
3392
|
+
end
|
3393
|
+
|
3255
3394
|
private
|
3256
3395
|
|
3257
3396
|
def assert_hash_has(hash, expected)
|
3258
|
-
expected.each
|
3397
|
+
expected.each do |k, v|
|
3398
|
+
if v.nil?
|
3399
|
+
assert_nil(hash[k])
|
3400
|
+
else
|
3401
|
+
assert_equal(v, hash[k])
|
3402
|
+
end
|
3403
|
+
end
|
3259
3404
|
end
|
3260
3405
|
|
3261
3406
|
def assert_renders_encoded(css, sass)
|
@@ -3287,7 +3432,8 @@ SASS
|
|
3287
3432
|
end
|
3288
3433
|
|
3289
3434
|
def filename(name, type)
|
3290
|
-
File.dirname(__FILE__) + "/#{type == 'sass' ? 'templates' : 'results'}/#{name}.#{type}"
|
3435
|
+
path = File.dirname(__FILE__) + "/#{type == 'sass' ? 'templates' : 'results'}/#{name}.#{type}"
|
3436
|
+
Sass::Util.cleanpath(path).to_s
|
3291
3437
|
end
|
3292
3438
|
|
3293
3439
|
def sassc_path(template)
|
data/test/sass/exec_test.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require File.dirname(__FILE__) + '/../test_helper'
|
3
|
+
require 'fileutils'
|
3
4
|
require 'sass/util/test'
|
4
5
|
require 'tmpdir'
|
5
6
|
|
@@ -64,6 +65,14 @@ class ExecTest < MiniTest::Test
|
|
64
65
|
assert_equal(".ruleset\r\n margin: 0\r\n", read(src))
|
65
66
|
end
|
66
67
|
|
68
|
+
def test_sass_convert_R
|
69
|
+
Dir.chdir(@dir) do
|
70
|
+
src = get_path("styles/src.css")
|
71
|
+
write(src, ".ruleset { margin: 0 }")
|
72
|
+
assert(exec(*%w[sass-convert -Rq --from css --to scss --trace styles]))
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
67
76
|
private
|
68
77
|
|
69
78
|
def get_path(name)
|
@@ -75,6 +84,7 @@ class ExecTest < MiniTest::Test
|
|
75
84
|
end
|
76
85
|
|
77
86
|
def write(file, content)
|
87
|
+
FileUtils.mkdir_p(File.dirname(file))
|
78
88
|
open(file, 'wb') {|f| f.write(content)}
|
79
89
|
end
|
80
90
|
|