haml 3.0.25 → 3.1.0.alpha.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of haml might be problematic. Click here for more details.
- data/.yardopts +1 -1
- data/CONTRIBUTING +0 -1
- data/EDGE_GEM_VERSION +1 -0
- data/MIT-LICENSE +1 -1
- data/README.md +10 -175
- data/Rakefile +56 -84
- data/VERSION +1 -1
- data/VERSION_NAME +1 -1
- data/init.rb +1 -1
- data/lib/haml.rb +14 -12
- data/lib/haml/engine.rb +1 -1
- data/lib/haml/exec.rb +19 -316
- data/lib/haml/helpers/action_view_extensions.rb +1 -1
- data/lib/haml/html.rb +69 -76
- data/lib/haml/precompiler.rb +34 -41
- data/lib/haml/railtie.rb +4 -6
- data/lib/haml/template/plugin.rb +6 -16
- data/lib/haml/util.rb +91 -107
- data/lib/haml/version.rb +7 -0
- data/test/benchmark.rb +2 -9
- data/test/haml/engine_test.rb +195 -92
- data/test/haml/html2haml/erb_tests.rb +0 -14
- data/test/haml/util_test.rb +32 -0
- data/test/test_helper.rb +0 -39
- metadata +96 -324
- data/bin/css2sass +0 -13
- data/bin/sass +0 -8
- data/bin/sass-convert +0 -7
- data/extra/haml-mode.el +0 -753
- data/extra/sass-mode.el +0 -207
- data/lib/haml/util/subset_map.rb +0 -101
- data/lib/sass.rb +0 -29
- data/lib/sass/callbacks.rb +0 -52
- data/lib/sass/css.rb +0 -294
- data/lib/sass/engine.rb +0 -720
- data/lib/sass/environment.rb +0 -143
- data/lib/sass/error.rb +0 -198
- data/lib/sass/files.rb +0 -160
- data/lib/sass/less.rb +0 -382
- data/lib/sass/plugin.rb +0 -279
- data/lib/sass/plugin/configuration.rb +0 -221
- data/lib/sass/plugin/generic.rb +0 -15
- data/lib/sass/plugin/merb.rb +0 -37
- data/lib/sass/plugin/rack.rb +0 -47
- data/lib/sass/plugin/rails.rb +0 -32
- data/lib/sass/plugin/staleness_checker.rb +0 -123
- data/lib/sass/repl.rb +0 -58
- data/lib/sass/script.rb +0 -63
- data/lib/sass/script/bool.rb +0 -18
- data/lib/sass/script/color.rb +0 -491
- data/lib/sass/script/css_lexer.rb +0 -29
- data/lib/sass/script/css_parser.rb +0 -31
- data/lib/sass/script/funcall.rb +0 -77
- data/lib/sass/script/functions.rb +0 -861
- data/lib/sass/script/interpolation.rb +0 -70
- data/lib/sass/script/lexer.rb +0 -337
- data/lib/sass/script/literal.rb +0 -236
- data/lib/sass/script/node.rb +0 -112
- data/lib/sass/script/number.rb +0 -423
- data/lib/sass/script/operation.rb +0 -95
- data/lib/sass/script/parser.rb +0 -401
- data/lib/sass/script/string.rb +0 -67
- data/lib/sass/script/string_interpolation.rb +0 -93
- data/lib/sass/script/unary_operation.rb +0 -57
- data/lib/sass/script/variable.rb +0 -48
- data/lib/sass/scss.rb +0 -17
- data/lib/sass/scss/css_parser.rb +0 -46
- data/lib/sass/scss/parser.rb +0 -855
- data/lib/sass/scss/rx.rb +0 -126
- data/lib/sass/scss/sass_parser.rb +0 -11
- data/lib/sass/scss/script_lexer.rb +0 -15
- data/lib/sass/scss/script_parser.rb +0 -25
- data/lib/sass/scss/static_parser.rb +0 -40
- data/lib/sass/selector.rb +0 -361
- data/lib/sass/selector/abstract_sequence.rb +0 -62
- data/lib/sass/selector/comma_sequence.rb +0 -82
- data/lib/sass/selector/sequence.rb +0 -237
- data/lib/sass/selector/simple.rb +0 -113
- data/lib/sass/selector/simple_sequence.rb +0 -136
- data/lib/sass/tree/charset_node.rb +0 -37
- data/lib/sass/tree/comment_node.rb +0 -128
- data/lib/sass/tree/debug_node.rb +0 -36
- data/lib/sass/tree/directive_node.rb +0 -75
- data/lib/sass/tree/extend_node.rb +0 -65
- data/lib/sass/tree/for_node.rb +0 -55
- data/lib/sass/tree/if_node.rb +0 -69
- data/lib/sass/tree/import_node.rb +0 -102
- data/lib/sass/tree/mixin_def_node.rb +0 -48
- data/lib/sass/tree/mixin_node.rb +0 -111
- data/lib/sass/tree/node.rb +0 -464
- data/lib/sass/tree/prop_node.rb +0 -220
- data/lib/sass/tree/root_node.rb +0 -163
- data/lib/sass/tree/rule_node.rb +0 -261
- data/lib/sass/tree/variable_node.rb +0 -39
- data/lib/sass/tree/warn_node.rb +0 -42
- data/lib/sass/tree/while_node.rb +0 -36
- data/test/haml/util/subset_map_test.rb +0 -91
- data/test/sass/callbacks_test.rb +0 -61
- data/test/sass/conversion_test.rb +0 -1218
- data/test/sass/css2sass_test.rb +0 -364
- data/test/sass/data/hsl-rgb.txt +0 -319
- data/test/sass/engine_test.rb +0 -2267
- data/test/sass/extend_test.rb +0 -1348
- data/test/sass/functions_test.rb +0 -556
- data/test/sass/less_conversion_test.rb +0 -653
- data/test/sass/more_results/more1.css +0 -9
- data/test/sass/more_results/more1_with_line_comments.css +0 -26
- data/test/sass/more_results/more_import.css +0 -29
- data/test/sass/more_templates/_more_partial.sass +0 -2
- data/test/sass/more_templates/more1.sass +0 -23
- data/test/sass/more_templates/more_import.sass +0 -11
- data/test/sass/plugin_test.rb +0 -433
- data/test/sass/results/alt.css +0 -4
- data/test/sass/results/basic.css +0 -9
- data/test/sass/results/compact.css +0 -5
- data/test/sass/results/complex.css +0 -86
- data/test/sass/results/compressed.css +0 -1
- data/test/sass/results/expanded.css +0 -19
- data/test/sass/results/import.css +0 -31
- data/test/sass/results/import_charset.css +0 -4
- data/test/sass/results/import_charset_1_8.css +0 -4
- data/test/sass/results/import_charset_ibm866.css +0 -4
- data/test/sass/results/line_numbers.css +0 -49
- data/test/sass/results/mixins.css +0 -95
- data/test/sass/results/multiline.css +0 -24
- data/test/sass/results/nested.css +0 -22
- data/test/sass/results/options.css +0 -1
- data/test/sass/results/parent_ref.css +0 -13
- data/test/sass/results/script.css +0 -16
- data/test/sass/results/scss_import.css +0 -31
- data/test/sass/results/scss_importee.css +0 -2
- data/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
- data/test/sass/results/subdir/subdir.css +0 -3
- data/test/sass/results/units.css +0 -11
- data/test/sass/results/warn.css +0 -0
- data/test/sass/results/warn_imported.css +0 -0
- data/test/sass/script_conversion_test.rb +0 -314
- data/test/sass/script_test.rb +0 -470
- data/test/sass/scss/css_test.rb +0 -916
- data/test/sass/scss/rx_test.rb +0 -156
- data/test/sass/scss/scss_test.rb +0 -1122
- data/test/sass/scss/test_helper.rb +0 -37
- data/test/sass/templates/_imported_charset_ibm866.sass +0 -4
- data/test/sass/templates/_imported_charset_utf8.sass +0 -4
- data/test/sass/templates/_partial.sass +0 -2
- data/test/sass/templates/alt.sass +0 -16
- data/test/sass/templates/basic.sass +0 -23
- data/test/sass/templates/bork1.sass +0 -2
- data/test/sass/templates/bork2.sass +0 -2
- data/test/sass/templates/bork3.sass +0 -2
- data/test/sass/templates/bork4.sass +0 -2
- data/test/sass/templates/compact.sass +0 -17
- data/test/sass/templates/complex.sass +0 -305
- data/test/sass/templates/compressed.sass +0 -15
- data/test/sass/templates/expanded.sass +0 -17
- data/test/sass/templates/import.sass +0 -12
- data/test/sass/templates/import_charset.sass +0 -7
- data/test/sass/templates/import_charset_1_8.sass +0 -4
- data/test/sass/templates/import_charset_ibm866.sass +0 -9
- data/test/sass/templates/importee.less +0 -2
- data/test/sass/templates/importee.sass +0 -19
- data/test/sass/templates/line_numbers.sass +0 -13
- data/test/sass/templates/mixin_bork.sass +0 -5
- data/test/sass/templates/mixins.sass +0 -76
- data/test/sass/templates/multiline.sass +0 -20
- data/test/sass/templates/nested.sass +0 -25
- data/test/sass/templates/nested_bork1.sass +0 -2
- data/test/sass/templates/nested_bork2.sass +0 -2
- data/test/sass/templates/nested_bork3.sass +0 -2
- data/test/sass/templates/nested_bork4.sass +0 -2
- data/test/sass/templates/nested_mixin_bork.sass +0 -6
- data/test/sass/templates/options.sass +0 -2
- data/test/sass/templates/parent_ref.sass +0 -25
- data/test/sass/templates/script.sass +0 -101
- data/test/sass/templates/scss_import.scss +0 -11
- data/test/sass/templates/scss_importee.scss +0 -1
- data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
- data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
- data/test/sass/templates/subdir/subdir.sass +0 -6
- data/test/sass/templates/units.sass +0 -11
- data/test/sass/templates/warn.sass +0 -3
- data/test/sass/templates/warn_imported.sass +0 -4
- data/vendor/fssm/LICENSE +0 -20
- data/vendor/fssm/README.markdown +0 -55
- data/vendor/fssm/Rakefile +0 -59
- data/vendor/fssm/VERSION.yml +0 -5
- data/vendor/fssm/example.rb +0 -9
- data/vendor/fssm/fssm.gemspec +0 -77
- data/vendor/fssm/lib/fssm.rb +0 -33
- data/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
- data/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
- data/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
- data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
- data/vendor/fssm/lib/fssm/monitor.rb +0 -26
- data/vendor/fssm/lib/fssm/path.rb +0 -91
- data/vendor/fssm/lib/fssm/pathname.rb +0 -502
- data/vendor/fssm/lib/fssm/state/directory.rb +0 -57
- data/vendor/fssm/lib/fssm/state/file.rb +0 -24
- data/vendor/fssm/lib/fssm/support.rb +0 -63
- data/vendor/fssm/lib/fssm/tree.rb +0 -176
- data/vendor/fssm/profile/prof-cache.rb +0 -40
- data/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
- data/vendor/fssm/profile/prof-pathname.rb +0 -68
- data/vendor/fssm/profile/prof-plain-pathname.html +0 -988
- data/vendor/fssm/profile/prof.html +0 -2379
- data/vendor/fssm/spec/path_spec.rb +0 -75
- data/vendor/fssm/spec/root/duck/quack.txt +0 -0
- data/vendor/fssm/spec/root/file.css +0 -0
- data/vendor/fssm/spec/root/file.rb +0 -0
- data/vendor/fssm/spec/root/file.yml +0 -0
- data/vendor/fssm/spec/root/moo/cow.txt +0 -0
- data/vendor/fssm/spec/spec_helper.rb +0 -14
@@ -1,39 +0,0 @@
|
|
1
|
-
module Sass
|
2
|
-
module Tree
|
3
|
-
# A dynamic node representing a variable definition.
|
4
|
-
#
|
5
|
-
# @see Sass::Tree
|
6
|
-
class VariableNode < Node
|
7
|
-
# @param name [String] The name of the variable
|
8
|
-
# @param expr [Script::Node] The parse tree for the initial variable value
|
9
|
-
# @param guarded [Boolean] Whether this is a guarded variable assignment (`||=`)
|
10
|
-
def initialize(name, expr, guarded)
|
11
|
-
@name = name
|
12
|
-
@expr = expr
|
13
|
-
@guarded = guarded
|
14
|
-
super()
|
15
|
-
end
|
16
|
-
|
17
|
-
protected
|
18
|
-
|
19
|
-
# @see Node#to_src
|
20
|
-
def to_src(tabs, opts, fmt)
|
21
|
-
"#{' ' * tabs}$#{dasherize(@name, opts)}: #{@expr.to_sass(opts)}#{' !default' if @guarded}#{semi fmt}\n"
|
22
|
-
end
|
23
|
-
|
24
|
-
# Loads the new variable value into the environment.
|
25
|
-
#
|
26
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
27
|
-
# variable and mixin values
|
28
|
-
def _perform(environment)
|
29
|
-
return [] if @guarded && !environment.var(@name).nil?
|
30
|
-
val = @expr.perform(environment)
|
31
|
-
if @expr.context == :equals && val.is_a?(Sass::Script::String)
|
32
|
-
val = Sass::Script::String.new(val.value)
|
33
|
-
end
|
34
|
-
environment.set_var(@name, val)
|
35
|
-
[]
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
data/lib/sass/tree/warn_node.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
module Sass
|
2
|
-
module Tree
|
3
|
-
# A dynamic node representing a Sass `@warn` statement.
|
4
|
-
#
|
5
|
-
# @see Sass::Tree
|
6
|
-
class WarnNode < Node
|
7
|
-
# @param expr [Script::Node] The expression to print
|
8
|
-
def initialize(expr)
|
9
|
-
@expr = expr
|
10
|
-
super()
|
11
|
-
end
|
12
|
-
|
13
|
-
protected
|
14
|
-
|
15
|
-
# @see Node#to_src
|
16
|
-
def to_src(tabs, opts, fmt)
|
17
|
-
"#{' ' * tabs}@warn #{@expr.to_sass(opts)}#{semi fmt}\n"
|
18
|
-
end
|
19
|
-
|
20
|
-
# Prints the expression to STDERR with a stylesheet trace.
|
21
|
-
#
|
22
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
23
|
-
# variable and mixin values
|
24
|
-
def _perform(environment)
|
25
|
-
environment.push_frame(:filename => filename, :line => line)
|
26
|
-
res = @expr.perform(environment)
|
27
|
-
res = res.value if res.is_a?(Sass::Script::String)
|
28
|
-
msg = "WARNING: #{res}\n"
|
29
|
-
environment.stack.reverse.each_with_index do |entry, i|
|
30
|
-
msg << " #{i == 0 ? "on" : "from"} line #{entry[:line]}" <<
|
31
|
-
" of #{entry[:filename] || "an unknown file"}"
|
32
|
-
msg << ", in `#{entry[:mixin]}'" if entry[:mixin]
|
33
|
-
msg << "\n"
|
34
|
-
end
|
35
|
-
Haml::Util.haml_warn msg
|
36
|
-
[]
|
37
|
-
ensure
|
38
|
-
environment.pop_frame
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/lib/sass/tree/while_node.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'sass/tree/node'
|
2
|
-
|
3
|
-
module Sass::Tree
|
4
|
-
# A dynamic node representing a Sass `@while` loop.
|
5
|
-
#
|
6
|
-
# @see Sass::Tree
|
7
|
-
class WhileNode < Node
|
8
|
-
# @param expr [Script::Node] The parse tree for the continue expression
|
9
|
-
def initialize(expr)
|
10
|
-
@expr = expr
|
11
|
-
super()
|
12
|
-
end
|
13
|
-
|
14
|
-
protected
|
15
|
-
|
16
|
-
# @see Node#to_src
|
17
|
-
def to_src(tabs, opts, fmt)
|
18
|
-
"#{' ' * tabs}@while #{@expr.to_sass(opts)}" + children_to_src(tabs, opts, fmt)
|
19
|
-
end
|
20
|
-
|
21
|
-
# Runs the child nodes until the continue expression becomes false.
|
22
|
-
#
|
23
|
-
# @param environment [Sass::Environment] The lexical environment containing
|
24
|
-
# variable and mixin values
|
25
|
-
# @return [Array<Tree::Node>] The resulting static nodes
|
26
|
-
# @see Sass::Tree
|
27
|
-
def _perform(environment)
|
28
|
-
children = []
|
29
|
-
new_environment = Sass::Environment.new(environment)
|
30
|
-
while @expr.perform(environment).to_bool
|
31
|
-
children += perform_children(new_environment)
|
32
|
-
end
|
33
|
-
children
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.dirname(__FILE__) + '/../../test_helper'
|
3
|
-
|
4
|
-
class SubsetMapTest < Test::Unit::TestCase
|
5
|
-
def setup
|
6
|
-
@ssm = Haml::Util::SubsetMap.new
|
7
|
-
@ssm[Set[1, 2]] = "Foo"
|
8
|
-
@ssm[Set["fizz", "fazz"]] = "Bar"
|
9
|
-
|
10
|
-
@ssm[Set[:foo, :bar]] = "Baz"
|
11
|
-
@ssm[Set[:foo, :bar, :baz]] = "Bang"
|
12
|
-
|
13
|
-
@ssm[Set[:bip, :bop, :blip]] = "Qux"
|
14
|
-
@ssm[Set[:bip, :bop]] = "Thram"
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_equal_keys
|
18
|
-
assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2])
|
19
|
-
assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz"])
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_subset_keys
|
23
|
-
assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2, "fuzz"])
|
24
|
-
assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz", 3])
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_superset_keys
|
28
|
-
assert_equal [], @ssm.get(Set[1])
|
29
|
-
assert_equal [], @ssm.get(Set[2])
|
30
|
-
assert_equal [], @ssm.get(Set["fizz"])
|
31
|
-
assert_equal [], @ssm.get(Set["fazz"])
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_disjoint_keys
|
35
|
-
assert_equal [], @ssm.get(Set[3, 4])
|
36
|
-
assert_equal [], @ssm.get(Set["fuzz", "frizz"])
|
37
|
-
assert_equal [], @ssm.get(Set["gran", 15])
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_semi_disjoint_keys
|
41
|
-
assert_equal [], @ssm.get(Set[2, 3])
|
42
|
-
assert_equal [], @ssm.get(Set["fizz", "fuzz"])
|
43
|
-
assert_equal [], @ssm.get(Set[1, "fazz"])
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_empty_key_set
|
47
|
-
assert_raise(ArgumentError) {@ssm[Set[]] = "Fail"}
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_empty_key_get
|
51
|
-
assert_equal [], @ssm.get(Set[])
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_multiple_subsets
|
55
|
-
assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, "fizz", "fazz"])
|
56
|
-
assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, 3, "fizz", "fazz", "fuzz"])
|
57
|
-
|
58
|
-
assert_equal [["Baz", Set[:foo, :bar]]], @ssm.get(Set[:foo, :bar])
|
59
|
-
assert_equal [["Baz", Set[:foo, :bar]], ["Bang", Set[:foo, :bar, :baz]]], @ssm.get(Set[:foo, :bar, :baz])
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_bracket_bracket
|
63
|
-
assert_equal ["Foo"], @ssm[Set[1, 2, "fuzz"]]
|
64
|
-
assert_equal ["Baz", "Bang"], @ssm[Set[:foo, :bar, :baz]]
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_order_preserved
|
68
|
-
@ssm[Set[10, 11, 12]] = 1
|
69
|
-
@ssm[Set[10, 11]] = 2
|
70
|
-
@ssm[Set[11]] = 3
|
71
|
-
@ssm[Set[11, 12]] = 4
|
72
|
-
@ssm[Set[9, 10, 11, 12, 13]] = 5
|
73
|
-
@ssm[Set[10, 13]] = 6
|
74
|
-
|
75
|
-
assert_equal(
|
76
|
-
[[1, Set[10, 11, 12]], [2, Set[10, 11]], [3, Set[11]], [4, Set[11, 12]],
|
77
|
-
[5, Set[9, 10, 11, 12, 13]], [6, Set[10, 13]]],
|
78
|
-
@ssm.get(Set[9, 10, 11, 12, 13]))
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_multiple_equal_values
|
82
|
-
@ssm[Set[11, 12]] = 1
|
83
|
-
@ssm[Set[12, 13]] = 2
|
84
|
-
@ssm[Set[13, 14]] = 1
|
85
|
-
@ssm[Set[14, 15]] = 1
|
86
|
-
|
87
|
-
assert_equal(
|
88
|
-
[[1, Set[11, 12]], [2, Set[12, 13]], [1, Set[13, 14]], [1, Set[14, 15]]],
|
89
|
-
@ssm.get(Set[11, 12, 13, 14, 15]))
|
90
|
-
end
|
91
|
-
end
|
data/test/sass/callbacks_test.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
3
|
-
require 'sass/callbacks'
|
4
|
-
|
5
|
-
class CallerBack
|
6
|
-
extend Sass::Callbacks
|
7
|
-
define_callback :foo
|
8
|
-
define_callback :bar
|
9
|
-
|
10
|
-
def do_foo
|
11
|
-
run_foo
|
12
|
-
end
|
13
|
-
|
14
|
-
def do_bar
|
15
|
-
run_bar 12
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
module ClassLevelCallerBack
|
20
|
-
extend Sass::Callbacks
|
21
|
-
define_callback :foo
|
22
|
-
extend self
|
23
|
-
|
24
|
-
def do_foo
|
25
|
-
run_foo
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class SassCallbacksTest < Test::Unit::TestCase
|
30
|
-
def test_simple_callback
|
31
|
-
cb = CallerBack.new
|
32
|
-
there = false
|
33
|
-
cb.on_foo {there = true}
|
34
|
-
cb.do_foo
|
35
|
-
assert there, "Expected callback to be called."
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_multiple_callbacks
|
39
|
-
cb = CallerBack.new
|
40
|
-
str = ""
|
41
|
-
cb.on_foo {str += "first"}
|
42
|
-
cb.on_foo {str += " second"}
|
43
|
-
cb.do_foo
|
44
|
-
assert_equal "first second", str
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_callback_with_arg
|
48
|
-
cb = CallerBack.new
|
49
|
-
val = nil
|
50
|
-
cb.on_bar {|a| val = a}
|
51
|
-
cb.do_bar
|
52
|
-
assert_equal 12, val
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_class_level_callback
|
56
|
-
there = false
|
57
|
-
ClassLevelCallerBack.on_foo {there = true}
|
58
|
-
ClassLevelCallerBack.do_foo
|
59
|
-
assert there, "Expected callback to be called."
|
60
|
-
end
|
61
|
-
end
|
@@ -1,1218 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.dirname(__FILE__) + '/../test_helper'
|
3
|
-
|
4
|
-
class ConversionTest < Test::Unit::TestCase
|
5
|
-
def test_basic
|
6
|
-
assert_renders <<SASS, <<SCSS
|
7
|
-
foo bar
|
8
|
-
baz: bang
|
9
|
-
bip: bop
|
10
|
-
SASS
|
11
|
-
foo bar {
|
12
|
-
baz: bang;
|
13
|
-
bip: bop; }
|
14
|
-
SCSS
|
15
|
-
assert_renders <<SASS, <<SCSS, :old => true
|
16
|
-
foo bar
|
17
|
-
:baz bang
|
18
|
-
:bip bop
|
19
|
-
SASS
|
20
|
-
foo bar {
|
21
|
-
baz: bang;
|
22
|
-
bip: bop; }
|
23
|
-
SCSS
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_empty_selector
|
27
|
-
assert_renders "foo bar", "foo bar {}"
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_empty_directive
|
31
|
-
assert_scss_to_sass "@media screen", "@media screen {}"
|
32
|
-
assert_scss_to_scss "@media screen {}"
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_empty_control_directive
|
36
|
-
assert_renders "@if false", "@if false {}"
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_nesting
|
40
|
-
assert_renders <<SASS, <<SCSS
|
41
|
-
foo bar
|
42
|
-
baz bang
|
43
|
-
baz: bang
|
44
|
-
bip: bop
|
45
|
-
blat: boo
|
46
|
-
SASS
|
47
|
-
foo bar {
|
48
|
-
baz bang {
|
49
|
-
baz: bang;
|
50
|
-
bip: bop; }
|
51
|
-
blat: boo; }
|
52
|
-
SCSS
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_nesting_with_parent_ref
|
56
|
-
assert_renders <<SASS, <<SCSS
|
57
|
-
foo bar
|
58
|
-
&:hover
|
59
|
-
baz: bang
|
60
|
-
SASS
|
61
|
-
foo bar {
|
62
|
-
&:hover {
|
63
|
-
baz: bang; } }
|
64
|
-
SCSS
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_selector_interpolation
|
68
|
-
assert_renders <<SASS, <<SCSS
|
69
|
-
foo \#{$bar + "baz"}.bip
|
70
|
-
baz: bang
|
71
|
-
SASS
|
72
|
-
foo \#{$bar + "baz"}.bip {
|
73
|
-
baz: bang; }
|
74
|
-
SCSS
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_multiline_selector_with_commas
|
78
|
-
assert_renders <<SASS, <<SCSS
|
79
|
-
foo bar,
|
80
|
-
baz bang
|
81
|
-
baz: bang
|
82
|
-
SASS
|
83
|
-
foo bar,
|
84
|
-
baz bang {
|
85
|
-
baz: bang; }
|
86
|
-
SCSS
|
87
|
-
|
88
|
-
assert_renders <<SASS, <<SCSS
|
89
|
-
blat
|
90
|
-
foo bar,
|
91
|
-
baz bang
|
92
|
-
baz: bang
|
93
|
-
SASS
|
94
|
-
blat {
|
95
|
-
foo bar,
|
96
|
-
baz bang {
|
97
|
-
baz: bang; } }
|
98
|
-
SCSS
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_multiline_selector_without_commas
|
102
|
-
assert_scss_to_sass <<SASS, <<SCSS
|
103
|
-
foo bar baz bang
|
104
|
-
baz: bang
|
105
|
-
SASS
|
106
|
-
foo bar
|
107
|
-
baz bang {
|
108
|
-
baz: bang; }
|
109
|
-
SCSS
|
110
|
-
|
111
|
-
assert_scss_to_scss <<SCSS
|
112
|
-
foo bar
|
113
|
-
baz bang {
|
114
|
-
baz: bang; }
|
115
|
-
SCSS
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_escaped_selector
|
119
|
-
assert_renders <<SASS, <<SCSS
|
120
|
-
foo bar
|
121
|
-
\\:hover
|
122
|
-
baz: bang
|
123
|
-
SASS
|
124
|
-
foo bar {
|
125
|
-
:hover {
|
126
|
-
baz: bang; } }
|
127
|
-
SCSS
|
128
|
-
end
|
129
|
-
|
130
|
-
def test_property_name_interpolation
|
131
|
-
assert_renders <<SASS, <<SCSS
|
132
|
-
foo bar
|
133
|
-
baz\#{$bang}bip\#{$bop}: 12
|
134
|
-
SASS
|
135
|
-
foo bar {
|
136
|
-
baz\#{$bang}bip\#{$bop}: 12; }
|
137
|
-
SCSS
|
138
|
-
end
|
139
|
-
|
140
|
-
def test_property_name_interpolation
|
141
|
-
assert_renders <<SASS, <<SCSS
|
142
|
-
foo bar
|
143
|
-
baz\#{$bang}bip\#{$bop}: 12
|
144
|
-
SASS
|
145
|
-
foo bar {
|
146
|
-
baz\#{$bang}bip\#{$bop}: 12; }
|
147
|
-
SCSS
|
148
|
-
end
|
149
|
-
|
150
|
-
def test_property_value_interpolation
|
151
|
-
assert_renders <<SASS, <<SCSS
|
152
|
-
foo bar
|
153
|
-
baz: 12 \#{$bang} bip \#{"bop"} blat
|
154
|
-
SASS
|
155
|
-
foo bar {
|
156
|
-
baz: 12 \#{$bang} bip \#{"bop"} blat; }
|
157
|
-
SCSS
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_dynamic_properties
|
161
|
-
assert_renders <<SASS, <<SCSS
|
162
|
-
foo bar
|
163
|
-
baz: 12 $bang "bip"
|
164
|
-
SASS
|
165
|
-
foo bar {
|
166
|
-
baz: 12 $bang "bip"; }
|
167
|
-
SCSS
|
168
|
-
|
169
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
170
|
-
foo bar {
|
171
|
-
baz: 12 $bang bip; }
|
172
|
-
SCSS
|
173
|
-
foo bar
|
174
|
-
baz= 12 $bang "bip"
|
175
|
-
SASS
|
176
|
-
end
|
177
|
-
|
178
|
-
def test_dynamic_properties_with_old
|
179
|
-
assert_renders <<SASS, <<SCSS, :old => true
|
180
|
-
foo bar
|
181
|
-
:baz 12 $bang "bip"
|
182
|
-
SASS
|
183
|
-
foo bar {
|
184
|
-
baz: 12 $bang "bip"; }
|
185
|
-
SCSS
|
186
|
-
|
187
|
-
assert_sass_to_scss <<SCSS, <<SASS, :old => true
|
188
|
-
foo bar {
|
189
|
-
baz: 12 $bang bip; }
|
190
|
-
SCSS
|
191
|
-
foo bar
|
192
|
-
:baz= 12 $bang "bip"
|
193
|
-
SASS
|
194
|
-
end
|
195
|
-
|
196
|
-
def test_multiline_properties
|
197
|
-
assert_scss_to_sass <<SASS, <<SCSS
|
198
|
-
foo bar
|
199
|
-
baz: bip bam boon
|
200
|
-
SASS
|
201
|
-
foo bar {
|
202
|
-
baz:
|
203
|
-
bip
|
204
|
-
bam
|
205
|
-
boon; }
|
206
|
-
SCSS
|
207
|
-
|
208
|
-
assert_scss_to_scss <<OUT, <<IN
|
209
|
-
foo bar {
|
210
|
-
baz: bip bam boon; }
|
211
|
-
OUT
|
212
|
-
foo bar {
|
213
|
-
baz:
|
214
|
-
bip
|
215
|
-
bam
|
216
|
-
boon; }
|
217
|
-
IN
|
218
|
-
end
|
219
|
-
|
220
|
-
def test_multiline_dynamic_properties
|
221
|
-
assert_scss_to_sass <<SASS, <<SCSS
|
222
|
-
foo bar
|
223
|
-
baz: $bip "bam" 12px
|
224
|
-
SASS
|
225
|
-
foo bar {
|
226
|
-
baz:
|
227
|
-
$bip
|
228
|
-
"bam"
|
229
|
-
12px; }
|
230
|
-
SCSS
|
231
|
-
|
232
|
-
assert_scss_to_scss <<OUT, <<IN
|
233
|
-
foo bar {
|
234
|
-
baz: $bip "bam" 12px; }
|
235
|
-
OUT
|
236
|
-
foo bar {
|
237
|
-
baz:
|
238
|
-
$bip
|
239
|
-
"bam"
|
240
|
-
12px; }
|
241
|
-
IN
|
242
|
-
end
|
243
|
-
|
244
|
-
def test_silent_comments
|
245
|
-
assert_renders <<SASS, <<SCSS
|
246
|
-
// foo
|
247
|
-
|
248
|
-
// bar
|
249
|
-
|
250
|
-
// baz
|
251
|
-
|
252
|
-
foo bar
|
253
|
-
a: b
|
254
|
-
SASS
|
255
|
-
// foo
|
256
|
-
|
257
|
-
// bar
|
258
|
-
|
259
|
-
// baz
|
260
|
-
|
261
|
-
foo bar {
|
262
|
-
a: b; }
|
263
|
-
SCSS
|
264
|
-
|
265
|
-
assert_renders <<SASS, <<SCSS
|
266
|
-
// foo
|
267
|
-
// bar
|
268
|
-
// baz
|
269
|
-
// bang
|
270
|
-
|
271
|
-
foo bar
|
272
|
-
a: b
|
273
|
-
SASS
|
274
|
-
// foo
|
275
|
-
// bar
|
276
|
-
// baz
|
277
|
-
// bang
|
278
|
-
|
279
|
-
foo bar {
|
280
|
-
a: b; }
|
281
|
-
SCSS
|
282
|
-
|
283
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
284
|
-
// foo
|
285
|
-
// bar
|
286
|
-
// baz
|
287
|
-
// bang
|
288
|
-
|
289
|
-
foo bar {
|
290
|
-
a: b; }
|
291
|
-
SCSS
|
292
|
-
// foo
|
293
|
-
// bar
|
294
|
-
// baz
|
295
|
-
// bang
|
296
|
-
|
297
|
-
foo bar
|
298
|
-
a: b
|
299
|
-
SASS
|
300
|
-
end
|
301
|
-
|
302
|
-
def test_nested_silent_comments
|
303
|
-
assert_renders <<SASS, <<SCSS
|
304
|
-
foo
|
305
|
-
bar: baz
|
306
|
-
// bip bop
|
307
|
-
// beep boop
|
308
|
-
bang: bizz
|
309
|
-
// bubble bubble
|
310
|
-
// toil trouble
|
311
|
-
SASS
|
312
|
-
foo {
|
313
|
-
bar: baz;
|
314
|
-
// bip bop
|
315
|
-
// beep boop
|
316
|
-
bang: bizz;
|
317
|
-
// bubble bubble
|
318
|
-
// toil trouble
|
319
|
-
}
|
320
|
-
SCSS
|
321
|
-
|
322
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
323
|
-
foo {
|
324
|
-
bar: baz;
|
325
|
-
// bip bop
|
326
|
-
// beep boop
|
327
|
-
// bap blimp
|
328
|
-
bang: bizz;
|
329
|
-
// bubble bubble
|
330
|
-
// toil trouble
|
331
|
-
// gorp
|
332
|
-
}
|
333
|
-
SCSS
|
334
|
-
foo
|
335
|
-
bar: baz
|
336
|
-
// bip bop
|
337
|
-
beep boop
|
338
|
-
bap blimp
|
339
|
-
bang: bizz
|
340
|
-
// bubble bubble
|
341
|
-
toil trouble
|
342
|
-
gorp
|
343
|
-
SASS
|
344
|
-
end
|
345
|
-
|
346
|
-
def test_loud_comments
|
347
|
-
assert_renders <<SASS, <<SCSS
|
348
|
-
/* foo
|
349
|
-
|
350
|
-
/* bar
|
351
|
-
|
352
|
-
/* baz
|
353
|
-
|
354
|
-
foo bar
|
355
|
-
a: b
|
356
|
-
SASS
|
357
|
-
/* foo */
|
358
|
-
|
359
|
-
/* bar */
|
360
|
-
|
361
|
-
/* baz */
|
362
|
-
|
363
|
-
foo bar {
|
364
|
-
a: b; }
|
365
|
-
SCSS
|
366
|
-
|
367
|
-
assert_scss_to_sass <<SASS, <<SCSS
|
368
|
-
/* foo
|
369
|
-
* bar
|
370
|
-
* baz
|
371
|
-
* bang
|
372
|
-
|
373
|
-
foo bar
|
374
|
-
a: b
|
375
|
-
SASS
|
376
|
-
/* foo
|
377
|
-
bar
|
378
|
-
baz
|
379
|
-
bang */
|
380
|
-
|
381
|
-
foo bar {
|
382
|
-
a: b; }
|
383
|
-
SCSS
|
384
|
-
|
385
|
-
assert_scss_to_scss <<SCSS
|
386
|
-
/* foo
|
387
|
-
bar
|
388
|
-
baz
|
389
|
-
bang */
|
390
|
-
|
391
|
-
foo bar {
|
392
|
-
a: b; }
|
393
|
-
SCSS
|
394
|
-
|
395
|
-
assert_renders <<SASS, <<SCSS
|
396
|
-
/* foo
|
397
|
-
* bar
|
398
|
-
* baz
|
399
|
-
* bang
|
400
|
-
|
401
|
-
foo bar
|
402
|
-
a: b
|
403
|
-
SASS
|
404
|
-
/* foo
|
405
|
-
* bar
|
406
|
-
* baz
|
407
|
-
* bang */
|
408
|
-
|
409
|
-
foo bar {
|
410
|
-
a: b; }
|
411
|
-
SCSS
|
412
|
-
end
|
413
|
-
|
414
|
-
def test_nested_loud_comments
|
415
|
-
assert_renders <<SASS, <<SCSS
|
416
|
-
foo
|
417
|
-
bar: baz
|
418
|
-
/* bip bop
|
419
|
-
* beep boop
|
420
|
-
bang: bizz
|
421
|
-
/* bubble bubble
|
422
|
-
* toil trouble
|
423
|
-
SASS
|
424
|
-
foo {
|
425
|
-
bar: baz;
|
426
|
-
/* bip bop
|
427
|
-
* beep boop */
|
428
|
-
bang: bizz;
|
429
|
-
/* bubble bubble
|
430
|
-
* toil trouble */ }
|
431
|
-
SCSS
|
432
|
-
|
433
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
434
|
-
foo {
|
435
|
-
bar: baz;
|
436
|
-
/* bip bop
|
437
|
-
* beep boop
|
438
|
-
* bap blimp */
|
439
|
-
bang: bizz;
|
440
|
-
/* bubble bubble
|
441
|
-
* toil trouble
|
442
|
-
* gorp */ }
|
443
|
-
SCSS
|
444
|
-
foo
|
445
|
-
bar: baz
|
446
|
-
/* bip bop
|
447
|
-
beep boop
|
448
|
-
bap blimp
|
449
|
-
bang: bizz
|
450
|
-
/* bubble bubble
|
451
|
-
toil trouble
|
452
|
-
gorp
|
453
|
-
SASS
|
454
|
-
end
|
455
|
-
|
456
|
-
def test_loud_comments_with_weird_indentation
|
457
|
-
assert_scss_to_sass <<SASS, <<SCSS
|
458
|
-
foo
|
459
|
-
/* foo
|
460
|
-
* bar
|
461
|
-
* baz
|
462
|
-
a: b
|
463
|
-
SASS
|
464
|
-
foo {
|
465
|
-
/* foo
|
466
|
-
bar
|
467
|
-
baz */
|
468
|
-
a: b; }
|
469
|
-
SCSS
|
470
|
-
|
471
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
472
|
-
foo {
|
473
|
-
/* foo
|
474
|
-
* bar
|
475
|
-
* baz */
|
476
|
-
a: b; }
|
477
|
-
SCSS
|
478
|
-
foo
|
479
|
-
/* foo
|
480
|
-
bar
|
481
|
-
baz
|
482
|
-
a: b
|
483
|
-
SASS
|
484
|
-
end
|
485
|
-
|
486
|
-
def test_immediately_preceding_comments
|
487
|
-
assert_renders <<SASS, <<SCSS
|
488
|
-
/* Foo
|
489
|
-
* Bar
|
490
|
-
* Baz
|
491
|
-
.foo#bar
|
492
|
-
a: b
|
493
|
-
SASS
|
494
|
-
/* Foo
|
495
|
-
* Bar
|
496
|
-
* Baz */
|
497
|
-
.foo#bar {
|
498
|
-
a: b; }
|
499
|
-
SCSS
|
500
|
-
|
501
|
-
assert_renders <<SASS, <<SCSS
|
502
|
-
// Foo
|
503
|
-
// Bar
|
504
|
-
// Baz
|
505
|
-
=foo
|
506
|
-
a: b
|
507
|
-
SASS
|
508
|
-
// Foo
|
509
|
-
// Bar
|
510
|
-
// Baz
|
511
|
-
@mixin foo {
|
512
|
-
a: b; }
|
513
|
-
SCSS
|
514
|
-
end
|
515
|
-
|
516
|
-
def test_debug
|
517
|
-
assert_renders <<SASS, <<SCSS
|
518
|
-
foo
|
519
|
-
@debug 12px
|
520
|
-
bar: baz
|
521
|
-
SASS
|
522
|
-
foo {
|
523
|
-
@debug 12px;
|
524
|
-
bar: baz; }
|
525
|
-
SCSS
|
526
|
-
end
|
527
|
-
|
528
|
-
def test_directive_without_children
|
529
|
-
assert_renders <<SASS, <<SCSS
|
530
|
-
foo
|
531
|
-
@foo #bar "baz"
|
532
|
-
bar: baz
|
533
|
-
SASS
|
534
|
-
foo {
|
535
|
-
@foo #bar "baz";
|
536
|
-
bar: baz; }
|
537
|
-
SCSS
|
538
|
-
end
|
539
|
-
|
540
|
-
def test_directive_with_prop_children
|
541
|
-
assert_renders <<SASS, <<SCSS
|
542
|
-
foo
|
543
|
-
@foo #bar "baz"
|
544
|
-
a: b
|
545
|
-
c: d
|
546
|
-
|
547
|
-
bar: baz
|
548
|
-
SASS
|
549
|
-
foo {
|
550
|
-
@foo #bar "baz" {
|
551
|
-
a: b;
|
552
|
-
c: d; }
|
553
|
-
|
554
|
-
bar: baz; }
|
555
|
-
SCSS
|
556
|
-
end
|
557
|
-
|
558
|
-
def test_directive_with_rule_children
|
559
|
-
assert_renders <<SASS, <<SCSS
|
560
|
-
foo
|
561
|
-
@foo #bar "baz"
|
562
|
-
#blat
|
563
|
-
a: b
|
564
|
-
.bang
|
565
|
-
c: d
|
566
|
-
e: f
|
567
|
-
|
568
|
-
bar: baz
|
569
|
-
SASS
|
570
|
-
foo {
|
571
|
-
@foo #bar "baz" {
|
572
|
-
#blat {
|
573
|
-
a: b; }
|
574
|
-
.bang {
|
575
|
-
c: d;
|
576
|
-
e: f; } }
|
577
|
-
|
578
|
-
bar: baz; }
|
579
|
-
SCSS
|
580
|
-
end
|
581
|
-
|
582
|
-
def test_directive_with_rule_and_prop_children
|
583
|
-
assert_renders <<SASS, <<SCSS
|
584
|
-
foo
|
585
|
-
@foo #bar "baz"
|
586
|
-
g: h
|
587
|
-
#blat
|
588
|
-
a: b
|
589
|
-
.bang
|
590
|
-
c: d
|
591
|
-
e: f
|
592
|
-
i: j
|
593
|
-
|
594
|
-
bar: baz
|
595
|
-
SASS
|
596
|
-
foo {
|
597
|
-
@foo #bar "baz" {
|
598
|
-
g: h;
|
599
|
-
#blat {
|
600
|
-
a: b; }
|
601
|
-
.bang {
|
602
|
-
c: d;
|
603
|
-
e: f; }
|
604
|
-
i: j; }
|
605
|
-
|
606
|
-
bar: baz; }
|
607
|
-
SCSS
|
608
|
-
end
|
609
|
-
|
610
|
-
def test_charset
|
611
|
-
assert_renders <<SASS, <<SCSS
|
612
|
-
@charset "utf-8"
|
613
|
-
SASS
|
614
|
-
@charset "utf-8";
|
615
|
-
SCSS
|
616
|
-
end
|
617
|
-
|
618
|
-
def test_for
|
619
|
-
assert_renders <<SASS, <<SCSS
|
620
|
-
foo
|
621
|
-
@for $a from $b to $c
|
622
|
-
a: b
|
623
|
-
@for $c from 1 to 16
|
624
|
-
d: e
|
625
|
-
f: g
|
626
|
-
SASS
|
627
|
-
foo {
|
628
|
-
@for $a from $b to $c {
|
629
|
-
a: b; }
|
630
|
-
@for $c from 1 to 16 {
|
631
|
-
d: e;
|
632
|
-
f: g; } }
|
633
|
-
SCSS
|
634
|
-
end
|
635
|
-
|
636
|
-
def test_while
|
637
|
-
assert_renders <<SASS, <<SCSS
|
638
|
-
foo
|
639
|
-
@while flaz($a + $b)
|
640
|
-
a: b
|
641
|
-
@while 1
|
642
|
-
d: e
|
643
|
-
f: g
|
644
|
-
SASS
|
645
|
-
foo {
|
646
|
-
@while flaz($a + $b) {
|
647
|
-
a: b; }
|
648
|
-
@while 1 {
|
649
|
-
d: e;
|
650
|
-
f: g; } }
|
651
|
-
SCSS
|
652
|
-
end
|
653
|
-
|
654
|
-
def test_if
|
655
|
-
assert_renders <<SASS, <<SCSS
|
656
|
-
foo
|
657
|
-
@if $foo or $bar
|
658
|
-
a: b
|
659
|
-
@if $baz
|
660
|
-
d: e
|
661
|
-
@else if $bang
|
662
|
-
f: g
|
663
|
-
@else
|
664
|
-
h: i
|
665
|
-
SASS
|
666
|
-
foo {
|
667
|
-
@if $foo or $bar {
|
668
|
-
a: b; }
|
669
|
-
@if $baz {
|
670
|
-
d: e; }
|
671
|
-
@else if $bang {
|
672
|
-
f: g; }
|
673
|
-
@else {
|
674
|
-
h: i; } }
|
675
|
-
SCSS
|
676
|
-
end
|
677
|
-
|
678
|
-
def test_import
|
679
|
-
assert_renders <<SASS, <<SCSS
|
680
|
-
@import foo
|
681
|
-
|
682
|
-
@import url(bar.css)
|
683
|
-
|
684
|
-
foo
|
685
|
-
bar: baz
|
686
|
-
SASS
|
687
|
-
@import "foo";
|
688
|
-
|
689
|
-
@import url(bar.css);
|
690
|
-
|
691
|
-
foo {
|
692
|
-
bar: baz; }
|
693
|
-
SCSS
|
694
|
-
|
695
|
-
assert_renders <<SASS, <<SCSS
|
696
|
-
@import foo.css
|
697
|
-
|
698
|
-
@import url(bar.css)
|
699
|
-
|
700
|
-
foo
|
701
|
-
bar: baz
|
702
|
-
SASS
|
703
|
-
@import "foo.css";
|
704
|
-
|
705
|
-
@import url(bar.css);
|
706
|
-
|
707
|
-
foo {
|
708
|
-
bar: baz; }
|
709
|
-
SCSS
|
710
|
-
end
|
711
|
-
|
712
|
-
def test_import_as_directive_in_sass
|
713
|
-
assert_equal "@import foo.css\n", to_sass('@import "foo.css"')
|
714
|
-
end
|
715
|
-
|
716
|
-
def test_import_as_directive_in_scss
|
717
|
-
assert_renders <<SASS, <<SCSS
|
718
|
-
@import "foo.css" print
|
719
|
-
SASS
|
720
|
-
@import "foo.css" print;
|
721
|
-
SCSS
|
722
|
-
|
723
|
-
assert_renders <<SASS, <<SCSS
|
724
|
-
@import url(foo.css) screen, print
|
725
|
-
SASS
|
726
|
-
@import url(foo.css) screen, print;
|
727
|
-
SCSS
|
728
|
-
end
|
729
|
-
|
730
|
-
def test_adjacent_imports
|
731
|
-
assert_renders <<SASS, <<SCSS
|
732
|
-
@import foo.sass
|
733
|
-
@import bar.scss
|
734
|
-
@import baz
|
735
|
-
SASS
|
736
|
-
@import "foo.sass";
|
737
|
-
@import "bar.scss";
|
738
|
-
@import "baz";
|
739
|
-
SCSS
|
740
|
-
end
|
741
|
-
|
742
|
-
def test_non_adjacent_imports
|
743
|
-
assert_renders <<SASS, <<SCSS
|
744
|
-
@import foo.sass
|
745
|
-
|
746
|
-
@import bar.scss
|
747
|
-
|
748
|
-
@import baz
|
749
|
-
SASS
|
750
|
-
@import "foo.sass";
|
751
|
-
|
752
|
-
@import "bar.scss";
|
753
|
-
|
754
|
-
@import "baz";
|
755
|
-
SCSS
|
756
|
-
end
|
757
|
-
|
758
|
-
def test_extend
|
759
|
-
assert_renders <<SASS, <<SCSS
|
760
|
-
.foo
|
761
|
-
@extend .bar
|
762
|
-
@extend .baz:bang
|
763
|
-
SASS
|
764
|
-
.foo {
|
765
|
-
@extend .bar;
|
766
|
-
@extend .baz:bang; }
|
767
|
-
SCSS
|
768
|
-
end
|
769
|
-
|
770
|
-
def test_argless_mixin_definition
|
771
|
-
assert_renders <<SASS, <<SCSS
|
772
|
-
=foo-bar
|
773
|
-
baz
|
774
|
-
a: b
|
775
|
-
SASS
|
776
|
-
@mixin foo-bar {
|
777
|
-
baz {
|
778
|
-
a: b; } }
|
779
|
-
SCSS
|
780
|
-
|
781
|
-
assert_scss_to_sass <<SASS, <<SCSS
|
782
|
-
=foo-bar
|
783
|
-
baz
|
784
|
-
a: b
|
785
|
-
SASS
|
786
|
-
@mixin foo-bar() {
|
787
|
-
baz {
|
788
|
-
a: b; } }
|
789
|
-
SCSS
|
790
|
-
|
791
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
792
|
-
@mixin foo-bar {
|
793
|
-
baz {
|
794
|
-
a: b; } }
|
795
|
-
SCSS
|
796
|
-
=foo-bar()
|
797
|
-
baz
|
798
|
-
a: b
|
799
|
-
SASS
|
800
|
-
end
|
801
|
-
|
802
|
-
def test_mixin_definition_without_defaults
|
803
|
-
assert_renders <<SASS, <<SCSS
|
804
|
-
=foo-bar($baz, $bang)
|
805
|
-
baz
|
806
|
-
a: $baz $bang
|
807
|
-
SASS
|
808
|
-
@mixin foo-bar($baz, $bang) {
|
809
|
-
baz {
|
810
|
-
a: $baz $bang; } }
|
811
|
-
SCSS
|
812
|
-
end
|
813
|
-
|
814
|
-
def test_mixin_definition_with_defaults
|
815
|
-
assert_renders <<SASS, <<SCSS
|
816
|
-
=foo-bar($baz, $bang: 12px)
|
817
|
-
baz
|
818
|
-
a: $baz $bang
|
819
|
-
SASS
|
820
|
-
@mixin foo-bar($baz, $bang: 12px) {
|
821
|
-
baz {
|
822
|
-
a: $baz $bang; } }
|
823
|
-
SCSS
|
824
|
-
|
825
|
-
assert_scss_to_sass <<SASS, <<SCSS
|
826
|
-
=foo-bar($baz, $bang: foo)
|
827
|
-
baz
|
828
|
-
a: $baz $bang
|
829
|
-
SASS
|
830
|
-
@mixin foo-bar($baz, $bang = "foo") {
|
831
|
-
baz {
|
832
|
-
a: $baz $bang; } }
|
833
|
-
SCSS
|
834
|
-
|
835
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
836
|
-
@mixin foo-bar($baz, $bang: foo) {
|
837
|
-
baz {
|
838
|
-
a: $baz $bang; } }
|
839
|
-
SCSS
|
840
|
-
=foo-bar($baz, $bang = "foo")
|
841
|
-
baz
|
842
|
-
a: $baz $bang
|
843
|
-
SASS
|
844
|
-
end
|
845
|
-
|
846
|
-
def test_argless_mixin_include
|
847
|
-
assert_renders <<SASS, <<SCSS
|
848
|
-
foo
|
849
|
-
+foo-bar
|
850
|
-
a: blip
|
851
|
-
SASS
|
852
|
-
foo {
|
853
|
-
@include foo-bar;
|
854
|
-
a: blip; }
|
855
|
-
SCSS
|
856
|
-
end
|
857
|
-
|
858
|
-
def test_mixin_include
|
859
|
-
assert_renders <<SASS, <<SCSS
|
860
|
-
foo
|
861
|
-
+foo-bar(12px, "blaz")
|
862
|
-
a: blip
|
863
|
-
SASS
|
864
|
-
foo {
|
865
|
-
@include foo-bar(12px, "blaz");
|
866
|
-
a: blip; }
|
867
|
-
SCSS
|
868
|
-
end
|
869
|
-
|
870
|
-
def test_variable_definition
|
871
|
-
assert_renders <<SASS, <<SCSS
|
872
|
-
$var1: 12px + 15px
|
873
|
-
|
874
|
-
foo
|
875
|
-
$var2: flaz(#abcdef)
|
876
|
-
val: $var1 $var2
|
877
|
-
SASS
|
878
|
-
$var1: 12px + 15px;
|
879
|
-
|
880
|
-
foo {
|
881
|
-
$var2: flaz(#abcdef);
|
882
|
-
val: $var1 $var2; }
|
883
|
-
SCSS
|
884
|
-
|
885
|
-
assert_sass_to_scss '$var: 12px $bar baz;', '$var = 12px $bar "baz"'
|
886
|
-
end
|
887
|
-
|
888
|
-
def test_guarded_variable_definition
|
889
|
-
assert_renders <<SASS, <<SCSS
|
890
|
-
$var1: 12px + 15px !default
|
891
|
-
|
892
|
-
foo
|
893
|
-
$var2: flaz(#abcdef) !default
|
894
|
-
val: $var1 $var2
|
895
|
-
SASS
|
896
|
-
$var1: 12px + 15px !default;
|
897
|
-
|
898
|
-
foo {
|
899
|
-
$var2: flaz(#abcdef) !default;
|
900
|
-
val: $var1 $var2; }
|
901
|
-
SCSS
|
902
|
-
|
903
|
-
assert_sass_to_scss '$var: 12px $bar baz !default;', '$var ||= 12px $bar "baz"'
|
904
|
-
end
|
905
|
-
|
906
|
-
def test_multiple_variable_definitions
|
907
|
-
assert_renders <<SASS, <<SCSS
|
908
|
-
$var1: foo
|
909
|
-
$var2: bar
|
910
|
-
$var3: baz
|
911
|
-
|
912
|
-
$var4: bip
|
913
|
-
$var5: bap
|
914
|
-
SASS
|
915
|
-
$var1: foo;
|
916
|
-
$var2: bar;
|
917
|
-
$var3: baz;
|
918
|
-
|
919
|
-
$var4: bip;
|
920
|
-
$var5: bap;
|
921
|
-
SCSS
|
922
|
-
end
|
923
|
-
|
924
|
-
def test_division_asserted_with_parens
|
925
|
-
assert_renders <<SASS, <<SCSS
|
926
|
-
foo
|
927
|
-
a: (1px / 2px)
|
928
|
-
SASS
|
929
|
-
foo {
|
930
|
-
a: (1px / 2px); }
|
931
|
-
SCSS
|
932
|
-
end
|
933
|
-
|
934
|
-
def test_division_not_asserted_when_unnecessary
|
935
|
-
assert_renders <<SASS, <<SCSS
|
936
|
-
$var: 1px / 2px
|
937
|
-
|
938
|
-
foo
|
939
|
-
a: $var
|
940
|
-
SASS
|
941
|
-
$var: 1px / 2px;
|
942
|
-
|
943
|
-
foo {
|
944
|
-
a: $var; }
|
945
|
-
SCSS
|
946
|
-
|
947
|
-
assert_renders <<SASS, <<SCSS
|
948
|
-
$var: 1px
|
949
|
-
|
950
|
-
foo
|
951
|
-
a: $var / 2px
|
952
|
-
SASS
|
953
|
-
$var: 1px;
|
954
|
-
|
955
|
-
foo {
|
956
|
-
a: $var / 2px; }
|
957
|
-
SCSS
|
958
|
-
|
959
|
-
assert_renders <<SASS, <<SCSS
|
960
|
-
foo
|
961
|
-
a: 1 + 1px / 2px
|
962
|
-
SASS
|
963
|
-
foo {
|
964
|
-
a: 1 + 1px / 2px; }
|
965
|
-
SCSS
|
966
|
-
end
|
967
|
-
|
968
|
-
def test_literal_slash
|
969
|
-
assert_renders <<SASS, <<SCSS
|
970
|
-
foo
|
971
|
-
a: 1px / 2px
|
972
|
-
SASS
|
973
|
-
foo {
|
974
|
-
a: 1px / 2px; }
|
975
|
-
SCSS
|
976
|
-
end
|
977
|
-
|
978
|
-
# Hacks
|
979
|
-
|
980
|
-
def test_declaration_hacks
|
981
|
-
assert_renders <<SASS, <<SCSS
|
982
|
-
foo
|
983
|
-
_name: val
|
984
|
-
*name: val
|
985
|
-
#name: val
|
986
|
-
.name: val
|
987
|
-
name/**/: val
|
988
|
-
name/*\\**/: val
|
989
|
-
name: val
|
990
|
-
SASS
|
991
|
-
foo {
|
992
|
-
_name: val;
|
993
|
-
*name: val;
|
994
|
-
#name: val;
|
995
|
-
.name: val;
|
996
|
-
name/**/: val;
|
997
|
-
name/*\\**/: val;
|
998
|
-
name: val; }
|
999
|
-
SCSS
|
1000
|
-
end
|
1001
|
-
|
1002
|
-
def test_old_declaration_hacks
|
1003
|
-
assert_renders <<SASS, <<SCSS, :old => true
|
1004
|
-
foo
|
1005
|
-
:_name val
|
1006
|
-
:*name val
|
1007
|
-
:#name val
|
1008
|
-
:.name val
|
1009
|
-
:name val
|
1010
|
-
SASS
|
1011
|
-
foo {
|
1012
|
-
_name: val;
|
1013
|
-
*name: val;
|
1014
|
-
#name: val;
|
1015
|
-
.name: val;
|
1016
|
-
name: val; }
|
1017
|
-
SCSS
|
1018
|
-
end
|
1019
|
-
|
1020
|
-
def test_selector_hacks
|
1021
|
-
assert_selector_renders = lambda do |s|
|
1022
|
-
assert_renders <<SASS, <<SCSS
|
1023
|
-
#{s}
|
1024
|
-
a: b
|
1025
|
-
SASS
|
1026
|
-
#{s} {
|
1027
|
-
a: b; }
|
1028
|
-
SCSS
|
1029
|
-
end
|
1030
|
-
|
1031
|
-
assert_selector_renders['> E']
|
1032
|
-
assert_selector_renders['+ E']
|
1033
|
-
assert_selector_renders['~ E']
|
1034
|
-
assert_selector_renders['> > E']
|
1035
|
-
|
1036
|
-
assert_selector_renders['E*']
|
1037
|
-
assert_selector_renders['E*.foo']
|
1038
|
-
assert_selector_renders['E*:hover']
|
1039
|
-
end
|
1040
|
-
|
1041
|
-
def test_disallowed_colon_hack
|
1042
|
-
assert_raise_message(Sass::SyntaxError, 'The ":name: val" hack is not allowed in the Sass indented syntax') do
|
1043
|
-
to_sass("foo {:name: val;}", :syntax => :scss)
|
1044
|
-
end
|
1045
|
-
end
|
1046
|
-
|
1047
|
-
# Sass 3 Deprecation conversions
|
1048
|
-
|
1049
|
-
def test_simple_quoted_strings_unquoted_with_equals
|
1050
|
-
assert_sass_to_scss '$var: 1px foo + bar baz;', '!var = 1px "foo" + "bar" baz'
|
1051
|
-
assert_sass_to_scss '$var: -foo-bar;', '!var = "-foo-bar"'
|
1052
|
-
end
|
1053
|
-
|
1054
|
-
def test_complex_quoted_strings_explicitly_unquoted_with_equals
|
1055
|
-
assert_sass_to_scss '$var: 1px unquote("foo + bar") baz;', '!var = 1px "foo + bar" baz'
|
1056
|
-
assert_sass_to_scss "$var: unquote('foo\"bar');", '!var = "foo\"bar"'
|
1057
|
-
end
|
1058
|
-
|
1059
|
-
def test_division_asserted_with_equals
|
1060
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1061
|
-
foo {
|
1062
|
-
a: (1px / 2px); }
|
1063
|
-
SCSS
|
1064
|
-
foo
|
1065
|
-
a = 1px / 2px
|
1066
|
-
SASS
|
1067
|
-
end
|
1068
|
-
|
1069
|
-
def test_division_not_asserted_with_equals_when_unnecessary
|
1070
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1071
|
-
$var: 1px / 2px;
|
1072
|
-
|
1073
|
-
foo {
|
1074
|
-
a: $var; }
|
1075
|
-
SCSS
|
1076
|
-
!var = 1px / 2px
|
1077
|
-
|
1078
|
-
foo
|
1079
|
-
a = !var
|
1080
|
-
SASS
|
1081
|
-
|
1082
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1083
|
-
$var: 1px;
|
1084
|
-
|
1085
|
-
foo {
|
1086
|
-
a: $var / 2px; }
|
1087
|
-
SCSS
|
1088
|
-
!var = 1px
|
1089
|
-
|
1090
|
-
foo
|
1091
|
-
a = !var / 2px
|
1092
|
-
SASS
|
1093
|
-
|
1094
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1095
|
-
foo {
|
1096
|
-
a: 1 + 1px / 2px; }
|
1097
|
-
SCSS
|
1098
|
-
foo
|
1099
|
-
a = 1 + 1px / 2px
|
1100
|
-
SASS
|
1101
|
-
end
|
1102
|
-
|
1103
|
-
def test_nested_properties
|
1104
|
-
assert_renders <<SASS, <<SCSS
|
1105
|
-
div
|
1106
|
-
before: before
|
1107
|
-
background:
|
1108
|
-
color: blue
|
1109
|
-
repeat: no-repeat
|
1110
|
-
after: after
|
1111
|
-
SASS
|
1112
|
-
div {
|
1113
|
-
before: before;
|
1114
|
-
background: {
|
1115
|
-
color: blue;
|
1116
|
-
repeat: no-repeat; };
|
1117
|
-
after: after; }
|
1118
|
-
|
1119
|
-
SCSS
|
1120
|
-
end
|
1121
|
-
|
1122
|
-
def test_dasherize
|
1123
|
-
assert_sass_to_scss(<<SCSS, <<SASS, :dasherize => true)
|
1124
|
-
@mixin under-scored-mixin($under-scored-arg: $under-scored-default) {
|
1125
|
-
bar: $under-scored-arg; }
|
1126
|
-
|
1127
|
-
div {
|
1128
|
-
foo: under-scored-fn($under-scored-var + "before\#{$another-under-scored-var}after");
|
1129
|
-
@include under-scored-mixin($passed-arg);
|
1130
|
-
selector-\#{$under-scored-interp}: bold; }
|
1131
|
-
|
1132
|
-
@if $under-scored {
|
1133
|
-
@for $for-var from $from-var to $to-var {
|
1134
|
-
@while $while-var == true {
|
1135
|
-
$while-var: false; } } }
|
1136
|
-
SCSS
|
1137
|
-
=under_scored_mixin($under_scored_arg: $under_scored_default)
|
1138
|
-
bar: $under_scored_arg
|
1139
|
-
div
|
1140
|
-
foo: under_scored_fn($under_scored_var + "before\#{$another_under_scored_var}after")
|
1141
|
-
+under_scored_mixin($passed_arg)
|
1142
|
-
selector-\#{$under_scored_interp}: bold
|
1143
|
-
@if $under_scored
|
1144
|
-
@for $for_var from $from_var to $to_var
|
1145
|
-
@while $while_var == true
|
1146
|
-
$while_var : false
|
1147
|
-
SASS
|
1148
|
-
end
|
1149
|
-
|
1150
|
-
def test_sass2_var_in_property_interpolation
|
1151
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1152
|
-
foo {
|
1153
|
-
a: b \#{$c} d; }
|
1154
|
-
SCSS
|
1155
|
-
foo
|
1156
|
-
a: b \#{!c} d
|
1157
|
-
SASS
|
1158
|
-
end
|
1159
|
-
|
1160
|
-
def test_sass2_var_in_selector_interpolation
|
1161
|
-
assert_sass_to_scss <<SCSS, <<SASS
|
1162
|
-
foo-\#{$c} {
|
1163
|
-
a: b; }
|
1164
|
-
SCSS
|
1165
|
-
foo-\#{!c}
|
1166
|
-
a: b
|
1167
|
-
SASS
|
1168
|
-
end
|
1169
|
-
|
1170
|
-
private
|
1171
|
-
|
1172
|
-
def assert_sass_to_sass(sass, options = {})
|
1173
|
-
assert_equal(sass.rstrip, to_sass(sass, options).rstrip,
|
1174
|
-
"Expected Sass to transform to itself")
|
1175
|
-
end
|
1176
|
-
|
1177
|
-
def assert_scss_to_sass(sass, scss, options = {})
|
1178
|
-
assert_equal(sass.rstrip, to_sass(scss, options.merge(:syntax => :scss)).rstrip,
|
1179
|
-
"Expected SCSS to transform to Sass")
|
1180
|
-
end
|
1181
|
-
|
1182
|
-
def assert_scss_to_scss(scss, in_scss = nil, options = nil)
|
1183
|
-
if in_scss.is_a?(Hash)
|
1184
|
-
options = in_scss
|
1185
|
-
in_scss = nil
|
1186
|
-
end
|
1187
|
-
|
1188
|
-
in_scss ||= scss
|
1189
|
-
options ||= {}
|
1190
|
-
|
1191
|
-
assert_equal(scss.rstrip, to_scss(in_scss, options.merge(:syntax => :scss)).rstrip,
|
1192
|
-
"Expected SCSS to transform to #{scss == in_scss ? 'itself' : 'SCSS'}k")
|
1193
|
-
end
|
1194
|
-
|
1195
|
-
def assert_sass_to_scss(scss, sass, options = {})
|
1196
|
-
assert_equal(scss.rstrip, to_scss(sass, options).rstrip,
|
1197
|
-
"Expected Sass to transform to SCSS")
|
1198
|
-
end
|
1199
|
-
|
1200
|
-
def assert_renders(sass, scss, options = {})
|
1201
|
-
assert_sass_to_sass(sass, options)
|
1202
|
-
assert_scss_to_sass(sass, scss, options)
|
1203
|
-
assert_scss_to_scss(scss, options)
|
1204
|
-
assert_sass_to_scss(scss, sass, options)
|
1205
|
-
end
|
1206
|
-
|
1207
|
-
def to_sass(scss, options = {})
|
1208
|
-
Haml::Util.silence_haml_warnings do
|
1209
|
-
Sass::Engine.new(scss, options).to_tree.to_sass(options)
|
1210
|
-
end
|
1211
|
-
end
|
1212
|
-
|
1213
|
-
def to_scss(sass, options = {})
|
1214
|
-
Haml::Util.silence_haml_warnings do
|
1215
|
-
Sass::Engine.new(sass, options).to_tree.to_scss(options)
|
1216
|
-
end
|
1217
|
-
end
|
1218
|
-
end
|