sass 3.4.24 → 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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +39 -10
  3. data/VERSION +1 -1
  4. data/VERSION_DATE +1 -1
  5. data/lib/sass.rb +3 -3
  6. data/lib/sass/css.rb +1 -1
  7. data/lib/sass/deprecation.rb +55 -0
  8. data/lib/sass/engine.rb +13 -5
  9. data/lib/sass/environment.rb +1 -1
  10. data/lib/sass/plugin.rb +1 -1
  11. data/lib/sass/plugin/compiler.rb +1 -1
  12. data/lib/sass/plugin/configuration.rb +1 -1
  13. data/lib/sass/plugin/rack.rb +2 -2
  14. data/lib/sass/plugin/staleness_checker.rb +1 -1
  15. data/lib/sass/script.rb +1 -1
  16. data/lib/sass/script/functions.rb +2 -2
  17. data/lib/sass/script/lexer.rb +1 -1
  18. data/lib/sass/script/parser.rb +4 -3
  19. data/lib/sass/script/tree/node.rb +1 -1
  20. data/lib/sass/script/tree/operation.rb +43 -16
  21. data/lib/sass/script/value/base.rb +1 -1
  22. data/lib/sass/script/value/string.rb +5 -12
  23. data/lib/sass/scss/static_parser.rb +7 -0
  24. data/lib/sass/selector/comma_sequence.rb +13 -1
  25. data/lib/sass/selector/simple.rb +1 -0
  26. data/lib/sass/tree/node.rb +2 -2
  27. data/lib/sass/tree/rule_node.rb +13 -4
  28. data/lib/sass/tree/visitors/deep_copy.rb +1 -1
  29. data/lib/sass/tree/visitors/perform.rb +3 -2
  30. data/test/sass/conversion_test.rb +3 -3
  31. data/test/sass/css2sass_test.rb +1 -1
  32. data/test/sass/engine_test.rb +56 -50
  33. data/test/sass/extend_test.rb +14 -8
  34. data/test/sass/functions_test.rb +5 -2
  35. data/test/sass/more_templates/more1.sass +10 -10
  36. data/test/sass/more_templates/more_import.sass +2 -2
  37. data/test/sass/plugin_test.rb +3 -3
  38. data/test/sass/script_test.rb +38 -29
  39. data/test/sass/scss/css_test.rb +2 -2
  40. data/test/sass/scss/scss_test.rb +25 -10
  41. data/test/sass/source_map_test.rb +13 -13
  42. data/test/sass/templates/_partial.sass +1 -1
  43. data/test/sass/templates/basic.sass +10 -10
  44. data/test/sass/templates/bork1.sass +1 -1
  45. data/test/sass/templates/bork5.sass +1 -1
  46. data/test/sass/templates/compact.sass +10 -10
  47. data/test/sass/templates/complex.sass +187 -187
  48. data/test/sass/templates/compressed.sass +10 -10
  49. data/test/sass/templates/expanded.sass +10 -10
  50. data/test/sass/templates/import.sass +2 -2
  51. data/test/sass/templates/importee.sass +3 -3
  52. data/test/sass/templates/mixins.sass +22 -22
  53. data/test/sass/templates/multiline.sass +4 -4
  54. data/test/sass/templates/nested.sass +13 -13
  55. data/test/sass/templates/parent_ref.sass +12 -12
  56. data/test/sass/templates/script.sass +70 -70
  57. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +1 -1
  58. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +2 -2
  59. data/test/sass/templates/subdir/subdir.sass +3 -3
  60. data/test/sass/templates/units.sass +10 -10
  61. data/test/sass/util/multibyte_string_scanner_test.rb +10 -2
  62. metadata +25 -24
@@ -27,7 +27,7 @@ module Sass::Script::Value
27
27
 
28
28
  # Sets the options hash for this node,
29
29
  # as well as for all child nodes.
30
- # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
30
+ # See {file:SASS_REFERENCE.md#Options the Sass options documentation}.
31
31
  #
32
32
  # @param options [{Symbol => Object}] The options
33
33
  attr_writer :options
@@ -2,6 +2,8 @@
2
2
  module Sass::Script::Value
3
3
  # A SassScript object representing a CSS string *or* a CSS identifier.
4
4
  class String < Base
5
+ @@interpolation_deprecation = Sass::Deprecation.new
6
+
5
7
  # The Ruby value of the string.
6
8
  #
7
9
  # @return [String]
