sass 3.3.14 → 3.4.0.rc.1

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.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +5 -5
  4. data/VERSION +1 -1
  5. data/VERSION_DATE +1 -1
  6. data/VERSION_NAME +1 -1
  7. data/bin/sass +1 -1
  8. data/bin/scss +1 -1
  9. data/lib/sass.rb +0 -5
  10. data/lib/sass/css.rb +1 -3
  11. data/lib/sass/engine.rb +28 -39
  12. data/lib/sass/environment.rb +13 -17
  13. data/lib/sass/error.rb +6 -9
  14. data/lib/sass/exec.rb +5 -771
  15. data/lib/sass/exec/base.rb +187 -0
  16. data/lib/sass/exec/sass_convert.rb +264 -0
  17. data/lib/sass/exec/sass_scss.rb +419 -0
  18. data/lib/sass/features.rb +6 -0
  19. data/lib/sass/importers.rb +0 -1
  20. data/lib/sass/importers/base.rb +5 -1
  21. data/lib/sass/importers/filesystem.rb +4 -21
  22. data/lib/sass/media.rb +1 -4
  23. data/lib/sass/plugin/compiler.rb +32 -136
  24. data/lib/sass/script/css_lexer.rb +1 -1
  25. data/lib/sass/script/functions.rb +363 -39
  26. data/lib/sass/script/lexer.rb +68 -50
  27. data/lib/sass/script/parser.rb +29 -14
  28. data/lib/sass/script/tree.rb +1 -0
  29. data/lib/sass/script/tree/funcall.rb +1 -1
  30. data/lib/sass/script/tree/interpolation.rb +19 -1
  31. data/lib/sass/script/tree/selector.rb +26 -0
  32. data/lib/sass/script/value.rb +0 -1
  33. data/lib/sass/script/value/bool.rb +0 -5
  34. data/lib/sass/script/value/color.rb +32 -12
  35. data/lib/sass/script/value/helpers.rb +107 -0
  36. data/lib/sass/script/value/list.rb +0 -15
  37. data/lib/sass/script/value/null.rb +0 -5
  38. data/lib/sass/script/value/number.rb +60 -14
  39. data/lib/sass/script/value/string.rb +53 -9
  40. data/lib/sass/scss/css_parser.rb +8 -2
  41. data/lib/sass/scss/parser.rb +175 -319
  42. data/lib/sass/scss/rx.rb +14 -5
  43. data/lib/sass/scss/static_parser.rb +298 -1
  44. data/lib/sass/selector.rb +56 -193
  45. data/lib/sass/selector/abstract_sequence.rb +28 -13
  46. data/lib/sass/selector/comma_sequence.rb +91 -12
  47. data/lib/sass/selector/pseudo.rb +256 -0
  48. data/lib/sass/selector/sequence.rb +99 -31
  49. data/lib/sass/selector/simple.rb +14 -25
  50. data/lib/sass/selector/simple_sequence.rb +101 -37
  51. data/lib/sass/shared.rb +1 -1
  52. data/lib/sass/source/map.rb +23 -9
  53. data/lib/sass/stack.rb +0 -6
  54. data/lib/sass/supports.rb +1 -1
  55. data/lib/sass/tree/at_root_node.rb +1 -0
  56. data/lib/sass/tree/directive_node.rb +7 -1
  57. data/lib/sass/tree/error_node.rb +18 -0
  58. data/lib/sass/tree/keyframe_rule_node.rb +15 -0
  59. data/lib/sass/tree/prop_node.rb +1 -1
  60. data/lib/sass/tree/rule_node.rb +11 -6
  61. data/lib/sass/tree/visitors/check_nesting.rb +3 -4
  62. data/lib/sass/tree/visitors/convert.rb +8 -17
  63. data/lib/sass/tree/visitors/cssize.rb +12 -24
  64. data/lib/sass/tree/visitors/deep_copy.rb +5 -0
  65. data/lib/sass/tree/visitors/perform.rb +43 -28
  66. data/lib/sass/tree/visitors/set_options.rb +5 -0
  67. data/lib/sass/tree/visitors/to_css.rb +14 -13
  68. data/lib/sass/util.rb +94 -90
  69. data/test/sass/cache_test.rb +1 -1
  70. data/test/sass/callbacks_test.rb +1 -1
  71. data/test/sass/compiler_test.rb +5 -14
  72. data/test/sass/conversion_test.rb +47 -1
  73. data/test/sass/css2sass_test.rb +3 -3
  74. data/test/sass/encoding_test.rb +219 -0
  75. data/test/sass/engine_test.rb +128 -191
  76. data/test/sass/exec_test.rb +2 -2
  77. data/test/sass/extend_test.rb +234 -17
  78. data/test/sass/functions_test.rb +268 -213
  79. data/test/sass/importer_test.rb +31 -21
  80. data/test/sass/logger_test.rb +1 -1
  81. data/test/sass/more_results/more_import.css +1 -1
  82. data/test/sass/plugin_test.rb +12 -11
  83. data/test/sass/results/compact.css +1 -1
  84. data/test/sass/results/complex.css +4 -4
  85. data/test/sass/results/expanded.css +1 -1
  86. data/test/sass/results/import.css +1 -1
  87. data/test/sass/results/import_charset_ibm866.css +2 -2
  88. data/test/sass/results/mixins.css +17 -17
  89. data/test/sass/results/nested.css +1 -1
  90. data/test/sass/results/parent_ref.css +2 -2
  91. data/test/sass/results/script.css +3 -3
  92. data/test/sass/results/scss_import.css +1 -1
  93. data/test/sass/script_conversion_test.rb +7 -4
  94. data/test/sass/script_test.rb +202 -79
  95. data/test/sass/scss/css_test.rb +95 -25
  96. data/test/sass/scss/rx_test.rb +4 -4
  97. data/test/sass/scss/scss_test.rb +363 -19
  98. data/test/sass/source_map_test.rb +48 -41
  99. data/test/sass/superselector_test.rb +191 -0
  100. data/test/sass/templates/scss_import.scss +2 -1
  101. data/test/sass/test_helper.rb +1 -1
  102. data/test/sass/util/multibyte_string_scanner_test.rb +1 -1
  103. data/test/sass/util/normalized_map_test.rb +1 -1
  104. data/test/sass/util/subset_map_test.rb +2 -2
  105. data/test/sass/util_test.rb +1 -1
  106. data/test/sass/value_helpers_test.rb +3 -3
  107. data/test/test_helper.rb +2 -2
  108. metadata +30 -7
  109. data/lib/sass/importers/deprecated_path.rb +0 -51
  110. data/lib/sass/script/value/deprecated_false.rb +0 -55
