oreorenasass 3.4.4 → 3.4.5

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.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +50 -70
  4. data/Rakefile +5 -26
  5. data/VERSION +1 -1
  6. data/VERSION_NAME +1 -1
  7. data/bin/sass +1 -1
  8. data/bin/scss +1 -1
  9. data/lib/sass.rb +12 -19
  10. data/lib/sass/cache_stores/base.rb +2 -2
  11. data/lib/sass/cache_stores/chain.rb +1 -2
  12. data/lib/sass/cache_stores/filesystem.rb +5 -1
  13. data/lib/sass/cache_stores/memory.rb +1 -1
  14. data/lib/sass/cache_stores/null.rb +2 -2
  15. data/lib/sass/callbacks.rb +0 -1
  16. data/lib/sass/css.rb +13 -11
  17. data/lib/sass/engine.rb +173 -424
  18. data/lib/sass/environment.rb +58 -148
  19. data/lib/sass/error.rb +14 -11
  20. data/lib/sass/exec.rb +703 -5
  21. data/lib/sass/importers/base.rb +6 -49
  22. data/lib/sass/importers/filesystem.rb +19 -44
  23. data/lib/sass/logger.rb +4 -1
  24. data/lib/sass/logger/base.rb +4 -2
  25. data/lib/sass/logger/log_level.rb +7 -3
  26. data/lib/sass/media.rb +23 -20
  27. data/lib/sass/plugin.rb +7 -7
  28. data/lib/sass/plugin/compiler.rb +145 -304
  29. data/lib/sass/plugin/configuration.rb +23 -18
  30. data/lib/sass/plugin/merb.rb +1 -1
  31. data/lib/sass/plugin/staleness_checker.rb +3 -3
  32. data/lib/sass/repl.rb +3 -3
  33. data/lib/sass/script.rb +8 -35
  34. data/lib/sass/script/{value/arg_list.rb → arg_list.rb} +25 -9
  35. data/lib/sass/script/bool.rb +18 -0
  36. data/lib/sass/script/color.rb +606 -0
  37. data/lib/sass/script/css_lexer.rb +4 -8
  38. data/lib/sass/script/css_parser.rb +2 -5
  39. data/lib/sass/script/funcall.rb +245 -0
  40. data/lib/sass/script/functions.rb +408 -1491
  41. data/lib/sass/script/interpolation.rb +79 -0
  42. data/lib/sass/script/lexer.rb +68 -172
  43. data/lib/sass/script/list.rb +85 -0
  44. data/lib/sass/script/literal.rb +221 -0
  45. data/lib/sass/script/{tree/node.rb → node.rb} +12 -22
  46. data/lib/sass/script/{value/null.rb → null.rb} +7 -14
  47. data/lib/sass/script/{value/number.rb → number.rb} +75 -152
  48. data/lib/sass/script/{tree/operation.rb → operation.rb} +24 -17
  49. data/lib/sass/script/parser.rb +110 -245
  50. data/lib/sass/script/string.rb +51 -0
  51. data/lib/sass/script/{tree/string_interpolation.rb → string_interpolation.rb} +4 -5
  52. data/lib/sass/script/{tree/unary_operation.rb → unary_operation.rb} +6 -6
  53. data/lib/sass/script/variable.rb +58 -0
  54. data/lib/sass/scss/css_parser.rb +3 -9
  55. data/lib/sass/scss/parser.rb +421 -450
  56. data/lib/sass/scss/rx.rb +11 -19
  57. data/lib/sass/scss/static_parser.rb +7 -321
  58. data/lib/sass/selector.rb +194 -68
  59. data/lib/sass/selector/abstract_sequence.rb +14 -29
  60. data/lib/sass/selector/comma_sequence.rb +25 -108
  61. data/lib/sass/selector/sequence.rb +66 -159
  62. data/lib/sass/selector/simple.rb +25 -23
  63. data/lib/sass/selector/simple_sequence.rb +63 -173
  64. data/lib/sass/shared.rb +1 -1
  65. data/lib/sass/supports.rb +15 -13
  66. data/lib/sass/tree/charset_node.rb +1 -1
  67. data/lib/sass/tree/comment_node.rb +3 -3
  68. data/lib/sass/tree/css_import_node.rb +11 -11
  69. data/lib/sass/tree/debug_node.rb +2 -2
  70. data/lib/sass/tree/directive_node.rb +4 -21
  71. data/lib/sass/tree/each_node.rb +8 -8
  72. data/lib/sass/tree/extend_node.rb +7 -14
  73. data/lib/sass/tree/for_node.rb +4 -4
  74. data/lib/sass/tree/function_node.rb +4 -9
  75. data/lib/sass/tree/if_node.rb +1 -1
  76. data/lib/sass/tree/import_node.rb +5 -4
  77. data/lib/sass/tree/media_node.rb +14 -4
  78. data/lib/sass/tree/mixin_def_node.rb +4 -4
  79. data/lib/sass/tree/mixin_node.rb +8 -21
  80. data/lib/sass/tree/node.rb +12 -54
  81. data/lib/sass/tree/prop_node.rb +20 -39
  82. data/lib/sass/tree/return_node.rb +2 -3
  83. data/lib/sass/tree/root_node.rb +3 -19
  84. data/lib/sass/tree/rule_node.rb +22 -35
  85. data/lib/sass/tree/supports_node.rb +13 -0
  86. data/lib/sass/tree/trace_node.rb +1 -2
  87. data/lib/sass/tree/variable_node.rb +3 -9
  88. data/lib/sass/tree/visitors/base.rb +8 -5
  89. data/lib/sass/tree/visitors/check_nesting.rb +19 -49
  90. data/lib/sass/tree/visitors/convert.rb +56 -74
  91. data/lib/sass/tree/visitors/cssize.rb +74 -202
  92. data/lib/sass/tree/visitors/deep_copy.rb +5 -10
  93. data/lib/sass/tree/visitors/extend.rb +7 -7
  94. data/lib/sass/tree/visitors/perform.rb +185 -278
  95. data/lib/sass/tree/visitors/set_options.rb +6 -20
  96. data/lib/sass/tree/visitors/to_css.rb +81 -234
  97. data/lib/sass/tree/warn_node.rb +2 -2
  98. data/lib/sass/tree/while_node.rb +2 -2
  99. data/lib/sass/util.rb +152 -522
  100. data/lib/sass/util/multibyte_string_scanner.rb +0 -2
  101. data/lib/sass/util/subset_map.rb +3 -4
  102. data/lib/sass/util/test.rb +1 -0
  103. data/lib/sass/version.rb +22 -20
  104. data/test/Gemfile +3 -0
  105. data/test/Gemfile.lock +10 -0
  106. data/test/sass/cache_test.rb +20 -62
  107. data/test/sass/callbacks_test.rb +1 -1
  108. data/test/sass/conversion_test.rb +2 -296
  109. data/test/sass/css2sass_test.rb +4 -23
  110. data/test/sass/engine_test.rb +354 -411
  111. data/test/sass/exec_test.rb +2 -2
  112. data/test/sass/extend_test.rb +145 -324
  113. data/test/sass/functions_test.rb +86 -873
  114. data/test/sass/importer_test.rb +21 -241
  115. data/test/sass/logger_test.rb +1 -1
  116. data/test/sass/more_results/more_import.css +1 -1
  117. data/test/sass/plugin_test.rb +26 -16
  118. data/test/sass/results/compact.css +1 -1
  119. data/test/sass/results/complex.css +4 -4
  120. data/test/sass/results/expanded.css +1 -1
  121. data/test/sass/results/import.css +1 -1
  122. data/test/sass/results/import_charset_ibm866.css +2 -2
  123. data/test/sass/results/mixins.css +17 -17
  124. data/test/sass/results/nested.css +1 -1
  125. data/test/sass/results/parent_ref.css +2 -2
  126. data/test/sass/results/script.css +3 -3
  127. data/test/sass/results/scss_import.css +1 -1
  128. data/test/sass/script_conversion_test.rb +7 -36
  129. data/test/sass/script_test.rb +53 -485
  130. data/test/sass/scss/css_test.rb +28 -143
  131. data/test/sass/scss/rx_test.rb +4 -4
  132. data/test/sass/scss/scss_test.rb +325 -2119
  133. data/test/sass/templates/scss_import.scss +1 -2
  134. data/test/sass/test_helper.rb +1 -1
  135. data/test/sass/util/multibyte_string_scanner_test.rb +1 -1
  136. data/test/sass/util/subset_map_test.rb +2 -2
  137. data/test/sass/util_test.rb +1 -86
  138. data/test/test_helper.rb +8 -37
  139. metadata +19 -66
  140. data/lib/sass/exec/base.rb +0 -187
  141. data/lib/sass/exec/sass_convert.rb +0 -264
  142. data/lib/sass/exec/sass_scss.rb +0 -424
  143. data/lib/sass/features.rb +0 -47
  144. data/lib/sass/script/tree.rb +0 -16
  145. data/lib/sass/script/tree/funcall.rb +0 -306
  146. data/lib/sass/script/tree/interpolation.rb +0 -118
  147. data/lib/sass/script/tree/list_literal.rb +0 -77
  148. data/lib/sass/script/tree/literal.rb +0 -45
  149. data/lib/sass/script/tree/map_literal.rb +0 -64
  150. data/lib/sass/script/tree/selector.rb +0 -26
  151. data/lib/sass/script/tree/variable.rb +0 -57
  152. data/lib/sass/script/value.rb +0 -11
  153. data/lib/sass/script/value/base.rb +0 -240
  154. data/lib/sass/script/value/bool.rb +0 -35
  155. data/lib/sass/script/value/color.rb +0 -680
  156. data/lib/sass/script/value/helpers.rb +0 -262
  157. data/lib/sass/script/value/list.rb +0 -113
  158. data/lib/sass/script/value/map.rb +0 -70
  159. data/lib/sass/script/value/string.rb +0 -97
  160. data/lib/sass/selector/pseudo.rb +0 -256
  161. data/lib/sass/source/map.rb +0 -210
  162. data/lib/sass/source/position.rb +0 -39
  163. data/lib/sass/source/range.rb +0 -41
  164. data/lib/sass/stack.rb +0 -120
  165. data/lib/sass/tree/at_root_node.rb +0 -83
  166. data/lib/sass/tree/error_node.rb +0 -18
  167. data/lib/sass/tree/keyframe_rule_node.rb +0 -15
  168. data/lib/sass/util/cross_platform_random.rb +0 -19
  169. data/lib/sass/util/normalized_map.rb +0 -130
  170. data/lib/sass/util/ordered_hash.rb +0 -192
  171. data/test/sass/compiler_test.rb +0 -232
  172. data/test/sass/encoding_test.rb +0 -219
  173. data/test/sass/source_map_test.rb +0 -977
  174. data/test/sass/superselector_test.rb +0 -191
  175. data/test/sass/util/normalized_map_test.rb +0 -51
  176. data/test/sass/value_helpers_test.rb +0 -179
