sass 3.1.21 → 3.2.0.alpha.3
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.
- data/README.md +5 -4
- data/REVISION +1 -1
- data/Rakefile +6 -15
- data/VERSION +1 -1
- data/VERSION_NAME +1 -1
- data/lib/sass.rb +0 -1
- data/lib/sass/cache_stores/base.rb +1 -3
- data/lib/sass/cache_stores/filesystem.rb +0 -3
- data/lib/sass/css.rb +49 -145
- data/lib/sass/engine.rb +23 -47
- data/lib/sass/environment.rb +5 -30
- data/lib/sass/exec.rb +7 -30
- data/lib/sass/importers/base.rb +1 -2
- data/lib/sass/importers/filesystem.rb +13 -18
- data/lib/sass/less.rb +1 -1
- data/lib/sass/plugin.rb +8 -4
- data/lib/sass/plugin/compiler.rb +67 -93
- data/lib/sass/plugin/configuration.rb +2 -0
- data/lib/sass/plugin/staleness_checker.rb +4 -14
- data/lib/sass/repl.rb +3 -2
- data/lib/sass/script.rb +1 -0
- data/lib/sass/script/color.rb +9 -4
- data/lib/sass/script/funcall.rb +3 -16
- data/lib/sass/script/functions.rb +55 -98
- data/lib/sass/script/interpolation.rb +0 -9
- data/lib/sass/script/lexer.rb +4 -2
- data/lib/sass/script/list.rb +0 -8
- data/lib/sass/script/literal.rb +20 -5
- data/lib/sass/script/node.rb +0 -8
- data/lib/sass/script/number.rb +11 -35
- data/lib/sass/script/operation.rb +0 -16
- data/lib/sass/script/parser.rb +5 -12
- data/lib/sass/script/string_interpolation.rb +0 -9
- data/lib/sass/script/unary_operation.rb +0 -7
- data/lib/sass/script/variable.rb +1 -5
- data/lib/sass/scss/parser.rb +54 -191
- data/lib/sass/scss/rx.rb +3 -15
- data/lib/sass/scss/static_parser.rb +3 -3
- data/lib/sass/selector.rb +3 -15
- data/lib/sass/selector/abstract_sequence.rb +2 -11
- data/lib/sass/selector/comma_sequence.rb +3 -8
- data/lib/sass/selector/sequence.rb +11 -74
- data/lib/sass/selector/simple.rb +1 -7
- data/lib/sass/selector/simple_sequence.rb +8 -28
- data/lib/sass/shared.rb +5 -3
- data/lib/sass/tree/comment_node.rb +12 -25
- data/lib/sass/tree/debug_node.rb +1 -1
- data/lib/sass/tree/directive_node.rb +0 -5
- data/lib/sass/tree/each_node.rb +1 -1
- data/lib/sass/tree/extend_node.rb +1 -1
- data/lib/sass/tree/for_node.rb +2 -2
- data/lib/sass/tree/function_node.rb +1 -1
- data/lib/sass/tree/if_node.rb +14 -1
- data/lib/sass/tree/media_node.rb +4 -4
- data/lib/sass/tree/mixin_def_node.rb +1 -1
- data/lib/sass/tree/mixin_node.rb +2 -2
- data/lib/sass/tree/node.rb +26 -10
- data/lib/sass/tree/return_node.rb +1 -1
- data/lib/sass/tree/root_node.rb +1 -1
- data/lib/sass/tree/rule_node.rb +11 -9
- data/lib/sass/tree/variable_node.rb +1 -1
- data/lib/sass/tree/visitors/base.rb +1 -1
- data/lib/sass/tree/visitors/check_nesting.rb +36 -29
- data/lib/sass/tree/visitors/convert.rb +9 -16
- data/lib/sass/tree/visitors/cssize.rb +9 -40
- data/lib/sass/tree/visitors/perform.rb +23 -79
- data/lib/sass/tree/visitors/to_css.rb +21 -23
- data/lib/sass/tree/warn_node.rb +1 -1
- data/lib/sass/tree/while_node.rb +1 -1
- data/lib/sass/util.rb +9 -147
- data/lib/sass/version.rb +0 -14
- data/test/sass/cache_test.rb +0 -15
- data/test/sass/conversion_test.rb +8 -50
- data/test/sass/css2sass_test.rb +0 -33
- data/test/sass/engine_test.rb +32 -283
- data/test/sass/extend_test.rb +0 -315
- data/test/sass/functions_test.rb +23 -60
- data/test/sass/importer_test.rb +0 -110
- data/test/sass/more_results/more_import.css +2 -2
- data/test/sass/plugin_test.rb +13 -40
- data/test/sass/results/import.css +2 -2
- data/test/sass/results/import_charset.css +0 -1
- data/test/sass/results/import_charset_1_8.css +0 -1
- data/test/sass/results/import_charset_ibm866.css +0 -1
- data/test/sass/results/scss_import.css +2 -2
- data/test/sass/results/units.css +1 -1
- data/test/sass/script_conversion_test.rb +0 -2
- data/test/sass/script_test.rb +4 -28
- data/test/sass/scss/css_test.rb +1 -79
- data/test/sass/scss/scss_test.rb +16 -96
- data/test/sass/templates/import_charset.sass +0 -2
- data/test/sass/templates/import_charset_1_8.sass +0 -2
- data/test/sass/templates/import_charset_ibm866.sass +0 -2
- data/test/sass/test_helper.rb +1 -1
- data/test/sass/util_test.rb +0 -28
- data/test/test_helper.rb +0 -2
- data/vendor/{listen → fssm}/LICENSE +1 -1
- data/vendor/fssm/README.markdown +55 -0
- data/vendor/fssm/Rakefile +59 -0
- data/vendor/fssm/VERSION.yml +5 -0
- data/vendor/fssm/example.rb +9 -0
- data/vendor/fssm/fssm.gemspec +77 -0
- data/vendor/fssm/lib/fssm.rb +33 -0
- data/vendor/fssm/lib/fssm/backends/fsevents.rb +36 -0
- data/vendor/fssm/lib/fssm/backends/inotify.rb +26 -0
- data/vendor/fssm/lib/fssm/backends/polling.rb +25 -0
- data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +131 -0
- data/vendor/fssm/lib/fssm/monitor.rb +26 -0
- data/vendor/fssm/lib/fssm/path.rb +91 -0
- data/vendor/fssm/lib/fssm/pathname.rb +502 -0
- data/vendor/fssm/lib/fssm/state/directory.rb +57 -0
- data/vendor/fssm/lib/fssm/state/file.rb +24 -0
- data/vendor/fssm/lib/fssm/support.rb +63 -0
- data/vendor/fssm/lib/fssm/tree.rb +176 -0
- data/vendor/fssm/profile/prof-cache.rb +40 -0
- data/vendor/fssm/profile/prof-fssm-pathname.html +1231 -0
- data/vendor/fssm/profile/prof-pathname.rb +68 -0
- data/vendor/fssm/profile/prof-plain-pathname.html +988 -0
- data/vendor/fssm/profile/prof.html +2379 -0
- data/vendor/fssm/spec/path_spec.rb +75 -0
- data/vendor/fssm/spec/root/duck/quack.txt +0 -0
- data/vendor/fssm/spec/root/file.css +0 -0
- data/vendor/fssm/spec/root/file.rb +0 -0
- data/vendor/fssm/spec/root/file.yml +0 -0
- data/vendor/fssm/spec/root/moo/cow.txt +0 -0
- data/vendor/fssm/spec/spec_helper.rb +14 -0
- metadata +246 -281
- data/VERSION_DATE +0 -1
- data/lib/sass/logger.rb +0 -15
- data/lib/sass/logger/base.rb +0 -32
- data/lib/sass/logger/log_level.rb +0 -49
- data/lib/sass/tree/visitors/deep_copy.rb +0 -87
- data/lib/sass/tree/visitors/extend.rb +0 -42
- data/lib/sass/tree/visitors/set_options.rb +0 -97
- data/lib/sass/util/multibyte_string_scanner.rb +0 -134
- data/test/Gemfile +0 -4
- data/test/Gemfile.lock +0 -19
- data/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
- data/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
- data/test/sass/logger_test.rb +0 -58
- data/test/sass/templates/_double_import_loop2.sass +0 -1
- data/test/sass/templates/bork5.sass +0 -3
- data/test/sass/templates/double_import_loop1.sass +0 -1
- data/test/sass/templates/nested_bork5.sass +0 -2
- data/test/sass/templates/single_import_loop.sass +0 -1
- data/test/sass/util/multibyte_string_scanner_test.rb +0 -147
- data/vendor/listen/CHANGELOG.md +0 -147
- data/vendor/listen/Gemfile +0 -23
- data/vendor/listen/Guardfile +0 -8
- data/vendor/listen/README.md +0 -312
- data/vendor/listen/Rakefile +0 -47
- data/vendor/listen/Vagrantfile +0 -96
- data/vendor/listen/lib/listen.rb +0 -38
- data/vendor/listen/lib/listen/adapter.rb +0 -167
- data/vendor/listen/lib/listen/adapters/darwin.rb +0 -84
- data/vendor/listen/lib/listen/adapters/linux.rb +0 -110
- data/vendor/listen/lib/listen/adapters/polling.rb +0 -66
- data/vendor/listen/lib/listen/adapters/windows.rb +0 -81
- data/vendor/listen/lib/listen/directory_record.rb +0 -318
- data/vendor/listen/lib/listen/listener.rb +0 -203
- data/vendor/listen/lib/listen/multi_listener.rb +0 -121
- data/vendor/listen/lib/listen/turnstile.rb +0 -28
- data/vendor/listen/lib/listen/version.rb +0 -3
- data/vendor/listen/listen.gemspec +0 -26
- data/vendor/listen/spec/listen/adapter_spec.rb +0 -142
- data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -31
- data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -41
- data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
- data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -24
- data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1138
- data/vendor/listen/spec/listen/listener_spec.rb +0 -155
- data/vendor/listen/spec/listen/multi_listener_spec.rb +0 -156
- data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
- data/vendor/listen/spec/listen_spec.rb +0 -73
- data/vendor/listen/spec/spec_helper.rb +0 -18
- data/vendor/listen/spec/support/adapter_helper.rb +0 -716
- data/vendor/listen/spec/support/directory_record_helper.rb +0 -55
- data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
- data/vendor/listen/spec/support/listeners_helper.rb +0 -144
- data/vendor/listen/spec/support/platform_helper.rb +0 -11
data/lib/sass/version.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'date'
|
2
|
-
|
3
1
|
# This is necessary for loading Sass when Haml is required in Rails 3.
|
4
2
|
# Once the split is complete, we can remove it.
|
5
3
|
require File.dirname(__FILE__) + '/../sass'
|
@@ -18,7 +16,6 @@ module Sass
|
|
18
16
|
# The `:name` key has the name of the version.
|
19
17
|
# The `:string` key contains a human-readable string representation of the version.
|
20
18
|
# The `:number` key is the major, minor, and teeny keys separated by periods.
|
21
|
-
# The `:date` key, which is not guaranteed to be defined, is the [DateTime] at which this release was cut.
|
22
19
|
# If Sass is checked out from Git, the `:rev` key will have the revision hash.
|
23
20
|
# For example:
|
24
21
|
#
|
@@ -26,7 +23,6 @@ module Sass
|
|
26
23
|
# :string => "2.1.0.9616393",
|
27
24
|
# :rev => "9616393b8924ef36639c7e82aa88a51a24d16949",
|
28
25
|
# :number => "2.1.0",
|
29
|
-
# :date => DateTime.parse("Apr 30 13:52:01 2009 -0700"),
|
30
26
|
# :major => 2, :minor => 1, :teeny => 0
|
31
27
|
# }
|
32
28
|
#
|
@@ -40,7 +36,6 @@ module Sass
|
|
40
36
|
# {
|
41
37
|
# :string => "3.0.beta.1",
|
42
38
|
# :number => "3.0.beta.1",
|
43
|
-
# :date => DateTime.parse("Mar 31 00:38:04 2010 -0700"),
|
44
39
|
# :major => 3, :minor => 0, :teeny => -1,
|
45
40
|
# :prerelease => "beta",
|
46
41
|
# :prerelease_number => 1
|
@@ -60,10 +55,6 @@ module Sass
|
|
60
55
|
:name => name
|
61
56
|
}
|
62
57
|
|
63
|
-
if date = version_date
|
64
|
-
@@version[:date] = date
|
65
|
-
end
|
66
|
-
|
67
58
|
if numbers[3].is_a?(String)
|
68
59
|
@@version[:teeny] = -1
|
69
60
|
@@version[:prerelease] = numbers[3]
|
@@ -110,11 +101,6 @@ module Sass
|
|
110
101
|
end
|
111
102
|
return nil
|
112
103
|
end
|
113
|
-
|
114
|
-
def version_date
|
115
|
-
return unless File.exists?(scope('VERSION_DATE'))
|
116
|
-
return DateTime.parse(File.read(scope('VERSION_DATE')).strip)
|
117
|
-
end
|
118
104
|
end
|
119
105
|
|
120
106
|
extend Sass::Version
|
data/test/sass/cache_test.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require File.dirname(__FILE__) + '/../test_helper'
|
3
|
-
require File.dirname(__FILE__) + '/test_helper'
|
4
3
|
require 'sass/engine'
|
5
4
|
|
6
5
|
class CacheTest < Test::Unit::TestCase
|
@@ -12,7 +11,6 @@ class CacheTest < Test::Unit::TestCase
|
|
12
11
|
|
13
12
|
def teardown
|
14
13
|
FileUtils.rm_rf @@cache_dir
|
15
|
-
clean_up_sassc
|
16
14
|
end
|
17
15
|
|
18
16
|
def test_file_cache_writes_a_file
|
@@ -66,19 +64,6 @@ class CacheTest < Test::Unit::TestCase
|
|
66
64
|
assert_equal an_object, cache.retrieve("an_object", "")
|
67
65
|
end
|
68
66
|
|
69
|
-
class Unmarshalable
|
70
|
-
def _dump(_)
|
71
|
-
raise 'Unmarshalable'
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_cache_node_with_unmarshalable_option
|
76
|
-
engine = Sass::Engine.new("foo {a: b + c}",
|
77
|
-
:syntax => :scss, :object => Unmarshalable.new, :filename => 'file.scss',
|
78
|
-
:importer => Sass::Importers::Filesystem.new(absolutize('templates')))
|
79
|
-
engine.to_tree
|
80
|
-
end
|
81
|
-
|
82
67
|
private
|
83
68
|
def root_node
|
84
69
|
Sass::Engine.new(<<-SCSS, :syntax => :scss).to_tree
|
@@ -180,7 +180,7 @@ SCSS
|
|
180
180
|
def test_multiline_properties
|
181
181
|
assert_scss_to_sass <<SASS, <<SCSS
|
182
182
|
foo bar
|
183
|
-
baz: bip
|
183
|
+
baz: bip bam boon
|
184
184
|
SASS
|
185
185
|
foo bar {
|
186
186
|
baz:
|
@@ -191,7 +191,7 @@ SCSS
|
|
191
191
|
|
192
192
|
assert_scss_to_scss <<OUT, <<IN
|
193
193
|
foo bar {
|
194
|
-
baz: bip
|
194
|
+
baz: bip bam boon; }
|
195
195
|
OUT
|
196
196
|
foo bar {
|
197
197
|
baz:
|
@@ -771,16 +771,6 @@ SASS
|
|
771
771
|
SCSS
|
772
772
|
end
|
773
773
|
|
774
|
-
def test_comma_extendee
|
775
|
-
assert_renders <<SASS, <<SCSS
|
776
|
-
.baz
|
777
|
-
@extend .foo, .bar
|
778
|
-
SASS
|
779
|
-
.baz {
|
780
|
-
@extend .foo, .bar; }
|
781
|
-
SCSS
|
782
|
-
end
|
783
|
-
|
784
774
|
def test_argless_mixin_definition
|
785
775
|
assert_renders <<SASS, <<SCSS
|
786
776
|
=foo-bar
|
@@ -1141,13 +1131,17 @@ div
|
|
1141
1131
|
SASS
|
1142
1132
|
end
|
1143
1133
|
|
1144
|
-
|
1134
|
+
def test_loud_comment_conversion
|
1145
1135
|
assert_renders(<<SASS, <<SCSS)
|
1146
1136
|
/*! \#{"interpolated"}
|
1137
|
+
/*!
|
1138
|
+
* \#{"also interpolated"}
|
1147
1139
|
SASS
|
1148
1140
|
/*! \#{"interpolated"} */
|
1141
|
+
/*!
|
1142
|
+
* \#{"also interpolated"} */
|
1149
1143
|
SCSS
|
1150
|
-
|
1144
|
+
assert_renders(<<SASS, <<SCSS)
|
1151
1145
|
//! \#{"interpolated"}
|
1152
1146
|
//!
|
1153
1147
|
//! \#{"also interpolated"}
|
@@ -1158,42 +1152,6 @@ SASS
|
|
1158
1152
|
SCSS
|
1159
1153
|
end
|
1160
1154
|
|
1161
|
-
## Regression Tests
|
1162
|
-
|
1163
|
-
def test_empty_lists
|
1164
|
-
assert_renders(<<SASS, <<SCSS)
|
1165
|
-
$foo: ()
|
1166
|
-
SASS
|
1167
|
-
$foo: ();
|
1168
|
-
SCSS
|
1169
|
-
end
|
1170
|
-
|
1171
|
-
def test_nested_if_statements
|
1172
|
-
assert_renders(<<SASS, <<SCSS)
|
1173
|
-
@if $foo
|
1174
|
-
one
|
1175
|
-
a: b
|
1176
|
-
@else
|
1177
|
-
@if $bar
|
1178
|
-
two
|
1179
|
-
a: b
|
1180
|
-
@else
|
1181
|
-
three
|
1182
|
-
a: b
|
1183
|
-
SASS
|
1184
|
-
@if $foo {
|
1185
|
-
one {
|
1186
|
-
a: b; } }
|
1187
|
-
@else {
|
1188
|
-
@if $bar {
|
1189
|
-
two {
|
1190
|
-
a: b; } }
|
1191
|
-
@else {
|
1192
|
-
three {
|
1193
|
-
a: b; } } }
|
1194
|
-
SCSS
|
1195
|
-
end
|
1196
|
-
|
1197
1155
|
private
|
1198
1156
|
|
1199
1157
|
def assert_sass_to_sass(sass, options = {})
|
data/test/sass/css2sass_test.rb
CHANGED
@@ -268,39 +268,6 @@ SASS
|
|
268
268
|
CSS
|
269
269
|
end
|
270
270
|
|
271
|
-
def test_double_comma
|
272
|
-
assert_equal(<<SASS, css2sass(<<CSS))
|
273
|
-
foo, bar
|
274
|
-
a: b
|
275
|
-
SASS
|
276
|
-
foo, , bar { a: b }
|
277
|
-
CSS
|
278
|
-
end
|
279
|
-
|
280
|
-
def test_selector_splitting
|
281
|
-
assert_equal(<<SASS, css2sass(<<CSS))
|
282
|
-
.foo >
|
283
|
-
.bar
|
284
|
-
a: b
|
285
|
-
.baz
|
286
|
-
c: d
|
287
|
-
SASS
|
288
|
-
.foo>.bar {a: b}
|
289
|
-
.foo>.baz {c: d}
|
290
|
-
CSS
|
291
|
-
|
292
|
-
assert_equal(<<SASS, css2sass(<<CSS))
|
293
|
-
.foo
|
294
|
-
&::bar
|
295
|
-
a: b
|
296
|
-
&::baz
|
297
|
-
c: d
|
298
|
-
SASS
|
299
|
-
.foo::bar {a: b}
|
300
|
-
.foo::baz {c: d}
|
301
|
-
CSS
|
302
|
-
end
|
303
|
-
|
304
271
|
# Error reporting
|
305
272
|
|
306
273
|
def test_error_reporting
|
data/test/sass/engine_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'test_helper'
|
4
|
+
require 'sass/test_helper'
|
5
5
|
require 'sass/engine'
|
6
6
|
require 'stringio'
|
7
7
|
require 'mock_importer'
|
@@ -57,14 +57,16 @@ MSG
|
|
57
57
|
"& a\n :b c" => ["Base-level rules cannot contain the parent-selector-referencing character '&'.", 1],
|
58
58
|
"a\n :b\n c" => "Illegal nesting: Only properties may be nested beneath properties.",
|
59
59
|
"$a: b\n :c d\n" => "Illegal nesting: Nothing may be nested beneath variable declarations.",
|
60
|
+
"@import foo.sass" => "File to import not found or unreadable: foo.sass.",
|
60
61
|
"$a: b\n :c d\n" => "Illegal nesting: Nothing may be nested beneath variable declarations.",
|
62
|
+
"@import foo.sass" => <<MSG,
|
63
|
+
File to import not found or unreadable: foo.sass.
|
64
|
+
Load path: .
|
65
|
+
MSG
|
61
66
|
"@import templates/basic\n foo" => "Illegal nesting: Nothing may be nested beneath import directives.",
|
62
67
|
"foo\n @import foo.css" => "CSS import directives may only be used at the root of a document.",
|
63
68
|
"@if true\n @import foo" => "Import directives may not be used within control directives or mixins.",
|
64
|
-
"@if true\n .foo\n @import foo" => "Import directives may not be used within control directives or mixins.",
|
65
69
|
"@mixin foo\n @import foo" => "Import directives may not be used within control directives or mixins.",
|
66
|
-
"@mixin foo\n .foo\n @import foo" => "Import directives may not be used within control directives or mixins.",
|
67
|
-
"@import foo;" => "Invalid @import: expected end of line, was \";\".",
|
68
70
|
'$foo: "bar" "baz" !' => %Q{Invalid CSS after ""bar" "baz" ": expected expression (e.g. 1px, bold), was "!"},
|
69
71
|
'$foo: "bar" "baz" $' => %Q{Invalid CSS after ""bar" "baz" ": expected expression (e.g. 1px, bold), was "$"},
|
70
72
|
"=foo\n :color red\n.bar\n +bang" => "Undefined mixin 'bang'.",
|
@@ -142,7 +144,6 @@ MSG
|
|
142
144
|
"$var: true\n@while $var\n @extend .bar\n $var: false" => ["Extend directives may only be used within rules.", 3],
|
143
145
|
"@for $i from 0 to 1\n @extend .bar" => ["Extend directives may only be used within rules.", 2],
|
144
146
|
"@mixin foo\n @extend .bar\n@include foo" => ["Extend directives may only be used within rules.", 2],
|
145
|
-
"@import \"foo\" // bar" => "Invalid @import: \"\"foo\" // bar\"",
|
146
147
|
|
147
148
|
# Regression tests
|
148
149
|
"a\n b:\n c\n d" => ["Illegal nesting: Only properties may be nested beneath properties.", 3],
|
@@ -262,7 +263,7 @@ SASS
|
|
262
263
|
end
|
263
264
|
|
264
265
|
def test_imported_exception
|
265
|
-
[1, 2, 3, 4
|
266
|
+
[1, 2, 3, 4].each do |i|
|
266
267
|
begin
|
267
268
|
Sass::Engine.new("@import bork#{i}", :load_paths => [File.dirname(__FILE__) + '/templates/']).render
|
268
269
|
rescue Sass::SyntaxError => err
|
@@ -284,7 +285,7 @@ SASS
|
|
284
285
|
end
|
285
286
|
|
286
287
|
def test_double_imported_exception
|
287
|
-
[1, 2, 3, 4
|
288
|
+
[1, 2, 3, 4].each do |i|
|
288
289
|
begin
|
289
290
|
Sass::Engine.new("@import nested_bork#{i}", :load_paths => [File.dirname(__FILE__) + '/templates/']).render
|
290
291
|
rescue Sass::SyntaxError => err
|
@@ -309,23 +310,6 @@ SASS
|
|
309
310
|
end
|
310
311
|
end
|
311
312
|
|
312
|
-
def test_selector_tracing
|
313
|
-
actual_css = render(<<-SCSS, :syntax => :scss, :trace_selectors => true)
|
314
|
-
@mixin mixed {
|
315
|
-
.mixed { color: red; }
|
316
|
-
}
|
317
|
-
.context {
|
318
|
-
@include mixed;
|
319
|
-
}
|
320
|
-
SCSS
|
321
|
-
assert_equal(<<CSS,actual_css)
|
322
|
-
/* on line 2 of test_selector_tracing_inline.scss, in `mixed'
|
323
|
-
from line 5 of test_selector_tracing_inline.scss */
|
324
|
-
.context .mixed {
|
325
|
-
color: red; }
|
326
|
-
CSS
|
327
|
-
end
|
328
|
-
|
329
313
|
def test_mixin_exception
|
330
314
|
render(<<SASS)
|
331
315
|
=error-mixin($a)
|
@@ -473,53 +457,6 @@ MESSAGE
|
|
473
457
|
assert_hash_has(err.sass_backtrace[2], :mixin => "foo", :line => 2)
|
474
458
|
end
|
475
459
|
|
476
|
-
def test_basic_import_loop_exception
|
477
|
-
import = filename_for_test
|
478
|
-
importer = MockImporter.new
|
479
|
-
importer.add_import(import, "@import '#{import}'")
|
480
|
-
|
481
|
-
engine = Sass::Engine.new("@import '#{import}'", :filename => import,
|
482
|
-
:load_paths => [importer])
|
483
|
-
|
484
|
-
assert_raise_message(Sass::SyntaxError, <<ERR.rstrip) {engine.render}
|
485
|
-
An @import loop has been found: #{import} imports itself
|
486
|
-
ERR
|
487
|
-
end
|
488
|
-
|
489
|
-
def test_double_import_loop_exception
|
490
|
-
importer = MockImporter.new
|
491
|
-
importer.add_import("foo", "@import 'bar'")
|
492
|
-
importer.add_import("bar", "@import 'foo'")
|
493
|
-
|
494
|
-
engine = Sass::Engine.new('@import "foo"', :filename => filename_for_test,
|
495
|
-
:load_paths => [importer])
|
496
|
-
|
497
|
-
assert_raise_message(Sass::SyntaxError, <<ERR.rstrip) {engine.render}
|
498
|
-
An @import loop has been found:
|
499
|
-
#{filename_for_test} imports foo
|
500
|
-
foo imports bar
|
501
|
-
bar imports foo
|
502
|
-
ERR
|
503
|
-
end
|
504
|
-
|
505
|
-
def test_deep_import_loop_exception
|
506
|
-
importer = MockImporter.new
|
507
|
-
importer.add_import("foo", "@import 'bar'")
|
508
|
-
importer.add_import("bar", "@import 'baz'")
|
509
|
-
importer.add_import("baz", "@import 'foo'")
|
510
|
-
|
511
|
-
engine = Sass::Engine.new('@import "foo"', :filename => filename_for_test,
|
512
|
-
:load_paths => [importer])
|
513
|
-
|
514
|
-
assert_raise_message(Sass::SyntaxError, <<ERR.rstrip) {engine.render}
|
515
|
-
An @import loop has been found:
|
516
|
-
#{filename_for_test} imports foo
|
517
|
-
foo imports bar
|
518
|
-
bar imports baz
|
519
|
-
baz imports foo
|
520
|
-
ERR
|
521
|
-
end
|
522
|
-
|
523
460
|
def test_exception_css_with_offset
|
524
461
|
opts = {:full_exception => true, :line => 362}
|
525
462
|
render(("a\n b: c\n" * 10) + "d\n e:\n" + ("f\n g: h\n" * 10), opts)
|
@@ -611,21 +548,13 @@ CSS
|
|
611
548
|
end
|
612
549
|
|
613
550
|
def test_http_import
|
614
|
-
assert_equal("@import
|
551
|
+
assert_equal("@import url(http://fonts.googleapis.com/css?family=Droid+Sans);\n",
|
615
552
|
render("@import \"http://fonts.googleapis.com/css?family=Droid+Sans\""))
|
616
553
|
end
|
617
554
|
|
618
|
-
def
|
619
|
-
|
620
|
-
|
621
|
-
@import directives using \#{} interpolation will need to use url() in Sass 3.2.
|
622
|
-
For example:
|
623
|
-
|
624
|
-
@import url("http://\#{$url}/style.css");
|
625
|
-
WARNING
|
626
|
-
assert_equal("@import \"http://fonts.googleapis.com/css?family=Droid+Sans\";\n",
|
627
|
-
render("$family: unquote(\"Droid+Sans\")\n@import \"http://fonts.googleapis.com/css?family=\#{$family}\"\n"))
|
628
|
-
end
|
555
|
+
def test_http_import_with_interpolation
|
556
|
+
assert_equal("@import url(http://fonts.googleapis.com/css?family=Droid+Sans);\n",
|
557
|
+
render("$family: unquote(\"Droid+Sans\")\n@import \"http://fonts.googleapis.com/css?family=\#{$family}\"\n"))
|
629
558
|
assert_equal("@import url(\"http://fonts.googleapis.com/css?family=Droid+Sans\");\n",
|
630
559
|
render("$family: unquote(\"Droid+Sans\")\n@import url(\"http://fonts.googleapis.com/css?family=\#{$family}\")\n"))
|
631
560
|
end
|
@@ -650,21 +579,12 @@ WARNING
|
|
650
579
|
assert File.exists?(sassc_file)
|
651
580
|
end
|
652
581
|
|
653
|
-
def test_nonexistent_import
|
654
|
-
assert_raise_message(Sass::SyntaxError, <<ERR.rstrip) do
|
655
|
-
File to import not found or unreadable: nonexistent.sass.
|
656
|
-
Load path: #{Dir.pwd}
|
657
|
-
ERR
|
658
|
-
render("@import nonexistent.sass")
|
659
|
-
end
|
660
|
-
end
|
661
|
-
|
662
582
|
def test_nonexistent_extensionless_import
|
663
583
|
assert_raise_message(Sass::SyntaxError, <<ERR.rstrip) do
|
664
584
|
File to import not found or unreadable: nonexistent.
|
665
|
-
Load path:
|
585
|
+
Load path: .
|
666
586
|
ERR
|
667
|
-
render("@import nonexistent")
|
587
|
+
assert_equal("@import url(nonexistent.css);\n", render("@import nonexistent"))
|
668
588
|
end
|
669
589
|
end
|
670
590
|
|
@@ -1017,23 +937,6 @@ foo
|
|
1017
937
|
SASS
|
1018
938
|
end
|
1019
939
|
|
1020
|
-
def test_debug_info_in_keyframes
|
1021
|
-
assert_equal(<<CSS, render(<<SASS, :debug_info => true))
|
1022
|
-
@-webkit-keyframes warm {
|
1023
|
-
from {
|
1024
|
-
color: black; }
|
1025
|
-
|
1026
|
-
to {
|
1027
|
-
color: red; } }
|
1028
|
-
CSS
|
1029
|
-
@-webkit-keyframes warm
|
1030
|
-
from
|
1031
|
-
color: black
|
1032
|
-
to
|
1033
|
-
color: red
|
1034
|
-
SASS
|
1035
|
-
end
|
1036
|
-
|
1037
940
|
def test_empty_first_line
|
1038
941
|
assert_equal("#a {\n b: c; }\n", render("#a\n\n b: c"))
|
1039
942
|
end
|
@@ -1278,18 +1181,6 @@ bar
|
|
1278
1181
|
SASS
|
1279
1182
|
end
|
1280
1183
|
|
1281
|
-
def test_control_directive_in_nested_property
|
1282
|
-
assert_equal(<<CSS, render(<<SASS))
|
1283
|
-
foo {
|
1284
|
-
a-b: c; }
|
1285
|
-
CSS
|
1286
|
-
foo
|
1287
|
-
a:
|
1288
|
-
@if true
|
1289
|
-
b: c
|
1290
|
-
SASS
|
1291
|
-
end
|
1292
|
-
|
1293
1184
|
def test_interpolation
|
1294
1185
|
assert_equal("a-1 {\n b-2-3: c-3; }\n", render(<<SASS))
|
1295
1186
|
$a: 1
|
@@ -1657,11 +1548,11 @@ foo
|
|
1657
1548
|
*/
|
1658
1549
|
SASS
|
1659
1550
|
end
|
1660
|
-
|
1661
1551
|
def test_loud_comment_in_silent_comment
|
1662
|
-
|
1552
|
+
assert_equal <<CSS, render(<<SASS, :style => :compressed)
|
1663
1553
|
foo{color:blue;/* foo */
|
1664
1554
|
/* bar */
|
1555
|
+
/* */
|
1665
1556
|
/* bip */
|
1666
1557
|
/* baz */}
|
1667
1558
|
CSS
|
@@ -1677,7 +1568,8 @@ SASS
|
|
1677
1568
|
|
1678
1569
|
def test_loud_comment_is_evaluated
|
1679
1570
|
assert_equal <<CSS, render(<<SASS)
|
1680
|
-
/*
|
1571
|
+
/*
|
1572
|
+
* Hue: 327.216deg */
|
1681
1573
|
CSS
|
1682
1574
|
/*!
|
1683
1575
|
Hue: \#{hue(#f836a0)}
|
@@ -1880,22 +1772,22 @@ SASS
|
|
1880
1772
|
|
1881
1773
|
def test_interpolation_doesnt_deep_unquote_strings
|
1882
1774
|
assert_equal(<<CSS, render(<<SASS))
|
1883
|
-
.foo {
|
1884
|
-
a:
|
1775
|
+
.foo- "bar" "baz" {
|
1776
|
+
a: b; }
|
1885
1777
|
CSS
|
1886
|
-
.foo
|
1887
|
-
a:
|
1778
|
+
.foo-\#{"bar" "baz"}
|
1779
|
+
a: b
|
1888
1780
|
SASS
|
1889
1781
|
end
|
1890
1782
|
|
1891
1783
|
def test_warn_directive
|
1892
1784
|
expected_warning = <<EXPECTATION
|
1893
1785
|
WARNING: this is a warning
|
1894
|
-
|
1786
|
+
on line 4 of test_warn_directive_inline.sass
|
1895
1787
|
|
1896
1788
|
WARNING: this is a mixin warning
|
1897
|
-
|
1898
|
-
|
1789
|
+
on line 2 of test_warn_directive_inline.sass, in `foo'
|
1790
|
+
from line 7 of test_warn_directive_inline.sass
|
1899
1791
|
EXPECTATION
|
1900
1792
|
assert_warning expected_warning do
|
1901
1793
|
assert_equal <<CSS, render(<<SASS)
|
@@ -1925,15 +1817,15 @@ SASS
|
|
1925
1817
|
def test_warn_with_imports
|
1926
1818
|
expected_warning = <<WARN
|
1927
1819
|
WARNING: In the main file
|
1928
|
-
|
1820
|
+
on line 1 of #{File.dirname(__FILE__)}/templates/warn.sass
|
1929
1821
|
|
1930
1822
|
WARNING: Imported
|
1931
|
-
|
1932
|
-
|
1823
|
+
on line 1 of #{File.dirname(__FILE__)}/templates/warn_imported.sass
|
1824
|
+
from line 2 of #{File.dirname(__FILE__)}/templates/warn.sass
|
1933
1825
|
|
1934
1826
|
WARNING: In an imported mixin
|
1935
|
-
|
1936
|
-
|
1827
|
+
on line 4 of #{File.dirname(__FILE__)}/templates/warn_imported.sass, in `emits-a-warning'
|
1828
|
+
from line 3 of #{File.dirname(__FILE__)}/templates/warn.sass
|
1937
1829
|
WARN
|
1938
1830
|
assert_warning expected_warning do
|
1939
1831
|
renders_correctly "warn", :style => :compact, :load_paths => [File.dirname(__FILE__) + "/templates"]
|
@@ -2054,19 +1946,6 @@ CSS
|
|
2054
1946
|
SASS
|
2055
1947
|
end
|
2056
1948
|
|
2057
|
-
def test_double_media_bubbling_with_commas
|
2058
|
-
assert_equal <<CSS, render(<<SASS)
|
2059
|
-
@media foo and baz, foo and bang, bar and baz, bar and bang {
|
2060
|
-
.foo {
|
2061
|
-
c: d; } }
|
2062
|
-
CSS
|
2063
|
-
@media foo, bar
|
2064
|
-
@media baz, bang
|
2065
|
-
.foo
|
2066
|
-
c: d
|
2067
|
-
SASS
|
2068
|
-
end
|
2069
|
-
|
2070
1949
|
def test_rule_media_rule_bubbling
|
2071
1950
|
assert_equal <<CSS, render(<<SASS)
|
2072
1951
|
@media bar {
|
@@ -2129,49 +2008,6 @@ CSS
|
|
2129
2008
|
|
2130
2009
|
# Regression tests
|
2131
2010
|
|
2132
|
-
def test_tricky_mixin_loop_exception
|
2133
|
-
render <<SASS
|
2134
|
-
@mixin foo($a)
|
2135
|
-
@if $a
|
2136
|
-
@include foo(false)
|
2137
|
-
@include foo(true)
|
2138
|
-
@else
|
2139
|
-
a: b
|
2140
|
-
|
2141
|
-
a
|
2142
|
-
@include foo(true)
|
2143
|
-
SASS
|
2144
|
-
assert(false, "Exception not raised")
|
2145
|
-
rescue Sass::SyntaxError => err
|
2146
|
-
assert_equal("An @include loop has been found: foo includes itself", err.message)
|
2147
|
-
assert_hash_has(err.sass_backtrace[0], :mixin => "foo", :line => 3)
|
2148
|
-
end
|
2149
|
-
|
2150
|
-
def test_interpolated_comment_in_mixin
|
2151
|
-
assert_equal <<CSS, render(<<SASS)
|
2152
|
-
/* color: red */
|
2153
|
-
.foo {
|
2154
|
-
color: red; }
|
2155
|
-
|
2156
|
-
/* color: blue */
|
2157
|
-
.foo {
|
2158
|
-
color: blue; }
|
2159
|
-
|
2160
|
-
/* color: green */
|
2161
|
-
.foo {
|
2162
|
-
color: green; }
|
2163
|
-
CSS
|
2164
|
-
=foo($var)
|
2165
|
-
/*! color: \#{$var}
|
2166
|
-
.foo
|
2167
|
-
color: $var
|
2168
|
-
|
2169
|
-
+foo(red)
|
2170
|
-
+foo(blue)
|
2171
|
-
+foo(green)
|
2172
|
-
SASS
|
2173
|
-
end
|
2174
|
-
|
2175
2011
|
def test_parens_in_mixins
|
2176
2012
|
assert_equal(<<CSS, render(<<SASS))
|
2177
2013
|
.foo {
|
@@ -2450,16 +2286,7 @@ SASS
|
|
2450
2286
|
WARNING:
|
2451
2287
|
On line 1 of 'test_comment_interpolation_warning_inline.sass'
|
2452
2288
|
Comments will evaluate the contents of interpolations (\#{ ... }) in Sass 3.2.
|
2453
|
-
Please escape the interpolation by adding a backslash before the
|
2454
|
-
END
|
2455
|
-
end
|
2456
|
-
|
2457
|
-
def test_loud_silent_comment_warning
|
2458
|
-
assert_warning(<<END) {render("//! \#{foo}")}
|
2459
|
-
WARNING:
|
2460
|
-
On line 1 of 'test_loud_silent_comment_warning_inline.sass'
|
2461
|
-
`//` comments will no longer be allowed to use the `!` flag in Sass 3.2.
|
2462
|
-
Please change to `/*` comments.
|
2289
|
+
Please escape the interpolation by adding a backslash before the hash sign.
|
2463
2290
|
END
|
2464
2291
|
end
|
2465
2292
|
|
@@ -2476,38 +2303,6 @@ CSS
|
|
2476
2303
|
SASS
|
2477
2304
|
end
|
2478
2305
|
|
2479
|
-
def test_selector_compression
|
2480
|
-
assert_equal <<CSS, render(<<SASS, :style => :compressed)
|
2481
|
-
a>b,c+d,:-moz-any(e,f,g){h:i}
|
2482
|
-
CSS
|
2483
|
-
a > b, c + d, :-moz-any(e, f, g)
|
2484
|
-
h: i
|
2485
|
-
SASS
|
2486
|
-
end
|
2487
|
-
|
2488
|
-
def test_comment_like_selector
|
2489
|
-
assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "": expected selector, was "/ foo"') {render(<<SASS)}
|
2490
|
-
/ foo
|
2491
|
-
a: b
|
2492
|
-
SASS
|
2493
|
-
end
|
2494
|
-
|
2495
|
-
def test_nested_empty_directive
|
2496
|
-
assert_equal <<CSS, render(<<SASS)
|
2497
|
-
@media screen {
|
2498
|
-
.foo {
|
2499
|
-
a: b; }
|
2500
|
-
|
2501
|
-
@unknown-directive; }
|
2502
|
-
CSS
|
2503
|
-
@media screen
|
2504
|
-
.foo
|
2505
|
-
a: b
|
2506
|
-
|
2507
|
-
@unknown-directive
|
2508
|
-
SASS
|
2509
|
-
end
|
2510
|
-
|
2511
2306
|
# Encodings
|
2512
2307
|
|
2513
2308
|
unless Sass::Util.ruby1_8?
|
@@ -2620,31 +2415,6 @@ CSS
|
|
2620
2415
|
a: b
|
2621
2416
|
SASS
|
2622
2417
|
end
|
2623
|
-
|
2624
|
-
# Encoding Regression Test
|
2625
|
-
|
2626
|
-
def test_multibyte_prop_name
|
2627
|
-
assert_equal(<<CSS, render(<<SASS))
|
2628
|
-
@charset "UTF-8";
|
2629
|
-
#bar {
|
2630
|
-
cölor: blue; }
|
2631
|
-
CSS
|
2632
|
-
#bar
|
2633
|
-
cölor: blue
|
2634
|
-
SASS
|
2635
|
-
end
|
2636
|
-
|
2637
|
-
def test_multibyte_and_interpolation
|
2638
|
-
assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))
|
2639
|
-
#bar {
|
2640
|
-
background: a 0%; }
|
2641
|
-
CSS
|
2642
|
-
#bar {
|
2643
|
-
//
|
2644
|
-
background: \#{a} 0%;
|
2645
|
-
}
|
2646
|
-
SCSS
|
2647
|
-
end
|
2648
2418
|
end
|
2649
2419
|
|
2650
2420
|
def test_original_filename_set
|
@@ -2660,27 +2430,6 @@ SCSS
|
|
2660
2430
|
assert_equal original_filename, importer.engine("imported").options[:original_filename]
|
2661
2431
|
end
|
2662
2432
|
|
2663
|
-
def test_deprecated_PRECISION
|
2664
|
-
assert_warning(<<END) {assert_equal 1000.0, Sass::Script::Number::PRECISION}
|
2665
|
-
Sass::Script::Number::PRECISION is deprecated and will be removed in a future release. Use Sass::Script::Number.precision_factor instead.
|
2666
|
-
END
|
2667
|
-
end
|
2668
|
-
def test_changing_precision
|
2669
|
-
begin
|
2670
|
-
Sass::Script::Number.precision = 8
|
2671
|
-
assert_equal <<CSS, render(<<SASS)
|
2672
|
-
div {
|
2673
|
-
maximum: 1.00000001;
|
2674
|
-
too-much: 1.0; }
|
2675
|
-
CSS
|
2676
|
-
div
|
2677
|
-
maximum : 1.00000001
|
2678
|
-
too-much: 1.000000001
|
2679
|
-
SASS
|
2680
|
-
ensure
|
2681
|
-
Sass::Script::Number.precision = 3
|
2682
|
-
end
|
2683
|
-
end
|
2684
2433
|
|
2685
2434
|
private
|
2686
2435
|
|