@@ -3,12 +3,12 @@
3
3
  require File.dirname(__FILE__) + '/../test_helper'
4
4
  require File.dirname(__FILE__) + '/test_helper'
5
5
 
6
- class SourcemapTest < Test::Unit::TestCase
6
+ class SourcemapTest < MiniTest::Test
7
7
  def test_to_json_requires_args
8
8
  _, sourcemap = render_with_sourcemap('')
9
- assert_raise(ArgumentError) {sourcemap.to_json({})}
10
- assert_raise(ArgumentError) {sourcemap.to_json({:css_path => 'foo'})}
11
- assert_raise(ArgumentError) {sourcemap.to_json({:sourcemap_path => 'foo'})}
9
+ assert_raises(ArgumentError) {sourcemap.to_json({})}
10
+ assert_raises(ArgumentError) {sourcemap.to_json({:css_path => 'foo'})}
11
+ assert_raises(ArgumentError) {sourcemap.to_json({:sourcemap_path => 'foo'})}
12
12
  end
13
13
 
14
14
  def test_simple_mapping_scss
@@ -60,6 +60,32 @@ CSS
60
60
  JSON
61
61
  end
62
62
 
63
+ def test_simple_mapping_with_file_uris
64
+ uri = Sass::Util.file_uri_from_path(Sass::Util.absolute_path(filename_for_test(:scss)))
65
+ assert_parses_with_sourcemap <<SCSS, <<CSS, <<JSON, :sourcemap => :file
66
+ a {
67
+ foo: bar;
68
+ /* SOME COMMENT */
69
+ font-size: 12px;
70
+ }
71
+ SCSS
72
+ a {
73
+ foo: bar;
74
+ /* SOME COMMENT */
75
+ font-size: 12px; }
76
+
77
+ /*# sourceMappingURL=test.css.map */
78
+ CSS
79
+ {
80
+ "version": 3,
81
+ "mappings": "AAAA,CAAE;EACA,GAAG,EAAE,GAAG;;EAER,SAAS,EAAE,IAAI",
82
+ "sources": ["#{uri}"],
83
+ "names": [],
84
+ "file": "test.css"
85
+ }
86
+ JSON
87
+ end
88
+
63
89
  def test_mapping_with_directory_scss