@@ -1,57 +1,36 @@
1
1
  #!/usr/bin/env ruby
2
2
  require File.dirname(__FILE__) + '/../test_helper'
3
3
  require File.dirname(__FILE__) + '/test_helper'
4
- require 'mock_importer'
5
- require 'sass/plugin'
6
4
 
7
- class ImporterTest < MiniTest::Test
5
+ require 'sass/plugin'
8
6
 
7
+ class ImporterTest < Test::Unit::TestCase
8
+
9
9
  class FruitImporter < Sass::Importers::Base
10
10
  def find(name, context = nil)
11
- fruit = parse(name)
12
- return unless fruit
13
- color = case fruit
14
- when "apple"
15
- "red"
16
- when "orange"
17
- "orange"
18
- else
19
- "blue"
20
- end
21
- contents = %Q{
22
- $#{fruit}-color: #{color} !default;
23
- @mixin #{fruit} {
24
- color: $#{fruit}-color;
11
+ if name =~ %r{fruits/(\w+)(\.s[ac]ss)?}
12
+ fruit = $1
13
+ color = case $1
14
+ when "apple"
15
+ "red"
16
+ when "orange"
17
+ "orange"
18
+ else
19
+ "blue"
20
+ end
21
+ contents = %Q{
22
+ $#{fruit}-color: #{color} !default;
23
+ @mixin #{fruit} {
24
+ color: $#{fruit}-color;
25
+ }
25
26
  }
