Hello community,

here is the log from the commit of package rubygem-sass for openSUSE:Factory 
checked in at 2015-02-16 21:14:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-sass (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-sass.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-sass"

Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-sass/rubygem-sass.changes        
2014-10-24 10:48:08.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.rubygem-sass.new/rubygem-sass.changes   
2015-02-16 21:14:01.000000000 +0100
@@ -1,0 +2,10 @@
+Sat Feb 14 05:31:35 UTC 2015 - [email protected]
+
+- updated to version 3.4.12
+
+-------------------------------------------------------------------
+Mon Feb  9 07:00:53 UTC 2015 - [email protected]
+
+- updated to version 3.4.11, no changelog
+
+-------------------------------------------------------------------

Old:
----
  sass-3.4.6.gem

New:
----
  sass-3.4.12.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-sass.spec ++++++
--- /var/tmp/diff_new_pack.UtIe6a/_old  2015-02-16 21:14:02.000000000 +0100
+++ /var/tmp/diff_new_pack.UtIe6a/_new  2015-02-16 21:14:02.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package rubygem-sass
 #
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-sass
-Version:        3.4.6
+Version:        3.4.12
 Release:        0
 %define mod_name sass
 %define mod_full_name %{mod_name}-%{version}

++++++ sass-3.4.6.gem -> sass-3.4.12.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CONTRIBUTING new/CONTRIBUTING
--- old/CONTRIBUTING    2014-10-17 03:32:48.000000000 +0200
+++ new/CONTRIBUTING    1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-Contributions are welcomed. Please see the following sites for guidelines:
-
-  http://sass-lang.com/community#Contribute
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CONTRIBUTING.md new/CONTRIBUTING.md
--- old/CONTRIBUTING.md 1970-01-01 01:00:00.000000000 +0100
+++ new/CONTRIBUTING.md 2015-02-14 02:18:19.000000000 +0100
@@ -0,0 +1,3 @@
+Contributions are welcomed. Please see the following sites for guidelines:
+
+[http://sass-lang.com/community#Contribute](http://sass-lang.com/community#Contribute)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/VERSION new/VERSION
--- old/VERSION 2014-10-17 03:32:48.000000000 +0200
+++ new/VERSION 2015-02-14 02:18:19.000000000 +0100
@@ -1 +1 @@
-3.4.6
+3.4.12
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/VERSION_DATE new/VERSION_DATE
--- old/VERSION_DATE    2014-10-17 03:32:48.000000000 +0200
+++ new/VERSION_DATE    2015-02-14 02:18:19.000000000 +0100
@@ -1 +1 @@
-17 October 2014 01:32:48 UTC
+14 February 2015 01:18:18 UTC
Files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/exec/sass_scss.rb 
new/lib/sass/exec/sass_scss.rb
--- old/lib/sass/exec/sass_scss.rb      2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/exec/sass_scss.rb      2015-02-14 02:18:19.000000000 +0100
@@ -42,6 +42,7 @@
         if @args.size == 1
           @args = split_colon_path(@args.first)
         else
+          @fake_update = true
           @options[:update] = true
         end
       end
@@ -312,6 +313,16 @@
 
       dirs, files = @args.map {|name| split_colon_path(name)}.
         partition {|i, _| File.directory? i}
+
+      if @fake_update && !dirs.empty?
+        # Issue 1602.
+        Sass::Util.sass_warn <<WARNING.strip
+DEPRECATION WARNING: Compiling directories without --update or --watch is
+deprecated and won't work in future versions of Sass. Instead use:
+  #{@default_syntax} --update #{@args}
+WARNING
+      end
+
       files.map! do |from, to|
         to ||= from.gsub(/\.[^.]*?$/, '.css')
         sourcemap = Sass::Util.sourcemap_name(to) if @options[:sourcemap]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/plugin/compiler.rb 
new/lib/sass/plugin/compiler.rb
--- old/lib/sass/plugin/compiler.rb     2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/plugin/compiler.rb     2015-02-14 02:18:19.000000000 +0100
@@ -399,7 +399,8 @@
 
     def listen_to(listener)
       if Sass::Util.listen_geq_2?
-        listener.map {|l| l.start}.each {|thread| thread.join}
+        listener.map {|l| l.start}
+        sleep
       else
         listener.start!
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/script/functions.rb 
new/lib/sass/script/functions.rb
--- old/lib/sass/script/functions.rb    2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/script/functions.rb    2015-02-14 02:18:19.000000000 +0100
@@ -170,6 +170,9 @@
   # \{#nth nth($list, $n)}
   # : Returns a specific item in a list.
   #
+  # \{#set-nth set-nth($list, $n, $value)}
+  # : Replaces the nth item in a list.
+  #
   # \{#join join($list1, $list2, \[$separator\])}
   # : Joins together two lists into one.
   #
@@ -479,8 +482,7 @@
       include Value::Helpers
 
       # The human-readable names for [Sass::Script::Value::Base]. The default 
is
-      # just the downcased name of the type. The default is the downcased type
-      # name.
+      # just the downcased name of the type.
       TYPE_NAMES = {:ArgList => 'variable argument list'}
 
       # The environment for this function. This environment's
@@ -649,11 +651,11 @@
     #
     # @overload rgba($red, $green, $blue, $alpha)
     #   @param $red [Sass::Script::Value::Number] The amount of red in the
-    #     color. Must be between 0 and 255 inclusive
+    #     color. Must be between 0 and 255 inclusive or 0% and 100% inclusive
     #   @param $green [Sass::Script::Value::Number] The amount of green in the
-    #     color. Must be between 0 and 255 inclusive
+    #     color. Must be between 0 and 255 inclusive or 0% and 100% inclusive
     #   @param $blue [Sass::Script::Value::Number] The amount of blue in the
-    #     color. Must be between 0 and 255 inclusive
+    #     color. Must be between 0 and 255 inclusive or 0% and 100% inclusive
     #   @param $alpha [Sass::Script::Value::Number] The opacity of the color.
     #     Must be between 0 and 1 inclusive
     #   @return [Sass::Script::Value::Color]
@@ -681,6 +683,7 @@
 
         assert_type color, :Color, :color
         assert_type alpha, :Number, :alpha
+        check_alpha_unit alpha, 'rgba'
 
         color.with(:alpha => alpha.value)
       when 4
@@ -738,6 +741,7 @@
       assert_type saturation, :Number, :saturation
       assert_type lightness, :Number, :lightness
       assert_type alpha, :Number, :alpha
+      check_alpha_unit alpha, 'hsla'
 
       h = hue.value
       s = saturation.value
@@ -1287,7 +1291,7 @@
     #   @param $color1 [Sass::Script::Value::Color]
     #   @param $color2 [Sass::Script::Value::Color]
     #   @param $weight [Sass::Script::Value::Number] The relative weight of 
each
-    #     color. Closer to `0%` gives more weight to `$color`, closer to `100%`
+    #     color. Closer to `0%` gives more weight to `$color1`, closer to 
`100%`
     #     gives more weight to `$color2`
     # @return [Sass::Script::Value::Color]
     # @raise [ArgumentError] if `$weight` is out of bounds or any parameter is
@@ -1393,11 +1397,17 @@
     # @return [Sass::Script::Value::String]
     # @raise [ArgumentError] if `$string` isn't a string
     def unquote(string)
-      if string.is_a?(Sass::Script::Value::String) && string.type != 
:identifier
-        identifier(string.value)
-      else
-        string
+      unless string.is_a?(Sass::Script::Value::String)
+        Sass::Util.sass_warn(<<MESSAGE.strip)
+DEPRECATION WARNING: Passing #{string.to_sass}, a non-string value, to 
unquote()
+will be an error in future versions of Sass.
+#{environment.stack.to_s.gsub(/^/, ' ' * 8)}
+MESSAGE
+        return string
       end
+
+      return string if string.type == :identifier
+      identifier(string.value)
     end
     declare :unquote, [:string]
 
@@ -1461,10 +1471,10 @@
       assert_type insert, :String, :insert
       assert_integer index, :index
       assert_unit index, nil, :index
-      insertion_point = if index.value > 0
-                          [index.value - 1, original.value.size].min
+      insertion_point = if index.to_i > 0
+                          [index.to_i - 1, original.value.size].min
                         else
-                          [index.value, -original.value.size - 1].max
+                          [index.to_i, -original.value.size - 1].max
                         end
       result = original.value.dup.insert(insertion_point, insert.value)
       Sass::Script::Value::String.new(result, original.type)
@@ -2306,7 +2316,7 @@
     #   Return a decimal between 0 and 1, inclusive of 0 but not 1.
     #   @return [Sass::Script::Value::Number] A decimal value.
     # @overload random($limit)
-    #   Return an integer between 1 and `$limit`, inclusive of 1 but not 
`$limit`.
+    #   Return an integer between 1 and `$limit`, inclusive of both 1 and 
`$limit`.
     #   @param $limit [Sass::Script::Value::Number] The maximum of the random 
integer to be
     #     returned, a positive integer.
     #   @return [Sass::Script::Value::Number] An integer.
@@ -2315,10 +2325,10 @@
       generator = Sass::Script::Functions.random_number_generator
       if limit
         assert_integer limit, "limit"
-        if limit.value < 1
+        if limit.to_i < 1
           raise ArgumentError.new("$limit #{limit} must be greater than or 
equal to 1")
         end
-        number(1 + generator.rand(limit.value))
+        number(1 + generator.rand(limit.to_i))
       else
         number(generator.rand)
       end
@@ -2622,5 +2632,21 @@
 
       color.with(attr => color.send(attr).send(op, amount.value))
     end
+
+    def check_alpha_unit(alpha, function)
+      return if alpha.unitless?
+
+      if alpha.is_unit?("%")
+        Sass::Util.sass_warn(<<WARNING)
+DEPRECATION WARNING: Passing a percentage as the alpha value to #{function}() 
will be
+interpreted differently in future versions of Sass. For now, use 
#{alpha.value} instead.
+WARNING
+      else
+        Sass::Util.sass_warn(<<WARNING)
+DEPRECATION WARNING: Passing a number with units as the alpha value to 
#{function}() is
+deprecated and will be an error in future versions of Sass. Use #{alpha.value} 
instead.
+WARNING
+      end
+    end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/script/lexer.rb new/lib/sass/script/lexer.rb
--- old/lib/sass/script/lexer.rb        2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/script/lexer.rb        2015-02-14 02:18:19.000000000 +0100
@@ -198,7 +198,8 @@
 
       # @return [Boolean] Whether or not there's more source text to lex.
       def done?
-        whitespace unless after_interpolation? && @interpolation_stack.last
+        return if @next_tok
+        whitespace unless after_interpolation? && !@interpolation_stack.empty?
         @scanner.eos? && @tok.nil?
       end
 
@@ -235,6 +236,11 @@
       private
 
       def read_token
+        if (tok = @next_tok)
+          @next_tok = nil
+          return tok
+        end
+
         return if done?
         start_pos = source_position
         value = token
@@ -293,9 +299,9 @@
         end
 
         if @scanner[2] == '#{' # '
-          @scanner.pos -= 2 # Don't actually consume the #{
-          @offset -= 2
           @interpolation_stack << [:string, re]
+          start_pos = Sass::Source::Position.new(@line, @offset - 2)
+          @next_tok = Token.new(:string_interpolation, range(start_pos), 
@scanner.pos - 2)
         end
         str =
           if re == :uri
@@ -392,9 +398,9 @@
           else
             raise "[BUG] Unreachable" unless @scanner[1] == '#{' # '
             str.slice!(-2..-1)
-            @scanner.pos -= 2 # Don't actually consume the #{
-            @offset -= 2
             @interpolation_stack << [:special_fun, parens]
+            start_pos = Sass::Source::Position.new(@line, @offset - 2)
+            @next_tok = Token.new(:string_interpolation, range(start_pos), 
@scanner.pos - 2)
           end
 
           return [:special_fun, Sass::Script::Value::String.new(str)]
@@ -419,11 +425,8 @@
         op = scan(REGULAR_EXPRESSIONS[:op])
         return unless op
         name = OPERATORS[op]
-        if name == :begin_interpolation && !@interpolation_stack.empty?
-          [:string_interpolation]
-        else
-          [name]
-        end
+        @interpolation_stack << nil if name == :begin_interpolation
+        [name]
       end
 
       def raw(rx)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/script/parser.rb 
new/lib/sass/script/parser.rb
--- old/lib/sass/script/parser.rb       2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/script/parser.rb       2015-02-14 02:18:19.000000000 +0100
@@ -498,7 +498,8 @@
         return paren unless first
         str = literal_node(first.value, first.source_range)
         return str unless try_tok(:string_interpolation)
-        mid = parse_interpolated
+        mid = assert_expr :expr
+        assert_tok :end_interpolation
         last = assert_expr(:special_fun)
         node(Tree::Interpolation.new(str, mid, last, false, false),
             first.source_range.start_pos)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/script/tree/list_literal.rb 
new/lib/sass/script/tree/list_literal.rb
--- old/lib/sass/script/tree/list_literal.rb    2014-10-17 03:32:48.000000000 
+0200
+++ new/lib/sass/script/tree/list_literal.rb    2015-02-14 02:18:19.000000000 
+0100
@@ -32,7 +32,8 @@
       members = elements.map do |v|
         if v.is_a?(ListLiteral) && 
Sass::Script::Parser.precedence_of(v.separator) <= precedence ||
             separator == :space && v.is_a?(UnaryOperation) &&
-            (v.operator == :minus || v.operator == :plus)
+              (v.operator == :minus || v.operator == :plus) ||
+            separator == :space && v.is_a?(Operation)
           "(#{v.to_sass(opts)})"
         else
           v.to_sass(opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/script/tree/operation.rb 
new/lib/sass/script/tree/operation.rb
--- old/lib/sass/script/tree/operation.rb       2014-10-17 03:32:48.000000000 
+0200
+++ new/lib/sass/script/tree/operation.rb       2015-02-14 02:18:19.000000000 
+0100
@@ -79,11 +79,23 @@
       end
 
       begin
-        opts(value1.send(@operator, value2))
+        result = opts(value1.send(@operator, value2))
       rescue NoMethodError => e
         raise e unless e.name.to_s == @operator.to_s
         raise Sass::SyntaxError.new("Undefined operation: \"#{value1} 
#{@operator} #{value2}\".")
       end
+
+      if @operator == :eq && value1.is_a?(Sass::Script::Value::Number) &&
+          value2.is_a?(Sass::Script::Value::Number) && result == 
Sass::Script::Value::Bool::TRUE &&
+          value1.unitless? != value2.unitless?
+        Sass::Util.sass_warn <<WARNING
+DEPRECATION WARNING on line #{line}#{" of #{filename}" if filename}:
+The result of `#{value1} == #{value2}` will be `false` in future releases of 
Sass.
+Unitless numbers will no longer be equal to the same numbers with units.
+WARNING
+      end
+
+      result
     end
 
     private
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/script/value/color.rb 
new/lib/sass/script/value/color.rb
--- old/lib/sass/script/value/color.rb  2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/script/value/color.rb  2015-02-14 02:18:19.000000000 +0100
@@ -204,7 +204,7 @@
     #
     # @overload initialize(attrs)
     #   The attributes are specified as a hash. This hash must contain either
-    #   `:hue`, `:saturation`, and `:value` keys, or `:red`, `:green`, and
+    #   `:hue`, `:saturation`, and `:lightness` keys, or `:red`, `:green`, and
     #   `:blue` keys. It cannot contain both HSL and RGB keys. It may also
     #   optionally contain an `:alpha` key, and a `:representation` key
     #   indicating the original representation of the color that the user wrote
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/script/value/map.rb 
new/lib/sass/script/value/map.rb
--- old/lib/sass/script/value/map.rb    2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/script/value/map.rb    2015-02-14 02:18:19.000000000 +0100
@@ -56,7 +56,7 @@
       return "()" if value.empty?
 
       to_sass = lambda do |value|
-        if value.is_a?(Map) || (value.is_a?(List) && value.separator == :comma)
+        if value.is_a?(List) && value.separator == :comma
           "(#{value.to_sass(opts)})"
         else
           value.to_sass(opts)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/scss/parser.rb new/lib/sass/scss/parser.rb
--- old/lib/sass/scss/parser.rb 2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/scss/parser.rb 2015-02-14 02:18:19.000000000 +0100
@@ -808,6 +808,8 @@
       def almost_any_value_token
         tok(%r{
           (
+            \\.
+          |
             (?!url\()
             [^"'/\#!;\{\}] # "
           |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/selector/sequence.rb 
new/lib/sass/selector/sequence.rb
--- old/lib/sass/selector/sequence.rb   2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/selector/sequence.rb   2015-02-14 02:18:20.000000000 +0100
@@ -490,8 +490,15 @@
 
         if seq1[1].is_a?(String)
           return unless seq2[si + 1].is_a?(String)
+
           # .foo ~ .bar is a superselector of .foo + .bar
           return unless seq1[1] == "~" ? seq2[si + 1] != ">" : seq1[1] == 
seq2[si + 1]
+
+          # .foo > .baz is not a superselector of .foo > .bar > .baz or .foo >
+          # .bar .baz, despite the fact that .baz is a superselector of .bar >
+          # .baz and .bar .baz. Same goes for + and ~.
+          return if seq1.length == 3 && seq2.length > 3
+
           return _superselector?(seq1[2..-1], seq2[si + 2..-1])
         elsif seq2[si + 1].is_a?(String)
           return unless seq2[si + 1] == ">"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/selector/simple_sequence.rb 
new/lib/sass/selector/simple_sequence.rb
--- old/lib/sass/selector/simple_sequence.rb    2014-10-17 03:32:48.000000000 
+0200
+++ new/lib/sass/selector/simple_sequence.rb    2015-02-14 02:18:20.000000000 
+0100
@@ -89,7 +89,7 @@
         resolved_members = @members.map do |sel|
           next sel unless sel.is_a?(Pseudo) && sel.selector
           sel.with_selector(sel.selector.resolve_parent_refs(super_cseq, 
!:implicit_parent))
-        end
+        end.flatten
 
         # Parent selector only appears as the first selector in the sequence
         unless (parent = resolved_members.first).is_a?(Parent)
@@ -133,9 +133,9 @@
           end
 
           Sequence.new(members[0...-1] +
-            [SimpleSequence.new(parent_sub + @members[1..-1], subject?)] +
+            [SimpleSequence.new(parent_sub + resolved_members[1..-1], 
subject?)] +
             [newline].compact)
-        end)
+          end)
       end
 
       # Non-destructively extends this selector with the extensions specified 
in a hash
@@ -164,6 +164,20 @@
           extended = sel.selector.do_extend(extends, parent_directives, 
replace, seen, !:original)
           next sel if extended == sel.selector
           extended.members.reject! {|seq| seq.has_placeholder?}
+
+          # For `:not()`, we usually want to get rid of any complex
+          # selectors becuase that will cause the selector to fail to
+          # parse on all browsers at time of writing. We can keep them
+          # if either the original selector had a complex selector, or
+          # the result of extending has only complex selectors,
+          # because either way we aren't breaking anything that isn't
+          # already broken.
+          if sel.normalized_name == 'not' &&
+              (sel.selector.members.none? {|seq| seq.members.length > 1} &&
+               extended.members.any? {|seq| seq.members.length == 1})
+            extended.members.reject! {|seq| seq.members.length > 1}
+          end
+
           modified_original = true
           result = sel.with_selector(extended)
           result.each {|new_sel| seen_with_pseudo_selectors << [new_sel]}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/tree/function_node.rb 
new/lib/sass/tree/function_node.rb
--- old/lib/sass/tree/function_node.rb  2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/tree/function_node.rb  2015-02-14 02:18:20.000000000 +0100
@@ -20,6 +20,12 @@
       # @return [Script::Tree::Node?]
       attr_accessor :splat
 
+      # Strips out any vendor prefixes.
+      # @return [String] The normalized name of the directive.
+      def normalized_name
+        @normalized_name ||= name.gsub(/^(?:-[a-zA-Z0-9]+-)?/, '\1')
+      end
+
       # @param name [String] The function name
       # @param args [Array<(Script::Tree::Node, Script::Tree::Node)>]
       #   The arguments for the function.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/tree/rule_node.rb 
new/lib/sass/tree/rule_node.rb
--- old/lib/sass/tree/rule_node.rb      2014-10-17 03:32:48.000000000 +0200
+++ new/lib/sass/tree/rule_node.rb      2015-02-14 02:18:20.000000000 +0100
@@ -132,14 +132,15 @@
     private
 
     def try_to_parse_non_interpolated_rules
-      if @rule.all? {|t| t.kind_of?(String)}
-        # We don't use real filename/line info because we don't have it yet.
-        # When we get it, we'll set it on the parsed rules if possible.
-        parser = Sass::SCSS::StaticParser.new(@rule.join.strip, nil, nil, 1)
-        # rubocop:disable RescueModifier
-        @parsed_rules = parser.parse_selector rescue nil
-        # rubocop:enable RescueModifier
-      end
+      @parsed_rules = nil
+      return unless @rule.all? {|t| t.kind_of?(String)}
+
+      # We don't use real filename/line info because we don't have it yet.
+      # When we get it, we'll set it on the parsed rules if possible.
+      parser = Sass::SCSS::StaticParser.new(@rule.join.strip, nil, nil, 1)
+      # rubocop:disable RescueModifier
+      @parsed_rules = parser.parse_selector rescue nil
+      # rubocop:enable RescueModifier
     end
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/tree/visitors/convert.rb 
new/lib/sass/tree/visitors/convert.rb
--- old/lib/sass/tree/visitors/convert.rb       2014-10-17 03:32:48.000000000 
+0200
+++ new/lib/sass/tree/visitors/convert.rb       2015-02-14 02:18:20.000000000 
+0100
@@ -113,8 +113,8 @@
   end
 
   def visit_extend(node)
-    "#{tab_str}@extend #{selector_to_src(node.selector).lstrip}#{semi}" +
-      "#{" !optional" if node.optional?}\n"
+    "#{tab_str}@extend #{selector_to_src(node.selector).lstrip}" +
+      "#{" !optional" if node.optional?}#{semi}\n"
   end
 
   def visit_for(node)
@@ -274,7 +274,7 @@
       "#{tab_str}@at-root #{query_interp_to_src(node.query)}#{yield}"
     elsif node.children.length == 1 && 
node.children.first.is_a?(Sass::Tree::RuleNode)
       rule = node.children.first
-      "#{tab_str}@at-root #{selector_to_src(rule.rule)}#{visit_children(rule)}"
+      "#{tab_str}@at-root 
#{selector_to_src(rule.rule).lstrip}#{visit_children(rule)}"
     else
       "#{tab_str}@at-root#{yield}"
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/sass/tree/visitors/perform.rb 
new/lib/sass/tree/visitors/perform.rb
--- old/lib/sass/tree/visitors/perform.rb       2014-10-17 03:32:48.000000000 
+0200
+++ new/lib/sass/tree/visitors/perform.rb       2015-02-14 02:18:20.000000000 
+0100
@@ -275,6 +275,16 @@
   # Loads the function into the environment.
   def visit_function(node)
     env = Sass::Environment.new(@environment, node.options)
+
+    if node.normalized_name == 'calc' || node.normalized_name == 'element' ||
+        node.name == 'expression' || node.name == 'url'
+      Sass::Util.sass_warn <<WARNING
+DEPRECATION WARNING on line #{node.line}#{" of #{node.filename}" if 
node.filename}:
+Naming a function "#{node.name}" is disallowed and will be an error in future 
versions of Sass.
+This name conflicts with an existing CSS function with special parse rules.
+WARNING
+    end
+
     @environment.set_local_function(node.name,
       Sass::Callable.new(node.name, node.args, node.splat, env,
                          node.children, !:has_content, "function"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2014-10-17 03:32:48.000000000 +0200
+++ new/metadata        2015-02-14 02:18:19.000000000 +0100
@@ -1,7 +1,7 @@
 --- !ruby/object:Gem::Specification
 name: sass
 version: !ruby/object:Gem::Version
-  version: 3.4.6
+  version: 3.4.12
 platform: ruby
 authors:
 - Natalie Weizenbaum
@@ -10,7 +10,7 @@
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2014-10-17 00:00:00.000000000 Z
+date: 2015-02-14 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: yard
@@ -68,7 +68,7 @@
 extra_rdoc_files: []
 files:
 - .yardopts
-- CONTRIBUTING
+- CONTRIBUTING.md
 - MIT-LICENSE
 - README.md
 - REVISION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/compiler_test.rb 
new/test/sass/compiler_test.rb
--- old/test/sass/compiler_test.rb      2014-10-17 03:32:48.000000000 +0200
+++ new/test/sass/compiler_test.rb      2015-02-14 02:18:20.000000000 +0100
@@ -47,7 +47,11 @@
 
     # used for Listen >= 2.0
     def start
-      @thread = Thread.new {@run_during_start.call(self) if @run_during_start}
+      parent = Thread.current
+      @thread = Thread.new do
+        @run_during_start.call(self) if @run_during_start
+        parent.raise Interrupt
+      end
     end
 
     def stop
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/conversion_test.rb 
new/test/sass/conversion_test.rb
--- old/test/sass/conversion_test.rb    2014-10-17 03:32:48.000000000 +0200
+++ new/test/sass/conversion_test.rb    2015-02-14 02:18:20.000000000 +0100
@@ -30,8 +30,7 @@
   end
 
   def test_empty_directive
-    assert_scss_to_sass "@media screen", "@media screen {}"
-    assert_scss_to_scss "@media screen {}"
+    assert_renders "@media screen", "@media screen {}"
   end
 
   def test_empty_control_directive
@@ -287,24 +286,24 @@
 }
 SCSS
 
-    assert_sass_to_scss <<SCSS, <<SASS
+    assert_renders <<SASS, <<SCSS
 // foo
 // bar
 //   baz
 // bang
 
-foo bar {
-  a: b;
-}
-SCSS
+foo bar
+  a: b
+SASS
 // foo
 // bar
 //   baz
 // bang
 
-foo bar
-  a: b
-SASS
+foo bar {
+  a: b;
+}
+SCSS
   end
 
   def test_nested_silent_comments
@@ -1275,26 +1274,7 @@
   end
 
   def test_media_with_expressions
-    assert_sass_to_scss <<SCSS, <<SASS
-$media1: screen;
-$media2: print;
-$var: -webkit-min-device-pixel-ratio;
-$val: 20;
-
-@media \#{$media1} and ($var + "-foo": $val + 5), only \#{$media2} {
-  a: b;
-}
-SCSS
-$media1: screen
-$media2: print
-$var: -webkit-min-device-pixel-ratio
-$val: 20
-
-@media \#{$media1} and ($var + "-foo": $val + 5), only \#{$media2}
-  a: b
-SASS
-
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 $media1: screen
 $media2: print
 $var: -webkit-min-device-pixel-ratio
@@ -1315,14 +1295,14 @@
   end
 
   def test_media_with_feature
-    assert_sass_to_scss <<SCSS, <<SASS
+    assert_renders <<SASS, <<SCSS
+@media screen and (-webkit-transform-3d)
+  a: b
+SASS
 @media screen and (-webkit-transform-3d) {
   a: b;
 }
 SCSS
-@media screen and (-webkit-transform-3d)
-  a: b
-SASS
   end
 
   def test_supports_with_expressions
@@ -1678,7 +1658,7 @@
   end
 
   def test_extend_with_optional
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 foo
   @extend .bar !optional
 SASS
@@ -1689,7 +1669,7 @@
   end
 
   def test_mixin_var_args
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 =foo($args...)
   a: b
 
@@ -1716,7 +1696,7 @@
   end
 
   def test_mixin_var_kwargs
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 =foo($a: b, $c: d)
   a: $a
   c: $c
@@ -1738,7 +1718,7 @@
   end
 
   def test_function_var_args
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 @function foo($args...)
   @return foo
 
@@ -1765,7 +1745,7 @@
   end
 
   def test_function_var_kwargs
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 @function foo($a: b, $c: d)
   @return foo
 
@@ -1785,7 +1765,7 @@
   end
 
   def test_at_root
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 .foo
   @at-root
     .bar
@@ -1807,7 +1787,7 @@
   end
 
   def test_at_root_with_selector
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 .foo
   @at-root .bar
     a: b
@@ -1821,7 +1801,7 @@
   end
 
   def test_at_root_without
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 .foo
   @at-root (without: media rule)
     a: b
@@ -1835,7 +1815,7 @@
   end
 
   def test_at_root_with
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 .foo
   @at-root (with: media rule)
     a: b
@@ -1849,7 +1829,7 @@
   end
 
   def test_function_var_kwargs_with_list
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 @function foo($a: b, $c: d)
   @return $a, $c
 
@@ -1918,12 +1898,13 @@
   end
 
   def test_media_query_with_expr
-    assert_scss_to_sass <<SASS, <<SCSS
+    assert_renders <<SASS, <<SCSS
 @media foo and (bar: baz)
   a: b
 SASS
 @media foo and (bar: baz) {
-  a: b; }
+  a: b;
+}
 SCSS
   end
 
@@ -2009,13 +1990,11 @@
     ok: -$foo
     comma: 10px, -$foo
     needs-parens: 10px (-$foo)
-    no-parens: a 50px + 60px b
 SASS
 foo {
     ok: -$foo;
     comma: 10px, -$foo;
     needs-parens: 10px (-$foo);
-    no-parens: a 50px + 60px b;
 }
 SCSS
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/engine_test.rb new/test/sass/engine_test.rb
--- old/test/sass/engine_test.rb        2014-10-17 03:32:49.000000000 +0200
+++ new/test/sass/engine_test.rb        2015-02-14 02:18:20.000000000 +0100
@@ -2059,20 +2059,21 @@
   end
 
   def test_warn_with_imports
+    prefix = Sass::Util.cleanpath(File.dirname(__FILE__)).to_s
     expected_warning = <<WARN
 WARNING: In the main file
-         on line 1 of #{File.dirname(__FILE__)}/templates/warn.sass
+         on line 1 of #{prefix}/templates/warn.sass
 
 WARNING: Imported
-         on line 1 of #{File.dirname(__FILE__)}/templates/warn_imported.sass
-         from line 2 of #{File.dirname(__FILE__)}/templates/warn.sass
+         on line 1 of #{prefix}/templates/warn_imported.sass
+         from line 2 of #{prefix}/templates/warn.sass
 
 WARNING: In an imported mixin
-         on line 4 of #{File.dirname(__FILE__)}/templates/warn_imported.sass, 
in `emits-a-warning'
-         from line 3 of #{File.dirname(__FILE__)}/templates/warn.sass
+         on line 4 of #{prefix}/templates/warn_imported.sass, in 
`emits-a-warning'
+         from line 3 of #{prefix}/templates/warn.sass
 WARN
     assert_warning expected_warning do
-      renders_correctly "warn", :style => :compact, :load_paths => 
[File.dirname(__FILE__) + "/templates"]
+      renders_correctly "warn", :style => :compact, :load_paths => 
["#{prefix}/templates"]
     end
   end
 
@@ -2457,6 +2458,18 @@
 
   # Regression tests
 
+  def test_interpolation_in_multiline_selector
+    assert_equal(<<CSS, render(<<SASS))
+.foo,
+.bar {
+  a: b; }
+CSS
+.foo,
+\#{".bar"}
+  a: b
+SASS
+  end
+
   def test_list_separator_with_arg_list
     assert_equal(<<CSS, render(<<SASS))
 .test {
@@ -3287,7 +3300,8 @@
   end
 
   def filename(name, type)
-    File.dirname(__FILE__) + "/#{type == 'sass' ? 'templates' : 
'results'}/#{name}.#{type}"
+    path = File.dirname(__FILE__) + "/#{type == 'sass' ? 'templates' : 
'results'}/#{name}.#{type}"
+    Sass::Util.cleanpath(path).to_s
   end
 
   def sassc_path(template)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/extend_test.rb new/test/sass/extend_test.rb
--- old/test/sass/extend_test.rb        2014-10-17 03:32:49.000000000 +0200
+++ new/test/sass/extend_test.rb        2015-02-14 02:18:20.000000000 +0100
@@ -362,7 +362,21 @@
   end
 
   def test_complex_extend_into_pseudoclass
-    assert_extends(':not(.bar)', '.x .y {@extend .bar}', ':not(.bar):not(.x 
.y)')
+    # Unlike other selectors, we don't allow complex selectors to be
+    # added to `:not` if they weren't there before. At time of
+    # writing, most browsers don't support that and will throw away
+    # the entire selector if it exists.
+    #assert_extends(':not(.bar)', '.x .y {@extend .bar}', ':not(.bar)')
+
+    # If the `:not()` already has a complex selector, we won't break
+    # anything by adding a new one.
+    assert_extends(':not(.baz .bar)', '.x .y {@extend .bar}',
+      ':not(.baz .bar):not(.baz .x .y):not(.x .baz .y)')
+
+    # If the `:not()` would only contain complex selectors, there's no
+    # harm in letting it continue to exist.
+    assert_extends(':not(%bar)', '.x .y {@extend %bar}', ':not(.x .y)')
+
     assert_extends(':matches(.bar)', '.x .y {@extend .bar}', ':matches(.bar, 
.x .y)')
     assert_extends(':current(.bar)', '.x .y {@extend .bar}', ':current(.bar, 
.x .y)')
     assert_extends(':has(.bar)', '.x .y {@extend .bar}', ':has(.bar, .x .y)')
@@ -514,6 +528,18 @@
 SCSS
   end
 
+  def test_nested_pseudo_selectors
+    assert_equal <<CSS, render(<<SCSS)
+.foo .bar:not(.baz), .bang .bar:not(.baz) {
+  a: b; }
+CSS
+.foo {
+  .bar:not(.baz) {a: b}
+}
+.bang {@extend .foo}
+SCSS
+  end
+
   ## Long Extendees
 
   def test_long_extendee
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/functions_test.rb 
new/test/sass/functions_test.rb
--- old/test/sass/functions_test.rb     2014-10-17 03:32:49.000000000 +0200
+++ new/test/sass/functions_test.rb     2015-02-14 02:18:20.000000000 +0100
@@ -122,6 +122,20 @@
     assert_error_message("$alpha: \"foo\" is not a number for `hsla'", 
"hsla(10, 10, 10, \"foo\")");
   end
 
+  def test_hsla_percent_warning
+    assert_warning(<<WARNING) {evaluate("hsla(180, 60%, 50%, 40%)")}
+DEPRECATION WARNING: Passing a percentage as the alpha value to hsla() will be
+interpreted differently in future versions of Sass. For now, use 40 instead.
+WARNING
+  end
+
+  def test_hsla_unit_warning
+    assert_warning(<<WARNING) {evaluate("hsla(180, 60%, 50%, 40em)")}
+DEPRECATION WARNING: Passing a number with units as the alpha value to hsla() 
is
+deprecated and will be an error in future versions of Sass. Use 40 instead.
+WARNING
+  end
+
   def test_percentage
     assert_equal("50%",  evaluate("percentage(.5)"))
     assert_equal("100%", evaluate("percentage(1)"))
@@ -274,6 +288,20 @@
     assert_error_message("wrong number of arguments (5 for 4) for `rgba'", 
"rgba(1, 2, 3, 0.4, 5)");
   end
 
+  def test_rgba_percent_warning
+    assert_warning(<<WARNING) {evaluate("rgba(1, 2, 3, 40%)")}
+DEPRECATION WARNING: Passing a percentage as the alpha value to rgba() will be
+interpreted differently in future versions of Sass. For now, use 40 instead.
+WARNING
+  end
+
+  def test_rgba_unit_warning
+    assert_warning(<<WARNING) {evaluate("rgba(1, 2, 3, 40em)")}
+DEPRECATION WARNING: Passing a number with units as the alpha value to rgba() 
is
+deprecated and will be an error in future versions of Sass. Use 40 instead.
+WARNING
+  end
+
   def test_red
     assert_equal("18", evaluate("red(#123456)"))
     assert_equal("18", evaluate("red($color: #123456)"))
@@ -857,6 +885,12 @@
     assert_equal('foo', evaluate('unquote("foo")'))
     assert_equal('foo', evaluate('unquote(foo)'))
     assert_equal('foo', evaluate('unquote($string: foo)'))
+    assert_warning <<MESSAGE do
+DEPRECATION WARNING: Passing blue, a non-string value, to unquote()
+will be an error in future versions of Sass.
+MESSAGE
+      assert_equal('blue', evaluate('unquote(blue)'))
+    end
   end
 
   def test_quote
@@ -1593,6 +1627,9 @@
     assert_equal "null", evaluate("inspect(null)")
     assert_equal "1px null 3px", evaluate("inspect(1px null 3px)")
     assert_equal "(a: 1, b: 2)", evaluate("inspect((a: 1, b: 2))")
+    assert_equal "(a: 1, b: (c: 2))", evaluate("inspect((a: 1, b: (c: 2)))")
+    assert_equal "(a: 1, b: (2, 3))", evaluate("inspect((a: 1, b: (2, 3)))")
+    assert_equal "(a: 1, b: 2 3)", evaluate("inspect((a: 1, b: 2 3))")
   end
 
   def test_random
@@ -1627,6 +1664,14 @@
     assert_error_message("Expected $limit to be an integer but got 1.5 for 
`random'", "random(1.5)")
   end
 
+  # Regression test for #1638.
+  def test_random_with_float_integer_limit
+    result = perform("random(1.0)")
+    assert_kind_of Sass::Script::Number, result
+    assert result.value >= 0, "Random number was below 0"
+    assert result.value <= 1, "Random number was above 1"
+  end
+
   # This could *possibly* fail, but exceedingly unlikely
   def test_random_is_semi_unique
     if 
Sass::Script::Functions.instance_variable_defined?("@random_number_generator")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/script_conversion_test.rb 
new/test/sass/script_conversion_test.rb
--- old/test/sass/script_conversion_test.rb     2014-10-17 03:32:49.000000000 
+0200
+++ new/test/sass/script_conversion_test.rb     2015-02-14 02:18:20.000000000 
+0100
@@ -76,6 +76,26 @@
     assert_renders "null"
   end
 
+  def test_space_list
+    assert_renders "foo bar baz"
+    assert_renders "foo (bar baz) bip"
+    assert_renders "foo (bar, baz) bip"
+  end
+
+  def test_comma_list
+    assert_renders "foo, bar, baz"
+    assert_renders "foo, (bar, baz), bip"
+    assert_renders "foo, bar baz, bip"
+  end
+
+  def test_space_list_adds_parens_for_clarity
+    assert_renders "(1 + 1) (2 / 4) (3 * 5)"
+  end
+
+  def test_comma_list_doesnt_add_parens
+    assert_renders "1 + 1, 2 / 4, 3 * 5"
+  end
+
   def test_empty_list
     assert_renders "()"
   end
@@ -221,8 +241,8 @@
     assert_renders "$foo or ($bar $baz)"
     assert_renders "($foo $bar) or $baz"
 
-    assert_equal "$foo $bar or $baz", render("$foo ($bar or $baz)")
-    assert_equal "$foo or $bar $baz", render("($foo or $bar) $baz")
+    assert_renders "$foo ($bar or $baz)"
+    assert_renders "($foo or $bar) $baz"
 
     assert_equal "$foo ($bar $baz)", render("$foo ($bar $baz)")
     assert_equal "($foo $bar) $baz", render("($foo $bar) $baz")
@@ -261,6 +281,11 @@
     assert_renders 'flabnabbit($foo #{1 + "foo"}#{2 + "bar"} $baz)'
   end
 
+  def test_interpolation_in_string_function
+    assert_renders 'calc(#{1 + "foo"})'
+    assert_renders 'calc(foo#{1 + "foo"}baz)'
+  end
+
   def test_interpolation_near_operators
     assert_renders '#{1 + 2} , #{3 + 4}'
     assert_renders '#{1 + 2}, #{3 + 4}'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/script_test.rb new/test/sass/script_test.rb
--- old/test/sass/script_test.rb        2014-10-17 03:32:49.000000000 +0200
+++ new/test/sass/script_test.rb        2015-02-14 02:18:20.000000000 +0100
@@ -206,6 +206,13 @@
     assert_equal "foo1bar5baz4bang", resolve('\'foo#{1 + "bar#{2 + 3}baz" + 
4}bang\'')
   end
 
+  def test_interpolation_in_interpolation
+    assert_equal 'foo', resolve('#{#{foo}}')
+    assert_equal 'foo', resolve('"#{#{foo}}"')
+    assert_equal 'foo', resolve('#{"#{foo}"}')
+    assert_equal 'foo', resolve('"#{"#{foo}"}"')
+  end
+
   def test_interpolation_with_newline
     assert_equal "\nbang", resolve('"#{"\a "}bang"')
     assert_equal "\n\nbang", resolve('"#{"\a "}\a bang"')
@@ -458,8 +465,13 @@
     assert_equal "2in", resolve("1in + 96px")
     assert_equal "true", resolve("2mm < 1cm")
     assert_equal "true", resolve("10mm == 1cm")
-    assert_equal "true", resolve("1 == 1cm")
     assert_equal "true", resolve("1.1cm == 11mm")
+
+    assert_warning(<<WARNING) {assert_equal "true", resolve("1 == 1cm")}
+DEPRECATION WARNING on line 1 of test_operator_unit_conversion_inline.sass:
+The result of `1 == 1cm` will be `false` in future releases of Sass.
+Unitless numbers will no longer be equal to the same numbers with units.
+WARNING
   end
 
   def test_length_units
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/scss/css_test.rb 
new/test/sass/scss/css_test.rb
--- old/test/sass/scss/css_test.rb      2014-10-17 03:32:49.000000000 +0200
+++ new/test/sass/scss/css_test.rb      2015-02-14 02:18:20.000000000 +0100
@@ -1013,6 +1013,12 @@
     assert_equal "E + F {\n  a: b; }\n", render("E+F { a: b;} ")
   end
 
+  def test_escapes_in_selectors
+    assert_selector_parses('.\!foo')
+    assert_selector_parses('.\66 foo')
+    assert_selector_parses('.\21 foo')
+  end
+
   def test_subject_selector_deprecation
     assert_warning(<<WARNING) {render(".foo .bar! .baz {a: b}")}
 DEPRECATION WARNING on line 1, column 1:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/scss/scss_test.rb 
new/test/sass/scss/scss_test.rb
--- old/test/sass/scss/scss_test.rb     2014-10-17 03:32:49.000000000 +0200
+++ new/test/sass/scss/scss_test.rb     2015-02-14 02:18:20.000000000 +0100
@@ -1005,6 +1005,76 @@
 SASS
   end
 
+  def test_disallowed_function_names
+    assert_warning(<<WARNING) {render(<<SCSS)}
+DEPRECATION WARNING on line 1 of test_disallowed_function_names_inline.scss:
+Naming a function "calc" is disallowed and will be an error in future versions 
of Sass.
+This name conflicts with an existing CSS function with special parse rules.
+WARNING
+@function calc() {}
+SCSS
+
+    assert_warning(<<WARNING) {render(<<SCSS)}
+DEPRECATION WARNING on line 1 of test_disallowed_function_names_inline.scss:
+Naming a function "-my-calc" is disallowed and will be an error in future 
versions of Sass.
+This name conflicts with an existing CSS function with special parse rules.
+WARNING
+@function -my-calc() {}
+SCSS
+
+    assert_warning(<<WARNING) {render(<<SCSS)}
+DEPRECATION WARNING on line 1 of test_disallowed_function_names_inline.scss:
+Naming a function "element" is disallowed and will be an error in future 
versions of Sass.
+This name conflicts with an existing CSS function with special parse rules.
+WARNING
+@function element() {}
+SCSS
+
+    assert_warning(<<WARNING) {render(<<SCSS)}
+DEPRECATION WARNING on line 1 of test_disallowed_function_names_inline.scss:
+Naming a function "-my-element" is disallowed and will be an error in future 
versions of Sass.
+This name conflicts with an existing CSS function with special parse rules.
+WARNING
+@function -my-element() {}
+SCSS
+
+    assert_warning(<<WARNING) {render(<<SCSS)}
+DEPRECATION WARNING on line 1 of test_disallowed_function_names_inline.scss:
+Naming a function "expression" is disallowed and will be an error in future 
versions of Sass.
+This name conflicts with an existing CSS function with special parse rules.
+WARNING
+@function expression() {}
+SCSS
+
+    assert_warning(<<WARNING) {render(<<SCSS)}
+DEPRECATION WARNING on line 1 of test_disallowed_function_names_inline.scss:
+Naming a function "url" is disallowed and will be an error in future versions 
of Sass.
+This name conflicts with an existing CSS function with special parse rules.
+WARNING
+@function url() {}
+SCSS
+  end
+
+  def test_allowed_function_names
+    assert_no_warning {assert_equal(<<CSS, render(<<SCSS))}
+.a {
+  b: c; }
+CSS
+@function -my-expression() {@return c}
+
+.a {b: -my-expression()}
+SCSS
+
+    assert_no_warning {assert_equal(<<CSS, render(<<SCSS))}
+.a {
+  b: c; }
+CSS
+@function -my-url() {@return c}
+
+.a {b: -my-url()}
+SCSS
+  end
+
   ## Var Args
 
   def test_mixin_var_args
@@ -3570,6 +3640,13 @@
 
   # Regression
 
+  def test_escape_in_selector
+    assert_equal(<<CSS, render(".\\!foo {a: b}"))
+.\\!foo {
+  a: b; }
+CSS
+  end
+
   def test_for_directive_with_float_bounds
     assert_equal(<<CSS, render(<<SCSS))
 .a {
@@ -3615,6 +3692,31 @@
 }
 SCSS
   end
+
+  def test_parent_selector_in_and_out_of_function_pseudo_selector
+    # Regression test for 
https://github.com/sass/sass/issues/1464#issuecomment-70352288
+    assert_equal(<<CSS, render(<<SCSS))
+.a:not(.a-b) {
+  x: y; }
+CSS
+.a {
+  &:not(&-b) {
+    x: y;
+  }
+}
+SCSS
+
+    assert_equal(<<CSS, render(<<SCSS))
+.a:nth-child(2n of .a-b) {
+  x: y; }
+CSS
+.a {
+  &:nth-child(2n of &-b) {
+    x: y;
+  }
+}
+SCSS
+  end
 
   def test_attribute_selector_in_selector_pseudoclass
     # Even though this is plain CSS, it only failed when given to the SCSS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/source_map_test.rb 
new/test/sass/source_map_test.rb
--- old/test/sass/source_map_test.rb    2014-10-17 03:32:49.000000000 +0200
+++ new/test/sass/source_map_test.rb    2015-02-14 02:18:20.000000000 +0100
@@ -801,12 +801,12 @@
     interpolated = engine.to_tree.children.
       first.children.
       first.value.children[1]
-    assert_equal interpolated.to_sass, "\#{123}"
+    assert_equal "123", interpolated.to_sass
     range = interpolated.source_range
     assert_equal 3, range.start_pos.line
-    assert_equal 12, range.start_pos.offset
+    assert_equal 14, range.start_pos.offset
     assert_equal 3, range.end_pos.line
-    assert_equal 18, range.end_pos.offset
+    assert_equal 17, range.end_pos.offset
   end
 
   def test_sources_array_is_uri_escaped
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/test/sass/superselector_test.rb 
new/test/sass/superselector_test.rb
--- old/test/sass/superselector_test.rb 2014-10-17 03:32:49.000000000 +0200
+++ new/test/sass/superselector_test.rb 2015-02-14 02:18:20.000000000 +0100
@@ -55,6 +55,25 @@
   def test_descendant_is_superselector_of_child
     assert_strict_superselector '.foo .bar', '.foo > .bar.baz'
     assert_strict_superselector '.foo .bar', '.foo.baz > .bar'
+    assert_strict_superselector '.foo .baz', '.foo > .bar > .baz'
+  end
+
+  def test_child_isnt_superselector_of_longer_child
+    refute_superselector '.foo > .baz', '.foo > .bar > .baz'
+    refute_superselector '.foo > .baz', '.foo > .bar .baz'
+  end
+
+  def test_following_sibling_isnt_superselector_of_longer_following_sibling
+    refute_superselector '.foo + .baz', '.foo + .bar + .baz'
+    refute_superselector '.foo + .baz', '.foo + .bar .baz'
+  end
+
+  def test_sibling_isnt_superselector_of_longer_sibling
+    # This actually is a superselector, but it's a very narrow edge case and
+    # detecting it is very difficult and may be exponential in the worst case.
+    refute_superselector '.foo ~ .baz', '.foo ~ .bar ~ .baz'
+
+    refute_superselector '.foo ~ .baz', '.foo ~ .bar .baz'
   end
 
   def test_matches_is_superselector_of_constituent_selectors

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to