64
90
  options = {:filename => "scss/style.scss", :output => "css/style.css"}
65
91
  assert_parses_with_sourcemap <<SCSS, <<CSS, <<JSON, options
@@ -156,15 +182,15 @@ JSON
156
182
  end
157
183
 
158
184
  def test_different_charset_than_encoding_scss
159
- assert_parses_with_sourcemap(<<SCSS.force_encoding("IBM866"), <<CSS.force_encoding("IBM866"), <<JSON)
185
+ assert_parses_with_sourcemap(<<SCSS.force_encoding("IBM866"), <<CSS, <<JSON)
160
186
  @charset "IBM866";
161
187
  f\x86\x86 {
162
188
  \x86: b;
163
189
  }
164
190
  SCSS
165
- @charset "IBM866";
166
- f\x86\x86 {
167
- \x86: b; }
191
+ @charset "UTF-8";
192
+ fЖЖ {
193
+ Ж: b; }
168
194
 
169
195
  /*# sourceMappingURL=test.css.map */
170
196
  CSS
@@ -179,14 +205,14 @@ JSON
179
205
  end
180
206
 
181
207
  def test_different_charset_than_encoding_sass
182
- assert_parses_with_sourcemap(<<SASS.force_encoding("IBM866"), <<CSS.force_encoding("IBM866"), <<JSON, :syntax => :sass)
208
+ assert_parses_with_sourcemap(<<SASS.force_encoding("IBM866"), <<CSS, <<JSON, :syntax => :sass)
183
209
  @charset "IBM866"
184
210
  f\x86\x86
185
211
  \x86: b
186
212
  SASS
187
- @charset "IBM866";
188
- f\x86\x86 {
189
- \x86: b; }
213
+ @charset "UTF-8";
214
+ fЖЖ {
215
+ Ж: b; }
190
216
 
191
217
  /*# sourceMappingURL=test.css.map */
192
218
  CSS
@@ -443,8 +469,8 @@ CSS
443
469
  {{7}}border-width{{/7}}: {{8}}3px{{/8}}
444
470
  SASS
445
471
  {{1}}.error, .seriousError{{/1}} {
446
- {{2}}border{{/2}}: {{3}}1px red{{/3}};
447
- {{4}}background-color{{/4}}: {{5}}#ffdddd{{/5}}; }
472
+ {{2}}border{{/2}}: {{3}}1px #f00{{/3}};
473
+ {{4}}background-color{{/4}}: {{5}}#fdd{{/5}}; }
448
474
 
449
475
  {{6}}.seriousError{{/6}} {
450
476
  {{7}}border-width{{/7}}: {{8}}3px{{/8}}; }
@@ -632,9 +658,9 @@ SCSS
632
658
  {{22}}border-style{{/22}}: {{23}}dashed{{/23}}; }
633
659
 