26
- }
27
- Sass::Engine.new(contents, :filename => name, :syntax => :scss, :importer => self)
27
+ Sass::Engine.new(contents, :filename => name, :syntax => :scss, :importer => self)
28
+ end
28
29
  end
29
30
 
30
31
  def key(name, context)
31
32
  [self.class.name, name]
32
33
  end
33
-
34
- def public_url(name, sourcemap_directory = nil)
35
- "http://#{parse(name)}.example.com/style.scss"
36
- end
37
-
38
- private
39
-
40
- def parse(name)
41
- name[%r{fruits/(\w+)(\.s[ac]ss)?}, 1]
42
- end
43
- end
44
-
45
- class NoPublicUrlImporter < FruitImporter
46
- def public_url(name, sourcemap_directory = nil)
47
- nil
48
- end
49
-
50
- private
51
-
52
- def parse(name)
53
- name[%r{ephemeral/(\w+)(\.s[ac]ss)?}, 1]
54
- end
55
34
  end
56
35
 
57
36
  # This class proves that you can override the extension scheme for importers
@@ -198,205 +177,6 @@ CSS
198
177
  )
199
178
  end
200
179
 
201
- def test_source_map_with_only_css_uri_supports_public_url_imports
202
- fruit_importer = FruitImporter.new
203
-
204
- options = {
205
- :filename => 'fruits/orange',
206
- :importer => fruit_importer,
207
- :syntax => :scss
208
- }
209
-
210
- engine = Sass::Engine.new(<<SCSS, options)
211
- .orchard {
212
- color: blue;
213
- }
214
- SCSS
215
-
216
- _, sourcemap = engine.render_with_sourcemap('sourcemap_uri')
217
- assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => 'css_uri')
218
- {
219
- "version": 3,
220
- "mappings": "AAAA,QAAS;EACP,KAAK,EAAE,IAAI",
221
- "sources": ["http://orange.example.com/style.scss"],
222
- "names": [],
223
- "file": "css_uri"
224
- }
225
- JSON
226
- end
227
-
228
- def test_source_map_with_only_css_uri_can_have_no_public_url
229
- ephemeral_importer = NoPublicUrlImporter.new
230
- mock_importer = MockImporter.new
231
- def mock_importer.public_url(name, sourcemap_directory = nil)
232
- "source_uri"
233
- end
234
-
235
- options = {
236
- :filename => filename_for_test,
237
- :sourcemap_filename => sourcemap_filename_for_test,
238
- :importer => mock_importer,
239
- :syntax => :scss,
240
- :load_paths => [ephemeral_importer],
241
- :cache => false
242
- }
243
-
244
- engine = Sass::Engine.new(<<SCSS, options)
245
- @import "ephemeral/orange";
246
- .orange {
247
- @include orange;
248
- }
249
- SCSS
250
-
251
- css_output, sourcemap = engine.render_with_sourcemap('sourcemap_uri')
252
- assert_equal <<CSS.strip, css_output.strip
253
- .orange {
254
- color: orange; }
255
-
256
- /*# sourceMappingURL=sourcemap_uri */
257
- CSS
258
- map = sourcemap.to_json(:css_uri => 'css_uri')
259
- assert_equal <<JSON.strip, map
260
- {
261
- "version": 3,
262
- "mappings": "AACA,OAAQ",
263
- "sources": ["source_uri"],
264
- "names": [],
265
- "file": "css_uri"
266
- }
267
- JSON
268
- end
269
-
270
- def test_source_map_with_only_css_uri_falls_back_to_file_uris
271
- file_system_importer = Sass::Importers::Filesystem.new('.')
272
- options = {
273
- :filename => filename_for_test(:scss),
274
- :sourcemap_filename => sourcemap_filename_for_test,
275
- :importer => file_system_importer,
276
- :syntax => :scss
277
- }
278
-
279
- engine = Sass::Engine.new(<<SCSS, options)
280
- .foo {a: b}
281
- SCSS
282
-
283
- _, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
284
-
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
295
- end
296
-
297
- def test_source_map_with_css_uri_and_css_path_falls_back_to_file_uris
298
- file_system_importer = Sass::Importers::Filesystem.new('.')
299
- options = {
300
- :filename => filename_for_test(:scss),
301
- :sourcemap_filename => sourcemap_filename_for_test,
302
- :importer => file_system_importer,
303
- :syntax => :scss
304
- }
305
-
306
- engine = Sass::Engine.new(<<SCSS, options)
307
- .foo {a: b}
308
- SCSS
309
-
310
- _, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
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
322
- end
323
-
324
- def test_source_map_with_css_uri_and_sourcemap_path_supports_filesystem_importer
325
- file_system_importer = Sass::Importers::Filesystem.new('.')
326
- css_uri = 'css_uri'
327
- sourcemap_path = 'map/style.map'
328
- options = {
329
- :filename => 'sass/style.scss',
330
- :sourcemap_filename => sourcemap_path,
331
- :importer => file_system_importer,
332
- :syntax => :scss
333
- }
334
-
335
- engine = Sass::Engine.new(<<SCSS, options)
336
- .foo {a: b}
337
- SCSS
338
-
339
- rendered, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
340
-
341
-
342
- rendered, sourcemap = engine.render_with_sourcemap('http://map.example.com/map/style.map')
343
- assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => css_uri, :sourcemap_path => sourcemap_path)
344
- {
345
- "version": 3,
346
- "mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
347
- "sources": ["../sass/style.scss"],
348
- "names": [],
349
- "file": "css_uri"
350
- }
351
- JSON
352
- end
353
-
354
- def test_source_map_with_css_path_and_sourcemap_path_supports_file_system_importer
355
- file_system_importer = Sass::Importers::Filesystem.new('.')
356
- sass_path = 'sass/style.scss'
357
- css_path = 'static/style.css'
358
- sourcemap_path = 'map/style.map'
359
- options = {
360
- :filename => sass_path,
361
- :sourcemap_filename => sourcemap_path,
362
- :importer => file_system_importer,
363
- :syntax => :scss
364
- }
365
-
366
- engine = Sass::Engine.new(<<SCSS, options)
367
- .foo {a: b}
368
- SCSS
369
-
370
- _, sourcemap = engine.render_with_sourcemap('http://map.example.com/map/style.map')
371
- assert_equal <<JSON.strip, sourcemap.to_json(:css_path => css_path, :sourcemap_path => sourcemap_path)
372
- {
373
- "version": 3,
374
- "mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
375
- "sources": ["../sass/style.scss"],
376
- "names": [],
377
- "file": "../static/style.css"
378
- }
379
- JSON
380
- end
381
-
382
- def test_render_with_sourcemap_requires_filename
383
- file_system_importer = Sass::Importers::Filesystem.new('.')
384
- engine = Sass::Engine.new(".foo {a: b}", :syntax => :scss, :importer => file_system_importer)
385
- assert_raise_message(Sass::SyntaxError, <<MESSAGE) {engine.render_with_sourcemap('sourcemap_url')}
386
- Error generating source map: couldn't determine public URL for the source stylesheet.
387
- No filename is available so there's nothing for the source map to link to.
388
- MESSAGE
389
- end
390
-
391
- def test_render_with_sourcemap_requires_importer_with_public_url
392
- class_importer = ClassImporter.new({"pear" => "color: green;"}, {"pear" => Time.now})
393
- assert_raise_message(Sass::SyntaxError, <<MESSAGE) {class_importer.find("pear", {}).render_with_sourcemap('sourcemap_url')}
394
- Error generating source map: couldn't determine public URL for "pear".
395
- Without a public URL, there's nothing for the source map to link to.
396
- Custom importers should define the #public_url method.
397
- MESSAGE
398
- end
399
-
400
180
  def fixture_dir
