sass 3.4.22 → 3.4.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/CONTRIBUTING.md +23 -0
  4. data/README.md +8 -8
  5. data/Rakefile +2 -10
  6. data/VERSION +1 -1
  7. data/VERSION_DATE +1 -1
  8. data/extra/sass-spec-ref.sh +32 -0
  9. data/lib/sass/cache_stores/filesystem.rb +1 -1
  10. data/lib/sass/engine.rb +3 -3
  11. data/lib/sass/error.rb +3 -3
  12. data/lib/sass/exec/base.rb +1 -1
  13. data/lib/sass/logger/base.rb +8 -2
  14. data/lib/sass/logger/delayed.rb +50 -0
  15. data/lib/sass/logger.rb +8 -3
  16. data/lib/sass/plugin/rack.rb +1 -1
  17. data/lib/sass/plugin/staleness_checker.rb +2 -2
  18. data/lib/sass/script/functions.rb +10 -7
  19. data/lib/sass/script/lexer.rb +5 -5
  20. data/lib/sass/script/parser.rb +17 -11
  21. data/lib/sass/script/tree/node.rb +1 -1
  22. data/lib/sass/script/value/base.rb +2 -2
  23. data/lib/sass/script/value/color.rb +10 -10
  24. data/lib/sass/script/value/number.rb +11 -9
  25. data/lib/sass/script.rb +2 -2
  26. data/lib/sass/scss/parser.rb +26 -8
  27. data/lib/sass/scss/rx.rb +1 -1
  28. data/lib/sass/selector/abstract_sequence.rb +5 -5
  29. data/lib/sass/selector/sequence.rb +2 -2
  30. data/lib/sass/selector/simple.rb +4 -4
  31. data/lib/sass/shared.rb +1 -1
  32. data/lib/sass/source/map.rb +5 -3
  33. data/lib/sass/source/position.rb +4 -4
  34. data/lib/sass/tree/comment_node.rb +1 -1
  35. data/lib/sass/tree/node.rb +1 -1
  36. data/lib/sass/tree/prop_node.rb +1 -1
  37. data/lib/sass/tree/rule_node.rb +1 -1
  38. data/lib/sass/tree/visitors/convert.rb +3 -1
  39. data/lib/sass/tree/visitors/to_css.rb +1 -1
  40. data/lib/sass/util.rb +33 -8
  41. data/lib/sass/version.rb +2 -2
  42. data/test/sass/conversion_test.rb +17 -0
  43. data/test/sass/extend_test.rb +38 -18
  44. data/test/sass/script_test.rb +3 -3
  45. data/test/sass/scss/scss_test.rb +33 -0
  46. metadata +28 -26
@@ -34,29 +34,31 @@ module Sass::Script::Value
34
34
  attr_accessor :original
35
35
 
36
36
  def self.precision
37
- @precision ||= 5
37
+ Thread.current[:sass_numeric_precision] || Thread.main[:sass_numeric_precision] || 5
38
38
  end
39
39
 
40
40
  # Sets the number of digits of precision
41
41
  # For example, if this is `3`,
42
42
  # `3.1415926` will be printed as `3.142`.
43
+ # The numeric precision is stored as a thread local for thread safety reasons.
44
+ # To set for all threads, be sure to set the precision on the main thread.
43
45
  def self.precision=(digits)
44
- @precision = digits.round
45
- @precision_factor = 10.0**@precision
46
- @epsilon = 1 / (@precision_factor * 10)
46
+ Thread.current[:sass_numeric_precision] = digits.round
47
+ Thread.current[:sass_numeric_precision_factor] = nil
48
+ Thread.current[:sass_numeric_epsilon] = nil
47
49
  end
48
50
 
49
51
  # the precision factor used in numeric output
50
52
  # it is derived from the `precision` method.
51
53
  def self.precision_factor
52
- @precision_factor ||= 10.0**precision
54
+ Thread.current[:sass_numeric_precision_factor] ||= 10.0**precision
53
55
  end
54
56
 
55
57
  # Used in checking equality of floating point numbers. Any
56
58
  # numbers within an `epsilon` of each other are considered functionally equal.
57
59
  # The value for epsilon is one tenth of the current numeric precision.
58
60
  def self.epsilon
