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.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +50 -70
- data/Rakefile +5 -26
- data/VERSION +1 -1
- data/VERSION_NAME +1 -1
- data/bin/sass +1 -1
- data/bin/scss +1 -1
- data/lib/sass.rb +12 -19
- data/lib/sass/cache_stores/base.rb +2 -2
- data/lib/sass/cache_stores/chain.rb +1 -2
- data/lib/sass/cache_stores/filesystem.rb +5 -1
- data/lib/sass/cache_stores/memory.rb +1 -1
- data/lib/sass/cache_stores/null.rb +2 -2
- data/lib/sass/callbacks.rb +0 -1
- data/lib/sass/css.rb +13 -11
- data/lib/sass/engine.rb +173 -424
- data/lib/sass/environment.rb +58 -148
- data/lib/sass/error.rb +14 -11
- data/lib/sass/exec.rb +703 -5
- data/lib/sass/importers/base.rb +6 -49
- data/lib/sass/importers/filesystem.rb +19 -44
- data/lib/sass/logger.rb +4 -1
- data/lib/sass/logger/base.rb +4 -2
- data/lib/sass/logger/log_level.rb +7 -3
- data/lib/sass/media.rb +23 -20
- data/lib/sass/plugin.rb +7 -7
- data/lib/sass/plugin/compiler.rb +145 -304
- data/lib/sass/plugin/configuration.rb +23 -18
- data/lib/sass/plugin/merb.rb +1 -1
- data/lib/sass/plugin/staleness_checker.rb +3 -3
- data/lib/sass/repl.rb +3 -3
- data/lib/sass/script.rb +8 -35
- data/lib/sass/script/{value/arg_list.rb → arg_list.rb} +25 -9
- data/lib/sass/script/bool.rb +18 -0
- data/lib/sass/script/color.rb +606 -0
- data/lib/sass/script/css_lexer.rb +4 -8
- data/lib/sass/script/css_parser.rb +2 -5
- data/lib/sass/script/funcall.rb +245 -0
- data/lib/sass/script/functions.rb +408 -1491
- data/lib/sass/script/interpolation.rb +79 -0
- data/lib/sass/script/lexer.rb +68 -172
- data/lib/sass/script/list.rb +85 -0
- data/lib/sass/script/literal.rb +221 -0
- data/lib/sass/script/{tree/node.rb → node.rb} +12 -22
- data/lib/sass/script/{value/null.rb → null.rb} +7 -14
- data/lib/sass/script/{value/number.rb → number.rb} +75 -152
- data/lib/sass/script/{tree/operation.rb → operation.rb} +24 -17
- data/lib/sass/script/parser.rb +110 -245
- data/lib/sass/script/string.rb +51 -0
- data/lib/sass/script/{tree/string_interpolation.rb → string_interpolation.rb} +4 -5
- data/lib/sass/script/{tree/unary_operation.rb → unary_operation.rb} +6 -6
- data/lib/sass/script/variable.rb +58 -0
- data/lib/sass/scss/css_parser.rb +3 -9
- data/lib/sass/scss/parser.rb +421 -450
- data/lib/sass/scss/rx.rb +11 -19
- data/lib/sass/scss/static_parser.rb +7 -321
- data/lib/sass/selector.rb +194 -68
- data/lib/sass/selector/abstract_sequence.rb +14 -29
- data/lib/sass/selector/comma_sequence.rb +25 -108
- data/lib/sass/selector/sequence.rb +66 -159
- data/lib/sass/selector/simple.rb +25 -23
- data/lib/sass/selector/simple_sequence.rb +63 -173
- data/lib/sass/shared.rb +1 -1
- data/lib/sass/supports.rb +15 -13
- data/lib/sass/tree/charset_node.rb +1 -1
- data/lib/sass/tree/comment_node.rb +3 -3
- data/lib/sass/tree/css_import_node.rb +11 -11
- data/lib/sass/tree/debug_node.rb +2 -2
- data/lib/sass/tree/directive_node.rb +4 -21
- data/lib/sass/tree/each_node.rb +8 -8
- data/lib/sass/tree/extend_node.rb +7 -14
- data/lib/sass/tree/for_node.rb +4 -4
- data/lib/sass/tree/function_node.rb +4 -9
- data/lib/sass/tree/if_node.rb +1 -1
- data/lib/sass/tree/import_node.rb +5 -4
- data/lib/sass/tree/media_node.rb +14 -4
- data/lib/sass/tree/mixin_def_node.rb +4 -4
- data/lib/sass/tree/mixin_node.rb +8 -21
- data/lib/sass/tree/node.rb +12 -54
- data/lib/sass/tree/prop_node.rb +20 -39
- data/lib/sass/tree/return_node.rb +2 -3
- data/lib/sass/tree/root_node.rb +3 -19
- data/lib/sass/tree/rule_node.rb +22 -35
- data/lib/sass/tree/supports_node.rb +13 -0
- data/lib/sass/tree/trace_node.rb +1 -2
- data/lib/sass/tree/variable_node.rb +3 -9
- data/lib/sass/tree/visitors/base.rb +8 -5
- data/lib/sass/tree/visitors/check_nesting.rb +19 -49
- data/lib/sass/tree/visitors/convert.rb +56 -74
- data/lib/sass/tree/visitors/cssize.rb +74 -202
- data/lib/sass/tree/visitors/deep_copy.rb +5 -10
- data/lib/sass/tree/visitors/extend.rb +7 -7
- data/lib/sass/tree/visitors/perform.rb +185 -278
- data/lib/sass/tree/visitors/set_options.rb +6 -20
- data/lib/sass/tree/visitors/to_css.rb +81 -234
- data/lib/sass/tree/warn_node.rb +2 -2
- data/lib/sass/tree/while_node.rb +2 -2
- data/lib/sass/util.rb +152 -522
- data/lib/sass/util/multibyte_string_scanner.rb +0 -2
- data/lib/sass/util/subset_map.rb +3 -4
- data/lib/sass/util/test.rb +1 -0
- data/lib/sass/version.rb +22 -20
- data/test/Gemfile +3 -0
- data/test/Gemfile.lock +10 -0
- data/test/sass/cache_test.rb +20 -62
- data/test/sass/callbacks_test.rb +1 -1
- data/test/sass/conversion_test.rb +2 -296
- data/test/sass/css2sass_test.rb +4 -23
- data/test/sass/engine_test.rb +354 -411
- data/test/sass/exec_test.rb +2 -2
- data/test/sass/extend_test.rb +145 -324
- data/test/sass/functions_test.rb +86 -873
- data/test/sass/importer_test.rb +21 -241
- data/test/sass/logger_test.rb +1 -1
- data/test/sass/more_results/more_import.css +1 -1
- data/test/sass/plugin_test.rb +26 -16
- 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 +7 -36
- data/test/sass/script_test.rb +53 -485
- data/test/sass/scss/css_test.rb +28 -143
- data/test/sass/scss/rx_test.rb +4 -4
- data/test/sass/scss/scss_test.rb +325 -2119
- data/test/sass/templates/scss_import.scss +1 -2
- data/test/sass/test_helper.rb +1 -1
- data/test/sass/util/multibyte_string_scanner_test.rb +1 -1
- data/test/sass/util/subset_map_test.rb +2 -2
- data/test/sass/util_test.rb +1 -86
- data/test/test_helper.rb +8 -37
- metadata +19 -66
- data/lib/sass/exec/base.rb +0 -187
- data/lib/sass/exec/sass_convert.rb +0 -264
- data/lib/sass/exec/sass_scss.rb +0 -424
- data/lib/sass/features.rb +0 -47
- data/lib/sass/script/tree.rb +0 -16
- data/lib/sass/script/tree/funcall.rb +0 -306
- data/lib/sass/script/tree/interpolation.rb +0 -118
- data/lib/sass/script/tree/list_literal.rb +0 -77
- data/lib/sass/script/tree/literal.rb +0 -45
- data/lib/sass/script/tree/map_literal.rb +0 -64
- data/lib/sass/script/tree/selector.rb +0 -26
- data/lib/sass/script/tree/variable.rb +0 -57
- data/lib/sass/script/value.rb +0 -11
- data/lib/sass/script/value/base.rb +0 -240
- data/lib/sass/script/value/bool.rb +0 -35
- data/lib/sass/script/value/color.rb +0 -680
- data/lib/sass/script/value/helpers.rb +0 -262
- data/lib/sass/script/value/list.rb +0 -113
- data/lib/sass/script/value/map.rb +0 -70
- data/lib/sass/script/value/string.rb +0 -97
- data/lib/sass/selector/pseudo.rb +0 -256
- data/lib/sass/source/map.rb +0 -210
- data/lib/sass/source/position.rb +0 -39
- data/lib/sass/source/range.rb +0 -41
- data/lib/sass/stack.rb +0 -120
- data/lib/sass/tree/at_root_node.rb +0 -83
- data/lib/sass/tree/error_node.rb +0 -18
- data/lib/sass/tree/keyframe_rule_node.rb +0 -15
- data/lib/sass/util/cross_platform_random.rb +0 -19
- data/lib/sass/util/normalized_map.rb +0 -130
- data/lib/sass/util/ordered_hash.rb +0 -192
- data/test/sass/compiler_test.rb +0 -232
- data/test/sass/encoding_test.rb +0 -219
- data/test/sass/source_map_test.rb +0 -977
- data/test/sass/superselector_test.rb +0 -191
- data/test/sass/util/normalized_map_test.rb +0 -51
- data/test/sass/value_helpers_test.rb +0 -179
data/test/sass/importer_test.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
-
|
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
|
-
|
190
|
+
assert_not_nil importer.mtime(absolutize('more_templates/more1.sass'), {})
|
411
191
|
end
|
412
192
|
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: #bbaaff; }
|
28
28
|
|
29
29
|
nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
|
data/test/sass/plugin_test.rb
CHANGED
@@ -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::
|
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::
|
16
|
+
Sass::Script::String.new(whatever || "incorrect")
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
class SassPluginTest <
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
161
|
-
|
162
|
-
|
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
|
-
|
174
|
-
|
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
|
-
|
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.
|
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.
|
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
|
-
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: 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:
|
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: 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:
|
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; }
|