401
181
  File.join(File.dirname(__FILE__), "fixtures")
402
182
  end
@@ -407,6 +187,6 @@ MESSAGE
407
187
 
408
188
  def test_absolute_files_across_template_locations
409
189
  importer = Sass::Importers::Filesystem.new(absolutize 'templates')
410
- refute_nil importer.mtime(absolutize('more_templates/more1.sass'), {})
190
+ assert_not_nil importer.mtime(absolutize('more_templates/more1.sass'), {})
411
191
  end
412
192
  end
@@ -2,7 +2,7 @@
2
2
  require File.dirname(__FILE__) + '/../test_helper'
3
3
  require 'pathname'
4
4
 
5
- class LoggerTest < MiniTest::Test
5
+ class LoggerTest < Test::Unit::TestCase
6
6
 
7
7
  class InterceptedLogger < Sass::Logger::Base
8
8
 
@@ -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: #baf; }
27
+ #foo { background-color: #bbaaff; }
28
28
 
29
29
  nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
@@ -7,17 +7,17 @@ require 'fileutils'
7
7
  module Sass::Script::Functions
8
8
  def filename
9
9
  filename = options[:filename].gsub(%r{.*((/[^/]+){4})}, '\1')
10
- Sass::Script::Value::String.new(filename)
10
+ Sass::Script::String.new(filename)
11
11
  end
