sass 3.3.0.alpha.149 → 3.3.0.alpha.162
Sign up to get free protection for your applications and to get access to all the features.
- data/REVISION +1 -1
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/lib/sass/css.rb +1 -1
- data/lib/sass/engine.rb +4 -4
- data/lib/sass/environment.rb +1 -1
- data/lib/sass/exec.rb +1 -1
- data/lib/sass/media.rb +15 -15
- data/lib/sass/script.rb +32 -7
- data/lib/sass/script/css_lexer.rb +2 -2
- data/lib/sass/script/css_parser.rb +1 -1
- data/lib/sass/script/functions.rb +246 -232
- data/lib/sass/script/lexer.rb +24 -32
- data/lib/sass/script/parser.rb +84 -65
- data/lib/sass/script/tree.rb +14 -0
- data/lib/sass/script/tree/funcall.rb +242 -0
- data/lib/sass/script/{interpolation.rb → tree/interpolation.rb} +30 -13
- data/lib/sass/script/tree/list_literal.rb +65 -0
- data/lib/sass/script/tree/literal.rb +46 -0
- data/lib/sass/script/{node.rb → tree/node.rb} +10 -10
- data/lib/sass/script/{operation.rb → tree/operation.rb} +16 -27
- data/lib/sass/script/{string_interpolation.rb → tree/string_interpolation.rb} +4 -4
- data/lib/sass/script/{unary_operation.rb → tree/unary_operation.rb} +7 -8
- data/lib/sass/script/tree/variable.rb +56 -0
- data/lib/sass/script/value.rb +10 -0
- data/lib/sass/script/{arg_list.rb → value/arg_list.rb} +5 -20
- data/lib/sass/script/value/base.rb +222 -0
- data/lib/sass/script/{bool.rb → value/bool.rb} +2 -2
- data/lib/sass/script/{color.rb → value/color.rb} +22 -20
- data/lib/sass/script/{list.rb → value/list.rb} +15 -28
- data/lib/sass/script/{null.rb → value/null.rb} +3 -3
- data/lib/sass/script/{number.rb → value/number.rb} +19 -19
- data/lib/sass/script/{string.rb → value/string.rb} +7 -7
- data/lib/sass/scss/parser.rb +14 -4
- data/lib/sass/selector.rb +26 -26
- data/lib/sass/selector/abstract_sequence.rb +1 -1
- data/lib/sass/selector/simple.rb +6 -7
- data/lib/sass/source/position.rb +13 -0
- data/lib/sass/supports.rb +4 -4
- data/lib/sass/tree/comment_node.rb +3 -3
- data/lib/sass/tree/css_import_node.rb +7 -7
- data/lib/sass/tree/debug_node.rb +2 -2
- data/lib/sass/tree/directive_node.rb +2 -2
- data/lib/sass/tree/each_node.rb +2 -2
- data/lib/sass/tree/extend_node.rb +4 -4
- data/lib/sass/tree/for_node.rb +4 -4
- data/lib/sass/tree/function_node.rb +4 -4
- data/lib/sass/tree/media_node.rb +3 -3
- data/lib/sass/tree/mixin_def_node.rb +4 -4
- data/lib/sass/tree/mixin_node.rb +6 -6
- data/lib/sass/tree/prop_node.rb +23 -15
- data/lib/sass/tree/return_node.rb +2 -2
- data/lib/sass/tree/rule_node.rb +3 -3
- data/lib/sass/tree/variable_node.rb +2 -2
- data/lib/sass/tree/visitors/convert.rb +2 -2
- data/lib/sass/tree/visitors/deep_copy.rb +5 -5
- data/lib/sass/tree/visitors/perform.rb +7 -7
- data/lib/sass/tree/visitors/set_options.rb +6 -6
- data/lib/sass/tree/visitors/to_css.rb +1 -1
- data/lib/sass/tree/warn_node.rb +2 -2
- data/lib/sass/tree/while_node.rb +2 -2
- data/lib/sass/util.rb +2 -2
- data/test/sass/engine_test.rb +6 -6
- data/test/sass/functions_test.rb +20 -20
- data/test/sass/plugin_test.rb +2 -2
- data/test/sass/script_test.rb +38 -29
- data/test/test_helper.rb +1 -1
- metadata +23 -19
- data/lib/sass/script/funcall.rb +0 -238
- data/lib/sass/script/literal.rb +0 -221
- data/lib/sass/script/variable.rb +0 -58
data/lib/sass/tree/rule_node.rb
CHANGED
@@ -9,11 +9,11 @@ module Sass::Tree
|
|
9
9
|
PARENT = '&'
|
10
10
|
|
11
11
|
# The CSS selector for this rule,
|
12
|
-
# interspersed with {Sass::Script::Node}s
|
12
|
+
# interspersed with {Sass::Script::Tree::Node}s
|
13
13
|
# representing `#{}`-interpolation.
|
14
14
|
# Any adjacent strings will be merged together.
|
15
15
|
#
|
16
|
-
# @return [Array<String, Sass::Script::Node>]
|
16
|
+
# @return [Array<String, Sass::Script::Tree::Node>]
|
17
17
|
attr_accessor :rule
|
18
18
|
|
19
19
|
# The CSS selector for this rule,
|
@@ -60,7 +60,7 @@ module Sass::Tree
|
|
60
60
|
# @return [Array<String>]
|
61
61
|
attr_accessor :stack_trace
|
62
62
|
|
63
|
-
# @param rule [Array<String, Sass::Script::Node>]
|
63
|
+
# @param rule [Array<String, Sass::Script::Tree::Node>]
|
64
64
|
# @param selector_source_range [Sass::Source::Range]
|
65
65
|
# The CSS rule. See \{#rule}
|
66
66
|
def initialize(rule, selector_source_range = nil)
|
@@ -9,7 +9,7 @@ module Sass
|
|
9
9
|
attr_reader :name
|
10
10
|
|
11
11
|
# The parse tree for the variable value.
|
12
|
-
# @return [Script::Node]
|
12
|
+
# @return [Script::Tree::Node]
|
13
13
|
attr_accessor :expr
|
14
14
|
|
15
15
|
# Whether this is a guarded variable assignment (`!default`).
|
@@ -17,7 +17,7 @@ module Sass
|
|
17
17
|
attr_reader :guarded
|
18
18
|
|
19
19
|
# @param name [String] The name of the variable
|
20
|
-
# @param expr [Script::Node] See \{#expr}
|
20
|
+
# @param expr [Script::Tree::Node] See \{#expr}
|
21
21
|
# @param guarded [Boolean] See \{#guarded}
|
22
22
|
def initialize(name, expr, guarded)
|
23
23
|
@name = name
|
@@ -160,7 +160,7 @@ class Sass::Tree::Visitors::Convert < Sass::Tree::Visitors::Base
|
|
160
160
|
end
|
161
161
|
|
162
162
|
def visit_cssimport(node)
|
163
|
-
if node.uri.is_a?(Sass::Script::Node)
|
163
|
+
if node.uri.is_a?(Sass::Script::Tree::Node)
|
164
164
|
str = "#{tab_str}@import #{node.uri.to_sass(@options)}"
|
165
165
|
else
|
166
166
|
str = "#{tab_str}@import #{node.uri}"
|
@@ -197,7 +197,7 @@ class Sass::Tree::Visitors::Convert < Sass::Tree::Visitors::Base
|
|
197
197
|
def visit_mixin(node)
|
198
198
|
arg_to_sass = lambda do |arg|
|
199
199
|
sass = arg.to_sass(@options)
|
200
|
-
sass = "(#{sass})" if arg.is_a?(Sass::Script::
|
200
|
+
sass = "(#{sass})" if arg.is_a?(Sass::Script::Tree::ListLiteral) && arg.separator == :comma
|
201
201
|
sass
|
202
202
|
end
|
203
203
|
|
@@ -22,7 +22,7 @@ class Sass::Tree::Visitors::DeepCopy < Sass::Tree::Visitors::Base
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def visit_extend(node)
|
25
|
-
node.selector = node.selector.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
|
25
|
+
node.selector = node.selector.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c}
|
26
26
|
yield
|
27
27
|
end
|
28
28
|
|
@@ -55,7 +55,7 @@ class Sass::Tree::Visitors::DeepCopy < Sass::Tree::Visitors::Base
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def visit_prop(node)
|
58
|
-
node.name = node.name.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
|
58
|
+
node.name = node.name.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c}
|
59
59
|
node.value = node.value.deep_copy
|
60
60
|
yield
|
61
61
|
end
|
@@ -66,7 +66,7 @@ class Sass::Tree::Visitors::DeepCopy < Sass::Tree::Visitors::Base
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def visit_rule(node)
|
69
|
-
node.rule = node.rule.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
|
69
|
+
node.rule = node.rule.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c}
|
70
70
|
yield
|
71
71
|
end
|
72
72
|
|
@@ -86,12 +86,12 @@ class Sass::Tree::Visitors::DeepCopy < Sass::Tree::Visitors::Base
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def visit_directive(node)
|
89
|
-
node.value = node.value.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
|
89
|
+
node.value = node.value.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c}
|
90
90
|
yield
|
91
91
|
end
|
92
92
|
|
93
93
|
def visit_media(node)
|
94
|
-
node.query = node.query.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
|
94
|
+
node.query = node.query.map {|c| c.is_a?(Sass::Script::Tree::Node) ? c.deep_copy : c}
|
95
95
|
yield
|
96
96
|
end
|
97
97
|
|
@@ -41,10 +41,10 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
41
41
|
splat_sep = :comma
|
42
42
|
if splat
|
43
43
|
args += splat.to_a
|
44
|
-
splat_sep = splat.separator if splat.is_a?(Sass::Script::List)
|
44
|
+
splat_sep = splat.separator if splat.is_a?(Sass::Script::Value::List)
|
45
45
|
# If the splat argument exists, there won't be any keywords passed in
|
46
46
|
# manually, so we can safely overwrite rather than merge here.
|
47
|
-
keywords = splat.keywords if splat.is_a?(Sass::Script::ArgList)
|
47
|
+
keywords = splat.keywords if splat.is_a?(Sass::Script::Value::ArgList)
|
48
48
|
end
|
49
49
|
|
50
50
|
keywords = keywords.dup
|
@@ -62,7 +62,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
62
62
|
|
63
63
|
if callable.splat
|
64
64
|
rest = args[callable.args.length..-1]
|
65
|
-
arg_list = Sass::Script::ArgList.new(rest, keywords.dup, splat_sep)
|
65
|
+
arg_list = Sass::Script::Value::ArgList.new(rest, keywords.dup, splat_sep)
|
66
66
|
arg_list.options = env.options
|
67
67
|
env.set_local_var(callable.splat.name, arg_list)
|
68
68
|
end
|
@@ -142,7 +142,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
142
142
|
# Prints the expression to STDERR.
|
143
143
|
def visit_debug(node)
|
144
144
|
res = node.expr.perform(@environment)
|
145
|
-
res = res.value if res.is_a?(Sass::Script::String)
|
145
|
+
res = res.value if res.is_a?(Sass::Script::Value::String)
|
146
146
|
if node.filename
|
147
147
|
$stderr.puts "#{node.filename}:#{node.line} DEBUG: #{res}"
|
148
148
|
else
|
@@ -185,7 +185,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
185
185
|
with_environment Sass::Environment.new(@environment) do
|
186
186
|
range.map do |i|
|
187
187
|
@environment.set_local_var(node.var,
|
188
|
-
Sass::Script::Number.new(i, from.numerator_units, from.denominator_units))
|
188
|
+
Sass::Script::Value::Number.new(i, from.numerator_units, from.denominator_units))
|
189
189
|
node.children.map {|c| visit(c)}
|
190
190
|
end.flatten
|
191
191
|
end
|
@@ -343,7 +343,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
343
343
|
def visit_warn(node)
|
344
344
|
@stack.push(:filename => node.filename, :line => node.line)
|
345
345
|
res = node.expr.perform(@environment)
|
346
|
-
res = res.value if res.is_a?(Sass::Script::String)
|
346
|
+
res = res.value if res.is_a?(Sass::Script::Value::String)
|
347
347
|
msg = "WARNING: #{res}\n "
|
348
348
|
msg << stack_trace.join("\n ") << "\n"
|
349
349
|
Sass::Util.sass_warn msg
|
@@ -409,7 +409,7 @@ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
|
|
409
409
|
next r if r.is_a?(String)
|
410
410
|
val = r.perform(@environment)
|
411
411
|
# Interpolated strings should never render with quotes
|
412
|
-
next val.value if val.is_a?(Sass::Script::String)
|
412
|
+
next val.value if val.is_a?(Sass::Script::Value::String)
|
413
413
|
val.to_s
|
414
414
|
end.join
|
415
415
|
end
|
@@ -26,7 +26,7 @@ class Sass::Tree::Visitors::SetOptions < Sass::Tree::Visitors::Base
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def visit_extend(node)
|
29
|
-
node.selector.each {|c| c.options = @options if c.is_a?(Sass::Script::Node)}
|
29
|
+
node.selector.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)}
|
30
30
|
yield
|
31
31
|
end
|
32
32
|
|
@@ -73,7 +73,7 @@ class Sass::Tree::Visitors::SetOptions < Sass::Tree::Visitors::Base
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def visit_prop(node)
|
76
|
-
node.name.each {|c| c.options = @options if c.is_a?(Sass::Script::Node)}
|
76
|
+
node.name.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)}
|
77
77
|
node.value.options = @options
|
78
78
|
yield
|
79
79
|
end
|
@@ -84,7 +84,7 @@ class Sass::Tree::Visitors::SetOptions < Sass::Tree::Visitors::Base
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def visit_rule(node)
|
87
|
-
node.rule.each {|c| c.options = @options if c.is_a?(Sass::Script::Node)}
|
87
|
+
node.rule.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)}
|
88
88
|
yield
|
89
89
|
end
|
90
90
|
|
@@ -104,17 +104,17 @@ class Sass::Tree::Visitors::SetOptions < Sass::Tree::Visitors::Base
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def visit_directive(node)
|
107
|
-
node.value.each {|c| c.options = @options if c.is_a?(Sass::Script::Node)}
|
107
|
+
node.value.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)}
|
108
108
|
yield
|
109
109
|
end
|
110
110
|
|
111
111
|
def visit_media(node)
|
112
|
-
node.query.each {|c| c.options = @options if c.is_a?(Sass::Script::Node)}
|
112
|
+
node.query.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)}
|
113
113
|
yield
|
114
114
|
end
|
115
115
|
|
116
116
|
def visit_cssimport(node)
|
117
|
-
node.query.each {|c| c.options = @options if c.is_a?(Sass::Script::Node)} if node.query
|
117
|
+
node.query.each {|c| c.options = @options if c.is_a?(Sass::Script::Tree::Node)} if node.query
|
118
118
|
yield
|
119
119
|
end
|
120
120
|
|
@@ -343,7 +343,7 @@ class Sass::Tree::Visitors::ToCss < Sass::Tree::Visitors::Base
|
|
343
343
|
false)
|
344
344
|
])
|
345
345
|
])
|
346
|
-
prop = Sass::Tree::PropNode.new([""], Sass::Script::String.new(''), :new)
|
346
|
+
prop = Sass::Tree::PropNode.new([""], Sass::Script::Value::String.new(''), :new)
|
347
347
|
prop.resolved_name = "font-family"
|
348
348
|
prop.resolved_value = Sass::SCSS::RX.escape_ident(v.to_s)
|
349
349
|
rule << prop
|
data/lib/sass/tree/warn_node.rb
CHANGED
@@ -5,10 +5,10 @@ module Sass
|
|
5
5
|
# @see Sass::Tree
|
6
6
|
class WarnNode < Node
|
7
7
|
# The expression to print.
|
8
|
-
# @return [Script::Node]
|
8
|
+
# @return [Script::Tree::Node]
|
9
9
|
attr_accessor :expr
|
10
10
|
|
11
|
-
# @param expr [Script::Node] The expression to print
|
11
|
+
# @param expr [Script::Tree::Node] The expression to print
|
12
12
|
def initialize(expr)
|
13
13
|
@expr = expr
|
14
14
|
super()
|
data/lib/sass/tree/while_node.rb
CHANGED
@@ -6,10 +6,10 @@ module Sass::Tree
|
|
6
6
|
# @see Sass::Tree
|
7
7
|
class WhileNode < Node
|
8
8
|
# The parse tree for the continuation expression.
|
9
|
-
# @return [Script::Node]
|
9
|
+
# @return [Script::Tree::Node]
|
10
10
|
attr_accessor :expr
|
11
11
|
|
12
|
-
# @param expr [Script::Node] See \{#expr}
|
12
|
+
# @param expr [Script::Tree::Node] See \{#expr}
|
13
13
|
def initialize(expr)
|
14
14
|
@expr = expr
|
15
15
|
super()
|
data/lib/sass/util.rb
CHANGED
@@ -289,14 +289,14 @@ module Sass
|
|
289
289
|
#
|
290
290
|
# @param name [String] The name of the value. Used in the error message.
|
291
291
|
# @param range [Range] The allowed range of values.
|
292
|
-
# @param value [Numeric, Sass::Script::Number] The value to check.
|
292
|
+
# @param value [Numeric, Sass::Script::Value::Number] The value to check.
|
293
293
|
# @param unit [String] The unit of the value. Used in error reporting.
|
294
294
|
# @return [Numeric] `value` adjusted to fall within range, if it
|
295
295
|
# was outside by a floating-point margin.
|
296
296
|
def check_range(name, range, value, unit='')
|
297
297
|
grace = (-0.00001..0.00001)
|
298
298
|
str = value.to_s
|
299
|
-
value = value.value if value.is_a?(Sass::Script::Number)
|
299
|
+
value = value.value if value.is_a?(Sass::Script::Value::Number)
|
300
300
|
return value if range.include?(value)
|
301
301
|
return range.first if grace.include?(value - range.first)
|
302
302
|
return range.last if grace.include?(value - range.last)
|
data/test/sass/engine_test.rb
CHANGED
@@ -9,16 +9,16 @@ require 'pathname'
|
|
9
9
|
|
10
10
|
module Sass::Script::Functions::UserFunctions
|
11
11
|
def option(name)
|
12
|
-
Sass::Script::String.new(@options[name.value.to_sym].to_s)
|
12
|
+
Sass::Script::Value::String.new(@options[name.value.to_sym].to_s)
|
13
13
|
end
|
14
14
|
|
15
15
|
def set_a_variable(name, value)
|
16
16
|
environment.set_var(name.value, value)
|
17
|
-
return Sass::Script::Null.new
|
17
|
+
return Sass::Script::Value::Null.new
|
18
18
|
end
|
19
19
|
|
20
20
|
def get_a_variable(name)
|
21
|
-
environment.var(name.value) || Sass::Script::String.new("undefined")
|
21
|
+
environment.var(name.value) || Sass::Script::Value::String.new("undefined")
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -3032,9 +3032,9 @@ SCSS
|
|
3032
3032
|
end
|
3033
3033
|
|
3034
3034
|
def test_changing_precision
|
3035
|
-
old_precision = Sass::Script::Number.precision
|
3035
|
+
old_precision = Sass::Script::Value::Number.precision
|
3036
3036
|
begin
|
3037
|
-
Sass::Script::Number.precision = 8
|
3037
|
+
Sass::Script::Value::Number.precision = 8
|
3038
3038
|
assert_equal <<CSS, render(<<SASS)
|
3039
3039
|
div {
|
3040
3040
|
maximum: 1.00000001;
|
@@ -3045,7 +3045,7 @@ div
|
|
3045
3045
|
too-much: 1.000000001
|
3046
3046
|
SASS
|
3047
3047
|
ensure
|
3048
|
-
Sass::Script::Number.precision = old_precision
|
3048
|
+
Sass::Script::Value::Number.precision = old_precision
|
3049
3049
|
end
|
3050
3050
|
end
|
3051
3051
|
|
data/test/sass/functions_test.rb
CHANGED
@@ -5,33 +5,33 @@ require 'sass/script'
|
|
5
5
|
|
6
6
|
module Sass::Script::Functions
|
7
7
|
def no_kw_args
|
8
|
-
Sass::Script::String.new("no-kw-args")
|
8
|
+
Sass::Script::Value::String.new("no-kw-args")
|
9
9
|
end
|
10
10
|
|
11
11
|
def only_var_args(*args)
|
12
|
-
Sass::Script::String.new("only-var-args("+args.map{|a| a.plus(Sass::Script::Number.new(1)).to_s }.join(", ")+")")
|
12
|
+
Sass::Script::Value::String.new("only-var-args("+args.map{|a| a.plus(Sass::Script::Value::Number.new(1)).to_s }.join(", ")+")")
|
13
13
|
end
|
14
14
|
declare :only_var_args, [], :var_args => true
|
15
15
|
|
16
16
|
def only_kw_args(kwargs)
|
17
|
-
Sass::Script::String.new("only-kw-args(" + kwargs.keys.map {|a| a.to_s}.sort.join(", ") + ")")
|
17
|
+
Sass::Script::Value::String.new("only-kw-args(" + kwargs.keys.map {|a| a.to_s}.sort.join(", ") + ")")
|
18
18
|
end
|
19
19
|
declare :only_kw_args, [], :var_kwargs => true
|
20
20
|
end
|
21
21
|
|
22
22
|
module Sass::Script::Functions::UserFunctions
|
23
|
-
def
|
24
|
-
str = Sass::Script::String.new("foo")
|
23
|
+
def call_options_on_new_value
|
24
|
+
str = Sass::Script::Value::String.new("foo")
|
25
25
|
str.options[:foo]
|
26
26
|
str
|
27
27
|
end
|
28
28
|
|
29
29
|
def user_defined
|
30
|
-
Sass::Script::String.new("I'm a user-defined string!")
|
30
|
+
Sass::Script::Value::String.new("I'm a user-defined string!")
|
31
31
|
end
|
32
32
|
|
33
33
|
def _preceding_underscore
|
34
|
-
Sass::Script::String.new("I'm another user-defined string!")
|
34
|
+
Sass::Script::Value::String.new("I'm another user-defined string!")
|
35
35
|
end
|
36
36
|
|
37
37
|
def fetch_the_variable
|
@@ -954,16 +954,16 @@ class SassFunctionTest < Test::Unit::TestCase
|
|
954
954
|
end
|
955
955
|
|
956
956
|
def test_user_defined_function_using_environment
|
957
|
-
environment = env('variable' => Sass::Script::String.new('The variable'))
|
957
|
+
environment = env('variable' => Sass::Script::Value::String.new('The variable'))
|
958
958
|
assert_equal("The variable", evaluate("fetch_the_variable()", environment))
|
959
959
|
end
|
960
960
|
|
961
|
-
def
|
962
|
-
assert_error_message(<<MSG, "call-options-on-new-
|
963
|
-
The #options attribute is not set on this Sass::Script::String.
|
961
|
+
def test_options_on_new_values_fails
|
962
|
+
assert_error_message(<<MSG, "call-options-on-new-value()")
|
963
|
+
The #options attribute is not set on this Sass::Script::Value::String.
|
964
964
|
This error is probably occurring because #to_s was called
|
965
|
-
on this
|
966
|
-
setting the #
|
965
|
+
on this value within a custom Sass function without first
|
966
|
+
setting the #options attribute.
|
967
967
|
MSG
|
968
968
|
end
|
969
969
|
|
@@ -1199,32 +1199,32 @@ MSG
|
|
1199
1199
|
|
1200
1200
|
def test_assert_unit
|
1201
1201
|
ctx = Sass::Script::Functions::EvaluationContext.new(Sass::Environment.new(nil, {}))
|
1202
|
-
ctx.assert_unit Sass::Script::Number.new(10, ["px"], []), "px"
|
1203
|
-
ctx.assert_unit Sass::Script::Number.new(10, [], []), nil
|
1202
|
+
ctx.assert_unit Sass::Script::Value::Number.new(10, ["px"], []), "px"
|
1203
|
+
ctx.assert_unit Sass::Script::Value::Number.new(10, [], []), nil
|
1204
1204
|
|
1205
1205
|
begin
|
1206
|
-
ctx.assert_unit Sass::Script::Number.new(10, [], []), "px"
|
1206
|
+
ctx.assert_unit Sass::Script::Value::Number.new(10, [], []), "px"
|
1207
1207
|
fail
|
1208
1208
|
rescue ArgumentError => e
|
1209
1209
|
assert_equal "Expected 10 to have a unit of px", e.message
|
1210
1210
|
end
|
1211
1211
|
|
1212
1212
|
begin
|
1213
|
-
ctx.assert_unit Sass::Script::Number.new(10, ["px"], []), nil
|
1213
|
+
ctx.assert_unit Sass::Script::Value::Number.new(10, ["px"], []), nil
|
1214
1214
|
fail
|
1215
1215
|
rescue ArgumentError => e
|
1216
1216
|
assert_equal "Expected 10px to be unitless", e.message
|
1217
1217
|
end
|
1218
1218
|
|
1219
1219
|
begin
|
1220
|
-
ctx.assert_unit Sass::Script::Number.new(10, [], []), "px", "arg"
|
1220
|
+
ctx.assert_unit Sass::Script::Value::Number.new(10, [], []), "px", "arg"
|
1221
1221
|
fail
|
1222
1222
|
rescue ArgumentError => e
|
1223
1223
|
assert_equal "Expected $arg to have a unit of px but got 10", e.message
|
1224
1224
|
end
|
1225
1225
|
|
1226
1226
|
begin
|
1227
|
-
ctx.assert_unit Sass::Script::Number.new(10, ["px"], []), nil, "arg"
|
1227
|
+
ctx.assert_unit Sass::Script::Value::Number.new(10, ["px"], []), nil, "arg"
|
1228
1228
|
fail
|
1229
1229
|
rescue ArgumentError => e
|
1230
1230
|
assert_equal "Expected $arg to be unitless but got 10px", e.message
|
@@ -1246,7 +1246,7 @@ MSG
|
|
1246
1246
|
|
1247
1247
|
def evaluate(value, environment = env)
|
1248
1248
|
result = perform(value, environment)
|
1249
|
-
assert_kind_of Sass::Script::
|
1249
|
+
assert_kind_of Sass::Script::Value::Base, result
|
1250
1250
|
return result.to_s
|
1251
1251
|
end
|
1252
1252
|
|
data/test/sass/plugin_test.rb
CHANGED
@@ -7,13 +7,13 @@ require 'fileutils'
|
|
7
7
|
module Sass::Script::Functions
|
8
8
|
def filename
|
9
9
|
filename = options[:filename].gsub(%r{.*((/[^/]+){4})}, '\1')
|
10
|
-
Sass::Script::String.new(filename)
|
10
|
+
Sass::Script::Value::String.new(filename)
|
11
11
|
end
|
12
12
|
|
13
13
|
def whatever
|
14
14
|
custom = options[:custom]
|
15
15
|
whatever = custom && custom[:whatever]
|
16
|
-
Sass::Script::String.new(whatever || "incorrect")
|
16
|
+
Sass::Script::Value::String.new(whatever || "incorrect")
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
data/test/sass/script_test.rb
CHANGED
@@ -5,7 +5,7 @@ require 'sass/engine'
|
|
5
5
|
module Sass::Script::Functions::UserFunctions
|
6
6
|
def assert_options(val)
|
7
7
|
val.options[:foo]
|
8
|
-
Sass::Script::String.new("Options defined!")
|
8
|
+
Sass::Script::Value::String.new("Options defined!")
|
9
9
|
end
|
10
10
|
|
11
11
|
def arg_error
|
@@ -21,13 +21,13 @@ class SassScriptTest < Test::Unit::TestCase
|
|
21
21
|
include Sass::Script
|
22
22
|
|
23
23
|
def test_color_checks_input
|
24
|
-
assert_raise_message(ArgumentError, "Blue value -1 must be between 0 and 255") {Color.new([1, 2, -1])}
|
25
|
-
assert_raise_message(ArgumentError, "Red value 256 must be between 0 and 255") {Color.new([256, 2, 3])}
|
24
|
+
assert_raise_message(ArgumentError, "Blue value -1 must be between 0 and 255") {Sass::Script::Value::Color.new([1, 2, -1])}
|
25
|
+
assert_raise_message(ArgumentError, "Red value 256 must be between 0 and 255") {Sass::Script::Value::Color.new([256, 2, 3])}
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_color_checks_rgba_input
|
29
|
-
assert_raise_message(ArgumentError, "Alpha channel 1.1 must be between 0 and 1") {Color.new([1, 2, 3, 1.1])}
|
30
|
-
assert_raise_message(ArgumentError, "Alpha channel -0.1 must be between 0 and 1") {Color.new([1, 2, 3, -0.1])}
|
29
|
+
assert_raise_message(ArgumentError, "Alpha channel 1.1 must be between 0 and 1") {Sass::Script::Value::Color.new([1, 2, 3, 1.1])}
|
30
|
+
assert_raise_message(ArgumentError, "Alpha channel -0.1 must be between 0 and 1") {Sass::Script::Value::Color.new([1, 2, 3, -0.1])}
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_string_escapes
|
@@ -51,14 +51,14 @@ class SassScriptTest < Test::Unit::TestCase
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_rgba_color_literals
|
54
|
-
assert_equal Sass::Script::Color.new([1, 2, 3, 0.75]), eval("rgba(1, 2, 3, 0.75)")
|
54
|
+
assert_equal Sass::Script::Value::Color.new([1, 2, 3, 0.75]), eval("rgba(1, 2, 3, 0.75)")
|
55
55
|
assert_equal "rgba(1, 2, 3, 0.75)", resolve("rgba(1, 2, 3, 0.75)")
|
56
56
|
|
57
|
-
assert_equal Sass::Script::Color.new([1, 2, 3, 0]), eval("rgba(1, 2, 3, 0)")
|
57
|
+
assert_equal Sass::Script::Value::Color.new([1, 2, 3, 0]), eval("rgba(1, 2, 3, 0)")
|
58
58
|
assert_equal "rgba(1, 2, 3, 0)", resolve("rgba(1, 2, 3, 0)")
|
59
59
|
|
60
|
-
assert_equal Sass::Script::Color.new([1, 2, 3]), eval("rgba(1, 2, 3, 1)")
|
61
|
-
assert_equal Sass::Script::Color.new([1, 2, 3, 1]), eval("rgba(1, 2, 3, 1)")
|
60
|
+
assert_equal Sass::Script::Value::Color.new([1, 2, 3]), eval("rgba(1, 2, 3, 1)")
|
61
|
+
assert_equal Sass::Script::Value::Color.new([1, 2, 3, 1]), eval("rgba(1, 2, 3, 1)")
|
62
62
|
assert_equal "#010203", resolve("rgba(1, 2, 3, 1)")
|
63
63
|
assert_equal "white", resolve("rgba(255, 255, 255, 1)")
|
64
64
|
end
|
@@ -107,8 +107,8 @@ class SassScriptTest < Test::Unit::TestCase
|
|
107
107
|
end
|
108
108
|
|
109
109
|
def test_implicit_strings
|
110
|
-
assert_equal Sass::Script::String.new("foo"), eval("foo")
|
111
|
-
assert_equal Sass::Script::String.new("foo/bar"), eval("foo/bar")
|
110
|
+
assert_equal Sass::Script::Value::String.new("foo"), eval("foo")
|
111
|
+
assert_equal Sass::Script::Value::String.new("foo/bar"), eval("foo/bar")
|
112
112
|
end
|
113
113
|
|
114
114
|
def test_basic_interpolation
|
@@ -232,9 +232,9 @@ SASS
|
|
232
232
|
end
|
233
233
|
|
234
234
|
def test_dynamic_url
|
235
|
-
assert_equal "url(foo-bar)", resolve("url($foo)", {}, env('foo' => Sass::Script::String.new("foo-bar")))
|
236
|
-
assert_equal "url(foo-bar baz)", resolve("url($foo $bar)", {}, env('foo' => Sass::Script::String.new("foo-bar"), 'bar' => Sass::Script::String.new("baz")))
|
237
|
-
assert_equal "url(foo baz)", resolve("url(foo $bar)", {}, env('bar' => Sass::Script::String.new("baz")))
|
235
|
+
assert_equal "url(foo-bar)", resolve("url($foo)", {}, env('foo' => Sass::Script::Value::String.new("foo-bar")))
|
236
|
+
assert_equal "url(foo-bar baz)", resolve("url($foo $bar)", {}, env('foo' => Sass::Script::Value::String.new("foo-bar"), 'bar' => Sass::Script::Value::String.new("baz")))
|
237
|
+
assert_equal "url(foo baz)", resolve("url(foo $bar)", {}, env('bar' => Sass::Script::Value::String.new("baz")))
|
238
238
|
assert_equal "url(foo bar)", resolve("url(foo bar)")
|
239
239
|
end
|
240
240
|
|
@@ -246,7 +246,7 @@ SASS
|
|
246
246
|
end
|
247
247
|
|
248
248
|
def test_hyphenated_variables
|
249
|
-
assert_equal("a-b", resolve("$a-b", {}, env("a-b" => Sass::Script::String.new("a-b"))))
|
249
|
+
assert_equal("a-b", resolve("$a-b", {}, env("a-b" => Sass::Script::Value::String.new("a-b"))))
|
250
250
|
end
|
251
251
|
|
252
252
|
def test_ruby_equality
|
@@ -376,7 +376,7 @@ SASS
|
|
376
376
|
|
377
377
|
def test_equals
|
378
378
|
assert_equal("true", resolve('"foo" == $foo', {},
|
379
|
-
env("foo" => Sass::Script::String.new("foo"))))
|
379
|
+
env("foo" => Sass::Script::Value::String.new("foo"))))
|
380
380
|
assert_equal "true", resolve("1 == 1.0")
|
381
381
|
assert_equal "true", resolve("false != true")
|
382
382
|
assert_equal "false", resolve("1em == 1px")
|
@@ -507,8 +507,8 @@ SASS
|
|
507
507
|
end
|
508
508
|
|
509
509
|
def test_boolean_ops_short_circuit
|
510
|
-
assert_equal "false", resolve("$ie and $ie <= 7", {}, env('ie' => Sass::Script::Bool.new(false)))
|
511
|
-
assert_equal "true", resolve("$ie or $undef", {}, env('ie' => Sass::Script::Bool.new(true)))
|
510
|
+
assert_equal "false", resolve("$ie and $ie <= 7", {}, env('ie' => Sass::Script::Value::Bool.new(false)))
|
511
|
+
assert_equal "true", resolve("$ie or $undef", {}, env('ie' => Sass::Script::Value::Bool.new(true)))
|
512
512
|
end
|
513
513
|
|
514
514
|
# Regression Tests
|
@@ -542,16 +542,25 @@ SASS
|
|
542
542
|
end
|
543
543
|
|
544
544
|
def test_number_initialization
|
545
|
-
assert_equal Sass::Script::Number.new(10, ["px"]), Sass::Script::Number.new(10, "px")
|
546
|
-
assert_equal Sass::Script::Number.new(10, ["px"], ["em"]), Sass::Script::Number.new(10, "px", "em")
|
545
|
+
assert_equal Sass::Script::Value::Number.new(10, ["px"]), Sass::Script::Value::Number.new(10, "px")
|
546
|
+
assert_equal Sass::Script::Value::Number.new(10, ["px"], ["em"]), Sass::Script::Value::Number.new(10, "px", "em")
|
547
547
|
end
|
548
548
|
|
549
549
|
def test_is_unit
|
550
|
-
assert Sass::Script::Number.new(10, "px").is_unit?("px")
|
551
|
-
assert Sass::Script::Number.new(10).is_unit?(nil)
|
552
|
-
assert !Sass::Script::Number.new(10, "px", "em").is_unit?("px")
|
553
|
-
assert !Sass::Script::Number.new(10, [], "em").is_unit?("em")
|
554
|
-
assert !Sass::Script::Number.new(10, ["px", "em"]).is_unit?("px")
|
550
|
+
assert Sass::Script::Value::Number.new(10, "px").is_unit?("px")
|
551
|
+
assert Sass::Script::Value::Number.new(10).is_unit?(nil)
|
552
|
+
assert !Sass::Script::Value::Number.new(10, "px", "em").is_unit?("px")
|
553
|
+
assert !Sass::Script::Value::Number.new(10, [], "em").is_unit?("em")
|
554
|
+
assert !Sass::Script::Value::Number.new(10, ["px", "em"]).is_unit?("px")
|
555
|
+
end
|
556
|
+
|
557
|
+
def test_rename_redirect
|
558
|
+
assert_no_warning do
|
559
|
+
assert_equal Sass::Script::Value::Base, Sass::Script::Literal
|
560
|
+
assert_equal Sass::Script::Tree::Node, Sass::Script::Node
|
561
|
+
assert_equal Sass::Script::Tree::Operation, Sass::Script::Operation
|
562
|
+
assert_equal Sass::Script::Value::String, Sass::Script::String
|
563
|
+
end
|
555
564
|
end
|
556
565
|
|
557
566
|
private
|
@@ -559,21 +568,21 @@ SASS
|
|
559
568
|
def resolve(str, opts = {}, environment = env)
|
560
569
|
munge_filename opts
|
561
570
|
val = eval(str, opts, environment)
|
562
|
-
assert_kind_of Sass::Script::
|
563
|
-
val.is_a?(Sass::Script::String) ? val.value : val.to_s
|
571
|
+
assert_kind_of Sass::Script::Value::Base, val
|
572
|
+
val.is_a?(Sass::Script::Value::String) ? val.value : val.to_s
|
564
573
|
end
|
565
574
|
|
566
575
|
def assert_unquoted(str, opts = {}, environment = env)
|
567
576
|
munge_filename opts
|
568
577
|
val = eval(str, opts, environment)
|
569
|
-
assert_kind_of Sass::Script::String, val
|
578
|
+
assert_kind_of Sass::Script::Value::String, val
|
570
579
|
assert_equal :identifier, val.type
|
571
580
|
end
|
572
581
|
|
573
582
|
def assert_quoted(str, opts = {}, environment = env)
|
574
583
|
munge_filename opts
|
575
584
|
val = eval(str, opts, environment)
|
576
|
-
assert_kind_of Sass::Script::String, val
|
585
|
+
assert_kind_of Sass::Script::Value::String, val
|
577
586
|
assert_equal :string, val.type
|
578
587
|
end
|
579
588
|
|