@@ -121,18 +123,9 @@ module Sass::Script::Value
121
123
  def check_deprecated_interp
122
124
  return unless @deprecated_interp_equivalent
123
125
 
124
- # rubocop:disable GlobalVars
125
- $_sass_deprecated_interp_warnings ||= Set.new
126
- key = [source_range.start_pos.line, source_range.file, @deprecated_interp_equivalent]
127
- return if $_sass_deprecated_interp_warnings.include?(key)
128
- $_sass_deprecated_interp_warnings << key
129
- # rubocop:enable GlobalVars
130
-
131
- location = "on line #{source_range.start_pos.line}"
132
- location << " of #{source_range.file}" if source_range.file
133
- Sass::Util.sass_warn <<WARNING
134
- DEPRECATION WARNING #{location}: \#{} interpolation near operators will be simplified
135
- in a future version of Sass. To preserve the current behavior, use quotes:
126
+ @@interpolation_deprecation.warn(source_range.file, source_range.start_pos.line, <<WARNING)
127
+ \#{} interpolation near operators will be simplified in a future version of Sass.
128
+ To preserve the current behavior, use quotes:
136
129
 
137
130
  #{@deprecated_interp_equivalent}
138
131
  WARNING
@@ -144,6 +144,13 @@ MESSAGE
144
144
  ns, name = expr!(:qualified_name)
145
145
  res << ns << '|' if ns
146
146
  res << name << tok!(%r{/})
147
+
148
+ location = " of #{@filename}" if @filename
149
+ Sass::Util.sass_warn <<MESSAGE
150
+ DEPRECATION WARNING on line #{@line}, column #{@offset}#{location}:
151
+ The reference combinator #{res} is deprecated and will be removed in a future release.
152
+ MESSAGE
153
+
147
154
  res
148
155
  end
149
156
 
@@ -2,6 +2,8 @@ module Sass
2
2
  module Selector
3
3
  # A comma-separated sequence of selectors.
4
4
  class CommaSequence < AbstractSequence
5
+ @@compound_extend_deprecation = Sass::Deprecation.new
6
+
5
7
  # The comma-separated selector sequences
6
8
  # represented by this class.
7
9
  #
@@ -96,8 +98,11 @@ module Sass
96
98
  # The node that caused this extension.
97
99
  # @param parent_directives [Array<Sass::Tree::DirectiveNode>]
98
100
  # The parent directives containing `extend_node`.
101
+ # @param allow_compound_target [Boolean]
102
+ # Whether `extendee` is allowed to contain compound selectors.
99
103
  # @raise [Sass::SyntaxError] if this extension is invalid.
100
- def populate_extends(extends, extendee, extend_node = nil, parent_directives = [])
104
+ def populate_extends(extends, extendee, extend_node = nil, parent_directives = [],
105
+ allow_compound_target = false)
101
106
  extendee.members.each do |seq|
102
107
  if seq.members.size > 1
103
108
  raise Sass::SyntaxError.new("Can't extend #{seq}: can't extend nested selectors")
@@ -111,6 +116,13 @@ module Sass
111
116
  end
112
117
 
113
118
  sel = sseq.members
119
+ if !allow_compound_target && sel.length > 1
120
+ @@compound_extend_deprecation.warn(sseq.filename, sseq.line, <<WARNING)
121
+ Extending a compound selector, #{sseq}, is deprecated and will not be supported in a future release.
122
+ See https://github.com/sass/sass/issues/1599 for details.
123
+ WARNING
124
+ end
125
+
114
126
  members.each do |member|
115
127
  unless member.members.last.is_a?(Sass::Selector::SimpleSequence)
116
128
  raise Sass::SyntaxError.new("#{member} can't extend: invalid selector")
@@ -72,6 +72,7 @@ module Sass
72
72
  # by the time extension and unification happen,
73
73
  # this exception will only ever be raised as a result of programmer error
74
74
  def unify(sels)
75
+ return sels.first.unify([self]) if sels.length == 1 && sels.first.is_a?(Universal)
75
76
  return sels if sels.any? {|sel2| eql?(sel2)}
76
77
  sels_with_ix = Sass::Util.enum_with_index(sels)
77
78
  if !is_a?(Pseudo) || (sels.last.is_a?(Pseudo) && sels.last.type == :element)
@@ -83,7 +83,7 @@ module Sass
83
83
  attr_writer :filename
84
84
 
85
85
  # The options hash for the node.
86
- # See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
86
+ # See {file:SASS_REFERENCE.md#Options the Sass options documentation}.
87
87
  #