12
12
 
13
13
  def whatever
14
14
  custom = options[:custom]
15
15
  whatever = custom && custom[:whatever]
16
- Sass::Script::Value::String.new(whatever || "incorrect")
16
+ Sass::Script::String.new(whatever || "incorrect")
17
17
  end
18
18
  end
19
19
 
20
- class SassPluginTest < MiniTest::Test
20
+ class SassPluginTest < Test::Unit::TestCase
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 < MiniTest::Test
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
- Error: Undefined variable: "$bork".
116
+ Syntax 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
- Error: Undefined variable: "$bork".
132
+ Syntax 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
- Error: An @import loop has been found: #{template_loc('single_import_loop')} imports itself
149
+ Syntax 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
- 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')}
160
+ Syntax 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
- Error: File to import not found or unreadable: ../subdir/import_up3.scss.
174
- Load path: #{template_loc}
173
+ Syntax 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
- assert_raises(Sass::SyntaxError) {check_for_updates!}
186
+ assert_raise(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.exist?(tempfile_loc('_partial'))
212
+ assert !File.exists?(tempfile_loc('_partial'))
213
213
  end
214
214
 
215
215
  def test_template_location_array
@@ -261,6 +261,17 @@ WARNING
261
261
 
262
262
  # Callbacks
263
263
 
264
+ def test_updating_stylesheets_callback
265
+ # Should run even when there's nothing to update
266
+ Sass::Plugin.options[:template_location] = nil
267
+ assert_callback :updating_stylesheets, []
268
+ end
269
+
270
+ def test_updating_stylesheets_callback_with_never_update
271
+ Sass::Plugin.options[:never_update] = true
272
+ assert_no_callback :updating_stylesheets
273
+ end
274
+
264
275
  def test_updated_stylesheet_callback_for_updated_template
265
276
  Sass::Plugin.options[:always_update] = false
266
277
  touch 'basic'
@@ -507,7 +518,7 @@ WARNING
507
518
  def template_loc(name = nil, prefix = nil)
508
519
  if name
509
520
  scss = absolutize "#{prefix}templates/#{name}.scss"
510
- File.exist?(scss) ? scss : absolutize("#{prefix}templates/#{name}.sass")
521
+ File.exists?(scss) ? scss : absolutize("#{prefix}templates/#{name}.sass")
511
522
  else
512
523
  absolutize "#{prefix}templates"
513
524
  end
@@ -537,8 +548,7 @@ WARNING
537
548
  :always_update => true,
538
549
  :never_update => false,
539
550
  :full_exception => true,
540
- :cache_store => @@cache_store,
541
- :sourcemap => :none
551
+ :cache_store => @@cache_store
542
552
  )