59
- @epsilon ||= 1 / (precision_factor * 10)
61
+ Thread.current[:sass_numeric_epsilon] ||= 1 / (precision_factor * 10)
60
62
  end
61
63
 
62
64
  # Used so we don't allocate two new arrays for each new number.
@@ -304,7 +306,7 @@ module Sass::Script::Value
304
306
  end
305
307
  alias_method :to_sass, :inspect
306
308
 
307
- # @return [Fixnum] The integer value of the number
309
+ # @return [Integer] The integer value of the number
308
310
  # @raise [Sass::SyntaxError] if the number isn't an integer
309
311
  def to_i
310
312
  super unless int?
@@ -508,8 +510,8 @@ module Sass::Script::Value
508
510
  },
509
511
  {
510
512
  'dpi' => Rational(1),
511
- 'dpcm' => Rational(1, 2.54),
512
- 'dppx' => Rational(1, 96)
513
+ 'dpcm' => Rational(254, 100),
514
+ 'dppx' => Rational(96)
513
515
  }
514
516
  ]
515
517
 
data/lib/sass/script.rb CHANGED
@@ -16,9 +16,9 @@ module Sass
16
16
  # Parses a string of SassScript
17
17
  #
18
18
  # @param value [String] The SassScript
19
- # @param line [Fixnum] The number of the line on which the SassScript appeared.
19
+ # @param line [Integer] The number of the line on which the SassScript appeared.
20
20
  # Used for error reporting
21
- # @param offset [Fixnum] The number of characters in on `line` that the SassScript started.
21
+ # @param offset [Integer] The number of characters in on `line` that the SassScript started.
22
22
  # Used for error reporting
23
23
  # @param options [{Symbol => Object}] An options hash;
24
24
  # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
@@ -16,9 +16,9 @@ module Sass
16
16
  # warnings and source maps.
17
17
  # @param importer [Sass::Importers::Base] The importer used to import the
18
18
  # file being parsed. Used for source maps.
19
- # @param line [Fixnum] The 1-based line on which the source string appeared,
19
+ # @param line [Integer] The 1-based line on which the source string appeared,
20
20
  # if it's part of another document.
21
- # @param offset [Fixnum] The 1-based character (not byte) offset in the line on
21
+ # @param offset [Integer] The 1-based character (not byte) offset in the line on
22
22
  # which the source string starts. Used for error reporting and sourcemap
23
23
  # building.
24
24
  def initialize(str, filename, importer, line = 1, offset = 1)
@@ -560,7 +560,7 @@ module Sass
560
560
  def supports_clause
561
561
  return unless tok(/supports\(/i)
562
562
  ss
563
- supports = supports_condition
563
+ supports = import_supports_condition
564
564
  ss
565
565
  tok!(/\)/)
566
566
  supports
@@ -570,6 +570,10 @@ module Sass
570
570
  supports_negation || supports_operator || supports_interpolation
571
571
  end
572
572
 
573
+ def import_supports_condition
574
+ supports_condition || supports_declaration
575
+ end
576
+
573
577
  def supports_negation
574
578
  return unless tok(/not/i)
575
579
  ss
@@ -589,6 +593,13 @@ module Sass
589
593
  cond
590
594
  end
591
595
 
596
+ def supports_declaration
597
+ name = sass_script(:parse)
598
+ tok!(/:/); ss
599
+ value = sass_script(:parse)
600
+ Sass::Supports::Declaration.new(name, value)
601
+ end
602
+
592
603
  def supports_condition_in_parens
593
604
  interp = supports_interpolation
594
605
  return interp if interp
@@ -597,11 +608,9 @@ module Sass
597
608
  tok!(/\)/); ss
598
609
  cond
599
610
  else
600
- name = sass_script(:parse)
601
- tok!(/:/); ss
602
- value = sass_script(:parse)
611
+ decl = supports_declaration
603
612
  tok!(/\)/); ss
604
- Sass::Supports::Declaration.new(name, value)
613
+ decl
605
614
  end
606
615
  end
607
616
 
@@ -828,6 +837,9 @@ module Sass
828
837
  |