88
88
  # @return [{Symbol => Object}]
89
89
  attr_reader :options
@@ -151,7 +151,7 @@ module Sass
151
151
  # @return [Boolean]
152
152
  def invisible?; false; end
153
153
 
154
- # The output style. See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
154
+ # The output style. See {file:SASS_REFERENCE.md#Options the Sass options documentation}.
155
155
  #
156
156
  # @return [Symbol]
157
157
  def style
@@ -137,10 +137,19 @@ module Sass::Tree
137
137
 
138
138
  # We don't use real filename/line info because we don't have it yet.
139
139
  # When we get it, we'll set it on the parsed rules if possible.
140
- parser = Sass::SCSS::StaticParser.new(@rule.join.strip, nil, nil, 1)
141
- # rubocop:disable RescueModifier
142
- @parsed_rules = parser.parse_selector rescue nil
143
- # rubocop:enable RescueModifier
140
+ parser = nil
141
+ warnings = Sass::Util.silence_warnings do
142
+ parser = Sass::SCSS::StaticParser.new(@rule.join.strip, nil, nil, 1)
143
+ # rubocop:disable RescueModifier
144
+ @parsed_rules = parser.parse_selector rescue nil
145
+ # rubocop:enable RescueModifier
146
+
147
+ $stderr.string
148
+ end
149
+
150
+ # If parsing produces a warning, throw away the result so we can parse
151
+ # later with the real filename info.
152
+ @parsed_rules = nil unless warnings.empty?
144
153
  end
145
154
  end
146
155
  end
@@ -55,7 +55,7 @@ class Sass::Tree::Visitors::DeepCopy < Sass::Tree::Visitors::Base
55
55
 
56
56
  def visit_mixin(node)
57
57
  node.args = node.args.map {|a| a.deep_copy}
58
- node.keywords = Hash[node.keywords.map {|k, v| [k, v.deep_copy]}]
58
+ node.keywords = Sass::Util::NormalizedMap.new(Hash[node.keywords.map {|k, v| [k, v.deep_copy]}])
59
59
  yield
60
60
  end
61
61
 
@@ -1,5 +1,7 @@
1
1
  # A visitor for converting a dynamic Sass tree into a static Sass tree.
2
2
  class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
3
+ @@function_name_deprecation = Sass::Deprecation.new
4
+
3
5
  class << self
4
6
  # @param root [Tree::Node] The root node of the tree to visit.
5
7
  # @param environment [Sass::Environment] The lexical environment.
@@ -280,8 +282,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
280
282
 
281
283
  if node.normalized_name == 'calc' || node.normalized_name == 'element' ||
282
284
  node.name == 'expression' || node.name == 'url'
283
- Sass::Util.sass_warn <<WARNING
284
- DEPRECATION WARNING on line #{node.line}#{" of #{node.filename}" if node.filename}:
285
+ @@function_name_deprecation.warn(node.filename, node.line, <<WARNING)
285
286
  Naming a function "#{node.name}" is disallowed and will be an error in future versions of Sass.
286
287
  This name conflicts with an existing CSS function with special parse rules.
287
288
  WARNING
@@ -13,7 +13,7 @@ foo bar {
13
13
  bip: bop;
14
14
  }
15
15
  SCSS
16
- assert_renders <<SASS, <<SCSS, :old => true
16
+ silence_warnings {assert_renders <<SASS, <<SCSS, :old => true}
17
17
  foo bar
18
18
  :baz bang
19
19
  :bip bop
@@ -183,7 +183,7 @@ SCSS
183
183
  end
184
184
 
185
185
  def test_dynamic_properties_with_old
186
- assert_renders <<SASS, <<SCSS, :old => true
186
+ silence_warnings {assert_renders <<SASS, <<SCSS, :old => true}
187
187
  foo bar
188
188
  :baz 12 $bang "bip"
189
189
  SASS
@@ -1436,7 +1436,7 @@ SCSS
1436
1436
  end
1437
1437
 
1438
1438
  def test_old_declaration_hacks
1439
- assert_renders <<SASS, <<SCSS, :old => true
1439
+ silence_warnings {assert_renders <<SASS, <<SCSS, :old => true}
1440
1440
  foo
1441
1441
  :_name val
1442
1442
  :*name val
@@ -14,7 +14,7 @@ CSS
14
14
  h1
15
15
  color: red
16
16
  SASS