543
553
  Sass::Plugin.options.merge!(overrides)
544
554
  end
@@ -1,4 +1,4 @@
1
- #main { width: 15em; color: #0000ff; }
1
+ #main { width: 15em; color: blue; }
2
2
  #main p { border-style: dotted; /* Nested comment More nested stuff */ border-width: 2px; }
3
3
  #main .cool { width: 100px; }
4
4
 
@@ -1,4 +1,4 @@
1
- body { margin: 0; font: 0.85em "Lucida Grande", "Trebuchet MS", Verdana, sans-serif; color: #fff; background: url(/images/global_bg.gif); }
1
+ body { margin: 0; font: 0.85em "Lucida Grande", "Trebuchet MS", Verdana, sans-serif; color: white; 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: #fff; background: #00a4e4; }
20
- #menu .contests a:link, #menu .contests a:visited { color: #fff; text-decoration: none; font-weight: bold; }
19
+ #menu .contests ul li { list-style-type: none; margin: 0 5px; padding: 5px 5px 0 5px; display: inline; font-size: 1.1em; color: white; background: #00a4e4; }
20
+ #menu .contests a:link, #menu .contests a:visited { color: white; 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: #fff; border: none; background: url(/images/btn_short.gif) no-repeat; }
84
+ button.short { width: 60px; height: 22px; padding: 0 0 2px 0; color: white; border: none; background: url(/images/btn_short.gif) no-repeat; }
85
85
 
86
86
  table { border-collapse: collapse; }