634
660
  {{24}}.shadows{{/24}} {
635
- {{25}}-moz-box-shadow{{/25}}: {{26}}0px 4px 5px #666666, 2px 6px 10px #999999{{/26}};
636
- {{27}}-webkit-box-shadow{{/27}}: {{28}}0px 4px 5px #666666, 2px 6px 10px #999999{{/28}};
637
- {{29}}box-shadow{{/29}}: {{30}}0px 4px 5px #666666, 2px 6px 10px #999999{{/30}}; }
661
+ {{25}}-moz-box-shadow{{/25}}: {{26}}0px 4px 5px #666, 2px 6px 10px #999{{/26}};
662
+ {{27}}-webkit-box-shadow{{/27}}: {{28}}0px 4px 5px #666, 2px 6px 10px #999{{/28}};
663
+ {{29}}box-shadow{{/29}}: {{30}}0px 4px 5px #666, 2px 6px 10px #999{{/30}}; }
638
664
 
639
665
  /*# sourceMappingURL=test.css.map */
640
666
  CSS
@@ -675,7 +701,7 @@ SASS
675
701
  {{1}}.page-title{{/1}} {
676
702
  {{2}}font-size{{/2}}: {{3}}20px{{/3}};
677
703
  {{4}}font-weight{{/4}}: {{5}}bold{{/5}};
678
- {{6}}color{{/6}}: {{7}}red{{/7}};
704
+ {{6}}color{{/6}}: {{7}}#ff0000{{/7}};
679
705
  {{8}}padding{{/8}}: {{9}}4px{{/9}}; }
680
706
 
681
707
  {{10}}p{{/10}} {
@@ -689,9 +715,9 @@ SASS
689
715
  {{22}}border-style{{/22}}: {{23}}dashed{{/23}}; }
690
716
 
691
717
  {{24}}.shadows{{/24}} {
692
- {{25}}-moz-box-shadow{{/25}}: {{26}}0px 4px 5px #666666, 2px 6px 10px #999999{{/26}};
693
- {{27}}-webkit-box-shadow{{/27}}: {{28}}0px 4px 5px #666666, 2px 6px 10px #999999{{/28}};
694
- {{29}}box-shadow{{/29}}: {{30}}0px 4px 5px #666666, 2px 6px 10px #999999{{/30}}; }
718
+ {{25}}-moz-box-shadow{{/25}}: {{26}}0px 4px 5px #666, 2px 6px 10px #999{{/26}};
719
+ {{27}}-webkit-box-shadow{{/27}}: {{28}}0px 4px 5px #666, 2px 6px 10px #999{{/28}};
720
+ {{29}}box-shadow{{/29}}: {{30}}0px 4px 5px #666, 2px 6px 10px #999{{/30}}; }
695
721
 
696
722
  /*# sourceMappingURL=test.css.map */
697
723
  CSS
@@ -764,25 +790,6 @@ SCSS
764
790
  CSS
765
791
  end
766
792
 
767
- def test_multiline_interpolation_source_range
768
- engine = Sass::Engine.new(<<-SCSS, cache: false, syntax: :scss)
769
- p {
770
- filter: progid:DXImageTransform(
771
- '\#{123}');
772
- }
773
- SCSS
774
-
775
- interpolated = engine.to_tree.children.
776
- first.children.
777
- first.value.children[1]
778
- assert_equal interpolated.to_sass, "123"
779
- range = interpolated.source_range
780
- assert_equal 3, range.start_pos.line
781
- assert_equal 14, range.start_pos.offset
782
- assert_equal 3, range.end_pos.line
783
- assert_equal 17, range.end_pos.offset
784
- end
785
-
786
793
  def test_sources_array_is_uri_escaped
787
794
  map = Sass::Source::Map.new
788
795
  importer = Sass::Importers::Filesystem.new('.')
@@ -907,7 +914,7 @@ MESSAGE
907
914
  rendered, sourcemap = render_with_sourcemap(source, options)
908
915
  css_path = options[:output] || "test.css"
909
916
  sourcemap_path = Sass::Util.sourcemap_name(css_path)
910
- rendered_json = sourcemap.to_json(:css_path => css_path, :sourcemap_path => sourcemap_path)
917
+ rendered_json = sourcemap.to_json(:css_path => css_path, :sourcemap_path => sourcemap_path, :type => options[:sourcemap])
911
918
 
912
919
  assert_equal css.rstrip, rendered.rstrip
913
920
  assert_equal sourcemap_json.rstrip, rendered_json
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+
4
+ class SuperselectorTest < MiniTest::Test
5
+ def test_superselector_reflexivity
6
+ assert_superselector 'h1', 'h1'
7
+ assert_superselector '.foo', '.foo'
8
+ assert_superselector '#foo > .bar, baz', '#foo > .bar, baz'
9
+ end
10
+
11
+ def test_smaller_compound_superselector
12
+ assert_strict_superselector '.foo', '.foo.bar'
13
+ assert_strict_superselector '.bar', '.foo.bar'
14
+ assert_strict_superselector 'a', 'a#b'
15
+ assert_strict_superselector '#b', 'a#b'
16
+ end
17
+
18
+ def test_smaller_complex_superselector
19
+ assert_strict_superselector '.bar', '.foo .bar'
20
+ assert_strict_superselector '.bar', '.foo > .bar'
21
+ assert_strict_superselector '.bar', '.foo + .bar'
22
+ assert_strict_superselector '.bar', '.foo ~ .bar'
23
+ end
24
+
25
+ def test_selector_list_subset_superselector
26
+ assert_strict_superselector '.foo, .bar', '.foo'
27
+ assert_strict_superselector '.foo, .bar, .baz', '.foo, .baz'
28
+ assert_strict_superselector '.foo, .baz, .qux', '.foo.bar, .baz.bang'
29
+ end
30
+
31
+ def test_leading_combinator_superselector
32
+ refute_superselector '+ .foo', '.foo'
33
+ refute_superselector '+ .foo', '.bar + .foo'
34
+ end
35
+
36
+ def test_trailing_combinator_superselector
37
+ refute_superselector '.foo +', '.foo'
38
+ refute_superselector '.foo +', '.foo + .bar'
39
+ end
40
+
41
+ def test_matching_combinator_superselector
42
+ assert_strict_superselector '.foo + .bar', '.foo + .bar.baz'
43
+ assert_strict_superselector '.foo + .bar', '.foo.baz + .bar'
44
+ assert_strict_superselector '.foo > .bar', '.foo > .bar.baz'
45
+ assert_strict_superselector '.foo > .bar', '.foo.baz > .bar'
46
+ assert_strict_superselector '.foo ~ .bar', '.foo ~ .bar.baz'
47
+ assert_strict_superselector '.foo ~ .bar', '.foo.baz ~ .bar'
48
+ end
49
+
50
+ def test_following_sibling_is_superselector_of_next_sibling
51
+ assert_strict_superselector '.foo ~ .bar', '.foo + .bar.baz'
52
+ assert_strict_superselector '.foo ~ .bar', '.foo.baz + .bar'
53
+ end
54
+
55
+ def test_descendant_is_superselector_of_child
56
+ assert_strict_superselector '.foo .bar', '.foo > .bar.baz'
57
+ assert_strict_superselector '.foo .bar', '.foo.baz > .bar'
58
+ end
59
+
60
+ def test_matches_is_superselector_of_constituent_selectors
61
+ %w[matches -moz-any].each do |name|
62
+ assert_strict_superselector ":#{name}(.foo, .bar)", '.foo.baz'
63
+ assert_strict_superselector ":#{name}(.foo, .bar)", '.bar.baz'
64
+ assert_strict_superselector ":#{name}(.foo .bar, .baz)", '.x .foo .bar'
65
+ end
66
+ end
67
+
68
+ def test_matches_is_superselector_of_subset_matches
69
+ assert_strict_superselector ':matches(.foo, .bar, .baz)', '#x:matches(.foo.bip, .baz.bang)'
70
+ assert_strict_superselector ':-moz-any(.foo, .bar, .baz)', '#x:-moz-any(.foo.bip, .baz.bang)'
71
+ end
72
+
73
+ def test_matches_is_not_superselector_of_any
74
+ refute_superselector ':matches(.foo, .bar)', ':-moz-any(.foo, .bar)'
75
+ refute_superselector ':-moz-any(.foo, .bar)', ':matches(.foo, .bar)'
76
+ end
77
+
78
+ def test_matches_can_be_subselector
79
+ %w[matches -moz-any].each do |name|
80
+ assert_superselector '.foo', ":#{name}(.foo.bar)"
81
+ assert_superselector '.foo.bar', ":#{name}(.foo.bar.baz)"
82
+ assert_superselector '.foo', ":#{name}(.foo.bar, .foo.baz)"
83
+ end
84
+ end
85
+
86
+ def test_any_is_not_superselector_of_different_prefix
87
+ refute_superselector ':-moz-any(.foo, .bar)', ':-s-any(.foo, .bar)'
88
+ end
89
+
90
+ def test_not_is_superselector_of_less_complex_not
91
+ assert_strict_superselector ':not(.foo.bar)', ':not(.foo)'
92
+ assert_strict_superselector ':not(.foo .bar)', ':not(.bar)'
93
+ end
94
+
95
+ def test_not_is_superselector_of_superset
96
+ assert_strict_superselector ':not(.foo.bip, .baz.bang)', ':not(.foo, .bar, .baz)'
97
+ assert_strict_superselector ':not(.foo.bip, .baz.bang)', ':not(.foo):not(.bar):not(.baz)'
98
+ end
99
+
100
+ def test_not_is_superselector_of_unique_selectors
101
+ assert_strict_superselector ':not(h1.foo)', 'a'
102
+ assert_strict_superselector ':not(.baz #foo)', '#bar'
103
+ end
104
+
105
+ def test_not_is_not_superselector_of_non_unique_selectors
106
+ refute_superselector ':not(.foo)', '.bar'
107
+ refute_superselector ':not(:hover)', ':visited'
108
+ end
109
+
110
+ def test_current_is_superselector_with_identical_innards
111
+ assert_superselector ':current(.foo)', ':current(.foo)'
112
+ end
113
+
114
+ def test_current_is_superselector_with_subselector_innards
115
+ refute_superselector ':current(.foo)', ':current(.foo.bar)'
116
+ refute_superselector ':current(.foo.bar)', ':current(.foo)'
117
+ end
118
+
119
+ def test_nth_match_is_superselector_of_subset_nth_match
120
+ assert_strict_superselector(
121
+ ':nth-child(2n of .foo, .bar, .baz)', '#x:nth-child(2n of .foo.bip, .baz.bang)')
122
+ assert_strict_superselector(
123
+ ':nth-last-child(2n of .foo, .bar, .baz)', '#x:nth-last-child(2n of .foo.bip, .baz.bang)')
124
+ end
125
+
126
+ def test_nth_match_is_not_superselector_of_nth_match_with_different_arg
127
+ refute_superselector(
128
+ ':nth-child(2n of .foo, .bar, .baz)', '#x:nth-child(2n + 1 of .foo.bip, .baz.bang)')
129
+ refute_superselector(
130
+ ':nth-last-child(2n of .foo, .bar, .baz)', '#x:nth-last-child(2n + 1 of .foo.bip, .baz.bang)')
131
+ end
132
+
133
+ def test_nth_match_is_not_superselector_of_nth_last_match
134
+ refute_superselector ':nth-child(2n of .foo, .bar)', ':nth-last-child(2n of .foo, .bar)'
135
+ refute_superselector ':nth-last-child(2n of .foo, .bar)', ':nth-child(2n of .foo, .bar)'
136
+ end
137
+
138
+ def test_nth_match_can_be_subselector
139
+ %w[nth-child nth-last-child].each do |name|
140
+ assert_superselector '.foo', ":#{name}(2n of .foo.bar)"
141
+ assert_superselector '.foo.bar', ":#{name}(2n of .foo.bar.baz)"
142
+ assert_superselector '.foo', ":#{name}(2n of .foo.bar, .foo.baz)"
143
+ end
144
+ end
145
+
146
+ def has_is_superselector_of_subset_host
147
+ assert_strict_superselector ':has(.foo, .bar, .baz)', ':has(.foo.bip, .baz.bang)'
148
+ end
149
+
150
+ def has_isnt_superselector_of_contained_selector
151
+ assert_strict_superselector ':has(.foo, .bar, .baz)', '.foo'
152
+ end
153
+
154
+ def host_is_superselector_of_subset_host
155
+ assert_strict_superselector ':host(.foo, .bar, .baz)', ':host(.foo.bip, .baz.bang)'
156
+ end
157
+
158
+ def host_isnt_superselector_of_contained_selector
159
+ assert_strict_superselector ':host(.foo, .bar, .baz)', '.foo'
160
+ end
161
+
162
+ def host_context_is_superselector_of_subset_host
163
+ assert_strict_superselector(
164
+ ':host-context(.foo, .bar, .baz)', ':host-context(.foo.bip, .baz.bang)')
165
+ end
166
+
167
+ def host_context_isnt_superselector_of_contained_selector
168
+ assert_strict_superselector ':host-context(.foo, .bar, .baz)', '.foo'
169
+ end
170
+
171
+ private
172
+
173
+ def assert_superselector(superselector, subselector)
174
+ assert(parse_selector(superselector).superselector?(parse_selector(subselector)),
175
+ "Expected #{superselector} to be a superselector of #{subselector}.")
176
+ end
177
+
178
+ def refute_superselector(superselector, subselector)
179
+ assert(!parse_selector(superselector).superselector?(parse_selector(subselector)),
180
+ "Expected #{superselector} not to be a superselector of #{subselector}.")
181
+ end
182
+
183
+ def assert_strict_superselector(superselector, subselector)
184
+ assert_superselector(superselector, subselector)
185
+ refute_superselector(subselector, superselector)
186
+ end
187
+
188
+ def parse_selector(selector)
189
+ Sass::SCSS::CssParser.new(selector, filename_for_test, nil).parse_selector
190
+ end
191
+ end
@@ -3,7 +3,8 @@ $preconst: hello;
3
3
  @mixin premixin {pre-mixin: here}
4
4
 
5
5
  @import "importee.sass", "scss_importee", "basic.sass", "basic.css", "../results/complex.css";
6
- @import "partial.sass";
6
+ @import "part\
7
+ ial.sass";
7
8
 
8
9
  nonimported {
9
10
  myconst: $preconst;
@@ -1,7 +1,7 @@
1
1
  test_dir = File.dirname(__FILE__)
2
2
  $:.unshift test_dir unless $:.include?(test_dir)
3
3
 
4
- class Test::Unit::TestCase
4
+ class MiniTest::Test
5
5
  def absolutize(file)
6
6
  File.expand_path("#{File.dirname(__FILE__)}/#{file}")
7
7
  end
@@ -3,7 +3,7 @@
3
3
  require File.dirname(__FILE__) + '/../../test_helper'
4
4
 
5
5
  unless Sass::Util.ruby1_8?
6
- class MultibyteStringScannerTest < Test::Unit::TestCase
6
+ class MultibyteStringScannerTest < MiniTest::Test
7
7
  def setup
8
8
  @scanner = Sass::Util::MultibyteStringScanner.new("cölorfül")
9
9
  end
@@ -2,7 +2,7 @@
2
2
  require File.dirname(__FILE__) + '/../../test_helper'
3
3
  require 'sass/util/normalized_map'
4
4
 
5
- class NormalizedMapTest < Test::Unit::TestCase
5
+ class NormalizedMapTest < MiniTest::Test
6
6
  extend PublicApiLinter
7
7
 
8
8
  lint_api Hash, Sass::Util::NormalizedMap
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  require File.dirname(__FILE__) + '/../../test_helper'
3
3
 
4
- class SubsetMapTest < Test::Unit::TestCase
4
+ class SubsetMapTest < MiniTest::Test
5
5
  def setup
6
6
  @ssm = Sass::Util::SubsetMap.new
7
7
  @ssm[Set[1, 2]] = "Foo"
@@ -44,7 +44,7 @@ class SubsetMapTest < Test::Unit::TestCase
44
44
  end
45
45
 
46
46
  def test_empty_key_set
47
- assert_raise(ArgumentError) {@ssm[Set[]] = "Fail"}
47
+ assert_raises(ArgumentError) {@ssm[Set[]] = "Fail"}
48
48
  end
49
49
 
50
50
  def test_empty_key_get
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../test_helper'
3
3
  require 'pathname'
4
4
  require 'tmpdir'
5
5
 
6
- class UtilTest < Test::Unit::TestCase
6
+ class UtilTest < MiniTest::Test
7
7
  include Sass::Util
8
8
 
9
9
  def test_scope
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  require File.dirname(__FILE__) + '/../test_helper'
3
3
 
4
- class ValueHelpersTest < Test::Unit::TestCase
4
+ class ValueHelpersTest < MiniTest::Test
5
5
  include Sass::Script
6
6
  include Sass::Script::Value::Helpers
7
7
 
@@ -132,14 +132,14 @@ class ValueHelpersTest < Test::Unit::TestCase
132
132
  l = list(number(1, "px"), hex_color("#f71"), :space)
133
133
  l.options = {}
134
134
  assert_kind_of Sass::Script::Value::List, l
135
- assert_equal "1px #ff7711", l.to_sass
135
+ assert_equal "1px #f71", l.to_sass
136
136
  end
137
137
 
138
138
  def test_comma_list
139
139
  l = list(number(1, "px"), hex_color("#f71"), :comma)
140
140
  l.options = {}
141
141
  assert_kind_of Sass::Script::Value::List, l
142
- assert_equal "1px, #ff7711", l.to_sass
142
+ assert_equal "1px, #f71", l.to_sass
143
143
  end
144
144
 
145
145
  def test_missing_list_type