sass 3.4.25 → 3.5.0
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/README.md +1 -1
- data/Rakefile +2 -117
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/VERSION_NAME +1 -1
- data/lib/sass/cache_stores/filesystem.rb +1 -1
- data/lib/sass/css.rb +1 -2
- data/lib/sass/engine.rb +38 -20
- data/lib/sass/environment.rb +26 -5
- data/lib/sass/error.rb +2 -2
- data/lib/sass/exec/base.rb +2 -11
- data/lib/sass/features.rb +1 -0
- data/lib/sass/importers/filesystem.rb +2 -2
- data/lib/sass/plugin/compiler.rb +20 -50
- data/lib/sass/plugin/configuration.rb +2 -2
- data/lib/sass/railtie.rb +1 -1
- data/lib/sass/script/functions.rb +235 -43
- data/lib/sass/script/lexer.rb +13 -2
- data/lib/sass/script/parser.rb +69 -67
- 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 +0 -8
- data/lib/sass/script/tree/operation.rb +0 -7
- data/lib/sass/script/value/arg_list.rb +1 -1
- data/lib/sass/script/value/base.rb +17 -0
- data/lib/sass/script/value/callable.rb +25 -0
- data/lib/sass/script/value/color.rb +5 -0
- data/lib/sass/script/value/function.rb +19 -0
- data/lib/sass/script/value/helpers.rb +29 -9
- data/lib/sass/script/value/list.rb +35 -14
- data/lib/sass/script/value/map.rb +2 -2
- data/lib/sass/script/value/number.rb +1 -1
- data/lib/sass/script/value.rb +2 -0
- data/lib/sass/scss/parser.rb +99 -40
- data/lib/sass/scss/rx.rb +4 -10
- data/lib/sass/scss/static_parser.rb +5 -24
- data/lib/sass/selector/abstract_sequence.rb +7 -6
- data/lib/sass/selector/comma_sequence.rb +7 -4
- data/lib/sass/selector/pseudo.rb +19 -2
- data/lib/sass/selector/sequence.rb +35 -6
- data/lib/sass/selector/simple.rb +9 -2
- data/lib/sass/selector/simple_sequence.rb +8 -4
- data/lib/sass/selector.rb +4 -0
- data/lib/sass/source/map.rb +2 -2
- data/lib/sass/stack.rb +21 -1
- data/lib/sass/tree/charset_node.rb +1 -1
- data/lib/sass/tree/prop_node.rb +45 -53
- data/lib/sass/tree/rule_node.rb +3 -2
- 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 +4 -15
- data/lib/sass/tree/visitors/deep_copy.rb +1 -1
- data/lib/sass/tree/visitors/extend.rb +2 -8
- data/lib/sass/tree/visitors/perform.rb +21 -9
- data/lib/sass/tree/visitors/set_options.rb +1 -1
- data/lib/sass/tree/visitors/to_css.rb +47 -13
- data/lib/sass/util/multibyte_string_scanner.rb +127 -131
- data/lib/sass/util/normalized_map.rb +1 -8
- data/lib/sass/util.rb +12 -290
- data/lib/sass/version.rb +0 -2
- data/lib/sass.rb +0 -7
- data/test/sass/cache_test.rb +0 -1
- data/test/sass/callbacks_test.rb +0 -1
- data/test/sass/compiler_test.rb +4 -15
- data/test/sass/conversion_test.rb +113 -163
- data/test/sass/css2sass_test.rb +16 -19
- data/test/sass/css_variable_test.rb +176 -71
- data/test/sass/encoding_test.rb +2 -33
- data/test/sass/engine_test.rb +71 -19
- data/test/sass/exec_test.rb +0 -1
- data/test/sass/extend_test.rb +37 -92
- data/test/sass/functions_test.rb +58 -14
- data/test/sass/importer_test.rb +2 -3
- data/test/sass/logger_test.rb +0 -1
- data/test/sass/plugin_test.rb +6 -10
- data/test/sass/results/script.css +1 -1
- data/test/sass/results/units.css +2 -2
- data/test/sass/script_conversion_test.rb +10 -2
- data/test/sass/script_test.rb +22 -24
- data/test/sass/scss/css_test.rb +3 -18
- data/test/sass/scss/rx_test.rb +0 -1
- data/test/sass/scss/scss_test.rb +49 -16
- data/test/sass/source_map_test.rb +13 -16
- data/test/sass/superselector_test.rb +0 -1
- data/test/sass/util/multibyte_string_scanner_test.rb +121 -124
- data/test/sass/util/normalized_map_test.rb +0 -1
- data/test/sass/util/subset_map_test.rb +0 -1
- data/test/sass/util_test.rb +4 -39
- data/test/sass/value_helpers_test.rb +0 -1
- data/test/sass-spec.yml +1 -1
- data/test/test_helper.rb +39 -0
- metadata +19 -44
- 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/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/lib/listen.rb +0 -54
- 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
data/test/sass/scss/rx_test.rb
CHANGED
data/test/sass/scss/scss_test.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
1
|
# -*- coding: utf-8 -*-
|
|
3
2
|
require File.dirname(__FILE__) + '/test_helper'
|
|
4
3
|
|
|
@@ -3389,22 +3388,22 @@ SCSS
|
|
|
3389
3388
|
def test_uses_property_exception_with_star_hack
|
|
3390
3389
|
render <<SCSS
|
|
3391
3390
|
foo {
|
|
3392
|
-
*bar:baz
|
|
3391
|
+
*bar:baz <fail>; }
|
|
3393
3392
|
SCSS
|
|
3394
3393
|
assert(false, "Expected syntax error")
|
|
3395
3394
|
rescue Sass::SyntaxError => e
|
|
3396
|
-
assert_equal 'Invalid CSS after " *bar:baz ": expected
|
|
3395
|
+
assert_equal 'Invalid CSS after " *bar:baz <fail>": expected expression (e.g. 1px, bold), was "; }"', e.message
|
|
3397
3396
|
assert_equal 2, e.sass_line
|
|
3398
3397
|
end
|
|
3399
3398
|
|
|
3400
3399
|
def test_uses_property_exception_with_colon_hack
|
|
3401
3400
|
render <<SCSS
|
|
3402
3401
|
foo {
|
|
3403
|
-
:bar:baz
|
|
3402
|
+
:bar:baz <fail>; }
|
|
3404
3403
|
SCSS
|
|
3405
3404
|
assert(false, "Expected syntax error")
|
|
3406
3405
|
rescue Sass::SyntaxError => e
|
|
3407
|
-
assert_equal 'Invalid CSS after " :bar:baz ": expected
|
|
3406
|
+
assert_equal 'Invalid CSS after " :bar:baz <fail>": expected expression (e.g. 1px, bold), was "; }"', e.message
|
|
3408
3407
|
assert_equal 2, e.sass_line
|
|
3409
3408
|
end
|
|
3410
3409
|
|
|
@@ -3422,22 +3421,22 @@ SCSS
|
|
|
3422
3421
|
def test_uses_property_exception_with_space_after_name
|
|
3423
3422
|
render <<SCSS
|
|
3424
3423
|
foo {
|
|
3425
|
-
bar: baz
|
|
3424
|
+
bar: baz <fail>; }
|
|
3426
3425
|
SCSS
|
|
3427
3426
|
assert(false, "Expected syntax error")
|
|
3428
3427
|
rescue Sass::SyntaxError => e
|
|
3429
|
-
assert_equal 'Invalid CSS after " bar: baz ": expected
|
|
3428
|
+
assert_equal 'Invalid CSS after " bar: baz <fail>": expected expression (e.g. 1px, bold), was "; }"', e.message
|
|
3430
3429
|
assert_equal 2, e.sass_line
|
|
3431
3430
|
end
|
|
3432
3431
|
|
|
3433
3432
|
def test_uses_property_exception_with_non_identifier_after_name
|
|
3434
3433
|
render <<SCSS
|
|
3435
3434
|
foo {
|
|
3436
|
-
bar:1px
|
|
3435
|
+
bar:1px <fail>; }
|
|
3437
3436
|
SCSS
|
|
3438
3437
|
assert(false, "Expected syntax error")
|
|
3439
3438
|
rescue Sass::SyntaxError => e
|
|
3440
|
-
assert_equal 'Invalid CSS after " bar:1px ": expected
|
|
3439
|
+
assert_equal 'Invalid CSS after " bar:1px <fail>": expected expression (e.g. 1px, bold), was "; }"', e.message
|
|
3441
3440
|
assert_equal 2, e.sass_line
|
|
3442
3441
|
end
|
|
3443
3442
|
|
|
@@ -3827,7 +3826,7 @@ SCSS
|
|
|
3827
3826
|
def test_parsing_decimals_followed_by_comments_doesnt_take_forever
|
|
3828
3827
|
assert_equal(<<CSS, render(<<SCSS))
|
|
3829
3828
|
.foo {
|
|
3830
|
-
padding: 4.
|
|
3829
|
+
padding: 4.2105263158% 4.2105263158% 5.6315789474%; }
|
|
3831
3830
|
CSS
|
|
3832
3831
|
.foo {
|
|
3833
3832
|
padding: 4.21052631578947% 4.21052631578947% 5.631578947368421% /**/
|
|
@@ -3942,12 +3941,13 @@ a.\#{"foo"} b
|
|
|
3942
3941
|
SCSS
|
|
3943
3942
|
end
|
|
3944
3943
|
|
|
3945
|
-
def
|
|
3946
|
-
|
|
3947
|
-
|
|
3948
|
-
|
|
3949
|
-
|
|
3950
|
-
|
|
3944
|
+
def test_extra_comma_in_mixin_arglist
|
|
3945
|
+
assert_equal <<CSS, render(<<SCSS)
|
|
3946
|
+
.bar {
|
|
3947
|
+
baz: bar; }
|
|
3948
|
+
CSS
|
|
3949
|
+
@mixin foo($a1,) {
|
|
3950
|
+
baz: $a1;
|
|
3951
3951
|
}
|
|
3952
3952
|
|
|
3953
3953
|
.bar {
|
|
@@ -3956,6 +3956,39 @@ MESSAGE
|
|
|
3956
3956
|
SCSS
|
|
3957
3957
|
end
|
|
3958
3958
|
|
|
3959
|
+
|
|
3960
|
+
def test_extra_comma_between_parameters_in_mixin_arglist
|
|
3961
|
+
assert_raise_message(Sass::SyntaxError, "Invalid CSS after \"...nclude foo(bar,\": expected \")\", was \", baz );\"") {render <<SCSS}
|
|
3962
|
+
@mixin foo($a1, $a2) {
|
|
3963
|
+
baz: $a1;
|
|
3964
|
+
bef: $a2;
|
|
3965
|
+
}
|
|
3966
|
+
|
|
3967
|
+
.bar {
|
|
3968
|
+
@include foo(bar,, baz );
|
|
3969
|
+
}
|
|
3970
|
+
SCSS
|
|
3971
|
+
end
|
|
3972
|
+
|
|
3973
|
+
|
|
3974
|
+
def test_extra_comma_in_mixin_arglist_ending_needs_have_parentheses_after
|
|
3975
|
+
assert_raise_message(Sass::SyntaxError, "Invalid CSS after \" bri,\": expected \")\", was \"};\"") {render <<SCSS}
|
|
3976
|
+
@mixin foo($a1, $a2) {
|
|
3977
|
+
baz: $a1;
|
|
3978
|
+
bal: $a2;
|
|
3979
|
+
}
|
|
3980
|
+
|
|
3981
|
+
.bar {
|
|
3982
|
+
@include foo(
|
|
3983
|
+
bar,
|
|
3984
|
+
bri,
|
|
3985
|
+
};
|
|
3986
|
+
}
|
|
3987
|
+
SCSS
|
|
3988
|
+
end
|
|
3989
|
+
|
|
3990
|
+
|
|
3991
|
+
|
|
3959
3992
|
def test_interpolation
|
|
3960
3993
|
assert_equal <<CSS, render(<<SCSS)
|
|
3961
3994
|
ul li#foo a span.label {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
1
|
# -*- coding: utf-8 -*-
|
|
3
2
|
require File.dirname(__FILE__) + '/../test_helper'
|
|
4
3
|
require File.dirname(__FILE__) + '/test_helper'
|
|
@@ -61,7 +60,7 @@ JSON
|
|
|
61
60
|
end
|
|
62
61
|
|
|
63
62
|
def test_simple_mapping_with_file_uris
|
|
64
|
-
uri = Sass::Util.file_uri_from_path(
|
|
63
|
+
uri = Sass::Util.file_uri_from_path(File.absolute_path(filename_for_test(:scss)))
|
|
65
64
|
assert_parses_with_sourcemap <<SCSS, <<CSS, <<JSON, :sourcemap => :file
|
|
66
65
|
a {
|
|
67
66
|
foo: bar;
|
|
@@ -137,9 +136,8 @@ CSS
|
|
|
137
136
|
JSON
|
|
138
137
|
end
|
|
139
138
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
assert_parses_with_sourcemap <<SCSS, <<CSS, <<JSON
|
|
139
|
+
def test_simple_charset_mapping_scss
|
|
140
|
+
assert_parses_with_sourcemap <<SCSS, <<CSS, <<JSON
|
|
143
141
|
a {
|
|
144
142
|
fóó: bár;
|
|
145
143
|
}
|
|
@@ -158,10 +156,10 @@ CSS
|
|
|
158
156
|
"file": "test.css"
|
|
159
157
|
}
|
|
160
158
|
JSON
|
|
161
|
-
|
|
159
|
+
end
|
|
162
160
|
|
|
163
|
-
|
|
164
|
-
|
|
161
|
+
def test_simple_charset_mapping_sass
|
|
162
|
+
assert_parses_with_sourcemap <<SASS, <<CSS, <<JSON, :syntax => :sass
|
|
165
163
|
a
|
|
166
164
|
fóó: bár
|
|
167
165
|
SASS
|
|
@@ -179,10 +177,10 @@ CSS
|
|
|
179
177
|
"file": "test.css"
|
|
180
178
|
}
|
|
181
179
|
JSON
|
|
182
|
-
|
|
180
|
+
end
|
|
183
181
|
|
|
184
|
-
|
|
185
|
-
|
|
182
|
+
def test_different_charset_than_encoding_scss
|
|
183
|
+
assert_parses_with_sourcemap(<<SCSS.force_encoding("IBM866"), <<CSS, <<JSON)
|
|
186
184
|
@charset "IBM866";
|
|
187
185
|
f\x86\x86 {
|
|
188
186
|
\x86: b;
|
|
@@ -202,10 +200,10 @@ CSS
|
|
|
202
200
|
"file": "test.css"
|
|
203
201
|
}
|
|
204
202
|
JSON
|
|
205
|
-
|
|
203
|
+
end
|
|
206
204
|
|
|
207
|
-
|
|
208
|
-
|
|
205
|
+
def test_different_charset_than_encoding_sass
|
|
206
|
+
assert_parses_with_sourcemap(<<SASS.force_encoding("IBM866"), <<CSS, <<JSON, :syntax => :sass)
|
|
209
207
|
@charset "IBM866"
|
|
210
208
|
f\x86\x86
|
|
211
209
|
\x86: b
|
|
@@ -224,7 +222,6 @@ CSS
|
|
|
224
222
|
"file": "test.css"
|
|
225
223
|
}
|
|
226
224
|
JSON
|
|
227
|
-
end
|
|
228
225
|
end
|
|
229
226
|
|
|
230
227
|
def test_import_sourcemap_scss
|
|
@@ -796,7 +793,7 @@ SCSS
|
|
|
796
793
|
|
|
797
794
|
interpolated = engine.to_tree.children.
|
|
798
795
|
first.children.
|
|
799
|
-
first.value.children[1]
|
|
796
|
+
first.value.first.children[1]
|
|
800
797
|
assert_equal "123", interpolated.to_sass
|
|
801
798
|
range = interpolated.source_range
|
|
802
799
|
assert_equal 3, range.start_pos.line
|
|
@@ -1,155 +1,152 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
1
|
# -*- coding: utf-8 -*-
|
|
3
2
|
require File.dirname(__FILE__) + '/../../test_helper'
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
end
|
|
4
|
+
class MultibyteStringScannerTest < MiniTest::Test
|
|
5
|
+
def setup
|
|
6
|
+
@scanner = Sass::Util::MultibyteStringScanner.new("cölorfül")
|
|
7
|
+
end
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
def test_initial
|
|
10
|
+
assert_scanner_state 0, 0, nil, nil
|
|
11
|
+
end
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
def test_check
|
|
14
|
+
assert_equal 'cö', @scanner.check(/../)
|
|
15
|
+
assert_scanner_state 0, 0, 2, 3
|
|
16
|
+
assert_equal 0, @scanner.pos
|
|
17
|
+
assert_equal 0, @scanner.pos
|
|
18
|
+
assert_equal 2, @scanner.matched_size
|
|
19
|
+
assert_equal 3, @scanner.byte_matched_size
|
|
20
|
+
end
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
def test_check_until
|
|
23
|
+
assert_equal 'cölorfü', @scanner.check_until(/f./)
|
|
24
|
+
assert_scanner_state 0, 0, 2, 3
|
|
25
|
+
end
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
def test_getch
|
|
28
|
+
assert_equal 'c', @scanner.getch
|
|
29
|
+
assert_equal 'ö', @scanner.getch
|
|
30
|
+
assert_scanner_state 2, 3, 1, 2
|
|
31
|
+
end
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
def test_match?
|
|
34
|
+
assert_equal 2, @scanner.match?(/../)
|
|
35
|
+
assert_scanner_state 0, 0, 2, 3
|
|
36
|
+
end
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
def test_peek
|
|
39
|
+
assert_equal 'cö', @scanner.peek(2)
|
|
40
|
+
assert_scanner_state 0, 0, nil, nil
|
|
41
|
+
end
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
def test_rest_size
|
|
44
|
+
assert_equal 'cö', @scanner.scan(/../)
|
|
45
|
+
assert_equal 6, @scanner.rest_size
|
|
46
|
+
end
|
|
49
47
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
def test_scan
|
|
49
|
+
assert_equal 'cö', @scanner.scan(/../)
|
|
50
|
+
assert_scanner_state 2, 3, 2, 3
|
|
51
|
+
end
|
|
54
52
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
def test_scan_until
|
|
54
|
+
assert_equal 'cölorfü', @scanner.scan_until(/f./)
|
|
55
|
+
assert_scanner_state 7, 9, 2, 3
|
|
56
|
+
end
|
|
59
57
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
def test_skip
|
|
59
|
+
assert_equal 2, @scanner.skip(/../)
|
|
60
|
+
assert_scanner_state 2, 3, 2, 3
|
|
61
|
+
end
|
|
64
62
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
def test_skip_until
|
|
64
|
+
assert_equal 7, @scanner.skip_until(/f./)
|
|
65
|
+
assert_scanner_state 7, 9, 2, 3
|
|
66
|
+
end
|
|
69
67
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
def test_set_pos
|
|
69
|
+
@scanner.pos = 7
|
|
70
|
+
assert_scanner_state 7, 9, nil, nil
|
|
71
|
+
@scanner.pos = 6
|
|
72
|
+
assert_scanner_state 6, 7, nil, nil
|
|
73
|
+
@scanner.pos = 1
|
|
74
|
+
assert_scanner_state 1, 1, nil, nil
|
|
75
|
+
end
|
|
78
76
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
77
|
+
def test_reset
|
|
78
|
+
@scanner.scan(/../)
|
|
79
|
+
@scanner.reset
|
|
80
|
+
assert_scanner_state 0, 0, nil, nil
|
|
81
|
+
end
|
|
84
82
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
def test_scan_full
|
|
84
|
+
assert_equal 'cö', @scanner.scan_full(/../, true, true)
|
|
85
|
+
assert_scanner_state 2, 3, 2, 3
|
|
88
86
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
@scanner.reset
|
|
88
|
+
assert_equal 'cö', @scanner.scan_full(/../, false, true)
|
|
89
|
+
assert_scanner_state 0, 0, 2, 3
|
|
92
90
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
@scanner.reset
|
|
92
|
+
assert_nil @scanner.scan_full(/../, true, false)
|
|
93
|
+
assert_scanner_state 2, 3, 2, 3
|
|
96
94
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
95
|
+
@scanner.reset
|
|
96
|
+
assert_nil @scanner.scan_full(/../, false, false)
|
|
97
|
+
assert_scanner_state 0, 0, 2, 3
|
|
98
|
+
end
|
|
101
99
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
100
|
+
def test_search_full
|
|
101
|
+
assert_equal 'cölorfü', @scanner.search_full(/f./, true, true)
|
|
102
|
+
assert_scanner_state 7, 9, 2, 3
|
|
105
103
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
104
|
+
@scanner.reset
|
|
105
|
+
assert_equal 'cölorfü', @scanner.search_full(/f./, false, true)
|
|
106
|
+
assert_scanner_state 0, 0, 2, 3
|
|
109
107
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
@scanner.reset
|
|
109
|
+
assert_nil @scanner.search_full(/f./, true, false)
|
|
110
|
+
assert_scanner_state 7, 9, 2, 3
|
|
113
111
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
112
|
+
@scanner.reset
|
|
113
|
+
assert_nil @scanner.search_full(/f./, false, false)
|
|
114
|
+
assert_scanner_state 0, 0, 2, 3
|
|
115
|
+
end
|
|
118
116
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
117
|
+
def test_set_string
|
|
118
|
+
@scanner.scan(/../)
|
|
119
|
+
@scanner.string = 'föóbâr'
|
|
120
|
+
assert_scanner_state 0, 0, nil, nil
|
|
121
|
+
end
|
|
124
122
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
123
|
+
def test_terminate
|
|
124
|
+
@scanner.scan(/../)
|
|
125
|
+
@scanner.terminate
|
|
126
|
+
assert_scanner_state 8, 10, nil, nil
|
|
127
|
+
end
|
|
130
128
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
129
|
+
def test_unscan
|
|
130
|
+
@scanner.scan(/../)
|
|
131
|
+
@scanner.scan_until(/f./)
|
|
132
|
+
@scanner.unscan
|
|
133
|
+
assert_scanner_state 2, 3, nil, nil
|
|
134
|
+
end
|
|
137
135
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
end
|
|
136
|
+
private
|
|
137
|
+
|
|
138
|
+
def assert_scanner_state(pos, byte_pos, matched_size, byte_matched_size)
|
|
139
|
+
assert_equal pos, @scanner.pos, 'pos'
|
|
140
|
+
assert_equal byte_pos, @scanner.byte_pos, 'byte_pos'
|
|
141
|
+
if matched_size.nil?
|
|
142
|
+
assert_nil @scanner.matched_size, 'matched_size'
|
|
143
|
+
else
|
|
144
|
+
assert_equal matched_size, @scanner.matched_size, 'matched_size'
|
|
145
|
+
end
|
|
146
|
+
if byte_matched_size.nil?
|
|
147
|
+
assert_nil @scanner.byte_matched_size, 'byte_matched_size'
|
|
148
|
+
else
|
|
149
|
+
assert_equal byte_matched_size, @scanner.byte_matched_size, 'byte_matched_size'
|
|
153
150
|
end
|
|
154
151
|
end
|
|
155
152
|
end
|
data/test/sass/util_test.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
1
|
require File.dirname(__FILE__) + '/../test_helper'
|
|
3
2
|
require 'pathname'
|
|
4
3
|
require 'tmpdir'
|
|
@@ -10,14 +9,6 @@ class UtilTest < MiniTest::Test
|
|
|
10
9
|
assert(File.exist?(scope("Rakefile")))
|
|
11
10
|
end
|
|
12
11
|
|
|
13
|
-
def test_to_hash
|
|
14
|
-
assert_equal({
|
|
15
|
-
:foo => 1,
|
|
16
|
-
:bar => 2,
|
|
17
|
-
:baz => 3
|
|
18
|
-
}, to_hash([[:foo, 1], [:bar, 2], [:baz, 3]]))
|
|
19
|
-
end
|
|
20
|
-
|
|
21
12
|
def test_map_keys
|
|
22
13
|
assert_equal({
|
|
23
14
|
"foo" => 1,
|
|
@@ -52,7 +43,6 @@ class UtilTest < MiniTest::Test
|
|
|
52
43
|
end
|
|
53
44
|
|
|
54
45
|
def test_powerset
|
|
55
|
-
return unless Set[Set[]] == Set[Set[]] # There's a bug in Ruby 1.8.6 that breaks nested set equality
|
|
56
46
|
assert_equal([[].to_set].to_set,
|
|
57
47
|
powerset([]))
|
|
58
48
|
assert_equal([[].to_set, [1].to_set].to_set,
|
|
@@ -139,13 +129,6 @@ class UtilTest < MiniTest::Test
|
|
|
139
129
|
lcs([-5, 3, 2, 8], [-4, 1, 8]) {|a, b| (a - b).abs <= 1 && [a, b].max})
|
|
140
130
|
end
|
|
141
131
|
|
|
142
|
-
def test_group_by_to_a
|
|
143
|
-
assert_equal([[1, [1, 3, 5, 7]], [0, [2, 4, 6, 8]]],
|
|
144
|
-
group_by_to_a(1..8) {|i| i % 2})
|
|
145
|
-
assert_equal([[1, [1, 4, 7, 10]], [2, [2, 5, 8, 11]], [0, [3, 6, 9, 12]]],
|
|
146
|
-
group_by_to_a(1..12) {|i| i % 3})
|
|
147
|
-
end
|
|
148
|
-
|
|
149
132
|
def test_subsequence
|
|
150
133
|
assert(subsequence?([1, 2, 3], [1, 2, 3]))
|
|
151
134
|
assert(subsequence?([1, 2, 3], [1, :a, 2, :b, 3]))
|
|
@@ -180,32 +163,12 @@ class UtilTest < MiniTest::Test
|
|
|
180
163
|
$stderr = old_stderr
|
|
181
164
|
end
|
|
182
165
|
|
|
183
|
-
def test_has
|
|
184
|
-
assert(has?(:instance_method, String, :chomp!))
|
|
185
|
-
assert(has?(:private_instance_method, Sass::Engine, :parse_interp))
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
def test_enum_with_index
|
|
189
|
-
assert_equal(%w[foo0 bar1 baz2],
|
|
190
|
-
enum_with_index(%w[foo bar baz]).map {|s, i| "#{s}#{i}"})
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
def test_enum_cons
|
|
194
|
-
assert_equal(%w[foobar barbaz],
|
|
195
|
-
enum_cons(%w[foo bar baz], 2).map {|s1, s2| "#{s1}#{s2}"})
|
|
196
|
-
end
|
|
197
|
-
|
|
198
166
|
def test_extract
|
|
199
167
|
arr = [1, 2, 3, 4, 5]
|
|
200
168
|
assert_equal([1, 3, 5], extract!(arr) {|e| e % 2 == 1})
|
|
201
169
|
assert_equal([2, 4], arr)
|
|
202
170
|
end
|
|
203
171
|
|
|
204
|
-
def test_ord
|
|
205
|
-
assert_equal(102, ord("f"))
|
|
206
|
-
assert_equal(98, ord("bar"))
|
|
207
|
-
end
|
|
208
|
-
|
|
209
172
|
def test_flatten_vertically
|
|
210
173
|
assert_equal([1, 2, 3], flatten_vertically([1, 2, 3]))
|
|
211
174
|
assert_equal([1, 3, 5, 2, 4, 6], flatten_vertically([[1, 2], [3, 4], [5, 6]]))
|
|
@@ -356,8 +319,10 @@ WARNING
|
|
|
356
319
|
|
|
357
320
|
def test_round_respects_precision
|
|
358
321
|
original_precision = Sass::Script::Value::Number.precision
|
|
359
|
-
assert_equal 0, Sass::Util.round(0.
|
|
360
|
-
|
|
322
|
+
assert_equal 0, Sass::Util.round(0.4999999999)
|
|
323
|
+
# 10 9s doesn't work because 0.49999999999 - 0.5 is very slightly greater
|
|
324
|
+
# than -0.1e11 due to float nonsense.
|
|
325
|
+
assert_equal 1, Sass::Util.round(0.499999999999)
|
|
361
326
|
Sass::Script::Value::Number.precision = 6
|
|
362
327
|
assert_equal 0, Sass::Util.round(0.499999)
|
|
363
328
|
assert_equal 1, Sass::Util.round(0.49999999)
|
data/test/sass-spec.yml
CHANGED
data/test/test_helper.rb
CHANGED
|
@@ -93,6 +93,45 @@ class MiniTest::Test
|
|
|
93
93
|
else
|
|
94
94
|
flunk "Expected exception on line #{line}, none raised"
|
|
95
95
|
end
|
|
96
|
+
|
|
97
|
+
def assert_sass_to_sass(sass, options: {})
|
|
98
|
+
assert_equal(sass.rstrip, to_sass(sass, options).rstrip,
|
|
99
|
+
"Expected Sass to transform to itself")
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def assert_scss_to_sass(sass, scss, options: {})
|
|
103
|
+
assert_equal(sass.rstrip, to_sass(scss, options.merge(:syntax => :scss)).rstrip,
|
|
104
|
+
"Expected SCSS to transform to Sass")
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def assert_scss_to_scss(scss, source: scss, options: {})
|
|
108
|
+
assert_equal(scss.rstrip, to_scss(source, options.merge(:syntax => :scss)).rstrip,
|
|
109
|
+
"Expected SCSS to transform to #{scss == source ? 'itself' : 'SCSS'}")
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def assert_sass_to_scss(scss, sass, options: {})
|
|
113
|
+
assert_equal(scss.rstrip, to_scss(sass, options).rstrip,
|
|
114
|
+
"Expected Sass to transform to SCSS")
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def assert_converts(sass, scss, options: {})
|
|
118
|
+
assert_sass_to_sass(sass, options: options)
|
|
119
|
+
assert_scss_to_sass(sass, scss, options: options)
|
|
120
|
+
assert_scss_to_scss(scss, options: options)
|
|
121
|
+
assert_sass_to_scss(scss, sass, options: options)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def to_sass(scss, options = {})
|
|
125
|
+
Sass::Util.silence_sass_warnings do
|
|
126
|
+
Sass::Engine.new(scss, options).to_tree.to_sass(options)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def to_scss(sass, options = {})
|
|
131
|
+
Sass::Util.silence_sass_warnings do
|
|
132
|
+
Sass::Engine.new(sass, options).to_tree.to_scss(options)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
96
135
|
end
|
|
97
136
|
|
|
98
137
|
module PublicApiLinter
|