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.

Files changed (212) hide show
  1. data/.yardopts +1 -1
  2. data/CONTRIBUTING +0 -1
  3. data/EDGE_GEM_VERSION +1 -0
  4. data/MIT-LICENSE +1 -1
  5. data/README.md +10 -175
  6. data/Rakefile +56 -84
  7. data/VERSION +1 -1
  8. data/VERSION_NAME +1 -1
  9. data/init.rb +1 -1
  10. data/lib/haml.rb +14 -12
  11. data/lib/haml/engine.rb +1 -1
  12. data/lib/haml/exec.rb +19 -316
  13. data/lib/haml/helpers/action_view_extensions.rb +1 -1
  14. data/lib/haml/html.rb +69 -76
  15. data/lib/haml/precompiler.rb +34 -41
  16. data/lib/haml/railtie.rb +4 -6
  17. data/lib/haml/template/plugin.rb +6 -16
  18. data/lib/haml/util.rb +91 -107
  19. data/lib/haml/version.rb +7 -0
  20. data/test/benchmark.rb +2 -9
  21. data/test/haml/engine_test.rb +195 -92
  22. data/test/haml/html2haml/erb_tests.rb +0 -14
  23. data/test/haml/util_test.rb +32 -0
  24. data/test/test_helper.rb +0 -39
  25. metadata +96 -324
  26. data/bin/css2sass +0 -13
  27. data/bin/sass +0 -8
  28. data/bin/sass-convert +0 -7
  29. data/extra/haml-mode.el +0 -753
  30. data/extra/sass-mode.el +0 -207
  31. data/lib/haml/util/subset_map.rb +0 -101
  32. data/lib/sass.rb +0 -29
  33. data/lib/sass/callbacks.rb +0 -52
  34. data/lib/sass/css.rb +0 -294
  35. data/lib/sass/engine.rb +0 -720
  36. data/lib/sass/environment.rb +0 -143
  37. data/lib/sass/error.rb +0 -198
  38. data/lib/sass/files.rb +0 -160
  39. data/lib/sass/less.rb +0 -382
  40. data/lib/sass/plugin.rb +0 -279
  41. data/lib/sass/plugin/configuration.rb +0 -221
  42. data/lib/sass/plugin/generic.rb +0 -15
  43. data/lib/sass/plugin/merb.rb +0 -37
  44. data/lib/sass/plugin/rack.rb +0 -47
  45. data/lib/sass/plugin/rails.rb +0 -32
  46. data/lib/sass/plugin/staleness_checker.rb +0 -123
  47. data/lib/sass/repl.rb +0 -58
  48. data/lib/sass/script.rb +0 -63
  49. data/lib/sass/script/bool.rb +0 -18
  50. data/lib/sass/script/color.rb +0 -491
  51. data/lib/sass/script/css_lexer.rb +0 -29
  52. data/lib/sass/script/css_parser.rb +0 -31
  53. data/lib/sass/script/funcall.rb +0 -77
  54. data/lib/sass/script/functions.rb +0 -861
  55. data/lib/sass/script/interpolation.rb +0 -70
  56. data/lib/sass/script/lexer.rb +0 -337
  57. data/lib/sass/script/literal.rb +0 -236
  58. data/lib/sass/script/node.rb +0 -112
  59. data/lib/sass/script/number.rb +0 -423
  60. data/lib/sass/script/operation.rb +0 -95
  61. data/lib/sass/script/parser.rb +0 -401
  62. data/lib/sass/script/string.rb +0 -67
  63. data/lib/sass/script/string_interpolation.rb +0 -93
  64. data/lib/sass/script/unary_operation.rb +0 -57
  65. data/lib/sass/script/variable.rb +0 -48
  66. data/lib/sass/scss.rb +0 -17
  67. data/lib/sass/scss/css_parser.rb +0 -46
  68. data/lib/sass/scss/parser.rb +0 -855
  69. data/lib/sass/scss/rx.rb +0 -126
  70. data/lib/sass/scss/sass_parser.rb +0 -11
  71. data/lib/sass/scss/script_lexer.rb +0 -15
  72. data/lib/sass/scss/script_parser.rb +0 -25
  73. data/lib/sass/scss/static_parser.rb +0 -40
  74. data/lib/sass/selector.rb +0 -361
  75. data/lib/sass/selector/abstract_sequence.rb +0 -62
  76. data/lib/sass/selector/comma_sequence.rb +0 -82
  77. data/lib/sass/selector/sequence.rb +0 -237
  78. data/lib/sass/selector/simple.rb +0 -113
  79. data/lib/sass/selector/simple_sequence.rb +0 -136
  80. data/lib/sass/tree/charset_node.rb +0 -37
  81. data/lib/sass/tree/comment_node.rb +0 -128
  82. data/lib/sass/tree/debug_node.rb +0 -36
  83. data/lib/sass/tree/directive_node.rb +0 -75
  84. data/lib/sass/tree/extend_node.rb +0 -65
  85. data/lib/sass/tree/for_node.rb +0 -55
  86. data/lib/sass/tree/if_node.rb +0 -69
  87. data/lib/sass/tree/import_node.rb +0 -102
  88. data/lib/sass/tree/mixin_def_node.rb +0 -48
  89. data/lib/sass/tree/mixin_node.rb +0 -111
  90. data/lib/sass/tree/node.rb +0 -464
  91. data/lib/sass/tree/prop_node.rb +0 -220
  92. data/lib/sass/tree/root_node.rb +0 -163
  93. data/lib/sass/tree/rule_node.rb +0 -261
  94. data/lib/sass/tree/variable_node.rb +0 -39
  95. data/lib/sass/tree/warn_node.rb +0 -42
  96. data/lib/sass/tree/while_node.rb +0 -36
  97. data/test/haml/util/subset_map_test.rb +0 -91
  98. data/test/sass/callbacks_test.rb +0 -61
  99. data/test/sass/conversion_test.rb +0 -1218
  100. data/test/sass/css2sass_test.rb +0 -364
  101. data/test/sass/data/hsl-rgb.txt +0 -319
  102. data/test/sass/engine_test.rb +0 -2267
  103. data/test/sass/extend_test.rb +0 -1348
  104. data/test/sass/functions_test.rb +0 -556
  105. data/test/sass/less_conversion_test.rb +0 -653
  106. data/test/sass/more_results/more1.css +0 -9
  107. data/test/sass/more_results/more1_with_line_comments.css +0 -26
  108. data/test/sass/more_results/more_import.css +0 -29
  109. data/test/sass/more_templates/_more_partial.sass +0 -2
  110. data/test/sass/more_templates/more1.sass +0 -23
  111. data/test/sass/more_templates/more_import.sass +0 -11
  112. data/test/sass/plugin_test.rb +0 -433
  113. data/test/sass/results/alt.css +0 -4
  114. data/test/sass/results/basic.css +0 -9
  115. data/test/sass/results/compact.css +0 -5
  116. data/test/sass/results/complex.css +0 -86
  117. data/test/sass/results/compressed.css +0 -1
  118. data/test/sass/results/expanded.css +0 -19
  119. data/test/sass/results/import.css +0 -31
  120. data/test/sass/results/import_charset.css +0 -4
  121. data/test/sass/results/import_charset_1_8.css +0 -4
  122. data/test/sass/results/import_charset_ibm866.css +0 -4
  123. data/test/sass/results/line_numbers.css +0 -49
  124. data/test/sass/results/mixins.css +0 -95
  125. data/test/sass/results/multiline.css +0 -24
  126. data/test/sass/results/nested.css +0 -22
  127. data/test/sass/results/options.css +0 -1
  128. data/test/sass/results/parent_ref.css +0 -13
  129. data/test/sass/results/script.css +0 -16
  130. data/test/sass/results/scss_import.css +0 -31
  131. data/test/sass/results/scss_importee.css +0 -2
  132. data/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  133. data/test/sass/results/subdir/subdir.css +0 -3
  134. data/test/sass/results/units.css +0 -11
  135. data/test/sass/results/warn.css +0 -0
  136. data/test/sass/results/warn_imported.css +0 -0
  137. data/test/sass/script_conversion_test.rb +0 -314
  138. data/test/sass/script_test.rb +0 -470
  139. data/test/sass/scss/css_test.rb +0 -916
  140. data/test/sass/scss/rx_test.rb +0 -156
  141. data/test/sass/scss/scss_test.rb +0 -1122
  142. data/test/sass/scss/test_helper.rb +0 -37
  143. data/test/sass/templates/_imported_charset_ibm866.sass +0 -4
  144. data/test/sass/templates/_imported_charset_utf8.sass +0 -4
  145. data/test/sass/templates/_partial.sass +0 -2
  146. data/test/sass/templates/alt.sass +0 -16
  147. data/test/sass/templates/basic.sass +0 -23
  148. data/test/sass/templates/bork1.sass +0 -2
  149. data/test/sass/templates/bork2.sass +0 -2
  150. data/test/sass/templates/bork3.sass +0 -2
  151. data/test/sass/templates/bork4.sass +0 -2
  152. data/test/sass/templates/compact.sass +0 -17
  153. data/test/sass/templates/complex.sass +0 -305
  154. data/test/sass/templates/compressed.sass +0 -15
  155. data/test/sass/templates/expanded.sass +0 -17
  156. data/test/sass/templates/import.sass +0 -12
  157. data/test/sass/templates/import_charset.sass +0 -7
  158. data/test/sass/templates/import_charset_1_8.sass +0 -4
  159. data/test/sass/templates/import_charset_ibm866.sass +0 -9
  160. data/test/sass/templates/importee.less +0 -2
  161. data/test/sass/templates/importee.sass +0 -19
  162. data/test/sass/templates/line_numbers.sass +0 -13
  163. data/test/sass/templates/mixin_bork.sass +0 -5
  164. data/test/sass/templates/mixins.sass +0 -76
  165. data/test/sass/templates/multiline.sass +0 -20
  166. data/test/sass/templates/nested.sass +0 -25
  167. data/test/sass/templates/nested_bork1.sass +0 -2
  168. data/test/sass/templates/nested_bork2.sass +0 -2
  169. data/test/sass/templates/nested_bork3.sass +0 -2
  170. data/test/sass/templates/nested_bork4.sass +0 -2
  171. data/test/sass/templates/nested_mixin_bork.sass +0 -6
  172. data/test/sass/templates/options.sass +0 -2
  173. data/test/sass/templates/parent_ref.sass +0 -25
  174. data/test/sass/templates/script.sass +0 -101
  175. data/test/sass/templates/scss_import.scss +0 -11
  176. data/test/sass/templates/scss_importee.scss +0 -1
  177. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  178. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  179. data/test/sass/templates/subdir/subdir.sass +0 -6
  180. data/test/sass/templates/units.sass +0 -11
  181. data/test/sass/templates/warn.sass +0 -3
  182. data/test/sass/templates/warn_imported.sass +0 -4
  183. data/vendor/fssm/LICENSE +0 -20
  184. data/vendor/fssm/README.markdown +0 -55
  185. data/vendor/fssm/Rakefile +0 -59
  186. data/vendor/fssm/VERSION.yml +0 -5
  187. data/vendor/fssm/example.rb +0 -9
  188. data/vendor/fssm/fssm.gemspec +0 -77
  189. data/vendor/fssm/lib/fssm.rb +0 -33
  190. data/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
  191. data/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
  192. data/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
  193. data/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
  194. data/vendor/fssm/lib/fssm/monitor.rb +0 -26
  195. data/vendor/fssm/lib/fssm/path.rb +0 -91
  196. data/vendor/fssm/lib/fssm/pathname.rb +0 -502
  197. data/vendor/fssm/lib/fssm/state/directory.rb +0 -57
  198. data/vendor/fssm/lib/fssm/state/file.rb +0 -24
  199. data/vendor/fssm/lib/fssm/support.rb +0 -63
  200. data/vendor/fssm/lib/fssm/tree.rb +0 -176
  201. data/vendor/fssm/profile/prof-cache.rb +0 -40
  202. data/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
  203. data/vendor/fssm/profile/prof-pathname.rb +0 -68
  204. data/vendor/fssm/profile/prof-plain-pathname.html +0 -988
  205. data/vendor/fssm/profile/prof.html +0 -2379
  206. data/vendor/fssm/spec/path_spec.rb +0 -75
  207. data/vendor/fssm/spec/root/duck/quack.txt +0 -0
  208. data/vendor/fssm/spec/root/file.css +0 -0
  209. data/vendor/fssm/spec/root/file.rb +0 -0
  210. data/vendor/fssm/spec/root/file.yml +0 -0
  211. data/vendor/fssm/spec/root/moo/cow.txt +0 -0
  212. 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
@@ -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
@@ -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
@@ -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