sass 3.4.25 → 3.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +1 -1
  3. data/CONTRIBUTING.md +3 -3
  4. data/README.md +17 -9
  5. data/VERSION +1 -1
  6. data/VERSION_DATE +1 -1
  7. data/VERSION_NAME +1 -1
  8. data/extra/sass-spec-ref.sh +9 -1
  9. data/lib/sass.rb +0 -7
  10. data/lib/sass/cache_stores/filesystem.rb +1 -1
  11. data/lib/sass/css.rb +1 -2
  12. data/lib/sass/engine.rb +39 -29
  13. data/lib/sass/environment.rb +26 -5
  14. data/lib/sass/error.rb +2 -2
  15. data/lib/sass/exec/base.rb +2 -13
  16. data/lib/sass/exec/sass_scss.rb +1 -5
  17. data/lib/sass/features.rb +1 -0
  18. data/lib/sass/importers/filesystem.rb +6 -4
  19. data/lib/sass/logger/base.rb +11 -0
  20. data/lib/sass/plugin/compiler.rb +20 -50
  21. data/lib/sass/plugin/configuration.rb +2 -2
  22. data/lib/sass/railtie.rb +1 -1
  23. data/lib/sass/script/css_parser.rb +4 -1
  24. data/lib/sass/script/functions.rb +308 -81
  25. data/lib/sass/script/lexer.rb +63 -9
  26. data/lib/sass/script/parser.rb +287 -118
  27. data/lib/sass/script/tree/funcall.rb +35 -34
  28. data/lib/sass/script/tree/interpolation.rb +0 -3
  29. data/lib/sass/script/tree/list_literal.rb +23 -8
  30. data/lib/sass/script/tree/map_literal.rb +2 -2
  31. data/lib/sass/script/tree/node.rb +0 -8
  32. data/lib/sass/script/tree/operation.rb +1 -8
  33. data/lib/sass/script/value.rb +2 -0
  34. data/lib/sass/script/value/arg_list.rb +1 -1
  35. data/lib/sass/script/value/base.rb +17 -0
  36. data/lib/sass/script/value/callable.rb +25 -0
  37. data/lib/sass/script/value/color.rb +8 -2
  38. data/lib/sass/script/value/function.rb +19 -0
  39. data/lib/sass/script/value/helpers.rb +37 -11
  40. data/lib/sass/script/value/list.rb +35 -14
  41. data/lib/sass/script/value/map.rb +2 -2
  42. data/lib/sass/script/value/number.rb +3 -2
  43. data/lib/sass/scss/css_parser.rb +6 -1
  44. data/lib/sass/scss/parser.rb +145 -56
  45. data/lib/sass/scss/rx.rb +5 -11
  46. data/lib/sass/scss/static_parser.rb +20 -42
  47. data/lib/sass/selector.rb +4 -0
  48. data/lib/sass/selector/abstract_sequence.rb +7 -6
  49. data/lib/sass/selector/comma_sequence.rb +9 -5
  50. data/lib/sass/selector/pseudo.rb +20 -3
  51. data/lib/sass/selector/sequence.rb +35 -10
  52. data/lib/sass/selector/simple.rb +9 -2
  53. data/lib/sass/selector/simple_sequence.rb +8 -4
  54. data/lib/sass/source/map.rb +2 -6
  55. data/lib/sass/stack.rb +21 -1
  56. data/lib/sass/tree/charset_node.rb +1 -1
  57. data/lib/sass/tree/prop_node.rb +45 -53
  58. data/lib/sass/tree/rule_node.rb +6 -8
  59. data/lib/sass/tree/visitors/check_nesting.rb +1 -1
  60. data/lib/sass/tree/visitors/convert.rb +2 -3
  61. data/lib/sass/tree/visitors/cssize.rb +4 -15
  62. data/lib/sass/tree/visitors/deep_copy.rb +1 -1
  63. data/lib/sass/tree/visitors/extend.rb +2 -8
  64. data/lib/sass/tree/visitors/perform.rb +23 -15
  65. data/lib/sass/tree/visitors/set_options.rb +1 -1
  66. data/lib/sass/tree/visitors/to_css.rb +49 -22
  67. data/lib/sass/util.rb +72 -310
  68. data/lib/sass/util/multibyte_string_scanner.rb +127 -131
  69. data/lib/sass/util/normalized_map.rb +1 -8
  70. data/lib/sass/version.rb +0 -4
  71. metadata +55 -202
  72. data/Rakefile +0 -453
  73. data/lib/sass/script/css_variable_warning.rb +0 -52
  74. data/lib/sass/util/cross_platform_random.rb +0 -19
  75. data/lib/sass/util/ordered_hash.rb +0 -192
  76. data/test/sass-spec.yml +0 -3
  77. data/test/sass/cache_test.rb +0 -131
  78. data/test/sass/callbacks_test.rb +0 -61
  79. data/test/sass/compiler_test.rb +0 -236
  80. data/test/sass/conversion_test.rb +0 -2188
  81. data/test/sass/css2sass_test.rb +0 -526
  82. data/test/sass/css_variable_test.rb +0 -132
  83. data/test/sass/data/hsl-rgb.txt +0 -319
  84. data/test/sass/encoding_test.rb +0 -219
  85. data/test/sass/engine_test.rb +0 -3447
  86. data/test/sass/exec_test.rb +0 -96
  87. data/test/sass/extend_test.rb +0 -1733
  88. data/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
  89. data/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
  90. data/test/sass/functions_test.rb +0 -1977
  91. data/test/sass/importer_test.rb +0 -421
  92. data/test/sass/logger_test.rb +0 -58
  93. data/test/sass/mock_importer.rb +0 -49
  94. data/test/sass/more_results/more1.css +0 -9
  95. data/test/sass/more_results/more1_with_line_comments.css +0 -26
  96. data/test/sass/more_results/more_import.css +0 -29
  97. data/test/sass/more_templates/_more_partial.sass +0 -2
  98. data/test/sass/more_templates/more1.sass +0 -23
  99. data/test/sass/more_templates/more_import.sass +0 -11
  100. data/test/sass/plugin_test.rb +0 -556
  101. data/test/sass/results/alt.css +0 -4
  102. data/test/sass/results/basic.css +0 -9
  103. data/test/sass/results/cached_import_option.css +0 -3
  104. data/test/sass/results/compact.css +0 -5
  105. data/test/sass/results/complex.css +0 -86
  106. data/test/sass/results/compressed.css +0 -1
  107. data/test/sass/results/expanded.css +0 -19
  108. data/test/sass/results/filename_fn.css +0 -3
  109. data/test/sass/results/if.css +0 -3
  110. data/test/sass/results/import.css +0 -31
  111. data/test/sass/results/import_charset.css +0 -5
  112. data/test/sass/results/import_charset_1_8.css +0 -5
  113. data/test/sass/results/import_charset_ibm866.css +0 -5
  114. data/test/sass/results/import_content.css +0 -1
  115. data/test/sass/results/line_numbers.css +0 -49
  116. data/test/sass/results/mixins.css +0 -95
  117. data/test/sass/results/multiline.css +0 -24
  118. data/test/sass/results/nested.css +0 -22
  119. data/test/sass/results/options.css +0 -1
  120. data/test/sass/results/parent_ref.css +0 -13
  121. data/test/sass/results/script.css +0 -16
  122. data/test/sass/results/scss_import.css +0 -31
  123. data/test/sass/results/scss_importee.css +0 -2
  124. data/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  125. data/test/sass/results/subdir/subdir.css +0 -3
  126. data/test/sass/results/units.css +0 -11
  127. data/test/sass/results/warn.css +0 -0
  128. data/test/sass/results/warn_imported.css +0 -0
  129. data/test/sass/script_conversion_test.rb +0 -357
  130. data/test/sass/script_test.rb +0 -1431
  131. data/test/sass/scss/css_test.rb +0 -1281
  132. data/test/sass/scss/rx_test.rb +0 -160
  133. data/test/sass/scss/scss_test.rb +0 -4205
  134. data/test/sass/scss/test_helper.rb +0 -37
  135. data/test/sass/source_map_test.rb +0 -1055
  136. data/test/sass/superselector_test.rb +0 -210
  137. data/test/sass/templates/_cached_import_option_partial.scss +0 -1
  138. data/test/sass/templates/_double_import_loop2.sass +0 -1
  139. data/test/sass/templates/_filename_fn_import.scss +0 -11
  140. data/test/sass/templates/_imported_charset_ibm866.sass +0 -4
  141. data/test/sass/templates/_imported_charset_utf8.sass +0 -4
  142. data/test/sass/templates/_imported_content.sass +0 -3
  143. data/test/sass/templates/_partial.sass +0 -2
  144. data/test/sass/templates/_same_name_different_partiality.scss +0 -1
  145. data/test/sass/templates/alt.sass +0 -16
  146. data/test/sass/templates/basic.sass +0 -23
  147. data/test/sass/templates/bork1.sass +0 -2
  148. data/test/sass/templates/bork2.sass +0 -2
  149. data/test/sass/templates/bork3.sass +0 -2
  150. data/test/sass/templates/bork4.sass +0 -2
  151. data/test/sass/templates/bork5.sass +0 -3
  152. data/test/sass/templates/cached_import_option.scss +0 -3
  153. data/test/sass/templates/compact.sass +0 -17
  154. data/test/sass/templates/complex.sass +0 -305
  155. data/test/sass/templates/compressed.sass +0 -15
  156. data/test/sass/templates/double_import_loop1.sass +0 -1
  157. data/test/sass/templates/expanded.sass +0 -17
  158. data/test/sass/templates/filename_fn.scss +0 -18
  159. data/test/sass/templates/if.sass +0 -11
  160. data/test/sass/templates/import.sass +0 -12
  161. data/test/sass/templates/import_charset.sass +0 -9
  162. data/test/sass/templates/import_charset_1_8.sass +0 -6
  163. data/test/sass/templates/import_charset_ibm866.sass +0 -11
  164. data/test/sass/templates/import_content.sass +0 -4
  165. data/test/sass/templates/importee.less +0 -2
  166. data/test/sass/templates/importee.sass +0 -19
  167. data/test/sass/templates/line_numbers.sass +0 -13
  168. data/test/sass/templates/mixin_bork.sass +0 -5
  169. data/test/sass/templates/mixins.sass +0 -76
  170. data/test/sass/templates/multiline.sass +0 -20
  171. data/test/sass/templates/nested.sass +0 -25
  172. data/test/sass/templates/nested_bork1.sass +0 -2
  173. data/test/sass/templates/nested_bork2.sass +0 -2
  174. data/test/sass/templates/nested_bork3.sass +0 -2
  175. data/test/sass/templates/nested_bork4.sass +0 -2
  176. data/test/sass/templates/nested_import.sass +0 -2
  177. data/test/sass/templates/nested_mixin_bork.sass +0 -6
  178. data/test/sass/templates/options.sass +0 -2
  179. data/test/sass/templates/parent_ref.sass +0 -25
  180. data/test/sass/templates/same_name_different_ext.sass +0 -2
  181. data/test/sass/templates/same_name_different_ext.scss +0 -1
  182. data/test/sass/templates/same_name_different_partiality.scss +0 -1
  183. data/test/sass/templates/script.sass +0 -101
  184. data/test/sass/templates/scss_import.scss +0 -12
  185. data/test/sass/templates/scss_importee.scss +0 -1
  186. data/test/sass/templates/single_import_loop.sass +0 -1
  187. data/test/sass/templates/subdir/import_up1.scss +0 -1
  188. data/test/sass/templates/subdir/import_up2.scss +0 -1
  189. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  190. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  191. data/test/sass/templates/subdir/subdir.sass +0 -6
  192. data/test/sass/templates/units.sass +0 -11
  193. data/test/sass/templates/warn.sass +0 -3
  194. data/test/sass/templates/warn_imported.sass +0 -4
  195. data/test/sass/test_helper.rb +0 -8
  196. data/test/sass/util/multibyte_string_scanner_test.rb +0 -155
  197. data/test/sass/util/normalized_map_test.rb +0 -51
  198. data/test/sass/util/subset_map_test.rb +0 -91
  199. data/test/sass/util_test.rb +0 -438
  200. data/test/sass/value_helpers_test.rb +0 -179
  201. data/test/test_helper.rb +0 -110
  202. data/vendor/listen/CHANGELOG.md +0 -1
  203. data/vendor/listen/CONTRIBUTING.md +0 -38
  204. data/vendor/listen/Gemfile +0 -20
  205. data/vendor/listen/Guardfile +0 -8
  206. data/vendor/listen/LICENSE +0 -20
  207. data/vendor/listen/README.md +0 -349
  208. data/vendor/listen/Rakefile +0 -5
  209. data/vendor/listen/Vagrantfile +0 -96
  210. data/vendor/listen/lib/listen.rb +0 -54
  211. data/vendor/listen/lib/listen/adapter.rb +0 -327
  212. data/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
  213. data/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
  214. data/vendor/listen/lib/listen/adapters/linux.rb +0 -81
  215. data/vendor/listen/lib/listen/adapters/polling.rb +0 -58
  216. data/vendor/listen/lib/listen/adapters/windows.rb +0 -91
  217. data/vendor/listen/lib/listen/directory_record.rb +0 -406
  218. data/vendor/listen/lib/listen/listener.rb +0 -323
  219. data/vendor/listen/lib/listen/turnstile.rb +0 -32
  220. data/vendor/listen/lib/listen/version.rb +0 -3
  221. data/vendor/listen/listen.gemspec +0 -28
  222. data/vendor/listen/spec/listen/adapter_spec.rb +0 -149
  223. data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
  224. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
  225. data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
  226. data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
  227. data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
  228. data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
  229. data/vendor/listen/spec/listen/listener_spec.rb +0 -258
  230. data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
  231. data/vendor/listen/spec/listen_spec.rb +0 -67
  232. data/vendor/listen/spec/spec_helper.rb +0 -25
  233. data/vendor/listen/spec/support/adapter_helper.rb +0 -666
  234. data/vendor/listen/spec/support/directory_record_helper.rb +0 -57
  235. data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
  236. data/vendor/listen/spec/support/listeners_helper.rb +0 -179
  237. data/vendor/listen/spec/support/platform_helper.rb +0 -15