17
- assert_equal(<<SASS, css2sass(css, :old => true))
17
+ silence_warnings {assert_equal(<<SASS, css2sass(css, :old => true))}
18
18
  h1
19
19
  :color red
20
20
  SASS
@@ -288,10 +288,10 @@ ERROR
288
288
  def test_exception_line
289
289
  to_render = <<SASS
290
290
  rule
291
- :prop val
291
+ prop: val
292
292
  // comment!
293
293
 
294
- :broken
294
+ broken:
295
295
  SASS
296
296
  begin
297
297
  Sass::Engine.new(to_render).render
@@ -305,10 +305,10 @@ SASS
305
305
  def test_exception_location
306
306
  to_render = <<SASS
307
307
  rule
308
- :prop val
308
+ prop: val
309
309
  // comment!
310
310
 
311
- :broken
311
+ broken:
312
312
  SASS
313
313
  begin
314
314
  Sass::Engine.new(to_render, :filename => FAKE_FILE_NAME, :line => (__LINE__-7)).render
@@ -749,22 +749,22 @@ SASS
749
749
 
750
750
  def test_basic_multiline_selector
751
751
  assert_equal("#foo #bar,\n#baz #boom {\n foo: bar; }\n",
752
- render("#foo #bar,\n#baz #boom\n :foo bar"))
752
+ render("#foo #bar,\n#baz #boom\n foo: bar"))
753
753
  assert_equal("#foo #bar,\n#foo #baz {\n foo: bar; }\n",
754
- render("#foo\n #bar,\n #baz\n :foo bar"))
754
+ render("#foo\n #bar,\n #baz\n foo: bar"))
755
755
  assert_equal("#foo,\n#bar {\n foo: bar; }\n #foo #baz,\n #bar #baz {\n foo: bar; }\n",
756
- render("#foo,\n#bar\n :foo bar\n #baz\n :foo bar"))
756
+ render("#foo,\n#bar\n foo: bar\n #baz\n foo: bar"))
757
757
  assert_equal("#foo #bar, #baz #boom { foo: bar; }\n",
758
- render("#foo #bar,\n#baz #boom\n :foo bar", :style => :compact))
758
+ render("#foo #bar,\n#baz #boom\n foo: bar", :style => :compact))
759
759
 
760
760
  assert_equal("#foo #bar,#baz #boom{foo:bar}\n",
761
- render("#foo #bar,\n#baz #boom\n :foo bar", :style => :compressed))
761
+ render("#foo #bar,\n#baz #boom\n foo: bar", :style => :compressed))
762
762
 
763
763
  assert_equal("#foo #bar,\n#baz #boom {\n foo: bar; }\n",
764
- render("#foo #bar,,\n,#baz #boom,\n :foo bar"))
764
+ render("#foo #bar,,\n,#baz #boom,\n foo: bar"))
765
765
 
766
766
  assert_equal("#bip #bop {\n foo: bar; }\n",
767
- render("#bip #bop,, ,\n :foo bar"))
767
+ render("#bip #bop,, ,\n foo: bar"))
768
768
  end
769
769
 
770
770
  def test_complex_multiline_selector
@@ -783,7 +783,7 @@ SASS
783
783
  end
784
784
 
785
785
  begin
786
- render("a\n :b c", :property_syntax => :new)
786
+ silence_warnings {render("a\n :b c", :property_syntax => :new)}
787
787
  assert_equal(2, e.sass_line)
788
788
  rescue Sass::SyntaxError => e
789
789
  assert_equal("Illegal property syntax: can't use old syntax when :property_syntax => :new is set.",
@@ -806,53 +806,53 @@ SASS
806
806
  def test_directive
807
807
  assert_equal("@a b;\n", render("@a b"))
808
808
 
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))
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))
813
813
 
814
814
  assert_equal("@a {\n b: c;\n d: e; }\n",
815
- render("@a\n :b c\n :d e"))
815
+ render("@a\n b: c\n d: e"))
816
816
  assert_equal("@a { b: c; d: e; }\n",
817
- render("@a\n :b c\n :d e", :style => :compact))
817
+ render("@a\n b: c\n d: e", :style => :compact))
818
818
  assert_equal("@a {\n b: c;\n d: e;\n}\n",
819
- render("@a\n :b c\n :d e", :style => :expanded))
819
+ render("@a\n b: c\n d: e", :style => :expanded))
820
820
  assert_equal("@a{b:c;d:e}\n",
821
- render("@a\n :b c\n :d e", :style => :compressed))
821
+ render("@a\n b: c\n d: e", :style => :compressed))
822
822
 
