sass 3.2.0.alpha.35 → 3.2.0.alpha.49
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/REVISION +1 -1
- data/VERSION +1 -1
- data/lib/sass.rb +22 -0
- data/lib/sass/engine.rb +2 -2
- data/lib/sass/environment.rb +0 -1
- data/lib/sass/exec.rb +1 -1
- data/lib/sass/importers/filesystem.rb +1 -1
- data/lib/sass/plugin.rb +4 -8
- data/lib/sass/plugin/compiler.rb +42 -17
- data/lib/sass/plugin/configuration.rb +0 -2
- data/lib/sass/repl.rb +0 -1
- data/lib/sass/script/funcall.rb +6 -1
- data/lib/sass/script/functions.rb +2 -2
- data/lib/sass/script/number.rb +1 -1
- data/lib/sass/script/parser.rb +12 -5
- data/lib/sass/script/variable.rb +0 -1
- data/lib/sass/scss/css_parser.rb +1 -0
- data/lib/sass/scss/parser.rb +37 -12
- data/lib/sass/scss/rx.rb +8 -3
- data/lib/sass/selector.rb +21 -0
- data/lib/sass/selector/abstract_sequence.rb +7 -0
- data/lib/sass/tree/media_node.rb +4 -4
- data/lib/sass/tree/rule_node.rb +5 -0
- data/lib/sass/tree/visitors/check_nesting.rb +10 -10
- data/lib/sass/tree/visitors/convert.rb +3 -3
- data/lib/sass/tree/visitors/cssize.rb +5 -1
- data/lib/sass/tree/visitors/perform.rb +16 -2
- data/lib/sass/tree/visitors/to_css.rb +2 -1
- data/lib/sass/util.rb +4 -1
- data/test/sass/conversion_test.rb +32 -2
- data/test/sass/engine_test.rb +105 -1
- data/test/sass/extend_test.rb +65 -0
- data/test/sass/importer_test.rb +7 -0
- data/test/sass/plugin_test.rb +16 -13
- data/test/sass/script_conversion_test.rb +2 -0
- data/test/sass/script_test.rb +18 -0
- data/test/sass/scss/scss_test.rb +34 -0
- data/test/sass/test_helper.rb +1 -1
- data/test/test_helper.rb +1 -0
- metadata +3 -3
data/test/sass/extend_test.rb
CHANGED
@@ -1339,6 +1339,71 @@ CSS
|
|
1339
1339
|
SCSS
|
1340
1340
|
end
|
1341
1341
|
|
1342
|
+
def test_basic_placeholder_selector
|
1343
|
+
assert_equal <<CSS, render(<<SCSS)
|
1344
|
+
.bar {
|
1345
|
+
color: blue; }
|
1346
|
+
CSS
|
1347
|
+
%foo {color: blue}
|
1348
|
+
.bar {@extend %foo}
|
1349
|
+
SCSS
|
1350
|
+
end
|
1351
|
+
|
1352
|
+
def test_unused_placeholder_selector
|
1353
|
+
assert_equal <<CSS, render(<<SCSS)
|
1354
|
+
.baz {
|
1355
|
+
color: blue; }
|
1356
|
+
CSS
|
1357
|
+
%foo {color: blue}
|
1358
|
+
%bar {color: red}
|
1359
|
+
.baz {@extend %foo}
|
1360
|
+
SCSS
|
1361
|
+
end
|
1362
|
+
|
1363
|
+
def test_placeholder_descendant_selector
|
1364
|
+
assert_equal <<CSS, render(<<SCSS)
|
1365
|
+
#context .bar a {
|
1366
|
+
color: blue; }
|
1367
|
+
CSS
|
1368
|
+
#context %foo a {color: blue}
|
1369
|
+
.bar {@extend %foo}
|
1370
|
+
SCSS
|
1371
|
+
end
|
1372
|
+
|
1373
|
+
def test_placeholder_selector_with_multiple_extenders
|
1374
|
+
assert_equal <<CSS, render(<<SCSS)
|
1375
|
+
.bar, .baz {
|
1376
|
+
color: blue; }
|
1377
|
+
CSS
|
1378
|
+
%foo {color: blue}
|
1379
|
+
.bar {@extend %foo}
|
1380
|
+
.baz {@extend %foo}
|
1381
|
+
SCSS
|
1382
|
+
end
|
1383
|
+
|
1384
|
+
def test_placeholder_selector_as_modifier
|
1385
|
+
assert_equal <<CSS, render(<<SCSS)
|
1386
|
+
a.baz.bar {
|
1387
|
+
color: blue; }
|
1388
|
+
CSS
|
1389
|
+
a%foo.baz {color: blue}
|
1390
|
+
.bar {@extend %foo}
|
1391
|
+
div {@extend %foo}
|
1392
|
+
SCSS
|
1393
|
+
end
|
1394
|
+
|
1395
|
+
def test_placeholder_interpolation
|
1396
|
+
assert_equal <<CSS, render(<<SCSS)
|
1397
|
+
.bar {
|
1398
|
+
color: blue; }
|
1399
|
+
CSS
|
1400
|
+
$foo: foo;
|
1401
|
+
|
1402
|
+
%\#{$foo} {color: blue}
|
1403
|
+
.bar {@extend %foo}
|
1404
|
+
SCSS
|
1405
|
+
end
|
1406
|
+
|
1342
1407
|
private
|
1343
1408
|
|
1344
1409
|
def render(sass, options = {})
|
data/test/sass/importer_test.rb
CHANGED
@@ -176,10 +176,17 @@ CSS
|
|
176
176
|
file_system_importer
|
177
177
|
)
|
178
178
|
end
|
179
|
+
|
179
180
|
def fixture_dir
|
180
181
|
File.join(File.dirname(__FILE__), "fixtures")
|
181
182
|
end
|
183
|
+
|
182
184
|
def fixture_file(path)
|
183
185
|
File.join(fixture_dir, path)
|
184
186
|
end
|
187
|
+
|
188
|
+
def test_absolute_files_across_template_locations
|
189
|
+
importer = Sass::Importers::Filesystem.new(absolutize 'templates')
|
190
|
+
assert_not_nil importer.mtime(absolutize('more_templates/more1.sass'), {})
|
191
|
+
end
|
185
192
|
end
|
data/test/sass/plugin_test.rb
CHANGED
@@ -183,6 +183,7 @@ CSS
|
|
183
183
|
|
184
184
|
def test_updating_stylesheets_callback
|
185
185
|
# Should run even when there's nothing to update
|
186
|
+
Sass::Plugin.options[:template_location] = nil
|
186
187
|
assert_callback :updating_stylesheets, []
|
187
188
|
end
|
188
189
|
|
@@ -196,25 +197,25 @@ CSS
|
|
196
197
|
assert_no_callback :updating_stylesheets
|
197
198
|
end
|
198
199
|
|
199
|
-
def
|
200
|
+
def test_updated_stylesheet_callback_for_updated_template
|
200
201
|
Sass::Plugin.options[:always_update] = false
|
201
202
|
touch 'basic'
|
202
|
-
assert_no_callback :
|
203
|
+
assert_no_callback :updated_stylesheet, template_loc("complex"), tempfile_loc("complex") do
|
203
204
|
assert_callbacks(
|
204
|
-
[:
|
205
|
-
[:
|
205
|
+
[:updated_stylesheet, template_loc("basic"), tempfile_loc("basic")],
|
206
|
+
[:updated_stylesheet, template_loc("import"), tempfile_loc("import")])
|
206
207
|
end
|
207
208
|
end
|
208
209
|
|
209
|
-
def
|
210
|
+
def test_updated_stylesheet_callback_for_fresh_template
|
210
211
|
Sass::Plugin.options[:always_update] = false
|
211
|
-
assert_no_callback :
|
212
|
+
assert_no_callback :updated_stylesheet
|
212
213
|
end
|
213
214
|
|
214
|
-
def
|
215
|
+
def test_updated_stylesheet_callback_for_error_template
|
215
216
|
Sass::Plugin.options[:always_update] = false
|
216
217
|
touch 'bork1'
|
217
|
-
assert_no_callback :
|
218
|
+
assert_no_callback :updated_stylesheet
|
218
219
|
end
|
219
220
|
|
220
221
|
def test_not_updating_stylesheet_callback_for_fresh_template
|
@@ -226,8 +227,8 @@ CSS
|
|
226
227
|
Sass::Plugin.options[:always_update] = false
|
227
228
|
assert_callback :not_updating_stylesheet, template_loc("complex"), tempfile_loc("complex") do
|
228
229
|
assert_no_callbacks(
|
229
|
-
[:
|
230
|
-
[:
|
230
|
+
[:updated_stylesheet, template_loc("basic"), tempfile_loc("basic")],
|
231
|
+
[:updated_stylesheet, template_loc("import"), tempfile_loc("import")])
|
231
232
|
end
|
232
233
|
end
|
233
234
|
|
@@ -347,9 +348,11 @@ CSS
|
|
347
348
|
|
348
349
|
def assert_callback(name, *expected_args)
|
349
350
|
run = false
|
351
|
+
received_args = nil
|
350
352
|
Sass::Plugin.send("on_#{name}") do |*args|
|
351
|
-
|
352
|
-
|
353
|
+
received_args = args
|
354
|
+
run ||= expected_args.zip(received_args).all? do |ea, ra|
|
355
|
+
ea.respond_to?(:call) ? ea.call(ra) : ea == ra
|
353
356
|
end
|
354
357
|
end
|
355
358
|
|
@@ -359,7 +362,7 @@ CSS
|
|
359
362
|
check_for_updates!
|
360
363
|
end
|
361
364
|
|
362
|
-
assert run, "Expected #{name} callback to be run with arguments:\n #{expected_args.inspect}"
|
365
|
+
assert run, "Expected #{name} callback to be run with arguments:\n #{expected_args.inspect}\nHowever, it got:\n #{received_args.inspect}"
|
363
366
|
end
|
364
367
|
|
365
368
|
def assert_no_callback(name, *unexpected_args)
|
@@ -223,6 +223,8 @@ RUBY
|
|
223
223
|
assert_renders '#{1 + 2}, #{3 + 4}'
|
224
224
|
assert_renders '#{1 + 2} ,#{3 + 4}'
|
225
225
|
assert_renders '#{1 + 2},#{3 + 4}'
|
226
|
+
assert_renders '#{1 + 2}, #{3 + 4}, #{5 + 6}'
|
227
|
+
assert_renders '3, #{3 + 4}, 11'
|
226
228
|
|
227
229
|
assert_renders '3 / #{3 + 4}'
|
228
230
|
assert_renders '3 /#{3 + 4}'
|
data/test/sass/script_test.rb
CHANGED
@@ -7,6 +7,14 @@ module Sass::Script::Functions::UserFunctions
|
|
7
7
|
val.options[:foo]
|
8
8
|
Sass::Script::String.new("Options defined!")
|
9
9
|
end
|
10
|
+
|
11
|
+
def arg_error
|
12
|
+
assert_options
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module Sass::Script::Functions
|
17
|
+
include Sass::Script::Functions::UserFunctions
|
10
18
|
end
|
11
19
|
|
12
20
|
class SassScriptTest < Test::Unit::TestCase
|
@@ -130,6 +138,8 @@ class SassScriptTest < Test::Unit::TestCase
|
|
130
138
|
assert_equal '3, 7', resolve('#{1 + 2}, #{3 + 4}')
|
131
139
|
assert_equal '3 ,7', resolve('#{1 + 2} ,#{3 + 4}')
|
132
140
|
assert_equal '3,7', resolve('#{1 + 2},#{3 + 4}')
|
141
|
+
assert_equal '3, 7, 11', resolve('#{1 + 2}, #{3 + 4}, #{5 + 6}')
|
142
|
+
assert_equal '3, 7, 11', resolve('3, #{3 + 4}, 11')
|
133
143
|
|
134
144
|
assert_equal '3 / 7', resolve('3 / #{3 + 4}')
|
135
145
|
assert_equal '3 /7', resolve('3 /#{3 + 4}')
|
@@ -414,6 +424,14 @@ SASS
|
|
414
424
|
assert_raise_message(Sass::SyntaxError, "() isn't a valid CSS value.") {resolve("nth(append((), ()), 1)")}
|
415
425
|
end
|
416
426
|
|
427
|
+
def test_deep_argument_error_not_unwrapped
|
428
|
+
assert_raise_message(ArgumentError, 'wrong number of arguments (0 for 1)') {resolve("arg-error()")}
|
429
|
+
end
|
430
|
+
|
431
|
+
def test_shallow_argument_error_unwrapped
|
432
|
+
assert_raise_message(Sass::SyntaxError, "wrong number of arguments (1 for 0) for `arg-error'") {resolve("arg-error(1)")}
|
433
|
+
end
|
434
|
+
|
417
435
|
# Regression Tests
|
418
436
|
|
419
437
|
def test_funcall_has_higher_precedence_than_color_name
|
data/test/sass/scss/scss_test.rb
CHANGED
@@ -1094,6 +1094,15 @@ SCSS
|
|
1094
1094
|
|
1095
1095
|
# Regression
|
1096
1096
|
|
1097
|
+
def test_prop_name_interpolation_after_hyphen
|
1098
|
+
assert_equal <<CSS, render(<<SCSS)
|
1099
|
+
a {
|
1100
|
+
-foo-bar: b; }
|
1101
|
+
CSS
|
1102
|
+
a { -\#{"foo"}-bar: b; }
|
1103
|
+
SCSS
|
1104
|
+
end
|
1105
|
+
|
1097
1106
|
def test_star_plus_and_parent
|
1098
1107
|
assert_equal <<CSS, render(<<SCSS)
|
1099
1108
|
* + html foo {
|
@@ -1296,4 +1305,29 @@ CSS
|
|
1296
1305
|
foo {color: darken(black, 10%)}
|
1297
1306
|
SCSS
|
1298
1307
|
end
|
1308
|
+
|
1309
|
+
# ref: https://github.com/nex3/sass/issues/104
|
1310
|
+
def test_no_buffer_overflow
|
1311
|
+
template = render <<SCSS
|
1312
|
+
.aaa {
|
1313
|
+
background-color: white;
|
1314
|
+
}
|
1315
|
+
.aaa .aaa .aaa {
|
1316
|
+
background-color: black;
|
1317
|
+
}
|
1318
|
+
.bbb {
|
1319
|
+
@extend .aaa;
|
1320
|
+
}
|
1321
|
+
.xxx {
|
1322
|
+
@extend .bbb;
|
1323
|
+
}
|
1324
|
+
.yyy {
|
1325
|
+
@extend .bbb;
|
1326
|
+
}
|
1327
|
+
.zzz {
|
1328
|
+
@extend .bbb;
|
1329
|
+
}
|
1330
|
+
SCSS
|
1331
|
+
Sass::SCSS::Parser.new(template, "test.scss").parse
|
1332
|
+
end
|
1299
1333
|
end
|
data/test/sass/test_helper.rb
CHANGED
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.0.alpha.
|
4
|
+
version: 3.2.0.alpha.49
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Weizenbaum
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date:
|
14
|
+
date: 2012-01-04 00:00:00 -05:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- lib/sass/tree/root_node.rb
|
131
131
|
- lib/sass/tree/rule_node.rb
|
132
132
|
- lib/sass/tree/content_node.rb
|
133
|
+
- lib/sass/tree/trace_node.rb
|
133
134
|
- lib/sass/tree/variable_node.rb
|
134
135
|
- lib/sass/tree/visitors/base.rb
|
135
136
|
- lib/sass/tree/visitors/check_nesting.rb
|
@@ -141,7 +142,6 @@ files:
|
|
141
142
|
- lib/sass/tree/visitors/to_css.rb
|
142
143
|
- lib/sass/tree/warn_node.rb
|
143
144
|
- lib/sass/tree/while_node.rb
|
144
|
-
- lib/sass/tree/trace_node.rb
|
145
145
|
- lib/sass/util.rb
|
146
146
|
- lib/sass/util/subset_map.rb
|
147
147
|
- lib/sass/version.rb
|