@@ -1,526 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'minitest/autorun'
3
- require File.dirname(__FILE__) + '/../test_helper'
4
- require 'sass/css'
5
-
6
- class CSS2SassTest < MiniTest::Test
7
- def test_basic
8
- css = <<CSS
9
- h1 {
10
- color: red;
11
- }
12
- CSS
13
- assert_equal(<<SASS, css2sass(css))
14
- h1
15
- color: red
16
- SASS
17
- silence_warnings {assert_equal(<<SASS, css2sass(css, :old => true))}
18
- h1
19
- :color red
20
- SASS
21
- end
22
-
23
- def test_nesting
24
- assert_equal(<<SASS, css2sass(<<CSS))
25
- li
26
- display: none
27
-
28
- a
29
- text-decoration: none
30
-
31
- span
32
- color: yellow
33
-
34
- &:hover
35
- text-decoration: underline
36
- SASS
37
- li {
38
- display: none;
39
- }
40
-
41
- li a {
42
- text-decoration: none;
43
- }
44
-
45
- li a span {
46
- color: yellow;
47
- }
48
-
49
- li a:hover {
50
- text-decoration: underline;
51
- }
52
- CSS
53
- end
54
-
55
- def test_no_nesting_around_rules
56
- assert_equal(<<SASS, css2sass(<<CSS))
57
- div .warning
58
- color: #d21a19
59
-
60
- span .debug
61
- cursor: crosshair
62
-
63
- div .debug
64
- cursor: default
65
- SASS
66
- div .warning {
67
- color: #d21a19; }
68
- span .debug {
69
- cursor: crosshair;}
70
- div .debug {
71
- cursor: default; }
72
- CSS
73
- end
74
-
75
- def test_comments_multiline
76
- css = <<CSS
77
- /* comment */
78
- elephant.rawr {
79
- rampages: excessively;
80
- }
81
-
82
- /* actual multiline
83
- comment */
84
- span.turkey {
85
- isdinner: true;
86
- }
87
-
88
- .turducken {
89
- /* Sounds funny
90
- doesn't it */
91
- chimera: not_really;
92
- }
93
-
94
- #overhere {
95
- bored: sorta; /* it's for a good
96
- cause */
97
- better_than: thread_pools;
98
- }
99
-
100
- #one_more {
101
- finally: srsly;
102
- } /* just a line here */
103
- CSS
104
- sass = <<SASS
105
- /* comment
106
-
107
- elephant.rawr
108
- rampages: excessively
109
-
110
- /* actual multiline
111
- *comment
112
-
113
- span.turkey
114
- isdinner: true
115
-
116
- .turducken
117
- /* Sounds funny
118
- * doesn't it
119
- chimera: not_really
120
-
121
- #overhere
122
- bored: sorta
123
-
124
- /* it's for a good
125
- * cause
126
- better_than: thread_pools
127
-
128
- #one_more
129
- finally: srsly
130
-
131
- /* just a line here
132
- SASS
133
- assert_equal(sass, css2sass(css))
134
- end
135
-
136
- def test_fold_commas
137
- assert_equal(<<SASS, css2sass(<<CSS))
138
- li
139
- .one, .two
140
- color: red
141
- SASS
142
- li .one {
143
- color: red;
144
- }
145
- li .two {
146
- color: red;
147
- }
148
- CSS
149
-
150
- assert_equal(<<SASS, css2sass(<<CSS))
151
- .one
152
- color: green
153
-
154
- .two
155
- color: green
156
- color: red
157
-
158
- .three
159
- color: red
160
- SASS
161
- .one, .two {
162
- color: green;
163
- }
164
-
165
- .two, .three {
166
- color: red;
167
- }
168
- CSS
169
- end
170
-
171
- def test_bad_formatting
172
- assert_equal(<<SASS, css2sass(<<CSS))
173
- hello
174
- parent: true
175
-
176
- there
177
- parent: false
178
-
179
- who
180
- hoo: false
181
-
182
- why
183
- y: true
184
-
185
- when
186
- wen: nao
187
-
188
- down_here
189
- yeah: true
190
- SASS
191
- hello {
192
- parent: true;
193
- }
194
-
195
- hello there {
196
- parent: false;
197
- }
198
- hello who {
199
- hoo: false;
200
- }
201
- hello why {
202
- y: true;
203
- }
204
- hello when {
205
- wen: nao;
206
- }
207
-
208
-
209
-
210
- down_here { yeah: true; }
211
- CSS
212
- end
213
-
214
- def test_comments_in_selectors
215
- assert_equal(<<SASS, css2sass(<<CSS))
216
- .js
217
- #location-navigation-form .form-submit, #business-listing-form .form-submit, #detailTabs ul, #detailsEnhanced #addTags, #locationSearchList, #moreHoods
218
- display: none
219
-
220
- #navListLeft
221
- display: none
222
- SASS
223
- .js #location-navigation-form .form-submit,
224
- .js #business-listing-form .form-submit,
225
- .js #detailTabs ul,
226
- /* .js #addReview, */
227
- /* .js #addTags, */
228
- .js #detailsEnhanced #addTags,
229
- .js #locationSearchList,
230
- .js #moreHoods,
231
- #navListLeft
232
- { display: none; }
233
- CSS
234
- end
235
-
236
- def test_pseudo_classes_are_escaped
237
- assert_equal(<<SASS, css2sass(<<CSS))
238
- \\:focus
239
- a: b
240
-
241
- \\:foo
242
- bar: baz
243
- SASS
244
- :focus {a: b;}
245
- :focus :foo {bar: baz;}
246
- CSS
247
- end
248
-
249
- def test_subject
250
- silence_warnings {assert_equal(<<SASS, css2sass(<<CSS))}
251
- .foo
252
- .bar!
253
- .baz
254
- a: b
255
-
256
- .bip
257
- c: d
258
-
259
- .bar .bonk
260
- e: f
261
-
262
- .flip!
263
- &.bar
264
- a: b
265
-
266
- &.baz
267
- c: d
268
- SASS
269
- .foo .bar! .baz {a: b;}
270
- .foo .bar! .bip {c: d;}
271
- .foo .bar .bonk {e: f;}
272
-
273
- .flip.bar! {a: b;}
274
- .flip.baz! {c: d;}
275
- CSS
276
- end
277
-
278
- def test_keyframes
279
- assert_equal(<<SASS, css2sass(<<CSS))
280
- @keyframes dash
281
- from
282
- stroke-dasharray: 1,200
283
- stroke-dashoffset: 0
284
-
285
- 50%
286
- stroke-dasharray: 89,200
287
- stroke-dashoffset: -35
288
-
289
- to
290
- stroke-dasharray: 89,200
291
- stroke-dashoffset: -124
292
- SASS
293
- @keyframes dash {
294
- from {
295
- stroke-dasharray: 1,200;
296
- stroke-dashoffset: 0;
297
- }
298
- 50% {
299
- stroke-dasharray: 89,200;
300
- stroke-dashoffset: -35;
301
- }
302
- to {
303
- stroke-dasharray: 89,200;
304
- stroke-dashoffset: -124;
305
- }
306
- }
307
- CSS
308
- end
309
-
310
- # Regressions
311
-
312
- def test_nesting_with_matching_property
313
- assert_equal(<<SASS, css2sass(<<CSS))
314
- ul
315
- width: 10px
316
-
317
- div
318
- width: 20px
319
-
320
- article
321
- width: 10px
322
-
323
- p
324
- width: 20px
325
- SASS
326
- ul {width: 10px}
327
- ul div {width: 20px}
328
- article {width: 10px}
329
- article p {width: 20px}
330
- CSS
331
- end
332
-
333
- def test_empty_rule
334
- assert_equal(<<SASS, css2sass(<<CSS))
335
- a
336
- SASS
337
- a {}
338
- CSS
339
- end
340
-
341
- def test_empty_rule_with_selector_combinator
342
- assert_equal(<<SASS, css2sass(<<CSS))
343
- a
344
- color: red
345
-
346
- > b
347
- SASS
348
- a {color: red}
349
- a > b {}
350
- CSS
351
- end
352
-
353
- def test_nesting_within_media
354
- assert_equal(<<SASS, css2sass(<<CSS))
355
- @media all
356
- .next .vevent
357
- padding-left: 0
358
- padding-right: 0
359
- SASS
360
- @media all {
361
- .next .vevent {
362
- padding-left: 0;
363
- padding-right: 0; } }
364
- CSS
365
- end
366
-
367
- def test_multiline_selector_within_media_and_with_child_selector
368
- assert_equal(<<SASS, css2sass(<<CSS))
369
- @media all
370
- foo bar, baz
371
- padding-left: 0
372
- padding-right: 0
373
- SASS
374
- @media all {
375
- foo bar,
376
- baz {
377
- padding-left: 0;
378
- padding-right: 0; } }
379
- CSS
380
- end
381
-
382
- def test_double_comma
383
- assert_equal(<<SASS, css2sass(<<CSS))
384
- foo, bar
385
- a: b
386
- SASS
387
- foo, , bar { a: b }
388
- CSS
389
- end
390
-
391
- def test_selector_splitting
392
- assert_equal(<<SASS, css2sass(<<CSS))
393
- .foo >
394
- .bar
395
- a: b
396
-
397
- .baz
398
- c: d
399
- SASS
400
- .foo>.bar {a: b}
401
- .foo>.baz {c: d}
402
- CSS
403
-
404
- assert_equal(<<SASS, css2sass(<<CSS))
405
- .foo
406
- &::bar
407
- a: b
408
-
409
- &::baz
410
- c: d
411
- SASS
412
- .foo::bar {a: b}
413
- .foo::baz {c: d}
414
- CSS
415
- end
416
-
417
- def test_triple_nesting
418
- assert_equal(<<SASS, css2sass(<<CSS))
419
- .foo .bar .baz
420
- a: b
421
- SASS
422
- .foo .bar .baz {a: b}
423
- CSS
424
-
425
- assert_equal(<<SASS, css2sass(<<CSS))
426
- .bar > .baz
427
- c: d
428
- SASS
429
- .bar > .baz {c: d}
430
- CSS
431
- end
432
-
433
- # Error reporting
434
-
435
- def test_error_reporting
436
- css2sass("foo")
437
- assert(false, "Expected exception")
438
- rescue Sass::SyntaxError => err
439
- assert_equal(1, err.sass_line)
440
- assert_equal('Invalid CSS after "foo": expected "{", was ""', err.message)
441
- end
442
-
443
- def test_error_reporting_in_line
444
- css2sass("foo\nbar }\nbaz")
445
- assert(false, "Expected exception")
446
- rescue Sass::SyntaxError => err
447
- assert_equal(2, err.sass_line)
448
- assert_equal('Invalid CSS after "bar ": expected "{", was "}"', err.message)
449
- end
450
-
451
- def test_error_truncate_after
452
- css2sass("#{"a" * 16}foo")
453
- assert(false, "Expected exception")
454
- rescue Sass::SyntaxError => err
455
- assert_equal(1, err.sass_line)
456
- assert_equal('Invalid CSS after "...aaaaaaaaaaaafoo": expected "{", was ""', err.message)
457
- end
458
-
459
- def test_error_truncate_was
460
- css2sass("foo }foo#{"a" * 15}")
461
- assert(false, "Expected exception")
462
- rescue Sass::SyntaxError => err
463
- assert_equal(1, err.sass_line)
464
- assert_equal('Invalid CSS after "foo ": expected "{", was "}fooaaaaaaaaaaa..."', err.message)
465
- end
466
-
467
- def test_error_doesnt_truncate_after_when_elipsis_would_add_length
468
- css2sass("#{"a" * 15}foo")
469
- assert(false, "Expected exception")
470
- rescue Sass::SyntaxError => err
471
- assert_equal(1, err.sass_line)
472
- assert_equal('Invalid CSS after "aaaaaaaaaaaaaaafoo": expected "{", was ""', err.message)
473
- end
474
-
475
- def test_error_doesnt_truncate_was_when_elipsis_would_add_length
476
- css2sass("foo }foo#{"a" * 14}")
477
- assert(false, "Expected exception")
478
- rescue Sass::SyntaxError => err
479
- assert_equal(1, err.sass_line)
480
- assert_equal('Invalid CSS after "foo ": expected "{", was "}fooaaaaaaaaaaaaaa"', err.message)
481
- end
482
-
483
- def test_error_gets_rid_of_trailing_newline_for_after
484
- css2sass("foo \n ")
485
- assert(false, "Expected exception")
486
- rescue Sass::SyntaxError => err
487
- assert_equal(2, err.sass_line)
488
- assert_equal('Invalid CSS after "foo": expected "{", was ""', err.message)
489
- end
490
-
491
- def test_error_gets_rid_of_trailing_newline_for_was
492
- css2sass("foo \n }foo")
493
- assert(false, "Expected exception")
494
- rescue Sass::SyntaxError => err
495
- assert_equal(2, err.sass_line)
496
- assert_equal('Invalid CSS after "foo": expected "{", was "}foo"', err.message)
497
- end
498
-
499
- # Encodings
500
-
501
- unless Sass::Util.ruby1_8?
502
- def test_encoding_error
503
- css2sass("foo\nbar\nb\xFEaz".force_encoding("utf-8"))
504
- assert(false, "Expected exception")
505
- rescue Sass::SyntaxError => e
506
- assert_equal(3, e.sass_line)
507
- assert_equal('Invalid UTF-8 character "\xFE"', e.message)
508
- end
509
-
510
- def test_ascii_incompatible_encoding_error
511
- template = "foo\nbar\nb_z".encode("utf-16le")
512
- template[9] = "\xFE".force_encoding("utf-16le")
513
- css2sass(template)
514
- assert(false, "Expected exception")
515
- rescue Sass::SyntaxError => e
516
- assert_equal(3, e.sass_line)
517
- assert_equal('Invalid UTF-16LE character "\xFE"', e.message)
518
- end
519
- end
520
-
521
- private
522
-
523
- def css2sass(string, opts={})
524
- Sass::CSS.new(string, opts).render
525
- end
526
- end