823
823
  assert_equal("@a {\n #b {\n c: d; } }\n",
824
- render("@a\n #b\n :c d"))
824
+ render("@a\n #b\n c: d"))
825
825
  assert_equal("@a { #b { c: d; } }\n",
826
- render("@a\n #b\n :c d", :style => :compact))
826
+ render("@a\n #b\n c: d", :style => :compact))
827
827
  assert_equal("@a {\n #b {\n c: d;\n }\n}\n",
828
- render("@a\n #b\n :c d", :style => :expanded))
828
+ render("@a\n #b\n c: d", :style => :expanded))
829
829
  assert_equal("@a{#b{c:d}}\n",
830
- render("@a\n #b\n :c d", :style => :compressed))
830
+ render("@a\n #b\n c: d", :style => :compressed))
831
831
 
832
832
  assert_equal("@a {\n #b {\n a: b; }\n #b #c {\n d: e; } }\n",
833
- render("@a\n #b\n :a b\n #c\n :d e"))
833
+ render("@a\n #b\n a: b\n #c\n d: e"))
834
834
  assert_equal("@a { #b { a: b; }\n #b #c { d: e; } }\n",
835
- render("@a\n #b\n :a b\n #c\n :d e", :style => :compact))
835
+ render("@a\n #b\n a: b\n #c\n d: e", :style => :compact))
836
836
  assert_equal("@a {\n #b {\n a: b;\n }\n #b #c {\n d: e;\n }\n}\n",
837
- render("@a\n #b\n :a b\n #c\n :d e", :style => :expanded))
837
+ render("@a\n #b\n a: b\n #c\n d: e", :style => :expanded))
838
838
  assert_equal("@a{#b{a:b}#b #c{d:e}}\n",
839
- render("@a\n #b\n :a b\n #c\n :d e", :style => :compressed))
839
+ render("@a\n #b\n a: b\n #c\n d: e", :style => :compressed))
840
840
 
841
841
  assert_equal("@a {\n #foo,\n #bar {\n b: c; } }\n",
842
- render("@a\n #foo, \n #bar\n :b c"))
842
+ render("@a\n #foo, \n #bar\n b: c"))
843
843
  assert_equal("@a { #foo, #bar { b: c; } }\n",
844
- render("@a\n #foo, \n #bar\n :b c", :style => :compact))
844
+ render("@a\n #foo, \n #bar\n b: c", :style => :compact))
845
845
  assert_equal("@a {\n #foo,\n #bar {\n b: c;\n }\n}\n",
846
- render("@a\n #foo, \n #bar\n :b c", :style => :expanded))
846
+ render("@a\n #foo, \n #bar\n b: c", :style => :expanded))
847
847
  assert_equal("@a{#foo,#bar{b:c}}\n",
848
- render("@a\n #foo, \n #bar\n :b c", :style => :compressed))
848
+ render("@a\n #foo, \n #bar\n b: c", :style => :compressed))
849
849
 
850
850
  to_render = <<END
851
851
  @a
852
- :b c
852
+ b: c
853
853
  #d
854
- :e f
855
- :g h
854
+ e: f
855
+ g: h
856
856
  END
857
857
  rendered = <<END