829
838
  (?!url\()
830
839
  [^"'/\#!;\{\}] # "
840
+ |
841
+ # interp_uri will handle most url() calls, but not ones that take strings
842
+ url\(#{W}(?=")
831
843
  |
832
844
  /(?![/*])
833
845
  |
@@ -1010,7 +1022,7 @@ WARNING
1010
1022
  end
1011
1023
 
1012
1024
  def str
1013
- @strs.push ""
1025
+ @strs.push String.new("")
1014
1026
  yield
1015
1027
  @strs.last
1016
1028
  ensure
@@ -1143,14 +1155,20 @@ WARNING
1143
1155
  line = @line
1144
1156
  offset = @offset
1145
1157
  expected = @expected
1158
+
1159
+ logger = Sass::Logger::Delayed.install!
1146
1160
  if catch(:_sass_parser_error) {yield; false}
1147
1161
  @scanner.pos = pos
1148
1162
  @line = line
1149
1163
  @offset = offset
1150
1164
  @expected = expected
1151
1165
  {:pos => pos, :line => line, :expected => @expected, :block => block}
1166
+ else
1167
+ logger.flush
1168
+ nil
1152
1169
  end
1153
1170
  ensure
1171
+ logger.uninstall! if logger
1154
1172
  @throw_error = old_throw_error
1155
1173
  end
1156
1174
 
data/lib/sass/scss/rx.rb CHANGED
@@ -40,7 +40,7 @@ module Sass
40
40
  # escaping all significant characters.
41
41
  #
42
42
  # @param str [String] The text of the regexp
43
- # @param flags [Fixnum] Flags for the created regular expression
43
+ # @param flags [Integer] Flags for the created regular expression
44
44
  # @return [Regexp]
45
45
  # @private
46
46
  def self.quote(str, flags = 0)
@@ -8,7 +8,7 @@ module Sass
8
8
  class AbstractSequence
9
9
  # The line of the Sass template on which this selector was declared.
10
10
  #
11
- # @return [Fixnum]
11
+ # @return [Integer]
12
12
  attr_reader :line
13
13
 
14
14
  # The name of the file in which this selector was declared.
@@ -19,8 +19,8 @@ module Sass
19
19
  # Sets the line of the Sass template on which this selector was declared.
20
20
  # This also sets the line for all child selectors.
21
21
  #
22
- # @param line [Fixnum]
23
- # @return [Fixnum]
22
+ # @param line [Integer]
23
+ # @return [Integer]
24
24
  def line=(line)
25
25
  members.each {|m| m.line = line}
26
26
  @line = line
@@ -42,7 +42,7 @@ module Sass
42
42
  # Subclasses should define `#_hash` rather than overriding this method,
43
43
  # which automatically handles memoizing the result.
44
44
  #
45
- # @return [Fixnum]
45
+ # @return [Integer]
46
46
  def hash
47
47
  @_hash ||= _hash
48
48
  end
@@ -83,7 +83,7 @@ module Sass
83
83
  # The base is given by {Sass::Selector::SPECIFICITY_BASE}. This can be a
84
84
  # number or a range representing possible specificities.
85
85
  #
86
- # @return [Fixnum, Range]
86
+ # @return [Integer, Range]
87
87
  def specificity
88
88
  _specificity(members)
89
89
  end
@@ -6,8 +6,8 @@ module Sass
6
6
  # Sets the line of the Sass template on which this selector was declared.
7
7
  # This also sets the line for all child selectors.
8
8
  #
9
- # @param line [Fixnum]
10
- # @return [Fixnum]
9
+ # @param line [Integer]
10
+ # @return [Integer]
11
11
  def line=(line)
12
12
  members.each {|m| m.line = line if m.is_a?(SimpleSequence)}
13
13
  @line = line
@@ -5,7 +5,7 @@ module Sass
5
5
  class Simple
6
6
  # The line of the Sass template on which this selector was declared.
7
7
  #
8
- # @return [Fixnum]
8
+ # @return [Integer]
9
9
  attr_accessor :line
10
10
 
11
11
  # The name of the file in which this selector was declared,
@@ -36,7 +36,7 @@ module Sass
36
36
  # so if that contains information irrelevant to the identity of the selector,
37
37
  # this should be overridden.
38
38
  #
39
- # @return [Fixnum]
39
+ # @return [Integer]
40
40
  def hash
41
41
  @_hash ||= equality_key.hash
42
42
  end
@@ -106,10 +106,10 @@ module Sass
106
106
  # could be found at all.
107
107
  # If the second value is `false`, the first should be ignored.
108
108
  def unify_namespaces(ns1, ns2)
109
- return nil, false unless ns1 == ns2 || ns1.nil? || ns1 == '*' || ns2.nil? || ns2 == '*'
110
109
  return ns2, true if ns1 == '*'
111
110
  return ns1, true if ns2 == '*'
112
- [ns1 || ns2, true]
111
+ return nil, false unless ns1 == ns2
112
+ [ns1, true]
113
113
  end
114
114
  end
115
115
  end
data/lib/sass/shared.rb CHANGED
@@ -31,7 +31,7 @@ module Sass
31
31
  # A `Fixnum` in 1.8, a `String` in 1.9
32
32
  # @param finish [Character] The character closing the balanced pair.
33
33
  # A `Fixnum` in 1.8, a `String` in 1.9
34
- # @param count [Fixnum] The number of opening characters matched
34
+ # @param count [Integer] The number of opening characters matched
35
35
  # before calling this method
36
36
  # @return [(String, String)] The string matched within the balanced pair
37
37
  # and the rest of the string.
@@ -37,7 +37,7 @@ module Sass::Source
37
37
 
38
38
  # Shifts all output source ranges forward one or more lines.
39
39
  #
40
- # @param delta [Fixnum] The number of lines to shift the ranges forward.
40
+ # @param delta [Integer] The number of lines to shift the ranges forward.
41
41
  def shift_output_lines(delta)
42
42
  return if delta == 0
43
43
  @data.each do |m|
@@ -49,7 +49,7 @@ module Sass::Source
49
49
  # Shifts any output source ranges that lie on the first line forward one or
50
50
  # more characters on that line.
51
51
  #
52
- # @param delta [Fixnum] The number of characters to shift the ranges
52
+ # @param delta [Integer] The number of characters to shift the ranges
53
53
  # forward.
54
54
  def shift_output_offsets(delta)
55
55
  return if delta == 0
@@ -118,12 +118,14 @@ module Sass::Source
118
118
  @data.each do |m|
119
119
  file, importer = m.input.file, m.input.importer
120
120
 
121
+ next unless importer
122
+
121
123
  if options[:type] == :inline
122
124
  source_uri = file
123
125
  else
124
126
  sourcemap_dir = sourcemap_path && sourcemap_path.dirname.to_s
125
127
  sourcemap_dir = nil if options[:type] == :file
126
- source_uri = importer && importer.public_url(file, sourcemap_dir)
128
+ source_uri = importer.public_url(file, sourcemap_dir)
127
129
  next unless source_uri
128
130
  end
129
131
 
@@ -2,17 +2,17 @@ module Sass::Source
2
2
  class Position
3
3
  # The one-based line of the document associated with the position.
4
4
  #
5
- # @return [Fixnum]
5
+ # @return [Integer]
6
6
  attr_accessor :line
7
7
 
8
8
  # The one-based offset in the line of the document associated with the
9
9
  # position.
10
10
  #
11
- # @return [Fixnum]
11
+ # @return [Integer]
12
12
  attr_accessor :offset
13
13
 
14
- # @param line [Fixnum] The source line
15
- # @param offset [Fixnum] The source offset
14
+ # @param line [Integer] The source line
15
+ # @param offset [Integer] The source offset
16
16
  def initialize(line, offset)
17
17
  @line = line
18
18
  @offset = offset
@@ -59,7 +59,7 @@ module Sass::Tree
59
59
 
60
60
  # Returns the number of lines in the comment.
61
61
  #
62
- # @return [Fixnum]
62
+ # @return [Integer]
63
63
  def lines
64
64
  @value.inject(0) do |s, e|
65
65
  next s + e.count("\n") if e.is_a?(String)
@@ -69,7 +69,7 @@ module Sass
69
69
 
70
70
  # The line of the document on which this node appeared.
71
71
  #
72
- # @return [Fixnum]
72
+ # @return [Integer]
73
73
  attr_accessor :line
74
74
 
75
75
  # The source range in the document on which this node appeared.
@@ -39,7 +39,7 @@ module Sass::Tree
39
39
  # * This is a child property of another property
40
40
  # * The parent property has a value, and thus will be rendered
41
41
  #
42
- # @return [Fixnum]
42
+ # @return [Integer]
43
43
  attr_accessor :tabs
44
44
 
45
45
  # The source range in which the property name appears.
@@ -40,7 +40,7 @@ module Sass::Tree
40
40
  # * This is a child rule of another rule
41
41
  # * The parent rule has properties, and thus will be rendered
42
42
  #
43
- # @return [Fixnum]
43
+ # @return [Integer]
44
44
  attr_accessor :tabs
45
45
 
46
46
  # The entire selector source range for this rule.
@@ -289,7 +289,9 @@ class Sass::Tree::Visitors::Convert < Sass::Tree::Visitors::Base
289
289
  child.line + 1 == nxt.line) ||
290
290
  (child.is_a?(Sass::Tree::VariableNode) && nxt.is_a?(Sass::Tree::VariableNode) &&
291
291
  child.line + 1 == nxt.line) ||
292
- (child.is_a?(Sass::Tree::PropNode) && nxt.is_a?(Sass::Tree::PropNode))
292
+ (child.is_a?(Sass::Tree::PropNode) && nxt.is_a?(Sass::Tree::PropNode)) ||
293
+ (child.is_a?(Sass::Tree::MixinNode) && nxt.is_a?(Sass::Tree::MixinNode) &&
294
+ child.line + 1 == nxt.line)
293
295
  ""
294
296
  else
295
297
  "\n"
@@ -12,7 +12,7 @@ class Sass::Tree::Visitors::ToCss < Sass::Tree::Visitors::Base
12
12
  @tabs = 0
13
13
  @line = 1
14
14
  @offset = 1
15
- @result = ""
15
+ @result = String.new("")
16
16
  @source_mapping = build_source_mapping ? Sass::Source::Map.new : nil
17
17
  @lstrip = nil
18
18
  @in_directive = false
data/lib/sass/util.rb CHANGED
@@ -339,6 +339,18 @@ module Sass
339
339
  arr
340
340
  end
341
341
 
342
+ # Like `String.upcase`, but only ever upcases ASCII letters.
343
+ def upcase(string)
344
+ return string.upcase unless ruby2_4?
345
+ string.upcase(:ascii)
346
+ end
347
+
348
+ # Like `String.downcase`, but only ever downcases ASCII letters.
349
+ def downcase(string)
350
+ return string.downcase unless ruby2_4?
351
+ string.downcase(:ascii)
352
+ end
353
+
342
354
  # Returns a sub-array of `minuend` containing only elements that are also in
343
355
  # `subtrahend`. Ensures that the return value has the same order as
344
356
  # `minuend`, even on Rubinius where that's not guaranteed by `Array#-`.
@@ -418,7 +430,7 @@ module Sass
418
430
  # Returns information about the caller of the previous method.
419
431
  #
420
432
  # @param entry [String] An entry in the `#caller` list, or a similarly formatted string
421
- # @return [[String, Fixnum, (String, nil)]]
433
+ # @return [[String, Integer, (String, nil)]]
422
434
  # An array containing the filename, line, and method name of the caller.
423
435
  # The method name may be nil
424
436
  def caller_info(entry = nil)
@@ -636,7 +648,7 @@ module Sass
636
648
 
637
649
  # Returns an array of ints representing the JRuby version number.
638
650
  #
639
- # @return [Array<Fixnum>]
651
+ # @return [Array<Integer>]
640
652
  def jruby_version
641
653
  @jruby_version ||= ::JRUBY_VERSION.split(".").map {|s| s.to_i}
642
654
  end
@@ -794,6 +806,19 @@ module Sass
794
806
  @ruby1_9_2 = RUBY_VERSION_COMPONENTS == [1, 9, 2]
795
807
  end
796
808
 
809
+ # Whether or not this is running under Ruby 2.4 or higher.
810
+ #
811
+ # @return [Boolean]
812
+ def ruby2_4?
813
+ return @ruby2_4 if defined?(@ruby2_4)
814
+ @ruby2_4 =
815
+ if RUBY_VERSION_COMPONENTS[0] == 2
816
+ RUBY_VERSION_COMPONENTS[1] >= 4
817
+ else
818
+ RUBY_VERSION_COMPONENTS[0] > 2
819
+ end
820
+ end
821
+
797
822
  # Wehter or not this is running under JRuby 1.6 or lower.
798
823
  def jruby1_6?
799
824
  return @jruby1_6 if defined?(@jruby1_6)
@@ -941,7 +966,7 @@ module Sass
941
966
  # A version of `Enumerable#enum_cons` that works in Ruby 1.8 and 1.9.
942
967
  #
943
968
  # @param enum [Enumerable] The enumerable to get the enumerator for
944
- # @param n [Fixnum] The size of each cons
969
+ # @param n [Integer] The size of each cons
945
970
  # @return [Enumerator] The consed enumerator
946
971
  def enum_cons(enum, n)
947
972
  ruby1_8? ? enum.enum_cons(n) : enum.each_cons(n)
@@ -950,7 +975,7 @@ module Sass
950
975
  # A version of `Enumerable#enum_slice` that works in Ruby 1.8 and 1.9.
951
976
  #
952
977
  # @param enum [Enumerable] The enumerable to get the enumerator for
953
- # @param n [Fixnum] The size of each slice
978
+ # @param n [Integer] The size of each slice
954
979
  # @return [Enumerator] The consed enumerator
955
980
  def enum_slice(enum, n)
956
981
  ruby1_8? ? enum.enum_slice(n) : enum.each_slice(n)
@@ -977,7 +1002,7 @@ module Sass
977
1002
  # Returns the ASCII code of the given character.
978
1003
  #
979
1004
  # @param c [String] All characters but the first are ignored.
980
- # @return [Fixnum] The ASCII code of `c`.
1005
+ # @return [Integer] The ASCII code of `c`.
981
1006
  def ord(c)
982
1007
  ruby1_8? ? c[0] : c.ord
983
1008
  end
@@ -1102,11 +1127,11 @@ module Sass
1102
1127
 
1103
1128
  # Converts the argument into a valid JSON value.
1104
1129
  #
1105
- # @param v [Fixnum, String, Array, Boolean, nil]
1130
+ # @param v [Integer, String, Array, Boolean, nil]
1106
1131
  # @return [String]
1107
1132
  def json_value_of(v)
1108
1133
  case v
1109
- when Fixnum
1134
+ when Integer
1110
1135
  v.to_s
1111
1136
  when String
1112
1137
  "\"" + json_escape_string(v) + "\""
@@ -1139,7 +1164,7 @@ module Sass
1139
1164
 
1140
1165
  # Encodes `value` as VLQ (http://en.wikipedia.org/wiki/VLQ).
1141
1166
  #
1142
- # @param value [Fixnum]
1167
+ # @param value [Integer]
1143
1168
  # @return [String] The encoded value
1144
1169
  def encode_vlq(value)
1145
1170
  if value < 0
data/lib/sass/version.rb CHANGED
@@ -8,7 +8,7 @@ module Sass
8
8
  # if it was installed from Git.
9
9
  module Version
10
10
  # Returns a hash representing the version of Sass.
11
- # The `:major`, `:minor`, and `:teeny` keys have their respective numbers as Fixnums.
11
+ # The `:major`, `:minor`, and `:teeny` keys have their respective numbers as Integers.
12
12
  # The `:name` key has the name of the version.
13
13
  # The `:string` key contains a human-readable string representation of the version.
14
14
  # The `:number` key is the major, minor, and teeny keys separated by periods.
@@ -41,7 +41,7 @@ module Sass
41
41
  # :prerelease_number => 1
42
42
  # }
43
43
  #
44
- # @return [{Symbol => String/Fixnum}] The version hash
44
+ # @return [{Symbol => String/Integer}] The version hash
45
45
  # @comment
46
46
  # rubocop:disable ClassVars
47
47
  def version
@@ -1126,6 +1126,23 @@ foo {
1126
1126
  SCSS
1127
1127
  end
1128
1128
 
1129
+ def test_consecutive_mixin_includes
1130
+ assert_renders <<SASS, <<SCSS
1131
+ foo
1132
+ +foo-bar
1133
+ +foo-bar
1134
+
1135
+ a: blip
1136
+ SASS
1137
+ foo {
1138
+ @include foo-bar;
1139
+ @include foo-bar;
1140
+
1141
+ a: blip;
1142
+ }
1143
+ SCSS
1144
+ end
1145
+
1129
1146
  def test_mixin_include_with_hyphen_conversion_keyword_arg
1130
1147
  assert_renders <<SASS, <<SCSS
1131
1148
  foo