sass 3.4.25 → 3.5.0.pre.rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +1 -1
- data/README.md +1 -1
- data/Rakefile +13 -157
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/VERSION_NAME +1 -1
- data/lib/sass.rb +3 -10
- data/lib/sass/cache_stores/filesystem.rb +1 -1
- data/lib/sass/css.rb +2 -3
- data/lib/sass/engine.rb +46 -32
- data/lib/sass/environment.rb +27 -6
- data/lib/sass/error.rb +5 -5
- data/lib/sass/exec/base.rb +3 -12
- data/lib/sass/features.rb +1 -0
- data/lib/sass/importers/filesystem.rb +2 -2
- data/lib/sass/plugin.rb +1 -1
- data/lib/sass/plugin/compiler.rb +21 -51
- data/lib/sass/plugin/configuration.rb +1 -1
- data/lib/sass/plugin/rack.rb +3 -3
- data/lib/sass/plugin/staleness_checker.rb +3 -3
- data/lib/sass/railtie.rb +1 -1
- data/lib/sass/script.rb +3 -3
- data/lib/sass/script/functions.rb +238 -47
- data/lib/sass/script/lexer.rb +8 -6
- data/lib/sass/script/parser.rb +76 -75
- data/lib/sass/script/tree/funcall.rb +35 -30
- data/lib/sass/script/tree/list_literal.rb +23 -8
- data/lib/sass/script/tree/map_literal.rb +2 -2
- data/lib/sass/script/tree/node.rb +2 -10
- data/lib/sass/script/tree/operation.rb +16 -50
- data/lib/sass/script/value.rb +2 -0
- data/lib/sass/script/value/arg_list.rb +1 -1
- data/lib/sass/script/value/base.rb +20 -3
- data/lib/sass/script/value/callable.rb +25 -0
- data/lib/sass/script/value/color.rb +10 -10
- data/lib/sass/script/value/function.rb +19 -0
- data/lib/sass/script/value/helpers.rb +16 -7
- data/lib/sass/script/value/list.rb +33 -12
- data/lib/sass/script/value/map.rb +2 -2
- data/lib/sass/script/value/number.rb +3 -3
- data/lib/sass/script/value/string.rb +12 -5
- data/lib/sass/scss/parser.rb +101 -45
- data/lib/sass/scss/rx.rb +5 -11
- data/lib/sass/scss/static_parser.rb +0 -7
- data/lib/sass/selector.rb +4 -0
- data/lib/sass/selector/abstract_sequence.rb +5 -5
- data/lib/sass/selector/comma_sequence.rb +3 -15
- data/lib/sass/selector/pseudo.rb +4 -0
- data/lib/sass/selector/sequence.rb +30 -3
- data/lib/sass/selector/simple.rb +13 -7
- data/lib/sass/selector/simple_sequence.rb +1 -1
- data/lib/sass/shared.rb +3 -5
- data/lib/sass/source/map.rb +4 -4
- data/lib/sass/source/position.rb +4 -4
- data/lib/sass/stack.rb +21 -1
- data/lib/sass/tree/charset_node.rb +1 -1
- data/lib/sass/tree/comment_node.rb +1 -1
- data/lib/sass/tree/node.rb +3 -3
- data/lib/sass/tree/prop_node.rb +46 -54
- data/lib/sass/tree/rule_node.rb +7 -15
- data/lib/sass/tree/visitors/check_nesting.rb +1 -1
- data/lib/sass/tree/visitors/convert.rb +2 -3
- data/lib/sass/tree/visitors/cssize.rb +1 -10
- data/lib/sass/tree/visitors/deep_copy.rb +2 -2
- data/lib/sass/tree/visitors/perform.rb +23 -12
- data/lib/sass/tree/visitors/set_options.rb +1 -1
- data/lib/sass/tree/visitors/to_css.rb +46 -12
- data/lib/sass/util.rb +16 -321
- data/lib/sass/util/multibyte_string_scanner.rb +127 -131
- data/lib/sass/util/normalized_map.rb +1 -8
- data/lib/sass/version.rb +2 -2
- data/test/sass-spec.yml +1 -1
- data/test/sass/compiler_test.rb +4 -14
- data/test/sass/conversion_test.rb +113 -162
- data/test/sass/css2sass_test.rb +17 -19
- data/test/sass/css_variable_test.rb +176 -70
- data/test/sass/encoding_test.rb +2 -32
- data/test/sass/engine_test.rb +114 -65
- data/test/sass/extend_test.rb +37 -51
- data/test/sass/functions_test.rb +57 -15
- data/test/sass/importer_test.rb +2 -2
- data/test/sass/more_templates/more1.sass +10 -10
- data/test/sass/more_templates/more_import.sass +2 -2
- data/test/sass/plugin_test.rb +9 -12
- data/test/sass/script_conversion_test.rb +9 -0
- data/test/sass/script_test.rb +38 -48
- data/test/sass/scss/css_test.rb +5 -19
- data/test/sass/scss/scss_test.rb +58 -39
- data/test/sass/source_map_test.rb +26 -28
- data/test/sass/templates/_partial.sass +1 -1
- data/test/sass/templates/basic.sass +10 -10
- data/test/sass/templates/bork1.sass +1 -1
- data/test/sass/templates/bork5.sass +1 -1
- data/test/sass/templates/compact.sass +10 -10
- data/test/sass/templates/complex.sass +187 -187
- data/test/sass/templates/compressed.sass +10 -10
- data/test/sass/templates/expanded.sass +10 -10
- data/test/sass/templates/import.sass +2 -2
- data/test/sass/templates/importee.sass +3 -3
- data/test/sass/templates/mixins.sass +22 -22
- data/test/sass/templates/multiline.sass +4 -4
- data/test/sass/templates/nested.sass +13 -13
- data/test/sass/templates/parent_ref.sass +12 -12
- data/test/sass/templates/script.sass +70 -70
- data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +1 -1
- data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +2 -2
- data/test/sass/templates/subdir/subdir.sass +3 -3
- data/test/sass/templates/units.sass +10 -10
- data/test/sass/util/multibyte_string_scanner_test.rb +139 -149
- data/test/sass/util_test.rb +0 -36
- data/test/test_helper.rb +39 -0
- metadata +30 -57
- data/extra/sass-spec-ref.sh +0 -32
- data/lib/sass/deprecation.rb +0 -55
- data/lib/sass/script/css_variable_warning.rb +0 -52
- data/lib/sass/util/cross_platform_random.rb +0 -19
- data/lib/sass/util/ordered_hash.rb +0 -192
- data/test/sass/results/import_charset_1_8.css +0 -5
- data/test/sass/templates/import_charset_1_8.sass +0 -6
- data/vendor/listen/CHANGELOG.md +0 -1
- data/vendor/listen/CONTRIBUTING.md +0 -38
- data/vendor/listen/Gemfile +0 -20
- data/vendor/listen/Guardfile +0 -8
- data/vendor/listen/LICENSE +0 -20
- data/vendor/listen/README.md +0 -349
- data/vendor/listen/Rakefile +0 -5
- data/vendor/listen/Vagrantfile +0 -96
- data/vendor/listen/lib/listen.rb +0 -54
- data/vendor/listen/lib/listen/adapter.rb +0 -327
- data/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
- data/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
- data/vendor/listen/lib/listen/adapters/linux.rb +0 -81
- data/vendor/listen/lib/listen/adapters/polling.rb +0 -58
- data/vendor/listen/lib/listen/adapters/windows.rb +0 -91
- data/vendor/listen/lib/listen/directory_record.rb +0 -406
- data/vendor/listen/lib/listen/listener.rb +0 -323
- data/vendor/listen/lib/listen/turnstile.rb +0 -32
- data/vendor/listen/lib/listen/version.rb +0 -3
- data/vendor/listen/listen.gemspec +0 -28
- data/vendor/listen/spec/listen/adapter_spec.rb +0 -149
- data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
- data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
- data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
- data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
- data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
- data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
- data/vendor/listen/spec/listen/listener_spec.rb +0 -258
- data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
- data/vendor/listen/spec/listen_spec.rb +0 -67
- data/vendor/listen/spec/spec_helper.rb +0 -25
- data/vendor/listen/spec/support/adapter_helper.rb +0 -666
- data/vendor/listen/spec/support/directory_record_helper.rb +0 -57
- data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
- data/vendor/listen/spec/support/listeners_helper.rb +0 -179
- data/vendor/listen/spec/support/platform_helper.rb +0 -15
|
@@ -1,155 +1,151 @@
|
|
|
1
1
|
require 'strscan'
|
|
2
2
|
|
|
3
|
-
if Sass::Util.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@mb_pos = 0
|
|
15
|
-
@mb_matched_size = nil
|
|
16
|
-
@mb_last_pos = nil
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def is_a?(klass)
|
|
20
|
-
__getobj__.is_a?(klass) || super
|
|
21
|
-
end
|
|
3
|
+
if Sass::Util.rbx?
|
|
4
|
+
# Rubinius's StringScanner class implements some of its methods in terms of
|
|
5
|
+
# others, which causes us to double-count bytes in some cases if we do
|
|
6
|
+
# straightforward inheritance. To work around this, we use a delegate class.
|
|
7
|
+
require 'delegate'
|
|
8
|
+
class Sass::Util::MultibyteStringScanner < DelegateClass(StringScanner)
|
|
9
|
+
def initialize(str)
|
|
10
|
+
super(StringScanner.new(str))
|
|
11
|
+
@mb_pos = 0
|
|
12
|
+
@mb_matched_size = nil
|
|
13
|
+
@mb_last_pos = nil
|
|
22
14
|
end
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
super
|
|
27
|
-
@mb_pos = 0
|
|
28
|
-
@mb_matched_size = nil
|
|
29
|
-
@mb_last_pos = nil
|
|
30
|
-
end
|
|
15
|
+
|
|
16
|
+
def is_a?(klass)
|
|
17
|
+
__getobj__.is_a?(klass) || super
|
|
31
18
|
end
|
|
32
19
|
end
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
# characters, for methods like [#pos] and [#matched_size]. This class deals
|
|
37
|
-
# only in characters, instead.
|
|
38
|
-
class Sass::Util::MultibyteStringScanner
|
|
39
|
-
def self.new(str)
|
|
40
|
-
return StringScanner.new(str) if str.ascii_only?
|
|
20
|
+
else
|
|
21
|
+
class Sass::Util::MultibyteStringScanner < StringScanner
|
|
22
|
+
def initialize(str)
|
|
41
23
|
super
|
|
24
|
+
@mb_pos = 0
|
|
25
|
+
@mb_matched_size = nil
|
|
26
|
+
@mb_last_pos = nil
|
|
42
27
|
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
43
30
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
alias_method :peep, :peek
|
|
54
|
-
def pos; @mb_pos; end
|
|
55
|
-
alias_method :pointer, :pos
|
|
56
|
-
def rest_size; rest.size; end
|
|
57
|
-
def scan(pattern); _forward _match super; end
|
|
58
|
-
def scan_until(pattern); _forward _matched super; end
|
|
59
|
-
def skip(pattern); _size scan(pattern); end
|
|
60
|
-
def skip_until(pattern); _matched _size scan_until(pattern); end
|
|
61
|
-
|
|
62
|
-
def get_byte
|
|
63
|
-
raise "MultibyteStringScanner doesn't support #get_byte."
|
|
64
|
-
end
|
|
31
|
+
# A wrapper of the native StringScanner class that works correctly with
|
|
32
|
+
# multibyte character encodings. The native class deals only in bytes, not
|
|
33
|
+
# characters, for methods like [#pos] and [#matched_size]. This class deals
|
|
34
|
+
# only in characters, instead.
|
|
35
|
+
class Sass::Util::MultibyteStringScanner
|
|
36
|
+
def self.new(str)
|
|
37
|
+
return StringScanner.new(str) if str.ascii_only?
|
|
38
|
+
super
|
|
39
|
+
end
|
|
65
40
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
41
|
+
alias_method :byte_pos, :pos
|
|
42
|
+
alias_method :byte_matched_size, :matched_size
|
|
43
|
+
|
|
44
|
+
def check(pattern); _match super; end
|
|
45
|
+
def check_until(pattern); _matched super; end
|
|
46
|
+
def getch; _forward _match super; end
|
|
47
|
+
def match?(pattern); _size check(pattern); end
|
|
48
|
+
def matched_size; @mb_matched_size; end
|
|
49
|
+
def peek(len); string[@mb_pos, len]; end
|
|
50
|
+
alias_method :peep, :peek
|
|
51
|
+
def pos; @mb_pos; end
|
|
52
|
+
alias_method :pointer, :pos
|
|
53
|
+
def rest_size; rest.size; end
|
|
54
|
+
def scan(pattern); _forward _match super; end
|
|
55
|
+
def scan_until(pattern); _forward _matched super; end
|
|
56
|
+
def skip(pattern); _size scan(pattern); end
|
|
57
|
+
def skip_until(pattern); _matched _size scan_until(pattern); end
|
|
58
|
+
|
|
59
|
+
def get_byte
|
|
60
|
+
raise "MultibyteStringScanner doesn't support #get_byte."
|
|
61
|
+
end
|
|
69
62
|
|
|
70
|
-
|
|
71
|
-
|
|
63
|
+
def getbyte
|
|
64
|
+
raise "MultibyteStringScanner doesn't support #getbyte."
|
|
65
|
+
end
|
|
72
66
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
67
|
+
def pos=(n)
|
|
68
|
+
@mb_last_pos = nil
|
|
69
|
+
|
|
70
|
+
# We set position kind of a lot during parsing, so we want it to be as
|
|
71
|
+
# efficient as possible. This is complicated by the fact that UTF-8 is a
|
|
72
|
+
# variable-length encoding, so it's difficult to find the byte length that
|
|
73
|
+
# corresponds to a given character length.
|
|
74
|
+
#
|
|
75
|
+
# Our heuristic here is to try to count the fewest possible characters. So
|
|
76
|
+
# if the new position is close to the current one, just count the
|
|
77
|
+
# characters between the two; if the new position is closer to the
|
|
78
|
+
# beginning of the string, just count the characters from there.
|
|
79
|
+
if @mb_pos - n < @mb_pos / 2
|
|
80
|
+
# New position is close to old position
|
|
81
|
+
byte_delta = @mb_pos > n ? -string[n...@mb_pos].bytesize : string[@mb_pos...n].bytesize
|
|
82
|
+
super(byte_pos + byte_delta)
|
|
83
|
+
else
|
|
84
|
+
# New position is close to BOS
|
|
85
|
+
super(string[0...n].bytesize)
|
|
86
|
+
end
|
|
87
|
+
@mb_pos = n
|
|
88
|
+
end
|
|
92
89
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
90
|
+
def reset
|
|
91
|
+
@mb_pos = 0
|
|
92
|
+
@mb_matched_size = nil
|
|
93
|
+
@mb_last_pos = nil
|
|
94
|
+
super
|
|
95
|
+
end
|
|
99
96
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
def scan_full(pattern, advance_pointer_p, return_string_p)
|
|
98
|
+
res = _match super(pattern, advance_pointer_p, true)
|
|
99
|
+
_forward res if advance_pointer_p
|
|
100
|
+
return res if return_string_p
|
|
101
|
+
end
|
|
105
102
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
103
|
+
def search_full(pattern, advance_pointer_p, return_string_p)
|
|
104
|
+
res = super(pattern, advance_pointer_p, true)
|
|
105
|
+
_forward res if advance_pointer_p
|
|
106
|
+
_matched((res if return_string_p))
|
|
107
|
+
end
|
|
111
108
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
109
|
+
def string=(str)
|
|
110
|
+
@mb_pos = 0
|
|
111
|
+
@mb_matched_size = nil
|
|
112
|
+
@mb_last_pos = nil
|
|
113
|
+
super
|
|
114
|
+
end
|
|
118
115
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
116
|
+
def terminate
|
|
117
|
+
@mb_pos = string.size
|
|
118
|
+
@mb_matched_size = nil
|
|
119
|
+
@mb_last_pos = nil
|
|
120
|
+
super
|
|
121
|
+
end
|
|
122
|
+
alias_method :clear, :terminate
|
|
126
123
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
124
|
+
def unscan
|
|
125
|
+
super
|
|
126
|
+
@mb_pos = @mb_last_pos
|
|
127
|
+
@mb_last_pos = @mb_matched_size = nil
|
|
128
|
+
end
|
|
132
129
|
|
|
133
|
-
|
|
130
|
+
private
|
|
134
131
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
def _size(str)
|
|
133
|
+
str && str.size
|
|
134
|
+
end
|
|
138
135
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
136
|
+
def _match(str)
|
|
137
|
+
@mb_matched_size = str && str.size
|
|
138
|
+
str
|
|
139
|
+
end
|
|
143
140
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
141
|
+
def _matched(res)
|
|
142
|
+
_match matched
|
|
143
|
+
res
|
|
144
|
+
end
|
|
148
145
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
end
|
|
146
|
+
def _forward(str)
|
|
147
|
+
@mb_last_pos = @mb_pos
|
|
148
|
+
@mb_pos += str.size if str
|
|
149
|
+
str
|
|
154
150
|
end
|
|
155
151
|
end
|
|
@@ -5,12 +5,11 @@ module Sass
|
|
|
5
5
|
# A hash that normalizes its string keys while still allowing you to get back
|
|
6
6
|
# to the original keys that were stored. If several different values normalize
|
|
7
7
|
# to the same value, whichever is stored last wins.
|
|
8
|
-
require 'sass/util/ordered_hash' if ruby1_8?
|
|
9
8
|
class NormalizedMap
|
|
10
9
|
# Create a normalized map
|
|
11
10
|
def initialize(map = nil)
|
|
12
11
|
@key_strings = {}
|
|
13
|
-
@map =
|
|
12
|
+
@map = {}
|
|
14
13
|
|
|
15
14
|
map.each {|key, value| self[key] = value} if map
|
|
16
15
|
end
|
|
@@ -115,12 +114,6 @@ module Sass
|
|
|
115
114
|
@map.send(method, *args, &block)
|
|
116
115
|
end
|
|
117
116
|
|
|
118
|
-
if Sass::Util.ruby1_8?
|
|
119
|
-
def respond_to?(method, include_private = false)
|
|
120
|
-
super || @map.respond_to?(method, include_private)
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
117
|
def respond_to_missing?(method, include_private = false)
|
|
125
118
|
@map.respond_to?(method, include_private)
|
|
126
119
|
end
|
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
|
|
11
|
+
# The `:major`, `:minor`, and `:teeny` keys have their respective numbers as Fixnums.
|
|
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/
|
|
44
|
+
# @return [{Symbol => String/Fixnum}] The version hash
|
|
45
45
|
# @comment
|
|
46
46
|
# rubocop:disable ClassVars
|
|
47
47
|
def version
|
data/test/sass-spec.yml
CHANGED
data/test/sass/compiler_test.rb
CHANGED
|
@@ -40,12 +40,10 @@ class CompilerTest < MiniTest::Test
|
|
|
40
40
|
@run_during_start = run_during_start
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
# used for Listen < 2.0
|
|
44
43
|
def start!
|
|
45
44
|
@run_during_start.call(self) if @run_during_start
|
|
46
45
|
end
|
|
47
46
|
|
|
48
|
-
# used for Listen >= 2.0
|
|
49
47
|
def start
|
|
50
48
|
parent = Thread.current
|
|
51
49
|
@thread = Thread.new do
|
|
@@ -86,18 +84,10 @@ class CompilerTest < MiniTest::Test
|
|
|
86
84
|
|
|
87
85
|
private
|
|
88
86
|
def create_listener(*args, &on_filesystem_event)
|
|
89
|
-
if
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
@fake_listener.on_start!(&run_during_start)
|
|
94
|
-
@fake_listener
|
|
95
|
-
end
|
|
96
|
-
else
|
|
97
|
-
@fake_listener = FakeListener.new(*args, &on_filesystem_event)
|
|
98
|
-
@fake_listener.on_start!(&run_during_start)
|
|
99
|
-
@fake_listener
|
|
100
|
-
end
|
|
87
|
+
args.pop if args.last.is_a?(Hash)
|
|
88
|
+
@fake_listener = FakeListener.new(*args, &on_filesystem_event)
|
|
89
|
+
@fake_listener.on_start!(&run_during_start)
|
|
90
|
+
@fake_listener
|
|
101
91
|
end
|
|
102
92
|
end
|
|
103
93
|
|
|
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../test_helper'
|
|
|
3
3
|
|
|
4
4
|
class ConversionTest < MiniTest::Test
|
|
5
5
|
def test_basic
|
|
6
|
-
|
|
6
|
+
assert_converts <<SASS, <<SCSS
|
|
7
7
|
foo bar
|
|
8
8
|
baz: bang
|
|
9
9
|
bip: bop
|
|
@@ -13,7 +13,7 @@ foo bar {
|
|
|
13
13
|
bip: bop;
|
|
14
14
|
}
|
|
15
15
|
SCSS
|
|
16
|
-
|
|
16
|
+
assert_converts <<SASS, <<SCSS, options: {old: true}
|
|
17
17
|
foo bar
|
|
18
18
|
:baz bang
|
|
19
19
|
:bip bop
|
|
@@ -26,19 +26,19 @@ SCSS
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def test_empty_selector
|
|
29
|
-
|
|
29
|
+
assert_converts "foo bar", "foo bar {}"
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def test_empty_directive
|
|
33
|
-
|
|
33
|
+
assert_converts "@media screen", "@media screen {}"
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def test_empty_control_directive
|
|
37
|
-
|
|
37
|
+
assert_converts "@if false", "@if false {}"
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def test_nesting
|
|
41
|
-
|
|
41
|
+
assert_converts <<SASS, <<SCSS
|
|
42
42
|
foo bar
|
|
43
43
|
baz bang
|
|
44
44
|
baz: bang
|
|
@@ -58,7 +58,7 @@ SCSS
|
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def test_nesting_with_parent_ref
|
|
61
|
-
|
|
61
|
+
assert_converts <<SASS, <<SCSS
|
|
62
62
|
foo bar
|
|
63
63
|
&:hover
|
|
64
64
|
baz: bang
|
|
@@ -72,7 +72,7 @@ SCSS
|
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
def test_selector_interpolation
|
|
75
|
-
|
|
75
|
+
assert_converts <<SASS, <<SCSS
|
|
76
76
|
foo \#{$bar + "baz"}.bip
|
|
77
77
|
baz: bang
|
|
78
78
|
|
|
@@ -90,7 +90,7 @@ SCSS
|
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
def test_multiline_selector_with_commas
|
|
93
|
-
|
|
93
|
+
assert_converts <<SASS, <<SCSS
|
|
94
94
|
foo bar,
|
|
95
95
|
baz bang
|
|
96
96
|
baz: bang
|
|
@@ -101,7 +101,7 @@ baz bang {
|
|
|
101
101
|
}
|
|
102
102
|
SCSS
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
assert_converts <<SASS, <<SCSS
|
|
105
105
|
blat
|
|
106
106
|
foo bar,
|
|
107
107
|
baz bang
|
|
@@ -136,7 +136,7 @@ SCSS
|
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
def test_escaped_selector
|
|
139
|
-
|
|
139
|
+
assert_converts <<SASS, <<SCSS
|
|
140
140
|
foo bar
|
|
141
141
|
\\:hover
|
|
142
142
|
baz: bang
|
|
@@ -150,7 +150,7 @@ SCSS
|
|
|
150
150
|
end
|
|
151
151
|
|
|
152
152
|
def test_property_name_interpolation
|
|
153
|
-
|
|
153
|
+
assert_converts <<SASS, <<SCSS
|
|
154
154
|
foo bar
|
|
155
155
|
baz\#{$bang}bip\#{$bop}: 12
|
|
156
156
|
SASS
|
|
@@ -161,7 +161,7 @@ SCSS
|
|
|
161
161
|
end
|
|
162
162
|
|
|
163
163
|
def test_property_value_interpolation
|
|
164
|
-
|
|
164
|
+
assert_converts <<SASS, <<SCSS
|
|
165
165
|
foo bar
|
|
166
166
|
baz: 12 \#{$bang} bip \#{"bop"} blat
|
|
167
167
|
SASS
|
|
@@ -172,7 +172,7 @@ SCSS
|
|
|
172
172
|
end
|
|
173
173
|
|
|
174
174
|
def test_dynamic_properties
|
|
175
|
-
|
|
175
|
+
assert_converts <<SASS, <<SCSS
|
|
176
176
|
foo bar
|
|
177
177
|
baz: 12 $bang "bip"
|
|
178
178
|
SASS
|
|
@@ -183,7 +183,7 @@ SCSS
|
|
|
183
183
|
end
|
|
184
184
|
|
|
185
185
|
def test_dynamic_properties_with_old
|
|
186
|
-
|
|
186
|
+
assert_converts <<SASS, <<SCSS, options: {old: true}
|
|
187
187
|
foo bar
|
|
188
188
|
:baz 12 $bang "bip"
|
|
189
189
|
SASS
|
|
@@ -206,7 +206,7 @@ foo bar {
|
|
|
206
206
|
}
|
|
207
207
|
SCSS
|
|
208
208
|
|
|
209
|
-
assert_scss_to_scss <<OUT, <<IN
|
|
209
|
+
assert_scss_to_scss <<OUT, source: <<IN
|
|
210
210
|
foo bar {
|
|
211
211
|
baz: bip bam boon;
|
|
212
212
|
}
|
|
@@ -233,7 +233,7 @@ foo bar {
|
|
|
233
233
|
}
|
|
234
234
|
SCSS
|
|
235
235
|
|
|
236
|
-
assert_scss_to_scss <<OUT, <<IN
|
|
236
|
+
assert_scss_to_scss <<OUT, source: <<IN
|
|
237
237
|
foo bar {
|
|
238
238
|
baz: $bip "bam" 12px;
|
|
239
239
|
}
|
|
@@ -248,7 +248,7 @@ IN
|
|
|
248
248
|
end
|
|
249
249
|
|
|
250
250
|
def test_silent_comments
|
|
251
|
-
|
|
251
|
+
assert_converts <<SASS, <<SCSS
|
|
252
252
|
// foo
|
|
253
253
|
|
|
254
254
|
// bar
|
|
@@ -269,7 +269,7 @@ foo bar {
|
|
|
269
269
|
}
|
|
270
270
|
SCSS
|
|
271
271
|
|
|
272
|
-
|
|
272
|
+
assert_converts <<SASS, <<SCSS
|
|
273
273
|
// foo
|
|
274
274
|
// bar
|
|
275
275
|
// baz
|
|
@@ -288,7 +288,7 @@ foo bar {
|
|
|
288
288
|
}
|
|
289
289
|
SCSS
|
|
290
290
|
|
|
291
|
-
|
|
291
|
+
assert_converts <<SASS, <<SCSS
|
|
292
292
|
// foo
|
|
293
293
|
// bar
|
|
294
294
|
// baz
|
|
@@ -309,7 +309,7 @@ SCSS
|
|
|
309
309
|
end
|
|
310
310
|
|
|
311
311
|
def test_nested_silent_comments
|
|
312
|
-
|
|
312
|
+
assert_converts <<SASS, <<SCSS
|
|
313
313
|
foo
|
|
314
314
|
bar: baz
|
|
315
315
|
|
|
@@ -361,7 +361,7 @@ SASS
|
|
|
361
361
|
end
|
|
362
362
|
|
|
363
363
|
def test_preserves_triple_slash_comments
|
|
364
|
-
|
|
364
|
+
assert_converts <<SASS, <<SCSS
|
|
365
365
|
/// foo
|
|
366
366
|
/// bar
|
|
367
367
|
foo
|
|
@@ -378,7 +378,7 @@ SCSS
|
|
|
378
378
|
end
|
|
379
379
|
|
|
380
380
|
def test_loud_comments
|
|
381
|
-
|
|
381
|
+
assert_converts <<SASS, <<SCSS
|
|
382
382
|
/* foo
|
|
383
383
|
|
|
384
384
|
/* bar
|
|
@@ -429,7 +429,7 @@ foo bar {
|
|
|
429
429
|
}
|
|
430
430
|
SCSS
|
|
431
431
|
|
|
432
|
-
|
|
432
|
+
assert_converts <<SASS, <<SCSS
|
|
433
433
|
/* foo
|
|
434
434
|
* bar
|
|
435
435
|
* baz
|
|
@@ -450,7 +450,7 @@ SCSS
|
|
|
450
450
|
end
|
|
451
451
|
|
|
452
452
|
def test_nested_loud_comments
|
|
453
|
-
|
|
453
|
+
assert_converts <<SASS, <<SCSS
|
|
454
454
|
foo
|
|
455
455
|
bar: baz
|
|
456
456
|
|
|
@@ -502,7 +502,7 @@ SASS
|
|
|
502
502
|
end
|
|
503
503
|
|
|
504
504
|
def test_preserves_double_star_comments
|
|
505
|
-
|
|
505
|
+
assert_converts <<SASS, <<SCSS
|
|
506
506
|
/** foo
|
|
507
507
|
* bar
|
|
508
508
|
foo
|
|
@@ -574,7 +574,7 @@ SCSS
|
|
|
574
574
|
end
|
|
575
575
|
|
|
576
576
|
def test_immediately_preceding_comments
|
|
577
|
-
|
|
577
|
+
assert_converts <<SASS, <<SCSS
|
|
578
578
|
/* Foo
|
|
579
579
|
* Bar
|
|
580
580
|
* Baz
|
|
@@ -589,7 +589,7 @@ SASS
|
|
|
589
589
|
}
|
|
590
590
|
SCSS
|
|
591
591
|
|
|
592
|
-
|
|
592
|
+
assert_converts <<SASS, <<SCSS
|
|
593
593
|
// Foo
|
|
594
594
|
// Bar
|
|
595
595
|
// Baz
|
|
@@ -628,7 +628,7 @@ SASS
|
|
|
628
628
|
end
|
|
629
629
|
|
|
630
630
|
def test_debug
|
|
631
|
-
|
|
631
|
+
assert_converts <<SASS, <<SCSS
|
|
632
632
|
foo
|
|
633
633
|
@debug 12px
|
|
634
634
|
|
|
@@ -643,7 +643,7 @@ SCSS
|
|
|
643
643
|
end
|
|
644
644
|
|
|
645
645
|
def test_error
|
|
646
|
-
|
|
646
|
+
assert_converts <<SASS, <<SCSS
|
|
647
647
|
foo
|
|
648
648
|
@error "oh no!"
|
|
649
649
|
|
|
@@ -658,7 +658,7 @@ SCSS
|
|
|
658
658
|
end
|
|
659
659
|
|
|
660
660
|
def test_directive_without_children
|
|
661
|
-
|
|
661
|
+
assert_converts <<SASS, <<SCSS
|
|
662
662
|
foo
|
|
663
663
|
@foo #bar "baz"
|
|
664
664
|
|
|
@@ -673,7 +673,7 @@ SCSS
|
|
|
673
673
|
end
|
|
674
674
|
|
|
675
675
|
def test_directive_with_prop_children
|
|
676
|
-
|
|
676
|
+
assert_converts <<SASS, <<SCSS
|
|
677
677
|
foo
|
|
678
678
|
@foo #bar "baz"
|
|
679
679
|
a: b
|
|
@@ -693,7 +693,7 @@ SCSS
|
|
|
693
693
|
end
|
|
694
694
|
|
|
695
695
|
def test_directive_with_rule_children
|
|
696
|
-
|
|
696
|
+
assert_converts <<SASS, <<SCSS
|
|
697
697
|
foo
|
|
698
698
|
@foo #bar "baz"
|
|
699
699
|
#blat
|
|
@@ -723,7 +723,7 @@ SCSS
|
|
|
723
723
|
end
|
|
724
724
|
|
|
725
725
|
def test_directive_with_rule_and_prop_children
|
|
726
|
-
|
|
726
|
+
assert_converts <<SASS, <<SCSS
|
|
727
727
|
foo
|
|
728
728
|
@foo #bar "baz"
|
|
729
729
|
g: h
|
|
@@ -761,7 +761,7 @@ SCSS
|
|
|
761
761
|
end
|
|
762
762
|
|
|
763
763
|
def test_charset
|
|
764
|
-
|
|
764
|
+
assert_converts <<SASS, <<SCSS
|
|
765
765
|
@charset "utf-8"
|
|
766
766
|
SASS
|
|
767
767
|
@charset "utf-8";
|
|
@@ -769,7 +769,7 @@ SCSS
|
|
|
769
769
|
end
|
|
770
770
|
|
|
771
771
|
def test_for
|
|
772
|
-
|
|
772
|
+
assert_converts <<SASS, <<SCSS
|
|
773
773
|
foo
|
|
774
774
|
@for $a from $b to $c
|
|
775
775
|
a: b
|
|
@@ -792,7 +792,7 @@ SCSS
|
|
|
792
792
|
end
|
|
793
793
|
|
|
794
794
|
def test_while
|
|
795
|
-
|
|
795
|
+
assert_converts <<SASS, <<SCSS
|
|
796
796
|
foo
|
|
797
797
|
@while flaz($a + $b)
|
|
798
798
|
a: b
|
|
@@ -815,7 +815,7 @@ SCSS
|
|
|
815
815
|
end
|
|
816
816
|
|
|
817
817
|
def test_if
|
|
818
|
-
|
|
818
|
+
assert_converts <<SASS, <<SCSS
|
|
819
819
|
foo
|
|
820
820
|
@if $foo or $bar
|
|
821
821
|
a: b
|
|
@@ -846,7 +846,7 @@ SCSS
|
|
|
846
846
|
end
|
|
847
847
|
|
|
848
848
|
def test_each
|
|
849
|
-
|
|
849
|
+
assert_converts <<SASS, <<SCSS
|
|
850
850
|
a
|
|
851
851
|
@each $number in 1px 2px 3px 4px
|
|
852
852
|
b: $number
|
|
@@ -880,7 +880,7 @@ SCSS
|
|
|
880
880
|
end
|
|
881
881
|
|
|
882
882
|
def test_import
|
|
883
|
-
|
|
883
|
+
assert_converts <<SASS, <<SCSS
|
|
884
884
|
@import foo
|
|
885
885
|
|
|
886
886
|
@import url(bar.css)
|
|
@@ -897,7 +897,7 @@ foo {
|
|
|
897
897
|
}
|
|
898
898
|
SCSS
|
|
899
899
|
|
|
900
|
-
|
|
900
|
+
assert_converts <<SASS, <<SCSS
|
|
901
901
|
@import foo.css
|
|
902
902
|
|
|
903
903
|
@import url(bar.css)
|
|
@@ -920,13 +920,13 @@ SCSS
|
|
|
920
920
|
end
|
|
921
921
|
|
|
922
922
|
def test_import_as_directive_in_scss
|
|
923
|
-
|
|
923
|
+
assert_converts <<SASS, <<SCSS
|
|
924
924
|
@import "foo.css" print
|
|
925
925
|
SASS
|
|
926
926
|
@import "foo.css" print;
|
|
927
927
|
SCSS
|
|
928
928
|
|
|
929
|
-
|
|
929
|
+
assert_converts <<SASS, <<SCSS
|
|
930
930
|
@import url(foo.css) screen, print
|
|
931
931
|
SASS
|
|
932
932
|
@import url(foo.css) screen, print;
|
|
@@ -934,7 +934,7 @@ SCSS
|
|
|
934
934
|
end
|
|
935
935
|
|
|
936
936
|
def test_adjacent_imports
|
|
937
|
-
|
|
937
|
+
assert_converts <<SASS, <<SCSS
|
|
938
938
|
@import foo.sass
|
|
939
939
|
@import bar.scss
|
|
940
940
|
@import baz
|
|
@@ -946,7 +946,7 @@ SCSS
|
|
|
946
946
|
end
|
|
947
947
|
|
|
948
948
|
def test_non_adjacent_imports
|
|
949
|
-
|
|
949
|
+
assert_converts <<SASS, <<SCSS
|
|
950
950
|
@import foo.sass
|
|
951
951
|
|
|
952
952
|
@import bar.scss
|
|
@@ -962,7 +962,7 @@ SCSS
|
|
|
962
962
|
end
|
|
963
963
|
|
|
964
964
|
def test_import_with_interpolation
|
|
965
|
-
|
|
965
|
+
assert_converts <<SASS, <<SCSS
|
|
966
966
|
$family: unquote("Droid+Sans")
|
|
967
967
|
|
|
968
968
|
@import url("http://fonts.googleapis.com/css?family=\#{$family}")
|
|
@@ -974,7 +974,7 @@ SCSS
|
|
|
974
974
|
end
|
|
975
975
|
|
|
976
976
|
def test_extend
|
|
977
|
-
|
|
977
|
+
assert_converts <<SASS, <<SCSS
|
|
978
978
|
.foo
|
|
979
979
|
@extend .bar
|
|
980
980
|
|
|
@@ -989,7 +989,7 @@ SCSS
|
|
|
989
989
|
end
|
|
990
990
|
|
|
991
991
|
def test_comma_extendee
|
|
992
|
-
|
|
992
|
+
assert_converts <<SASS, <<SCSS
|
|
993
993
|
.baz
|
|
994
994
|
@extend .foo, .bar
|
|
995
995
|
SASS
|
|
@@ -1000,7 +1000,7 @@ SCSS
|
|
|
1000
1000
|
end
|
|
1001
1001
|
|
|
1002
1002
|
def test_argless_mixin_definition
|
|
1003
|
-
|
|
1003
|
+
assert_converts <<SASS, <<SCSS
|
|
1004
1004
|
=foo-bar
|
|
1005
1005
|
baz
|
|
1006
1006
|
a: b
|
|
@@ -1038,7 +1038,7 @@ SASS
|
|
|
1038
1038
|
end
|
|
1039
1039
|
|
|
1040
1040
|
def test_mixin_definition_without_defaults
|
|
1041
|
-
|
|
1041
|
+
assert_converts <<SASS, <<SCSS
|
|
1042
1042
|
=foo-bar($baz, $bang)
|
|
1043
1043
|
baz
|
|
1044
1044
|
a: $baz $bang
|
|
@@ -1052,7 +1052,7 @@ SCSS
|
|
|
1052
1052
|
end
|
|
1053
1053
|
|
|
1054
1054
|
def test_mixin_definition_with_defaults
|
|
1055
|
-
|
|
1055
|
+
assert_converts <<SASS, <<SCSS
|
|
1056
1056
|
=foo-bar($baz, $bang: 12px)
|
|
1057
1057
|
baz
|
|
1058
1058
|
a: $baz $bang
|
|
@@ -1078,7 +1078,7 @@ SASS
|
|
|
1078
1078
|
end
|
|
1079
1079
|
|
|
1080
1080
|
def test_argless_mixin_include
|
|
1081
|
-
|
|
1081
|
+
assert_converts <<SASS, <<SCSS
|
|
1082
1082
|
foo
|
|
1083
1083
|
+foo-bar
|
|
1084
1084
|
|
|
@@ -1093,7 +1093,7 @@ SCSS
|
|
|
1093
1093
|
end
|
|
1094
1094
|
|
|
1095
1095
|
def test_mixin_include
|
|
1096
|
-
|
|
1096
|
+
assert_converts <<SASS, <<SCSS
|
|
1097
1097
|
foo
|
|
1098
1098
|
+foo-bar(12px, "blaz")
|
|
1099
1099
|
|
|
@@ -1108,7 +1108,7 @@ SCSS
|
|
|
1108
1108
|
end
|
|
1109
1109
|
|
|
1110
1110
|
def test_mixin_include_with_keyword_args
|
|
1111
|
-
|
|
1111
|
+
assert_converts <<SASS, <<SCSS
|
|
1112
1112
|
foo
|
|
1113
1113
|
+foo-bar(12px, "blaz", $blip: blap, $bloop: blop)
|
|
1114
1114
|
|
|
@@ -1127,7 +1127,7 @@ SCSS
|
|
|
1127
1127
|
end
|
|
1128
1128
|
|
|
1129
1129
|
def test_consecutive_mixin_includes
|
|
1130
|
-
|
|
1130
|
+
assert_converts <<SASS, <<SCSS
|
|
1131
1131
|
foo
|
|
1132
1132
|
+foo-bar
|
|
1133
1133
|
+foo-bar
|
|
@@ -1144,7 +1144,7 @@ SCSS
|
|
|
1144
1144
|
end
|
|
1145
1145
|
|
|
1146
1146
|
def test_mixin_include_with_hyphen_conversion_keyword_arg
|
|
1147
|
-
|
|
1147
|
+
assert_converts <<SASS, <<SCSS
|
|
1148
1148
|
foo
|
|
1149
1149
|
+foo-bar($a-b_c: val)
|
|
1150
1150
|
|
|
@@ -1159,7 +1159,7 @@ SCSS
|
|
|
1159
1159
|
end
|
|
1160
1160
|
|
|
1161
1161
|
def test_argless_function_definition
|
|
1162
|
-
|
|
1162
|
+
assert_converts <<SASS, <<SCSS
|
|
1163
1163
|
@function foo()
|
|
1164
1164
|
$var: 1 + 1
|
|
1165
1165
|
|
|
@@ -1174,7 +1174,7 @@ SCSS
|
|
|
1174
1174
|
end
|
|
1175
1175
|
|
|
1176
1176
|
def test_function_definition_without_defaults
|
|
1177
|
-
|
|
1177
|
+
assert_converts <<SASS, <<SCSS
|
|
1178
1178
|
@function foo($var1, $var2)
|
|
1179
1179
|
@if $var1
|
|
1180
1180
|
@return $var1 + $var2
|
|
@@ -1188,7 +1188,7 @@ SCSS
|
|
|
1188
1188
|
end
|
|
1189
1189
|
|
|
1190
1190
|
def test_function_definition_with_defaults
|
|
1191
|
-
|
|
1191
|
+
assert_converts <<SASS, <<SCSS
|
|
1192
1192
|
@function foo($var1, $var2: foo)
|
|
1193
1193
|
@if $var1
|
|
1194
1194
|
@return $var1 + $var2
|
|
@@ -1202,7 +1202,7 @@ SCSS
|
|
|
1202
1202
|
end
|
|
1203
1203
|
|
|
1204
1204
|
def test_variable_definition
|
|
1205
|
-
|
|
1205
|
+
assert_converts <<SASS, <<SCSS
|
|
1206
1206
|
$var1: 12px + 15px
|
|
1207
1207
|
|
|
1208
1208
|
foo
|
|
@@ -1221,7 +1221,7 @@ SCSS
|
|
|
1221
1221
|
end
|
|
1222
1222
|
|
|
1223
1223
|
def test_guarded_variable_definition
|
|
1224
|
-
|
|
1224
|
+
assert_converts <<SASS, <<SCSS
|
|
1225
1225
|
$var1: 12px + 15px !default
|
|
1226
1226
|
|
|
1227
1227
|
foo
|
|
@@ -1240,7 +1240,7 @@ SCSS
|
|
|
1240
1240
|
end
|
|
1241
1241
|
|
|
1242
1242
|
def test_multiple_variable_definitions
|
|
1243
|
-
|
|
1243
|
+
assert_converts <<SASS, <<SCSS
|
|
1244
1244
|
$var1: foo
|
|
1245
1245
|
$var2: bar
|
|
1246
1246
|
$var3: baz
|
|
@@ -1258,7 +1258,7 @@ SCSS
|
|
|
1258
1258
|
end
|
|
1259
1259
|
|
|
1260
1260
|
def test_division_asserted_with_parens
|
|
1261
|
-
|
|
1261
|
+
assert_converts <<SASS, <<SCSS
|
|
1262
1262
|
foo
|
|
1263
1263
|
a: (1px / 2px)
|
|
1264
1264
|
SASS
|
|
@@ -1269,7 +1269,7 @@ SCSS
|
|
|
1269
1269
|
end
|
|
1270
1270
|
|
|
1271
1271
|
def test_division_not_asserted_when_unnecessary
|
|
1272
|
-
|
|
1272
|
+
assert_converts <<SASS, <<SCSS
|
|
1273
1273
|
$var: 1px / 2px
|
|
1274
1274
|
|
|
1275
1275
|
foo
|
|
@@ -1282,7 +1282,7 @@ foo {
|
|
|
1282
1282
|
}
|
|
1283
1283
|
SCSS
|
|
1284
1284
|
|
|
1285
|
-
|
|
1285
|
+
assert_converts <<SASS, <<SCSS
|
|
1286
1286
|
$var: 1px
|
|
1287
1287
|
|
|
1288
1288
|
foo
|
|
@@ -1295,7 +1295,7 @@ foo {
|
|
|
1295
1295
|
}
|
|
1296
1296
|
SCSS
|
|
1297
1297
|
|
|
1298
|
-
|
|
1298
|
+
assert_converts <<SASS, <<SCSS
|
|
1299
1299
|
foo
|
|
1300
1300
|
a: 1 + 1px / 2px
|
|
1301
1301
|
SASS
|
|
@@ -1306,7 +1306,7 @@ SCSS
|
|
|
1306
1306
|
end
|
|
1307
1307
|
|
|
1308
1308
|
def test_literal_slash
|
|
1309
|
-
|
|
1309
|
+
assert_converts <<SASS, <<SCSS
|
|
1310
1310
|
foo
|
|
1311
1311
|
a: 1px / 2px
|
|
1312
1312
|
SASS
|
|
@@ -1316,7 +1316,7 @@ foo {
|
|
|
1316
1316
|
SCSS
|
|
1317
1317
|
|
|
1318
1318
|
# Regression test for issue 1787
|
|
1319
|
-
|
|
1319
|
+
assert_converts <<SASS, <<SCSS
|
|
1320
1320
|
foo
|
|
1321
1321
|
a: 1px / 2px 3px
|
|
1322
1322
|
SASS
|
|
@@ -1327,7 +1327,7 @@ SCSS
|
|
|
1327
1327
|
end
|
|
1328
1328
|
|
|
1329
1329
|
def test_directive_with_interpolation
|
|
1330
|
-
|
|
1330
|
+
assert_converts <<SASS, <<SCSS
|
|
1331
1331
|
$baz: 12
|
|
1332
1332
|
|
|
1333
1333
|
@foo bar\#{$baz} qux
|
|
@@ -1342,7 +1342,7 @@ SCSS
|
|
|
1342
1342
|
end
|
|
1343
1343
|
|
|
1344
1344
|
def test_media_with_interpolation
|
|
1345
|
-
|
|
1345
|
+
assert_converts <<SASS, <<SCSS
|
|
1346
1346
|
$baz: 12
|
|
1347
1347
|
|
|
1348
1348
|
@media bar\#{$baz}
|
|
@@ -1357,7 +1357,7 @@ SCSS
|
|
|
1357
1357
|
end
|
|
1358
1358
|
|
|
1359
1359
|
def test_media_with_expressions
|
|
1360
|
-
|
|
1360
|
+
assert_converts <<SASS, <<SCSS
|
|
1361
1361
|
$media1: screen
|
|
1362
1362
|
$media2: print
|
|
1363
1363
|
$var: -webkit-min-device-pixel-ratio
|
|
@@ -1378,7 +1378,7 @@ SCSS
|
|
|
1378
1378
|
end
|
|
1379
1379
|
|
|
1380
1380
|
def test_media_with_feature
|
|
1381
|
-
|
|
1381
|
+
assert_converts <<SASS, <<SCSS
|
|
1382
1382
|
@media screen and (-webkit-transform-3d)
|
|
1383
1383
|
a: b
|
|
1384
1384
|
SASS
|
|
@@ -1389,7 +1389,7 @@ SCSS
|
|
|
1389
1389
|
end
|
|
1390
1390
|
|
|
1391
1391
|
def test_supports_with_expressions
|
|
1392
|
-
|
|
1392
|
+
assert_converts <<SASS, <<SCSS
|
|
1393
1393
|
$query: "(feature1: val)"
|
|
1394
1394
|
$feature: feature2
|
|
1395
1395
|
$val: val
|
|
@@ -1413,7 +1413,7 @@ SCSS
|
|
|
1413
1413
|
# Hacks
|
|
1414
1414
|
|
|
1415
1415
|
def test_declaration_hacks
|
|
1416
|
-
|
|
1416
|
+
assert_converts <<SASS, <<SCSS
|
|
1417
1417
|
foo
|
|
1418
1418
|
_name: val
|
|
1419
1419
|
*name: val
|
|
@@ -1436,7 +1436,7 @@ SCSS
|
|
|
1436
1436
|
end
|
|
1437
1437
|
|
|
1438
1438
|
def test_old_declaration_hacks
|
|
1439
|
-
|
|
1439
|
+
assert_converts <<SASS, <<SCSS, options: {old: true}
|
|
1440
1440
|
foo
|
|
1441
1441
|
:_name val
|
|
1442
1442
|
:*name val
|
|
@@ -1456,7 +1456,7 @@ SCSS
|
|
|
1456
1456
|
|
|
1457
1457
|
def test_selector_hacks
|
|
1458
1458
|
assert_selector_renders = lambda do |s|
|
|
1459
|
-
|
|
1459
|
+
assert_converts <<SASS, <<SCSS
|
|
1460
1460
|
#{s}
|
|
1461
1461
|
a: b
|
|
1462
1462
|
SASS
|
|
@@ -1483,7 +1483,7 @@ SCSS
|
|
|
1483
1483
|
end
|
|
1484
1484
|
|
|
1485
1485
|
def test_nested_properties
|
|
1486
|
-
|
|
1486
|
+
assert_converts <<SASS, <<SCSS
|
|
1487
1487
|
div
|
|
1488
1488
|
before: before
|
|
1489
1489
|
background:
|
|
@@ -1504,7 +1504,7 @@ SCSS
|
|
|
1504
1504
|
end
|
|
1505
1505
|
|
|
1506
1506
|
def test_dasherize
|
|
1507
|
-
assert_sass_to_scss(<<SCSS, <<SASS, :dasherize
|
|
1507
|
+
assert_sass_to_scss(<<SCSS, <<SASS, options: {dasherize: true})
|
|
1508
1508
|
@mixin under-scored-mixin($under-scored-arg: $under-scored-default) {
|
|
1509
1509
|
bar: $under-scored-arg;
|
|
1510
1510
|
}
|
|
@@ -1539,7 +1539,7 @@ SASS
|
|
|
1539
1539
|
end
|
|
1540
1540
|
|
|
1541
1541
|
def test_loud_comment_conversion
|
|
1542
|
-
|
|
1542
|
+
assert_converts(<<SASS, <<SCSS)
|
|
1543
1543
|
/*! \#{"interpolated"}
|
|
1544
1544
|
SASS
|
|
1545
1545
|
/*! \#{"interpolated"} */
|
|
@@ -1547,7 +1547,7 @@ SCSS
|
|
|
1547
1547
|
end
|
|
1548
1548
|
|
|
1549
1549
|
def test_content_conversion
|
|
1550
|
-
|
|
1550
|
+
assert_converts(<<SASS, <<SCSS)
|
|
1551
1551
|
$color: blue
|
|
1552
1552
|
|
|
1553
1553
|
=context($class, $color: red)
|
|
@@ -1594,7 +1594,7 @@ SCSS
|
|
|
1594
1594
|
end
|
|
1595
1595
|
|
|
1596
1596
|
def test_placeholder_conversion
|
|
1597
|
-
|
|
1597
|
+
assert_converts(<<SASS, <<SCSS)
|
|
1598
1598
|
#content a%foo.bar
|
|
1599
1599
|
color: blue
|
|
1600
1600
|
SASS
|
|
@@ -1605,7 +1605,7 @@ SCSS
|
|
|
1605
1605
|
end
|
|
1606
1606
|
|
|
1607
1607
|
def test_reference_selector
|
|
1608
|
-
|
|
1608
|
+
assert_converts(<<SASS, <<SCSS)
|
|
1609
1609
|
foo /bar|baz/ bang
|
|
1610
1610
|
a: b
|
|
1611
1611
|
SASS
|
|
@@ -1616,7 +1616,7 @@ SCSS
|
|
|
1616
1616
|
end
|
|
1617
1617
|
|
|
1618
1618
|
def test_subject
|
|
1619
|
-
|
|
1619
|
+
assert_converts(<<SASS, <<SCSS)
|
|
1620
1620
|
foo bar! baz
|
|
1621
1621
|
a: b
|
|
1622
1622
|
SASS
|
|
@@ -1627,7 +1627,7 @@ SCSS
|
|
|
1627
1627
|
end
|
|
1628
1628
|
|
|
1629
1629
|
def test_placeholder_interoplation_conversion
|
|
1630
|
-
|
|
1630
|
+
assert_converts(<<SASS, <<SCSS)
|
|
1631
1631
|
$foo: foo
|
|
1632
1632
|
|
|
1633
1633
|
%\#{$foo}
|
|
@@ -1649,7 +1649,7 @@ SCSS
|
|
|
1649
1649
|
end
|
|
1650
1650
|
|
|
1651
1651
|
def test_indent
|
|
1652
|
-
|
|
1652
|
+
assert_converts <<SASS, <<SCSS, options: {indent: " "}
|
|
1653
1653
|
foo bar
|
|
1654
1654
|
baz bang
|
|
1655
1655
|
baz: bang
|
|
@@ -1667,7 +1667,7 @@ foo bar {
|
|
|
1667
1667
|
}
|
|
1668
1668
|
SCSS
|
|
1669
1669
|
|
|
1670
|
-
|
|
1670
|
+
assert_converts <<SASS, <<SCSS, options: {indent: "\t"}
|
|
1671
1671
|
foo bar
|
|
1672
1672
|
baz bang
|
|
1673
1673
|
baz: bang
|
|
@@ -1685,7 +1685,7 @@ foo bar {
|
|
|
1685
1685
|
}
|
|
1686
1686
|
SCSS
|
|
1687
1687
|
|
|
1688
|
-
assert_sass_to_scss <<SCSS, <<SASS, :indent
|
|
1688
|
+
assert_sass_to_scss <<SCSS, <<SASS, options: {indent: " "}
|
|
1689
1689
|
foo bar {
|
|
1690
1690
|
baz bang {
|
|
1691
1691
|
baz: bang;
|
|
@@ -1703,7 +1703,7 @@ foo bar
|
|
|
1703
1703
|
blat: boo
|
|
1704
1704
|
SASS
|
|
1705
1705
|
|
|
1706
|
-
assert_sass_to_scss <<SCSS, <<SASS, :indent
|
|
1706
|
+
assert_sass_to_scss <<SCSS, <<SASS, options: {indent: "\t"}
|
|
1707
1707
|
foo bar {
|
|
1708
1708
|
baz bang {
|
|
1709
1709
|
baz: bang;
|
|
@@ -1721,7 +1721,7 @@ foo bar
|
|
|
1721
1721
|
blat: boo
|
|
1722
1722
|
SASS
|
|
1723
1723
|
|
|
1724
|
-
assert_scss_to_sass <<SASS, <<SCSS, :indent
|
|
1724
|
+
assert_scss_to_sass <<SASS, <<SCSS, options: {indent: " "}
|
|
1725
1725
|
foo bar
|
|
1726
1726
|
baz bang
|
|
1727
1727
|
baz: bang
|
|
@@ -1739,7 +1739,7 @@ foo bar {
|
|
|
1739
1739
|
}
|
|
1740
1740
|
SCSS
|
|
1741
1741
|
|
|
1742
|
-
assert_scss_to_sass <<SASS, <<SCSS, :indent
|
|
1742
|
+
assert_scss_to_sass <<SASS, <<SCSS, options: {indent: "\t"}
|
|
1743
1743
|
foo bar
|
|
1744
1744
|
baz bang
|
|
1745
1745
|
baz: bang
|
|
@@ -1759,7 +1759,7 @@ SCSS
|
|
|
1759
1759
|
end
|
|
1760
1760
|
|
|
1761
1761
|
def test_extend_with_optional
|
|
1762
|
-
|
|
1762
|
+
assert_converts <<SASS, <<SCSS
|
|
1763
1763
|
foo
|
|
1764
1764
|
@extend .bar !optional
|
|
1765
1765
|
SASS
|
|
@@ -1770,7 +1770,7 @@ SCSS
|
|
|
1770
1770
|
end
|
|
1771
1771
|
|
|
1772
1772
|
def test_mixin_var_args
|
|
1773
|
-
|
|
1773
|
+
assert_converts <<SASS, <<SCSS
|
|
1774
1774
|
=foo($args...)
|
|
1775
1775
|
a: b
|
|
1776
1776
|
|
|
@@ -1799,7 +1799,7 @@ SCSS
|
|
|
1799
1799
|
end
|
|
1800
1800
|
|
|
1801
1801
|
def test_mixin_var_kwargs
|
|
1802
|
-
|
|
1802
|
+
assert_converts <<SASS, <<SCSS
|
|
1803
1803
|
=foo($a: b, $c: d)
|
|
1804
1804
|
a: $a
|
|
1805
1805
|
c: $c
|
|
@@ -1823,7 +1823,7 @@ SCSS
|
|
|
1823
1823
|
end
|
|
1824
1824
|
|
|
1825
1825
|
def test_function_var_args
|
|
1826
|
-
|
|
1826
|
+
assert_converts <<SASS, <<SCSS
|
|
1827
1827
|
@function foo($args...)
|
|
1828
1828
|
@return foo
|
|
1829
1829
|
|
|
@@ -1850,7 +1850,7 @@ SCSS
|
|
|
1850
1850
|
end
|
|
1851
1851
|
|
|
1852
1852
|
def test_function_var_kwargs
|
|
1853
|
-
|
|
1853
|
+
assert_converts <<SASS, <<SCSS
|
|
1854
1854
|
@function foo($a: b, $c: d)
|
|
1855
1855
|
@return foo
|
|
1856
1856
|
|
|
@@ -1870,7 +1870,7 @@ SCSS
|
|
|
1870
1870
|
end
|
|
1871
1871
|
|
|
1872
1872
|
def test_at_root
|
|
1873
|
-
|
|
1873
|
+
assert_converts <<SASS, <<SCSS
|
|
1874
1874
|
.foo
|
|
1875
1875
|
@at-root
|
|
1876
1876
|
.bar
|
|
@@ -1894,7 +1894,7 @@ SCSS
|
|
|
1894
1894
|
end
|
|
1895
1895
|
|
|
1896
1896
|
def test_at_root_with_selector
|
|
1897
|
-
|
|
1897
|
+
assert_converts <<SASS, <<SCSS
|
|
1898
1898
|
.foo
|
|
1899
1899
|
@at-root .bar
|
|
1900
1900
|
a: b
|
|
@@ -1908,7 +1908,7 @@ SCSS
|
|
|
1908
1908
|
end
|
|
1909
1909
|
|
|
1910
1910
|
def test_at_root_without
|
|
1911
|
-
|
|
1911
|
+
assert_converts <<SASS, <<SCSS
|
|
1912
1912
|
.foo
|
|
1913
1913
|
@at-root (without: media rule)
|
|
1914
1914
|
a: b
|
|
@@ -1922,7 +1922,7 @@ SCSS
|
|
|
1922
1922
|
end
|
|
1923
1923
|
|
|
1924
1924
|
def test_at_root_with
|
|
1925
|
-
|
|
1925
|
+
assert_converts <<SASS, <<SCSS
|
|
1926
1926
|
.foo
|
|
1927
1927
|
@at-root (with: media rule)
|
|
1928
1928
|
a: b
|
|
@@ -1936,7 +1936,7 @@ SCSS
|
|
|
1936
1936
|
end
|
|
1937
1937
|
|
|
1938
1938
|
def test_function_var_kwargs_with_list
|
|
1939
|
-
|
|
1939
|
+
assert_converts <<SASS, <<SCSS
|
|
1940
1940
|
@function foo($a: b, $c: d)
|
|
1941
1941
|
@return $a, $c
|
|
1942
1942
|
|
|
@@ -1954,7 +1954,7 @@ SCSS
|
|
|
1954
1954
|
end
|
|
1955
1955
|
|
|
1956
1956
|
def test_keyframes
|
|
1957
|
-
|
|
1957
|
+
assert_converts(<<SASS, <<SCSS)
|
|
1958
1958
|
@keyframes identifier
|
|
1959
1959
|
0%
|
|
1960
1960
|
top: 0
|
|
@@ -1995,7 +1995,7 @@ SCSS
|
|
|
1995
1995
|
## Regression Tests
|
|
1996
1996
|
|
|
1997
1997
|
def test_list_in_args
|
|
1998
|
-
|
|
1998
|
+
assert_converts(<<SASS, <<SCSS)
|
|
1999
1999
|
+mixin((a, b, c))
|
|
2000
2000
|
|
|
2001
2001
|
+mixin($arg: (a, b, c))
|
|
@@ -2011,7 +2011,7 @@ SCSS
|
|
|
2011
2011
|
end
|
|
2012
2012
|
|
|
2013
2013
|
def test_media_query_with_expr
|
|
2014
|
-
|
|
2014
|
+
assert_converts <<SASS, <<SCSS
|
|
2015
2015
|
@media foo and (bar: baz)
|
|
2016
2016
|
a: b
|
|
2017
2017
|
SASS
|
|
@@ -2022,7 +2022,7 @@ SCSS
|
|
|
2022
2022
|
end
|
|
2023
2023
|
|
|
2024
2024
|
def test_nested_if_statements
|
|
2025
|
-
|
|
2025
|
+
assert_converts(<<SASS, <<SCSS)
|
|
2026
2026
|
@if $foo
|
|
2027
2027
|
one
|
|
2028
2028
|
a: b
|
|
@@ -2055,7 +2055,7 @@ SCSS
|
|
|
2055
2055
|
end
|
|
2056
2056
|
|
|
2057
2057
|
def test_comment_indentation
|
|
2058
|
-
|
|
2058
|
+
assert_converts(<<SASS, <<SCSS, options: {indent: ' '})
|
|
2059
2059
|
foo
|
|
2060
2060
|
// bar
|
|
2061
2061
|
/* baz
|
|
@@ -2070,27 +2070,27 @@ SCSS
|
|
|
2070
2070
|
end
|
|
2071
2071
|
|
|
2072
2072
|
def test_keyword_arguments
|
|
2073
|
-
|
|
2073
|
+
assert_converts(<<SASS, <<SCSS, options: {dasherize: true})
|
|
2074
2074
|
$foo: foo($dash-ed: 2px)
|
|
2075
2075
|
SASS
|
|
2076
2076
|
$foo: foo($dash-ed: 2px);
|
|
2077
2077
|
SCSS
|
|
2078
|
-
assert_scss_to_sass(<<SASS, <<SCSS, :dasherize
|
|
2078
|
+
assert_scss_to_sass(<<SASS, <<SCSS, options: {dasherize: true})
|
|
2079
2079
|
$foo: foo($dash-ed: 2px)
|
|
2080
2080
|
SASS
|
|
2081
2081
|
$foo: foo($dash_ed: 2px);
|
|
2082
2082
|
SCSS
|
|
2083
|
-
assert_sass_to_scss(<<SCSS, <<SASS, :dasherize
|
|
2083
|
+
assert_sass_to_scss(<<SCSS, <<SASS, options: {dasherize: true})
|
|
2084
2084
|
$foo: foo($dash-ed: 2px);
|
|
2085
2085
|
SCSS
|
|
2086
2086
|
$foo: foo($dash_ed: 2px)
|
|
2087
2087
|
SASS
|
|
2088
|
-
|
|
2088
|
+
assert_converts(<<SASS, <<SCSS)
|
|
2089
2089
|
$foo: foo($under_scored: 1px)
|
|
2090
2090
|
SASS
|
|
2091
2091
|
$foo: foo($under_scored: 1px);
|
|
2092
2092
|
SCSS
|
|
2093
|
-
|
|
2093
|
+
assert_converts(<<SASS, <<SCSS)
|
|
2094
2094
|
$foo: foo($dash-ed: 2px, $under_scored: 1px)
|
|
2095
2095
|
SASS
|
|
2096
2096
|
$foo: foo($dash-ed: 2px, $under_scored: 1px);
|
|
@@ -2098,7 +2098,7 @@ SCSS
|
|
|
2098
2098
|
end
|
|
2099
2099
|
|
|
2100
2100
|
def test_ambiguous_negation
|
|
2101
|
-
|
|
2101
|
+
assert_converts(<<SASS, <<SCSS, options: {indent: ' '})
|
|
2102
2102
|
foo
|
|
2103
2103
|
ok: -$foo
|
|
2104
2104
|
comma: 10px, -$foo
|
|
@@ -2113,7 +2113,7 @@ SCSS
|
|
|
2113
2113
|
end
|
|
2114
2114
|
|
|
2115
2115
|
def test_variable_with_global
|
|
2116
|
-
|
|
2116
|
+
assert_converts(<<SASS, <<SCSS)
|
|
2117
2117
|
$var: 1
|
|
2118
2118
|
|
|
2119
2119
|
foo
|
|
@@ -2130,59 +2130,10 @@ SCSS
|
|
|
2130
2130
|
end
|
|
2131
2131
|
|
|
2132
2132
|
def test_import_with_supports_clause
|
|
2133
|
-
|
|
2133
|
+
assert_converts(<<'SASS', <<'SCSS')
|
|
2134
2134
|
@import url("fallback-layout.css") supports(not (display: #{$display-type}))
|
|
2135
2135
|
SASS
|
|
2136
2136
|
@import url("fallback-layout.css") supports(not (display: #{$display-type}));
|
|
2137
2137
|
SCSS
|
|
2138
2138
|
end
|
|
2139
|
-
|
|
2140
|
-
private
|
|
2141
|
-
|
|
2142
|
-
def assert_sass_to_sass(sass, options = {})
|
|
2143
|
-
assert_equal(sass.rstrip, to_sass(sass, options).rstrip,
|
|
2144
|
-
"Expected Sass to transform to itself")
|
|
2145
|
-
end
|
|
2146
|
-
|
|
2147
|
-
def assert_scss_to_sass(sass, scss, options = {})
|
|
2148
|
-
assert_equal(sass.rstrip, to_sass(scss, options.merge(:syntax => :scss)).rstrip,
|
|
2149
|
-
"Expected SCSS to transform to Sass")
|
|
2150
|
-
end
|
|
2151
|
-
|
|
2152
|
-
def assert_scss_to_scss(scss, in_scss = nil, options = nil)
|
|
2153
|
-
if in_scss.is_a?(Hash)
|
|
2154
|
-
options = in_scss
|
|
2155
|
-
in_scss = nil
|
|
2156
|
-
end
|
|
2157
|
-
|
|
2158
|
-
in_scss ||= scss
|
|
2159
|
-
options ||= {}
|
|
2160
|
-
|
|
2161
|
-
assert_equal(scss.rstrip, to_scss(in_scss, options.merge(:syntax => :scss)).rstrip,
|
|
2162
|
-
"Expected SCSS to transform to #{scss == in_scss ? 'itself' : 'SCSS'}")
|
|
2163
|
-
end
|
|
2164
|
-
|
|
2165
|
-
def assert_sass_to_scss(scss, sass, options = {})
|
|
2166
|
-
assert_equal(scss.rstrip, to_scss(sass, options).rstrip,
|
|
2167
|
-
"Expected Sass to transform to SCSS")
|
|
2168
|
-
end
|
|
2169
|
-
|
|
2170
|
-
def assert_renders(sass, scss, options = {})
|
|
2171
|
-
assert_sass_to_sass(sass, options)
|
|
2172
|
-
assert_scss_to_sass(sass, scss, options)
|
|
2173
|
-
assert_scss_to_scss(scss, options)
|
|
2174
|
-
assert_sass_to_scss(scss, sass, options)
|
|
2175
|
-
end
|
|
2176
|
-
|
|
2177
|
-
def to_sass(scss, options = {})
|
|
2178
|
-
Sass::Util.silence_sass_warnings do
|
|
2179
|
-
Sass::Engine.new(scss, options).to_tree.to_sass(options)
|
|
2180
|
-
end
|
|
2181
|
-
end
|
|
2182
|
-
|
|
2183
|
-
def to_scss(sass, options = {})
|
|
2184
|
-
Sass::Util.silence_sass_warnings do
|
|
2185
|
-
Sass::Engine.new(sass, options).to_tree.to_scss(options)
|
|
2186
|
-
end
|
|
2187
|
-
end
|
|
2188
2139
|
end
|