858
858
  @a { b: c;
@@ -1141,7 +1141,7 @@ black {
1141
1141
  color: #000; }
1142
1142
  CSS
1143
1143
  =foo($a: #FFF)
1144
- :color $a
1144
+ color: $a
1145
1145
  white
1146
1146
  +foo
1147
1147
  black
@@ -1165,9 +1165,9 @@ three {
1165
1165
  CSS
1166
1166
  $a: 5px
1167
1167
  =foo($a, $b: 1px, $c: 3px + $b)
1168
- :color $a
1169
- :padding $b
1170
- :margin $c
1168
+ color: $a
1169
+ padding: $b
1170
+ margin: $c
1171
1171
  one
1172
1172
  +foo(#fff)
1173
1173
  two
@@ -2598,29 +2598,29 @@ SASS
2598
2598
  border-style: solid; }
2599
2599
  RESULT
2600
2600
  .box
2601
- :border
2602
- //:color black
2603
- :style solid
2601
+ border:
2602
+ //color: black
2603
+ style: solid
2604
2604
  SOURCE
2605
2605
 
2606
2606
  assert_equal(<<RESULT, render(<<SOURCE))
2607
2607
  .box {
2608
- /* :color black */
2608
+ /* color: black */
2609
2609
  border-style: solid; }
2610
2610
  RESULT
2611
2611
  .box
2612
- :border
2613
- /* :color black
2614
- :style solid
2612
+ border:
2613
+ /* color: black
2614
+ style: solid
2615
2615
  SOURCE
2616
2616
 
2617
2617
  assert_equal(<<RESULT, render(<<SOURCE, :style => :compressed))
2618
2618
  .box{border-style:solid}
2619
2619
  RESULT
2620
2620
  .box
2621
- :border
2622
- /*:color black
2623
- :style solid
2621
+ border:
2622
+ /*color: black
2623
+ style: solid
2624
2624
  SOURCE
2625
2625
  end
2626
2626
 
@@ -3394,7 +3394,13 @@ SASS
3394
3394
  private
3395
3395
 
3396
3396
  def assert_hash_has(hash, expected)
3397
- expected.each {|k, v| assert_equal(v, hash[k])}
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
3398
3404
  end
3399
3405
 
3400
3406
  def assert_renders_encoded(css, sass)
@@ -573,21 +573,27 @@ SCSS
573
573
  ## Long Extendees
574
574
 
575
575
  def test_long_extendee
576
- assert_extends '.foo.bar', '.baz {@extend .foo.bar}', '.foo.bar, .baz'
576
+ assert_warning(<<WARNING) {assert_extends '.foo.bar', '.baz {@extend .foo.bar}', '.foo.bar, .baz'}
577
+ DEPRECATION WARNING on line 2 of test_long_extendee_inline.scss:
578
+ Extending a compound selector, .foo.bar, is deprecated and will not be supported in a future release.
579
+ See https://github.com/sass/sass/issues/1599 for details.
580
+ WARNING
577
581
  end
578
582
 
579
583
  def test_long_extendee_requires_all_selectors
580
- assert_extend_doesnt_match('.baz', '.foo.bar', :not_found, 2) do
581
- render_extends '.foo', '.baz {@extend .foo.bar}'
584
+ silence_warnings do
585
+ assert_extend_doesnt_match('.baz', '.foo.bar', :not_found, 2) do
586
+ render_extends '.foo', '.baz {@extend .foo.bar}'
587
+ end
582
588
  end
583
589
  end
584
590
 
585
591
  def test_long_extendee_matches_supersets
586
- assert_extends '.foo.bar.bap', '.baz {@extend .foo.bar}', '.foo.bar.bap, .bap.baz'
592
+ silence_warnings {assert_extends '.foo.bar.bap', '.baz {@extend .foo.bar}', '.foo.bar.bap, .bap.baz'}
587
593
  end
588
594
 
589
595
  def test_long_extendee_runs_unification
590
- assert_extends 'ns|*.foo.bar', '*|a.baz {@extend .foo.bar}', 'ns|*.foo.bar, ns|a.baz'
596
+ silence_warnings {assert_extends 'ns|*.foo.bar', '*|a.baz {@extend .foo.bar}', 'ns|*.foo.bar, ns|a.baz'}
591
597
  end
592
598
 
593
599
  ## Long Extenders
@@ -683,9 +689,9 @@ SCSS
683
689
  end
684
690
 
685
691
  def test_nested_extender_doesnt_find_common_selectors_around_reference_selector
686
- assert_extends 'a /for/ b c .c1', 'a c .c2 {@extend .c1}', 'a /for/ b c .c1, a /for/ b a c .c2, a a /for/ b c .c2'
687
- assert_extends 'a /for/ b c .c1', 'a b .c2 {@extend .c1}', 'a /for/ b c .c1, a a /for/ b c .c2'
688
- assert_extends 'a /for/ b c .c1', 'b c .c2 {@extend .c1}', 'a /for/ b c .c1, a /for/ b c .c2'
692
+ silence_warnings {assert_extends 'a /for/ b c .c1', 'a c .c2 {@extend .c1}', 'a /for/ b c .c1, a /for/ b a c .c2, a a /for/ b c .c2'}
693
+ silence_warnings {assert_extends 'a /for/ b c .c1', 'a b .c2 {@extend .c1}', 'a /for/ b c .c1, a a /for/ b c .c2'}
694
+ silence_warnings {assert_extends 'a /for/ b c .c1', 'b c .c2 {@extend .c1}', 'a /for/ b c .c1, a /for/ b c .c2'}
689
695
  end
690
696
 
691
697
  def test_nested_extender_with_early_child_selectors_doesnt_subseq_them