sass 3.3.0.alpha.231 → 3.3.0.alpha.243
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 +1 -1
- data/REVISION +1 -1
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/lib/sass/engine.rb +11 -7
- data/lib/sass/environment.rb +8 -0
- data/lib/sass/script/functions.rb +140 -17
- data/lib/sass/script/parser.rb +28 -5
- data/lib/sass/script/tree.rb +1 -0
- data/lib/sass/script/tree/map_literal.rb +64 -0
- data/lib/sass/script/value.rb +1 -0
- data/lib/sass/script/value/base.rb +29 -1
- data/lib/sass/script/value/color.rb +4 -0
- data/lib/sass/script/value/list.rb +27 -1
- data/lib/sass/script/value/map.rb +70 -0
- data/lib/sass/script/value/number.rb +12 -0
- data/lib/sass/scss/parser.rb +8 -2
- data/lib/sass/stack.rb +9 -0
- data/lib/sass/tree/each_node.rb +6 -6
- data/lib/sass/tree/rule_node.rb +1 -1
- data/lib/sass/tree/visitors/convert.rb +2 -1
- data/lib/sass/tree/visitors/perform.rb +19 -22
- data/lib/sass/tree/visitors/to_css.rb +1 -1
- data/test/sass/conversion_test.rb +10 -0
- data/test/sass/engine_test.rb +21 -0
- data/test/sass/functions_test.rb +126 -0
- data/test/sass/script_conversion_test.rb +16 -0
- data/test/sass/script_test.rb +41 -0
- data/test/sass/scss/scss_test.rb +25 -0
- metadata +11 -9
data/test/sass/functions_test.rb
CHANGED
@@ -975,6 +975,10 @@ MSG
|
|
975
975
|
assert_equal("color", evaluate("type-of(#fff)"))
|
976
976
|
assert_equal("color", evaluate("type-of($value: #fff)"))
|
977
977
|
assert_equal("null", evaluate("type-of(null)"))
|
978
|
+
assert_equal("list", evaluate("type-of(1 2 3)"))
|
979
|
+
assert_equal("list", evaluate("type-of((1, 2, 3))"))
|
980
|
+
assert_equal("list", evaluate("type-of(())"))
|
981
|
+
assert_equal("map", evaluate("type-of((foo: bar))"))
|
978
982
|
end
|
979
983
|
|
980
984
|
def test_feature_exists
|
@@ -1024,6 +1028,8 @@ MSG
|
|
1024
1028
|
assert_equal("1", evaluate("length(#f00)"))
|
1025
1029
|
assert_equal("0", evaluate("length(())"))
|
1026
1030
|
assert_equal("4", evaluate("length(1 2 () 3)"))
|
1031
|
+
|
1032
|
+
assert_equal("2", evaluate("length((foo: bar, bar: baz))"))
|
1027
1033
|
end
|
1028
1034
|
|
1029
1035
|
def test_nth
|
@@ -1041,6 +1047,9 @@ MSG
|
|
1041
1047
|
assert_error_message("List index is 2 but list is only 1 item long for `nth'", "nth(foo, 2)")
|
1042
1048
|
assert_error_message("List index is 1 but list has no items for `nth'", "nth((), 1)")
|
1043
1049
|
assert_error_message("$n: \"foo\" is not a number for `nth'", "nth(1 2 3, foo)")
|
1050
|
+
|
1051
|
+
assert_equal("foo bar", evaluate("nth((foo: bar, bar: baz), 1)"))
|
1052
|
+
assert_equal("bar baz", evaluate("nth((foo: bar, bar: baz), 2)"))
|
1044
1053
|
end
|
1045
1054
|
|
1046
1055
|
def test_join
|
@@ -1080,6 +1089,19 @@ MSG
|
|
1080
1089
|
|
1081
1090
|
assert_error_message("Separator name must be space, comma, or auto for `join'", "join(1, 2, baboon)")
|
1082
1091
|
assert_error_message("$separator: 12 is not a string for `join'", "join(1, 2, 12)")
|
1092
|
+
|
1093
|
+
assert_equal("foo bar, bar baz, baz bip, bip bop",
|
1094
|
+
perform("join((foo: bar, bar: baz), (baz: bip, bip: bop))").to_sass)
|
1095
|
+
assert_equal("(foo bar) (bar baz) (baz bip) (bip bop)",
|
1096
|
+
perform("join((foo: bar, bar: baz), (baz: bip, bip: bop), space)").to_sass)
|
1097
|
+
assert_equal("foo bar (baz bip) (bip bop)",
|
1098
|
+
perform("join(foo bar, (baz: bip, bip: bop))").to_sass)
|
1099
|
+
assert_equal("foo bar, bar baz, bip, bop",
|
1100
|
+
perform("join((foo: bar, bar: baz), bip bop)").to_sass)
|
1101
|
+
assert_equal("baz bip, bip bop",
|
1102
|
+
perform("join((), (baz: bip, bip: bop))").to_sass)
|
1103
|
+
assert_equal("foo bar, bar baz",
|
1104
|
+
perform("join((foo: bar, bar: baz), ())").to_sass)
|
1083
1105
|
end
|
1084
1106
|
|
1085
1107
|
def test_append
|
@@ -1115,12 +1137,19 @@ MSG
|
|
1115
1137
|
|
1116
1138
|
assert_error_message("Separator name must be space, comma, or auto for `append'", "append(1, 2, baboon)")
|
1117
1139
|
assert_error_message("$separator: 12 is not a string for `append'", "append(1, 2, 12)")
|
1140
|
+
|
1141
|
+
assert_equal("1 2 (foo: bar)", perform("append(1 2, (foo: bar))").to_sass)
|
1142
|
+
assert_equal("foo bar, bar baz, 1", perform("append((foo: bar, bar: baz), 1)").to_sass)
|
1143
|
+
assert_equal("foo bar, bar baz, (baz: bip)",
|
1144
|
+
perform("append((foo: bar, bar: baz), (baz: bip))").to_sass)
|
1118
1145
|
end
|
1119
1146
|
|
1120
1147
|
def test_zip
|
1121
1148
|
assert_equal("1 3 5, 2 4 6", evaluate("zip(1 2, 3 4, 5 6)"))
|
1122
1149
|
assert_equal("1 4 7, 2 5 8", evaluate("zip(1 2 3, 4 5 6, 7 8)"))
|
1123
1150
|
assert_equal("1 2 3", evaluate("zip(1, 2, 3)"))
|
1151
|
+
assert_equal("(foo bar) 1 3, (bar baz) 2 4",
|
1152
|
+
perform("zip((foo: bar, bar: baz), 1 2, 3 4)").to_sass)
|
1124
1153
|
end
|
1125
1154
|
|
1126
1155
|
def test_index
|
@@ -1131,6 +1160,9 @@ MSG
|
|
1131
1160
|
assert_equal("false", evaluate("index(1px solid blue, 1em)"))
|
1132
1161
|
assert_equal("false", evaluate("index(1px solid blue, notfound)"))
|
1133
1162
|
assert_equal("false", evaluate("index(1px, #00f)"))
|
1163
|
+
|
1164
|
+
assert_equal("1", evaluate("index((foo: bar, bar: baz), (foo bar))"))
|
1165
|
+
assert_equal("false", evaluate("index((foo: bar, bar: baz), (foo: bar))"))
|
1134
1166
|
end
|
1135
1167
|
|
1136
1168
|
def test_list_separator
|
@@ -1141,6 +1173,8 @@ MSG
|
|
1141
1173
|
assert_equal("space", evaluate("list-separator(#f00)"))
|
1142
1174
|
assert_equal("space", evaluate("list-separator(())"))
|
1143
1175
|
assert_equal("space", evaluate("list-separator(1 2 () 3)"))
|
1176
|
+
|
1177
|
+
assert_equal("comma", evaluate("list-separator((foo: bar, bar: baz))"))
|
1144
1178
|
end
|
1145
1179
|
|
1146
1180
|
def test_if
|
@@ -1224,6 +1258,98 @@ MSG
|
|
1224
1258
|
end
|
1225
1259
|
end
|
1226
1260
|
|
1261
|
+
def test_map_get
|
1262
|
+
assert_equal "1", evaluate("map-get((foo: 1, bar: 2), foo)")
|
1263
|
+
assert_equal "2", evaluate("map-get((foo: 1, bar: 2), bar)")
|
1264
|
+
assert_equal "null", perform("map-get((foo: 1, bar: 2), baz)").to_sass
|
1265
|
+
assert_equal "null", perform("map-get((), foo)").to_sass
|
1266
|
+
|
1267
|
+
assert_warning(<<WARNING) do
|
1268
|
+
DEPRECATION WARNING: Passing lists of pairs to map-get is deprecated and will
|
1269
|
+
be removed in future versions of Sass. Use Sass maps instead. For details, see
|
1270
|
+
http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#maps.
|
1271
|
+
WARNING
|
1272
|
+
assert_equal "1", evaluate("map-get((foo 1) (bar 2), foo)")
|
1273
|
+
end
|
1274
|
+
end
|
1275
|
+
|
1276
|
+
def test_map_merge
|
1277
|
+
assert_equal("(foo: 1, bar: 2, baz: 3)",
|
1278
|
+
perform("map-merge((foo: 1, bar: 2), (baz: 3))").to_sass)
|
1279
|
+
assert_equal("(foo: 1, bar: 2)",
|
1280
|
+
perform("map-merge((), (foo: 1, bar: 2))").to_sass)
|
1281
|
+
assert_equal("(foo: 1, bar: 2)",
|
1282
|
+
perform("map-merge((foo: 1, bar: 2), ())").to_sass)
|
1283
|
+
|
1284
|
+
assert_warning(<<WARNING) do
|
1285
|
+
DEPRECATION WARNING: Passing lists of pairs to map-merge is deprecated and will
|
1286
|
+
be removed in future versions of Sass. Use Sass maps instead. For details, see
|
1287
|
+
http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#maps.
|
1288
|
+
WARNING
|
1289
|
+
assert_equal("(foo: 1, bar: 2, baz: 3)",
|
1290
|
+
perform("map-merge((foo 1, bar 2), (baz: 3))").to_sass)
|
1291
|
+
end
|
1292
|
+
|
1293
|
+
assert_warning(<<WARNING) do
|
1294
|
+
DEPRECATION WARNING: Passing lists of pairs to map-merge is deprecated and will
|
1295
|
+
be removed in future versions of Sass. Use Sass maps instead. For details, see
|
1296
|
+
http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#maps.
|
1297
|
+
WARNING
|
1298
|
+
assert_equal("(baz: 3, foo: 1, bar: 2)",
|
1299
|
+
perform("map-merge((baz: 3), (foo 1, bar 2))").to_sass)
|
1300
|
+
end
|
1301
|
+
end
|
1302
|
+
|
1303
|
+
def test_map_keys
|
1304
|
+
assert_equal("foo, bar",
|
1305
|
+
perform("map-keys((foo: 1, bar: 2))").to_sass)
|
1306
|
+
assert_equal("()", perform("map-keys(())").to_sass)
|
1307
|
+
|
1308
|
+
assert_warning(<<WARNING) do
|
1309
|
+
DEPRECATION WARNING: Passing lists of pairs to map-keys is deprecated and will
|
1310
|
+
be removed in future versions of Sass. Use Sass maps instead. For details, see
|
1311
|
+
http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#maps.
|
1312
|
+
WARNING
|
1313
|
+
assert_equal("foo, bar",
|
1314
|
+
perform("map-keys((foo 1, bar 2))").to_sass)
|
1315
|
+
end
|
1316
|
+
end
|
1317
|
+
|
1318
|
+
def test_map_values
|
1319
|
+
assert_equal("1, 2", perform("map-values((foo: 1, bar: 2))").to_sass)
|
1320
|
+
assert_equal("1, 2, 2",
|
1321
|
+
perform("map-values((foo: 1, bar: 2, baz: 2))").to_sass)
|
1322
|
+
assert_equal("()", perform("map-values(())").to_sass)
|
1323
|
+
|
1324
|
+
assert_warning(<<WARNING) do
|
1325
|
+
DEPRECATION WARNING: Passing lists of pairs to map-values is deprecated and will
|
1326
|
+
be removed in future versions of Sass. Use Sass maps instead. For details, see
|
1327
|
+
http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#maps.
|
1328
|
+
WARNING
|
1329
|
+
assert_equal("1, 2", perform("map-values((foo 1, bar 2))").to_sass)
|
1330
|
+
end
|
1331
|
+
end
|
1332
|
+
|
1333
|
+
def test_map_has_key
|
1334
|
+
assert_equal "true", evaluate("map-has-key((foo: 1, bar: 1), foo)")
|
1335
|
+
assert_equal "false", evaluate("map-has-key((foo: 1, bar: 1), baz)")
|
1336
|
+
assert_equal "false", evaluate("map-has-key((), foo)")
|
1337
|
+
|
1338
|
+
assert_warning(<<WARNING) do
|
1339
|
+
DEPRECATION WARNING: Passing lists of pairs to map-has-key is deprecated and will
|
1340
|
+
be removed in future versions of Sass. Use Sass maps instead. For details, see
|
1341
|
+
http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#maps.
|
1342
|
+
WARNING
|
1343
|
+
assert_equal("true", evaluate("map-has-key((foo 1, bar 1), foo)"))
|
1344
|
+
end
|
1345
|
+
end
|
1346
|
+
|
1347
|
+
def test_partial_list_of_pairs_doesnt_work_as_a_map
|
1348
|
+
assert_raises(Sass::SyntaxError) {evaluate("map-get((foo bar, baz bang, bip), 1)")}
|
1349
|
+
assert_raises(Sass::SyntaxError) {evaluate("map-get((foo bar, baz bang, bip bap bop), 1)")}
|
1350
|
+
assert_raises(Sass::SyntaxError) {evaluate("map-get((foo bar), 1)")}
|
1351
|
+
end
|
1352
|
+
|
1227
1353
|
def test_assert_unit
|
1228
1354
|
ctx = Sass::Script::Functions::EvaluationContext.new(Sass::Environment.new(nil, {}))
|
1229
1355
|
ctx.assert_unit Sass::Script::Value::Number.new(10, ["px"], []), "px"
|
@@ -83,6 +83,22 @@ class SassScriptConversionTest < Test::Unit::TestCase
|
|
83
83
|
assert_renders "foo(a, b, (a, b, c)...)"
|
84
84
|
end
|
85
85
|
|
86
|
+
def test_map
|
87
|
+
assert_renders "(foo: bar)"
|
88
|
+
assert_renders "(foo: bar, baz: bip)"
|
89
|
+
assert_renders "(foo: bar, baz: (bip: bap))"
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_map_in_list
|
93
|
+
assert_renders "(foo: bar) baz"
|
94
|
+
assert_renders "(foo: bar), (baz: bip)"
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_list_in_map
|
98
|
+
assert_renders "(foo: bar baz)"
|
99
|
+
assert_renders "(foo: (bar, baz), bip: bop)"
|
100
|
+
end
|
101
|
+
|
86
102
|
def self.test_precedence(outer, inner)
|
87
103
|
op_outer = Sass::Script::Lexer::OPERATORS_REVERSE[outer]
|
88
104
|
op_inner = Sass::Script::Lexer::OPERATORS_REVERSE[inner]
|
data/test/sass/script_test.rb
CHANGED
@@ -492,6 +492,47 @@ SASS
|
|
492
492
|
assert_equal "1 2 3", resolve("null 1 2 3")
|
493
493
|
end
|
494
494
|
|
495
|
+
def test_map_cannot_have_duplicate_keys
|
496
|
+
assert_raise_message(Sass::SyntaxError, 'Duplicate key "foo" in map (foo: bar, foo: baz).') do
|
497
|
+
eval("(foo: bar, foo: baz)")
|
498
|
+
end
|
499
|
+
assert_raise_message(Sass::SyntaxError, 'Duplicate key "foo" in map (foo: bar, fo + o: baz).') do
|
500
|
+
eval("(foo: bar, fo + o: baz)")
|
501
|
+
end
|
502
|
+
assert_raise_message(Sass::SyntaxError, 'Duplicate key "foo" in map (foo: bar, "foo": baz).') do
|
503
|
+
eval("(foo: bar, 'foo': baz)")
|
504
|
+
end
|
505
|
+
assert_raise_message(Sass::SyntaxError, 'Duplicate key 2px in map (2px: bar, 1px + 1px: baz).') do
|
506
|
+
eval("(2px: bar, 1px + 1px: baz)")
|
507
|
+
end
|
508
|
+
assert_raise_message(Sass::SyntaxError, 'Duplicate key #0000ff in map (blue: bar, blue: baz).') do
|
509
|
+
eval("(blue: bar, #00f: baz)")
|
510
|
+
end
|
511
|
+
end
|
512
|
+
|
513
|
+
def test_non_duplicate_map_keys
|
514
|
+
# These shouldn't throw errors
|
515
|
+
eval("(foo: foo, bar: bar)")
|
516
|
+
eval("(2px: foo, 2: bar)")
|
517
|
+
eval("(2px: foo, 2em: bar)")
|
518
|
+
eval("('2px': foo, 2px: bar)")
|
519
|
+
end
|
520
|
+
|
521
|
+
def test_map_syntax_errors
|
522
|
+
assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(foo:": expected expression (e.g. 1px, bold), was ")"') do
|
523
|
+
eval("(foo:)")
|
524
|
+
end
|
525
|
+
assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(": expected ")", was ":bar)"') do
|
526
|
+
eval("(:bar)")
|
527
|
+
end
|
528
|
+
assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(foo, bar": expected ")", was ": baz)"') do
|
529
|
+
eval("(foo, bar: baz)")
|
530
|
+
end
|
531
|
+
assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(foo: bar, baz": expected ":", was ")"') do
|
532
|
+
eval("(foo: bar, baz)")
|
533
|
+
end
|
534
|
+
end
|
535
|
+
|
495
536
|
def test_deep_argument_error_not_unwrapped
|
496
537
|
# JRuby (as of 1.6.7.2) offers no way of distinguishing between
|
497
538
|
# argument errors caused by programming errors in a function and
|
data/test/sass/scss/scss_test.rb
CHANGED
@@ -262,6 +262,31 @@ c {
|
|
262
262
|
SCSS
|
263
263
|
end
|
264
264
|
|
265
|
+
def test_destructuring_each_directive
|
266
|
+
assert_equal <<CSS, render(<<SCSS)
|
267
|
+
a {
|
268
|
+
foo: 1px;
|
269
|
+
bar: 2px;
|
270
|
+
baz: 3px; }
|
271
|
+
|
272
|
+
c {
|
273
|
+
foo: "Value is bar";
|
274
|
+
bar: "Value is baz";
|
275
|
+
bang: "Value is "; }
|
276
|
+
CSS
|
277
|
+
a {
|
278
|
+
@each $name, $number in (foo: 1px, bar: 2px, baz: 3px) {
|
279
|
+
\#{$name}: $number;
|
280
|
+
}
|
281
|
+
}
|
282
|
+
c {
|
283
|
+
@each $key, $value in (foo bar) (bar, baz) bang {
|
284
|
+
\#{$key}: "Value is \#{$value}";
|
285
|
+
}
|
286
|
+
}
|
287
|
+
SCSS
|
288
|
+
end
|
289
|
+
|
265
290
|
def test_css_import_directive
|
266
291
|
assert_equal "@import url(foo.css);\n", render('@import "foo.css";')
|
267
292
|
assert_equal "@import url(foo.css);\n", render("@import 'foo.css';")
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 592302827
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 3
|
8
8
|
- 3
|
9
9
|
- 0
|
10
10
|
- alpha
|
11
|
-
-
|
12
|
-
version: 3.3.0.alpha.
|
11
|
+
- 243
|
12
|
+
version: 3.3.0.alpha.243
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Nathan Weizenbaum
|
@@ -19,7 +19,7 @@ autorequire:
|
|
19
19
|
bindir: bin
|
20
20
|
cert_chain: []
|
21
21
|
|
22
|
-
date: 2013-08-
|
22
|
+
date: 2013-08-29 00:00:00 -04:00
|
23
23
|
default_executable:
|
24
24
|
dependencies:
|
25
25
|
- !ruby/object:Gem::Dependency
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- lib/sass/script/tree/string_interpolation.rb
|
132
132
|
- lib/sass/script/tree/unary_operation.rb
|
133
133
|
- lib/sass/script/tree/variable.rb
|
134
|
+
- lib/sass/script/tree/map_literal.rb
|
134
135
|
- lib/sass/script/value.rb
|
135
136
|
- lib/sass/script/value/arg_list.rb
|
136
137
|
- lib/sass/script/value/base.rb
|
@@ -140,6 +141,7 @@ files:
|
|
140
141
|
- lib/sass/script/value/null.rb
|
141
142
|
- lib/sass/script/value/number.rb
|
142
143
|
- lib/sass/script/value/string.rb
|
144
|
+
- lib/sass/script/value/map.rb
|
143
145
|
- lib/sass/scss.rb
|
144
146
|
- lib/sass/scss/css_parser.rb
|
145
147
|
- lib/sass/scss/parser.rb
|
@@ -155,9 +157,7 @@ files:
|
|
155
157
|
- lib/sass/selector/simple_sequence.rb
|
156
158
|
- lib/sass/shared.rb
|
157
159
|
- lib/sass/supports.rb
|
158
|
-
- lib/sass/
|
159
|
-
- lib/sass/source/position.rb
|
160
|
-
- lib/sass/source/range.rb
|
160
|
+
- lib/sass/version.rb
|
161
161
|
- lib/sass/tree/charset_node.rb
|
162
162
|
- lib/sass/tree/comment_node.rb
|
163
163
|
- lib/sass/tree/content_node.rb
|
@@ -192,14 +192,16 @@ files:
|
|
192
192
|
- lib/sass/tree/visitors/to_css.rb
|
193
193
|
- lib/sass/tree/warn_node.rb
|
194
194
|
- lib/sass/tree/while_node.rb
|
195
|
-
- lib/sass/
|
195
|
+
- lib/sass/source/map.rb
|
196
|
+
- lib/sass/source/position.rb
|
197
|
+
- lib/sass/source/range.rb
|
196
198
|
- lib/sass/util/multibyte_string_scanner.rb
|
197
199
|
- lib/sass/util/normalized_map.rb
|
198
200
|
- lib/sass/util/ordered_hash.rb
|
199
201
|
- lib/sass/util/subset_map.rb
|
200
202
|
- lib/sass/util/test.rb
|
201
|
-
- lib/sass/version.rb
|
202
203
|
- lib/sass/features.rb
|
204
|
+
- lib/sass/stack.rb
|
203
205
|
- bin/sass
|
204
206
|
- bin/sass-convert
|
205
207
|
- bin/scss
|