sass 3.4.25 → 3.5.0.pre.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|