sass 3.3.0 → 3.4.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/MIT-LICENSE +1 -1
- data/README.md +58 -50
- data/Rakefile +1 -4
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/VERSION_NAME +1 -1
- data/bin/sass +1 -1
- data/bin/scss +1 -1
- data/lib/sass/cache_stores/filesystem.rb +6 -2
- data/lib/sass/css.rb +1 -3
- data/lib/sass/engine.rb +37 -46
- data/lib/sass/environment.rb +13 -17
- data/lib/sass/error.rb +6 -9
- data/lib/sass/exec/base.rb +187 -0
- data/lib/sass/exec/sass_convert.rb +264 -0
- data/lib/sass/exec/sass_scss.rb +424 -0
- data/lib/sass/exec.rb +5 -771
- data/lib/sass/features.rb +7 -0
- data/lib/sass/importers/base.rb +7 -2
- data/lib/sass/importers/filesystem.rb +9 -25
- data/lib/sass/importers.rb +0 -1
- data/lib/sass/media.rb +1 -4
- data/lib/sass/plugin/compiler.rb +200 -83
- data/lib/sass/plugin/staleness_checker.rb +1 -1
- data/lib/sass/plugin.rb +3 -3
- data/lib/sass/script/css_lexer.rb +1 -1
- data/lib/sass/script/functions.rb +622 -268
- data/lib/sass/script/lexer.rb +99 -34
- data/lib/sass/script/parser.rb +24 -23
- data/lib/sass/script/tree/funcall.rb +1 -1
- data/lib/sass/script/tree/interpolation.rb +20 -2
- data/lib/sass/script/tree/selector.rb +26 -0
- data/lib/sass/script/tree/string_interpolation.rb +1 -1
- data/lib/sass/script/tree.rb +1 -0
- data/lib/sass/script/value/base.rb +7 -5
- data/lib/sass/script/value/bool.rb +0 -5
- data/lib/sass/script/value/color.rb +39 -21
- data/lib/sass/script/value/helpers.rb +107 -0
- data/lib/sass/script/value/list.rb +0 -15
- data/lib/sass/script/value/null.rb +0 -5
- data/lib/sass/script/value/number.rb +62 -14
- data/lib/sass/script/value/string.rb +59 -11
- data/lib/sass/script/value.rb +0 -1
- data/lib/sass/scss/css_parser.rb +8 -2
- data/lib/sass/scss/parser.rb +190 -328
- data/lib/sass/scss/rx.rb +15 -6
- data/lib/sass/scss/static_parser.rb +298 -1
- data/lib/sass/selector/abstract_sequence.rb +28 -13
- data/lib/sass/selector/comma_sequence.rb +92 -13
- data/lib/sass/selector/pseudo.rb +256 -0
- data/lib/sass/selector/sequence.rb +94 -24
- data/lib/sass/selector/simple.rb +14 -25
- data/lib/sass/selector/simple_sequence.rb +97 -33
- data/lib/sass/selector.rb +57 -194
- data/lib/sass/shared.rb +1 -1
- data/lib/sass/source/map.rb +26 -12
- data/lib/sass/stack.rb +0 -6
- data/lib/sass/supports.rb +2 -3
- data/lib/sass/tree/at_root_node.rb +1 -0
- data/lib/sass/tree/charset_node.rb +1 -1
- data/lib/sass/tree/directive_node.rb +8 -2
- data/lib/sass/tree/error_node.rb +18 -0
- data/lib/sass/tree/extend_node.rb +1 -1
- data/lib/sass/tree/function_node.rb +4 -0
- data/lib/sass/tree/keyframe_rule_node.rb +15 -0
- data/lib/sass/tree/prop_node.rb +1 -1
- data/lib/sass/tree/rule_node.rb +12 -7
- data/lib/sass/tree/visitors/check_nesting.rb +38 -10
- data/lib/sass/tree/visitors/convert.rb +16 -18
- data/lib/sass/tree/visitors/cssize.rb +29 -29
- data/lib/sass/tree/visitors/deep_copy.rb +5 -0
- data/lib/sass/tree/visitors/perform.rb +45 -33
- data/lib/sass/tree/visitors/set_options.rb +14 -0
- data/lib/sass/tree/visitors/to_css.rb +15 -14
- data/lib/sass/util/subset_map.rb +1 -1
- data/lib/sass/util.rb +222 -99
- data/lib/sass/version.rb +5 -5
- data/lib/sass.rb +0 -5
- data/test/sass/cache_test.rb +62 -20
- data/test/sass/callbacks_test.rb +1 -1
- data/test/sass/compiler_test.rb +19 -10
- data/test/sass/conversion_test.rb +58 -1
- data/test/sass/css2sass_test.rb +23 -4
- data/test/sass/encoding_test.rb +219 -0
- data/test/sass/engine_test.rb +136 -199
- data/test/sass/exec_test.rb +2 -2
- data/test/sass/extend_test.rb +236 -19
- data/test/sass/functions_test.rb +295 -253
- data/test/sass/importer_test.rb +31 -21
- data/test/sass/logger_test.rb +1 -1
- data/test/sass/more_results/more_import.css +1 -1
- data/test/sass/plugin_test.rb +14 -13
- data/test/sass/results/compact.css +1 -1
- data/test/sass/results/complex.css +4 -4
- data/test/sass/results/expanded.css +1 -1
- data/test/sass/results/import.css +1 -1
- data/test/sass/results/import_charset_ibm866.css +2 -2
- data/test/sass/results/mixins.css +17 -17
- data/test/sass/results/nested.css +1 -1
- data/test/sass/results/parent_ref.css +2 -2
- data/test/sass/results/script.css +3 -3
- data/test/sass/results/scss_import.css +1 -1
- data/test/sass/script_conversion_test.rb +10 -7
- data/test/sass/script_test.rb +288 -74
- data/test/sass/scss/css_test.rb +141 -24
- data/test/sass/scss/rx_test.rb +4 -4
- data/test/sass/scss/scss_test.rb +457 -18
- data/test/sass/source_map_test.rb +115 -25
- data/test/sass/superselector_test.rb +191 -0
- data/test/sass/templates/scss_import.scss +2 -1
- data/test/sass/test_helper.rb +1 -1
- data/test/sass/util/multibyte_string_scanner_test.rb +1 -1
- data/test/sass/util/normalized_map_test.rb +1 -1
- data/test/sass/util/subset_map_test.rb +2 -2
- data/test/sass/util_test.rb +31 -1
- data/test/sass/value_helpers_test.rb +5 -7
- data/test/test_helper.rb +2 -2
- data/vendor/listen/CHANGELOG.md +1 -228
- data/vendor/listen/Gemfile +5 -15
- data/vendor/listen/README.md +111 -77
- data/vendor/listen/Rakefile +0 -42
- data/vendor/listen/lib/listen/adapter.rb +195 -82
- data/vendor/listen/lib/listen/adapters/bsd.rb +27 -64
- data/vendor/listen/lib/listen/adapters/darwin.rb +21 -58
- data/vendor/listen/lib/listen/adapters/linux.rb +23 -55
- data/vendor/listen/lib/listen/adapters/polling.rb +25 -34
- data/vendor/listen/lib/listen/adapters/windows.rb +50 -46
- data/vendor/listen/lib/listen/directory_record.rb +96 -61
- data/vendor/listen/lib/listen/listener.rb +135 -37
- data/vendor/listen/lib/listen/turnstile.rb +9 -5
- data/vendor/listen/lib/listen/version.rb +1 -1
- data/vendor/listen/lib/listen.rb +33 -19
- data/vendor/listen/listen.gemspec +6 -0
- data/vendor/listen/spec/listen/adapter_spec.rb +43 -77
- data/vendor/listen/spec/listen/adapters/polling_spec.rb +8 -8
- data/vendor/listen/spec/listen/directory_record_spec.rb +81 -56
- data/vendor/listen/spec/listen/listener_spec.rb +128 -39
- data/vendor/listen/spec/listen_spec.rb +15 -21
- data/vendor/listen/spec/spec_helper.rb +4 -0
- data/vendor/listen/spec/support/adapter_helper.rb +52 -15
- data/vendor/listen/spec/support/directory_record_helper.rb +7 -5
- data/vendor/listen/spec/support/listeners_helper.rb +30 -7
- metadata +25 -22
- data/ext/mkrf_conf.rb +0 -27
- data/lib/sass/importers/deprecated_path.rb +0 -51
- data/lib/sass/script/value/deprecated_false.rb +0 -55
- data/vendor/listen/lib/listen/dependency_manager.rb +0 -126
- data/vendor/listen/lib/listen/multi_listener.rb +0 -143
- data/vendor/listen/spec/listen/dependency_manager_spec.rb +0 -107
- data/vendor/listen/spec/listen/multi_listener_spec.rb +0 -174
data/test/sass/importer_test.rb
CHANGED
@@ -4,7 +4,7 @@ require File.dirname(__FILE__) + '/test_helper'
|
|
4
4
|
require 'mock_importer'
|
5
5
|
require 'sass/plugin'
|
6
6
|
|
7
|
-
class ImporterTest < Test
|
7
|
+
class ImporterTest < MiniTest::Test
|
8
8
|
|
9
9
|
class FruitImporter < Sass::Importers::Base
|
10
10
|
def find(name, context = nil)
|
@@ -225,11 +225,11 @@ SCSS
|
|
225
225
|
JSON
|
226
226
|
end
|
227
227
|
|
228
|
-
def
|
228
|
+
def test_source_map_with_only_css_uri_can_have_no_public_url
|
229
229
|
ephemeral_importer = NoPublicUrlImporter.new
|
230
230
|
mock_importer = MockImporter.new
|
231
231
|
def mock_importer.public_url(name, sourcemap_directory = nil)
|
232
|
-
"
|
232
|
+
"source_uri"
|
233
233
|
end
|
234
234
|
|
235
235
|
options = {
|
@@ -248,28 +248,26 @@ JSON
|
|
248
248
|
}
|
249
249
|
SCSS
|
250
250
|
|
251
|
-
|
252
|
-
|
253
|
-
assert_equal <<CSS.strip, css_output.strip
|
251
|
+
css_output, sourcemap = engine.render_with_sourcemap('sourcemap_uri')
|
252
|
+
assert_equal <<CSS.strip, css_output.strip
|
254
253
|
.orange {
|
255
254
|
color: orange; }
|
256
255
|
|
257
256
|
/*# sourceMappingURL=sourcemap_uri */
|
258
257
|
CSS
|
259
|
-
|
260
|
-
|
258
|
+
map = sourcemap.to_json(:css_uri => 'css_uri')
|
259
|
+
assert_equal <<JSON.strip, map
|
261
260
|
{
|
262
261
|
"version": 3,
|
263
262
|
"mappings": "AACA,OAAQ",
|
264
|
-
"sources": ["
|
263
|
+
"sources": ["source_uri"],
|
265
264
|
"names": [],
|
266
265
|
"file": "css_uri"
|
267
266
|
}
|
268
267
|
JSON
|
269
|
-
end
|
270
268
|
end
|
271
269
|
|
272
|
-
def
|
270
|
+
def test_source_map_with_only_css_uri_falls_back_to_file_uris
|
273
271
|
file_system_importer = Sass::Importers::Filesystem.new('.')
|
274
272
|
options = {
|
275
273
|
:filename => filename_for_test(:scss),
|
@@ -284,13 +282,19 @@ SCSS
|
|
284
282
|
|
285
283
|
_, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
|
286
284
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
285
|
+
uri = Sass::Util.file_uri_from_path(Sass::Util.absolute_path(filename_for_test(:scss)))
|
286
|
+
assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => 'css_uri')
|
287
|
+
{
|
288
|
+
"version": 3,
|
289
|
+
"mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
|
290
|
+
"sources": ["#{uri}"],
|
291
|
+
"names": [],
|
292
|
+
"file": "css_uri"
|
293
|
+
}
|
294
|
+
JSON
|
291
295
|
end
|
292
296
|
|
293
|
-
def
|
297
|
+
def test_source_map_with_css_uri_and_css_path_falls_back_to_file_uris
|
294
298
|
file_system_importer = Sass::Importers::Filesystem.new('.')
|
295
299
|
options = {
|
296
300
|
:filename => filename_for_test(:scss),
|
@@ -305,10 +309,16 @@ SCSS
|
|
305
309
|
|
306
310
|
_, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
|
307
311
|
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
+
uri = Sass::Util.file_uri_from_path(Sass::Util.absolute_path(filename_for_test(:scss)))
|
313
|
+
assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => 'css_uri', :css_path => 'css_path')
|
314
|
+
{
|
315
|
+
"version": 3,
|
316
|
+
"mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
|
317
|
+
"sources": ["#{uri}"],
|
318
|
+
"names": [],
|
319
|
+
"file": "css_uri"
|
320
|
+
}
|
321
|
+
JSON
|
312
322
|
end
|
313
323
|
|
314
324
|
def test_source_map_with_css_uri_and_sourcemap_path_supports_filesystem_importer
|
@@ -397,6 +407,6 @@ MESSAGE
|
|
397
407
|
|
398
408
|
def test_absolute_files_across_template_locations
|
399
409
|
importer = Sass::Importers::Filesystem.new(absolutize 'templates')
|
400
|
-
|
410
|
+
refute_nil importer.mtime(absolutize('more_templates/more1.sass'), {})
|
401
411
|
end
|
402
412
|
end
|
data/test/sass/logger_test.rb
CHANGED
@@ -24,6 +24,6 @@ body { font: Arial; background: blue; }
|
|
24
24
|
#content.user.show #container.top #column.right { width: 600px; }
|
25
25
|
#content.user.show #container.bottom { background: brown; }
|
26
26
|
|
27
|
-
#foo { background-color: #
|
27
|
+
#foo { background-color: #baf; }
|
28
28
|
|
29
29
|
nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
|
data/test/sass/plugin_test.rb
CHANGED
@@ -17,7 +17,7 @@ module Sass::Script::Functions
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
class SassPluginTest < Test
|
20
|
+
class SassPluginTest < MiniTest::Test
|
21
21
|
@@templates = %w{
|
22
22
|
complex script parent_ref import scss_import alt
|
23
23
|
subdir/subdir subdir/nested_subdir/nested_subdir
|
@@ -113,7 +113,7 @@ class SassPluginTest < Test::Unit::TestCase
|
|
113
113
|
File.open(tempfile_loc('bork1')) do |file|
|
114
114
|
assert_equal(<<CSS.strip, file.read.split("\n")[0...6].join("\n"))
|
115
115
|
/*
|
116
|
-
|
116
|
+
Error: Undefined variable: "$bork".
|
117
117
|
on line 2 of #{template_loc('bork1')}
|
118
118
|
|
119
119
|
1: bork
|
@@ -129,7 +129,7 @@ CSS
|
|
129
129
|
File.open(tempfile_loc('bork5')) do |file|
|
130
130
|
assert_equal(<<CSS.strip, file.read.split("\n")[0...7].join("\n"))
|
131
131
|
/*
|
132
|
-
|
132
|
+
Error: Undefined variable: "$bork".
|
133
133
|
on line 3 of #{template_loc('bork5')}
|
134
134
|
|
135
135
|
1: bork
|
@@ -146,7 +146,7 @@ CSS
|
|
146
146
|
File.open(tempfile_loc('single_import_loop')) do |file|
|
147
147
|
assert_equal(<<CSS.strip, file.read.split("\n")[0...2].join("\n"))
|
148
148
|
/*
|
149
|
-
|
149
|
+
Error: An @import loop has been found: #{template_loc('single_import_loop')} imports itself
|
150
150
|
CSS
|
151
151
|
end
|
152
152
|
end
|
@@ -157,9 +157,9 @@ CSS
|
|
157
157
|
File.open(tempfile_loc('double_import_loop1')) do |file|
|
158
158
|
assert_equal(<<CSS.strip, file.read.split("\n")[0...4].join("\n"))
|
159
159
|
/*
|
160
|
-
|
161
|
-
|
162
|
-
|
160
|
+
Error: An @import loop has been found:
|
161
|
+
#{template_loc('double_import_loop1')} imports #{template_loc('_double_import_loop2')}
|
162
|
+
#{template_loc('_double_import_loop2')} imports #{template_loc('double_import_loop1')}
|
163
163
|
CSS
|
164
164
|
end
|
165
165
|
end
|
@@ -170,8 +170,8 @@ CSS
|
|
170
170
|
File.open(tempfile_loc('subdir/import_up1')) do |file|
|
171
171
|
assert_equal(<<CSS.strip, file.read.split("\n")[0...5].join("\n"))
|
172
172
|
/*
|
173
|
-
|
174
|
-
|
173
|
+
Error: File to import not found or unreadable: ../subdir/import_up3.scss.
|
174
|
+
Load path: #{template_loc}
|
175
175
|
on line 1 of #{template_loc 'subdir/import_up2'}
|
176
176
|
from line 1 of #{template_loc 'subdir/import_up1'}
|
177
177
|
CSS
|
@@ -183,7 +183,7 @@ CSS
|
|
183
183
|
Sass::Plugin.options[:full_exception] = false
|
184
184
|
|
185
185
|
File.delete(tempfile_loc('bork1'))
|
186
|
-
|
186
|
+
assert_raises(Sass::SyntaxError) {check_for_updates!}
|
187
187
|
ensure
|
188
188
|
Sass::Plugin.options[:full_exception] = old_full_exception
|
189
189
|
end
|
@@ -209,7 +209,7 @@ CSS
|
|
209
209
|
end
|
210
210
|
|
211
211
|
def test_doesnt_render_partials
|
212
|
-
assert !File.
|
212
|
+
assert !File.exist?(tempfile_loc('_partial'))
|
213
213
|
end
|
214
214
|
|
215
215
|
def test_template_location_array
|
@@ -507,7 +507,7 @@ WARNING
|
|
507
507
|
def template_loc(name = nil, prefix = nil)
|
508
508
|
if name
|
509
509
|
scss = absolutize "#{prefix}templates/#{name}.scss"
|
510
|
-
File.
|
510
|
+
File.exist?(scss) ? scss : absolutize("#{prefix}templates/#{name}.sass")
|
511
511
|
else
|
512
512
|
absolutize "#{prefix}templates"
|
513
513
|
end
|
@@ -537,7 +537,8 @@ WARNING
|
|
537
537
|
:always_update => true,
|
538
538
|
:never_update => false,
|
539
539
|
:full_exception => true,
|
540
|
-
:cache_store => @@cache_store
|
540
|
+
:cache_store => @@cache_store,
|
541
|
+
:sourcemap => :none
|
541
542
|
)
|
542
543
|
Sass::Plugin.options.merge!(overrides)
|
543
544
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
body { margin: 0; font: 0.85em "Lucida Grande", "Trebuchet MS", Verdana, sans-serif; color:
|
1
|
+
body { margin: 0; font: 0.85em "Lucida Grande", "Trebuchet MS", Verdana, sans-serif; color: #fff; background: url(/images/global_bg.gif); }
|
2
2
|
|
3
3
|
#page { width: 900px; margin: 0 auto; background: #440008; border-top-width: 5px; border-top-style: solid; border-top-color: #ff8500; }
|
4
4
|
|
@@ -16,8 +16,8 @@ body { margin: 0; font: 0.85em "Lucida Grande", "Trebuchet MS", Verdana, sans-se
|
|
16
16
|
|
17
17
|
#menu { clear: both; text-align: right; height: 20px; border-bottom: 5px solid #006b95; background: #00a4e4; }
|
18
18
|
#menu .contests ul { margin: 0 5px 0 0; padding: 0; }
|
19
|
-
#menu .contests ul li { list-style-type: none; margin: 0 5px; padding: 5px 5px 0 5px; display: inline; font-size: 1.1em; color:
|
20
|
-
#menu .contests a:link, #menu .contests a:visited { color:
|
19
|
+
#menu .contests ul li { list-style-type: none; margin: 0 5px; padding: 5px 5px 0 5px; display: inline; font-size: 1.1em; color: #fff; background: #00a4e4; }
|
20
|
+
#menu .contests a:link, #menu .contests a:visited { color: #fff; text-decoration: none; font-weight: bold; }
|
21
21
|
#menu .contests a:hover { text-decoration: underline; }
|
22
22
|
|
23
23
|
#content { clear: both; }
|
@@ -81,6 +81,6 @@ body { margin: 0; font: 0.85em "Lucida Grande", "Trebuchet MS", Verdana, sans-se
|
|
81
81
|
|
82
82
|
img { border: none; }
|
83
83
|
|
84
|
-
button.short { width: 60px; height: 22px; padding: 0 0 2px 0; color:
|
84
|
+
button.short { width: 60px; height: 22px; padding: 0 0 2px 0; color: #fff; border: none; background: url(/images/btn_short.gif) no-repeat; }
|
85
85
|
|
86
86
|
table { border-collapse: collapse; }
|
@@ -26,6 +26,6 @@ body { font: Arial; background: blue; }
|
|
26
26
|
#content.user.show #container.top #column.right { width: 600px; }
|
27
27
|
#content.user.show #container.bottom { background: brown; }
|
28
28
|
|
29
|
-
#foo { background-color: #
|
29
|
+
#foo { background-color: #baf; }
|
30
30
|
|
31
31
|
nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
|
@@ -1,12 +1,12 @@
|
|
1
1
|
#main {
|
2
2
|
width: 15em;
|
3
|
-
color:
|
3
|
+
color: #0000ff;
|
4
4
|
}
|
5
5
|
#main p {
|
6
6
|
border-top-width: 2px;
|
7
|
-
border-top-color: #
|
7
|
+
border-top-color: #fc0;
|
8
8
|
border-left-width: 1px;
|
9
|
-
border-left-color:
|
9
|
+
border-left-color: #000;
|
10
10
|
-moz-border-radius: 10px;
|
11
11
|
border-style: dotted;
|
12
12
|
border-width: 2px;
|
@@ -17,9 +17,9 @@
|
|
17
17
|
|
18
18
|
#left {
|
19
19
|
border-top-width: 2px;
|
20
|
-
border-top-color: #
|
20
|
+
border-top-color: #fc0;
|
21
21
|
border-left-width: 1px;
|
22
|
-
border-left-color:
|
22
|
+
border-left-color: #000;
|
23
23
|
-moz-border-radius: 10px;
|
24
24
|
font-size: 2em;
|
25
25
|
font-weight: bold;
|
@@ -28,25 +28,25 @@
|
|
28
28
|
|
29
29
|
#right {
|
30
30
|
border-top-width: 2px;
|
31
|
-
border-top-color: #
|
31
|
+
border-top-color: #fc0;
|
32
32
|
border-left-width: 1px;
|
33
|
-
border-left-color:
|
33
|
+
border-left-color: #000;
|
34
34
|
-moz-border-radius: 10px;
|
35
|
-
color:
|
35
|
+
color: #f00;
|
36
36
|
font-size: 20px;
|
37
37
|
float: right;
|
38
38
|
}
|
39
39
|
|
40
40
|
.bordered {
|
41
41
|
border-top-width: 2px;
|
42
|
-
border-top-color: #
|
42
|
+
border-top-color: #fc0;
|
43
43
|
border-left-width: 1px;
|
44
|
-
border-left-color:
|
44
|
+
border-left-color: #000;
|
45
45
|
-moz-border-radius: 10px;
|
46
46
|
}
|
47
47
|
|
48
48
|
.complex {
|
49
|
-
color:
|
49
|
+
color: #f00;
|
50
50
|
font-size: 20px;
|
51
51
|
text-decoration: none;
|
52
52
|
}
|
@@ -59,12 +59,12 @@
|
|
59
59
|
}
|
60
60
|
* html .complex {
|
61
61
|
height: 1px;
|
62
|
-
color:
|
62
|
+
color: #f00;
|
63
63
|
font-size: 20px;
|
64
64
|
}
|
65
65
|
|
66
66
|
.more-complex {
|
67
|
-
color:
|
67
|
+
color: #f00;
|
68
68
|
font-size: 20px;
|
69
69
|
text-decoration: none;
|
70
70
|
display: inline;
|
@@ -80,16 +80,16 @@
|
|
80
80
|
}
|
81
81
|
* html .more-complex {
|
82
82
|
height: 1px;
|
83
|
-
color:
|
83
|
+
color: #f00;
|
84
84
|
font-size: 20px;
|
85
85
|
}
|
86
86
|
.more-complex a:hover {
|
87
87
|
text-decoration: underline;
|
88
|
-
color:
|
88
|
+
color: #f00;
|
89
89
|
font-size: 20px;
|
90
90
|
border-top-width: 2px;
|
91
|
-
border-top-color: #
|
91
|
+
border-top-color: #fc0;
|
92
92
|
border-left-width: 1px;
|
93
|
-
border-left-color:
|
93
|
+
border-left-color: #000;
|
94
94
|
-moz-border-radius: 10px;
|
95
95
|
}
|
@@ -1,7 +1,7 @@
|
|
1
|
-
#main { content: Hello\!; qstr: 'Quo"ted"!'; hstr: Hyph-en\!; width: 30em; background-color:
|
2
|
-
#main #sidebar { background-color: #00ff98; num-normal: 10; num-dec: 10.2; num-dec0: 99; num-neg: -10; esc: 10
|
1
|
+
#main { content: Hello\!; qstr: 'Quo"ted"!'; hstr: Hyph-en\!; width: 30em; background-color: #000; color: #ffa; short-color: #123; named-color: olive; con: "foo" bar 9 hi there "boom"; con2: "noquo" quo; }
|
2
|
+
#main #sidebar { background-color: #00ff98; num-normal: 10; num-dec: 10.2; num-dec0: 99; num-neg: -10; esc: 10\+12; many: 6; order: 7; complex: #4c9db1hi16; }
|
3
3
|
|
4
|
-
#plus { num-num: 7; num-num-un: 25em; num-num-un2: 23em; num-num-neg: 9.87; num-str: 100px; num-col: #b7b7b7; num-perc: 31%; str-str: "hi
|
4
|
+
#plus { num-num: 7; num-num-un: 25em; num-num-un2: 23em; num-num-neg: 9.87; num-str: 100px; num-col: #b7b7b7; num-perc: 31%; str-str: "hi there"; str-str2: "hi there"; str-col: "14em solid #123"; str-num: "times: 13"; col-num: #ff7b9d; col-col: #5173ff; }
|
5
5
|
|
6
6
|
#minus { num-num: 900; col-num: #f9f9f4; col-col: #000035; unary-num: -1; unary-const: 10; unary-paren: -11; unary-two: 12; unary-many: 12; unary-crazy: -15; }
|
7
7
|
|
@@ -26,6 +26,6 @@ body { font: Arial; background: blue; }
|
|
26
26
|
#content.user.show #container.top #column.right { width: 600px; }
|
27
27
|
#content.user.show #container.bottom { background: brown; }
|
28
28
|
|
29
|
-
#foo { background-color: #
|
29
|
+
#foo { background-color: #baf; }
|
30
30
|
|
31
31
|
nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require File.dirname(__FILE__) + '/../test_helper'
|
4
4
|
require 'sass/engine'
|
5
5
|
|
6
|
-
class SassScriptConversionTest < Test
|
6
|
+
class SassScriptConversionTest < MiniTest::Test
|
7
7
|
def test_bool
|
8
8
|
assert_renders "true"
|
9
9
|
assert_renders "false"
|
@@ -13,9 +13,8 @@ class SassScriptConversionTest < Test::Unit::TestCase
|
|
13
13
|
assert_renders "#abcdef"
|
14
14
|
assert_renders "blue"
|
15
15
|
assert_renders "rgba(0, 1, 2, 0.2)"
|
16
|
-
|
17
|
-
|
18
|
-
assert_equal "blue", render("#0000ff")
|
16
|
+
assert_renders "#abc"
|
17
|
+
assert_renders "#0000ff"
|
19
18
|
end
|
20
19
|
|
21
20
|
def test_number
|
@@ -109,11 +108,15 @@ class SassScriptConversionTest < Test::Unit::TestCase
|
|
109
108
|
assert_renders "(foo: (bar, baz), bip: bop)"
|
110
109
|
end
|
111
110
|
|
111
|
+
def test_selector
|
112
|
+
assert_renders "&"
|
113
|
+
end
|
114
|
+
|
112
115
|
def self.test_precedence(outer, inner)
|
113
116
|
op_outer = Sass::Script::Lexer::OPERATORS_REVERSE[outer]
|
114
117
|
op_inner = Sass::Script::Lexer::OPERATORS_REVERSE[inner]
|
115
118
|
class_eval <<RUBY
|
116
|
-
def test_precedence_#{outer}_#{inner}
|
119
|
+
def test_precedence_#{outer}_#{inner}
|
117
120
|
assert_renders "$foo #{op_outer} $bar #{op_inner} $baz"
|
118
121
|
assert_renders "$foo #{op_inner} $bar #{op_outer} $baz"
|
119
122
|
|
@@ -132,7 +135,7 @@ RUBY
|
|
132
135
|
op = separator_for(op_name)
|
133
136
|
sibling = separator_for(sibling_name)
|
134
137
|
class_eval <<RUBY
|
135
|
-
def test_associative_#{op_name}_#{sibling_name}
|
138
|
+
def test_associative_#{op_name}_#{sibling_name}
|
136
139
|
assert_renders "$foo#{op}$bar#{op}$baz"
|
137
140
|
|
138
141
|
assert_equal "$foo#{op}$bar#{op}$baz",
|
@@ -160,7 +163,7 @@ RUBY
|
|
160
163
|
op = Sass::Script::Lexer::OPERATORS_REVERSE[op_name]
|
161
164
|
sibling = Sass::Script::Lexer::OPERATORS_REVERSE[sibling_name]
|
162
165
|
class_eval <<RUBY
|
163
|
-
def test_non_associative_#{op_name}_#{sibling_name}
|
166
|
+
def test_non_associative_#{op_name}_#{sibling_name}
|
164
167
|
assert_renders "$foo #{op} $bar #{op} $baz"
|
165
168
|
|
166
169
|
assert_renders "$foo #{op} ($bar #{op} $baz)"
|