oreorenasass 3.4.4 → 3.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +50 -70
  4. data/Rakefile +5 -26
  5. data/VERSION +1 -1
  6. data/VERSION_NAME +1 -1
  7. data/bin/sass +1 -1
  8. data/bin/scss +1 -1
  9. data/lib/sass.rb +12 -19
  10. data/lib/sass/cache_stores/base.rb +2 -2
  11. data/lib/sass/cache_stores/chain.rb +1 -2
  12. data/lib/sass/cache_stores/filesystem.rb +5 -1
  13. data/lib/sass/cache_stores/memory.rb +1 -1
  14. data/lib/sass/cache_stores/null.rb +2 -2
  15. data/lib/sass/callbacks.rb +0 -1
  16. data/lib/sass/css.rb +13 -11
  17. data/lib/sass/engine.rb +173 -424
  18. data/lib/sass/environment.rb +58 -148
  19. data/lib/sass/error.rb +14 -11
  20. data/lib/sass/exec.rb +703 -5
  21. data/lib/sass/importers/base.rb +6 -49
  22. data/lib/sass/importers/filesystem.rb +19 -44
  23. data/lib/sass/logger.rb +4 -1
  24. data/lib/sass/logger/base.rb +4 -2
  25. data/lib/sass/logger/log_level.rb +7 -3
  26. data/lib/sass/media.rb +23 -20
  27. data/lib/sass/plugin.rb +7 -7
  28. data/lib/sass/plugin/compiler.rb +145 -304
  29. data/lib/sass/plugin/configuration.rb +23 -18
  30. data/lib/sass/plugin/merb.rb +1 -1
  31. data/lib/sass/plugin/staleness_checker.rb +3 -3
  32. data/lib/sass/repl.rb +3 -3
  33. data/lib/sass/script.rb +8 -35
  34. data/lib/sass/script/{value/arg_list.rb → arg_list.rb} +25 -9
  35. data/lib/sass/script/bool.rb +18 -0
  36. data/lib/sass/script/color.rb +606 -0
  37. data/lib/sass/script/css_lexer.rb +4 -8
  38. data/lib/sass/script/css_parser.rb +2 -5
  39. data/lib/sass/script/funcall.rb +245 -0
  40. data/lib/sass/script/functions.rb +408 -1491
  41. data/lib/sass/script/interpolation.rb +79 -0
  42. data/lib/sass/script/lexer.rb +68 -172
  43. data/lib/sass/script/list.rb +85 -0
  44. data/lib/sass/script/literal.rb +221 -0
  45. data/lib/sass/script/{tree/node.rb → node.rb} +12 -22
  46. data/lib/sass/script/{value/null.rb → null.rb} +7 -14
  47. data/lib/sass/script/{value/number.rb → number.rb} +75 -152
  48. data/lib/sass/script/{tree/operation.rb → operation.rb} +24 -17
  49. data/lib/sass/script/parser.rb +110 -245
  50. data/lib/sass/script/string.rb +51 -0
  51. data/lib/sass/script/{tree/string_interpolation.rb → string_interpolation.rb} +4 -5
  52. data/lib/sass/script/{tree/unary_operation.rb → unary_operation.rb} +6 -6
  53. data/lib/sass/script/variable.rb +58 -0
  54. data/lib/sass/scss/css_parser.rb +3 -9
  55. data/lib/sass/scss/parser.rb +421 -450
  56. data/lib/sass/scss/rx.rb +11 -19
  57. data/lib/sass/scss/static_parser.rb +7 -321
  58. data/lib/sass/selector.rb +194 -68
  59. data/lib/sass/selector/abstract_sequence.rb +14 -29
  60. data/lib/sass/selector/comma_sequence.rb +25 -108
  61. data/lib/sass/selector/sequence.rb +66 -159
  62. data/lib/sass/selector/simple.rb +25 -23
  63. data/lib/sass/selector/simple_sequence.rb +63 -173
  64. data/lib/sass/shared.rb +1 -1
  65. data/lib/sass/supports.rb +15 -13
  66. data/lib/sass/tree/charset_node.rb +1 -1
  67. data/lib/sass/tree/comment_node.rb +3 -3
  68. data/lib/sass/tree/css_import_node.rb +11 -11
  69. data/lib/sass/tree/debug_node.rb +2 -2
  70. data/lib/sass/tree/directive_node.rb +4 -21
  71. data/lib/sass/tree/each_node.rb +8 -8
  72. data/lib/sass/tree/extend_node.rb +7 -14
  73. data/lib/sass/tree/for_node.rb +4 -4
  74. data/lib/sass/tree/function_node.rb +4 -9
  75. data/lib/sass/tree/if_node.rb +1 -1
  76. data/lib/sass/tree/import_node.rb +5 -4
  77. data/lib/sass/tree/media_node.rb +14 -4
  78. data/lib/sass/tree/mixin_def_node.rb +4 -4
  79. data/lib/sass/tree/mixin_node.rb +8 -21
  80. data/lib/sass/tree/node.rb +12 -54
  81. data/lib/sass/tree/prop_node.rb +20 -39
  82. data/lib/sass/tree/return_node.rb +2 -3
  83. data/lib/sass/tree/root_node.rb +3 -19
  84. data/lib/sass/tree/rule_node.rb +22 -35
  85. data/lib/sass/tree/supports_node.rb +13 -0
  86. data/lib/sass/tree/trace_node.rb +1 -2
  87. data/lib/sass/tree/variable_node.rb +3 -9
  88. data/lib/sass/tree/visitors/base.rb +8 -5
  89. data/lib/sass/tree/visitors/check_nesting.rb +19 -49
  90. data/lib/sass/tree/visitors/convert.rb +56 -74
  91. data/lib/sass/tree/visitors/cssize.rb +74 -202
  92. data/lib/sass/tree/visitors/deep_copy.rb +5 -10
  93. data/lib/sass/tree/visitors/extend.rb +7 -7
  94. data/lib/sass/tree/visitors/perform.rb +185 -278
  95. data/lib/sass/tree/visitors/set_options.rb +6 -20
  96. data/lib/sass/tree/visitors/to_css.rb +81 -234
  97. data/lib/sass/tree/warn_node.rb +2 -2
  98. data/lib/sass/tree/while_node.rb +2 -2
  99. data/lib/sass/util.rb +152 -522
  100. data/lib/sass/util/multibyte_string_scanner.rb +0 -2
  101. data/lib/sass/util/subset_map.rb +3 -4
  102. data/lib/sass/util/test.rb +1 -0
  103. data/lib/sass/version.rb +22 -20
  104. data/test/Gemfile +3 -0
  105. data/test/Gemfile.lock +10 -0
  106. data/test/sass/cache_test.rb +20 -62
  107. data/test/sass/callbacks_test.rb +1 -1
  108. data/test/sass/conversion_test.rb +2 -296
  109. data/test/sass/css2sass_test.rb +4 -23
  110. data/test/sass/engine_test.rb +354 -411
  111. data/test/sass/exec_test.rb +2 -2
  112. data/test/sass/extend_test.rb +145 -324
  113. data/test/sass/functions_test.rb +86 -873
  114. data/test/sass/importer_test.rb +21 -241
  115. data/test/sass/logger_test.rb +1 -1
  116. data/test/sass/more_results/more_import.css +1 -1
  117. data/test/sass/plugin_test.rb +26 -16
  118. data/test/sass/results/compact.css +1 -1
  119. data/test/sass/results/complex.css +4 -4
  120. data/test/sass/results/expanded.css +1 -1
  121. data/test/sass/results/import.css +1 -1
  122. data/test/sass/results/import_charset_ibm866.css +2 -2
  123. data/test/sass/results/mixins.css +17 -17
  124. data/test/sass/results/nested.css +1 -1
  125. data/test/sass/results/parent_ref.css +2 -2
  126. data/test/sass/results/script.css +3 -3
  127. data/test/sass/results/scss_import.css +1 -1
  128. data/test/sass/script_conversion_test.rb +7 -36
  129. data/test/sass/script_test.rb +53 -485
  130. data/test/sass/scss/css_test.rb +28 -143
  131. data/test/sass/scss/rx_test.rb +4 -4
  132. data/test/sass/scss/scss_test.rb +325 -2119
  133. data/test/sass/templates/scss_import.scss +1 -2
  134. data/test/sass/test_helper.rb +1 -1
  135. data/test/sass/util/multibyte_string_scanner_test.rb +1 -1
  136. data/test/sass/util/subset_map_test.rb +2 -2
  137. data/test/sass/util_test.rb +1 -86
  138. data/test/test_helper.rb +8 -37
  139. metadata +19 -66
  140. data/lib/sass/exec/base.rb +0 -187
  141. data/lib/sass/exec/sass_convert.rb +0 -264
  142. data/lib/sass/exec/sass_scss.rb +0 -424
  143. data/lib/sass/features.rb +0 -47
  144. data/lib/sass/script/tree.rb +0 -16
  145. data/lib/sass/script/tree/funcall.rb +0 -306
  146. data/lib/sass/script/tree/interpolation.rb +0 -118
  147. data/lib/sass/script/tree/list_literal.rb +0 -77
  148. data/lib/sass/script/tree/literal.rb +0 -45
  149. data/lib/sass/script/tree/map_literal.rb +0 -64
  150. data/lib/sass/script/tree/selector.rb +0 -26
  151. data/lib/sass/script/tree/variable.rb +0 -57
  152. data/lib/sass/script/value.rb +0 -11
  153. data/lib/sass/script/value/base.rb +0 -240
  154. data/lib/sass/script/value/bool.rb +0 -35
  155. data/lib/sass/script/value/color.rb +0 -680
  156. data/lib/sass/script/value/helpers.rb +0 -262
  157. data/lib/sass/script/value/list.rb +0 -113
  158. data/lib/sass/script/value/map.rb +0 -70
  159. data/lib/sass/script/value/string.rb +0 -97
  160. data/lib/sass/selector/pseudo.rb +0 -256
  161. data/lib/sass/source/map.rb +0 -210
  162. data/lib/sass/source/position.rb +0 -39
  163. data/lib/sass/source/range.rb +0 -41
  164. data/lib/sass/stack.rb +0 -120
  165. data/lib/sass/tree/at_root_node.rb +0 -83
  166. data/lib/sass/tree/error_node.rb +0 -18
  167. data/lib/sass/tree/keyframe_rule_node.rb +0 -15
  168. data/lib/sass/util/cross_platform_random.rb +0 -19
  169. data/lib/sass/util/normalized_map.rb +0 -130
  170. data/lib/sass/util/ordered_hash.rb +0 -192
  171. data/test/sass/compiler_test.rb +0 -232
  172. data/test/sass/encoding_test.rb +0 -219
  173. data/test/sass/source_map_test.rb +0 -977
  174. data/test/sass/superselector_test.rb +0 -191
  175. data/test/sass/util/normalized_map_test.rb +0 -51
  176. data/test/sass/value_helpers_test.rb +0 -179
@@ -1,6 +1,6 @@
1
1
  #main {
2
2
  width: 15em;
3
- color: #0000ff;
3
+ color: blue;
4
4
  }
5
5
  #main p {
6
6
  border-style: dotted;
@@ -26,6 +26,6 @@ body { font: Arial; background: blue; }
26
26
  #content.user.show #container.top #column.right { width: 600px; }
27
27
  #content.user.show #container.bottom { background: brown; }
28
28
 
29
- #foo { background-color: #baf; }
29
+ #foo { background-color: #bbaaff; }
30
30
 
31
31
  nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
@@ -1,5 +1,5 @@
1
- @charset "UTF-8";
1
+ @charset "IBM866";
2
2
  @import url(foo.css);
3
3
  .foo { a: b; }
4
4
 
5
- .bar { a: щ; }
5
+ .bar { a: �; }
@@ -1,12 +1,12 @@
1
1
  #main {
2
2
  width: 15em;
3
- color: #0000ff;
3
+ color: blue;
4
4
  }
5
5
  #main p {
6
6
  border-top-width: 2px;
7
- border-top-color: #fc0;
7
+ border-top-color: #ffcc00;
8
8
  border-left-width: 1px;
9
- border-left-color: #000;
9
+ border-left-color: black;
10
10
  -moz-border-radius: 10px;
11
11
  border-style: dotted;
12
12
  border-width: 2px;
@@ -17,9 +17,9 @@
17
17
 
18
18
  #left {
19
19
  border-top-width: 2px;
20
- border-top-color: #fc0;
20
+ border-top-color: #ffcc00;
21
21
  border-left-width: 1px;
22
- border-left-color: #000;
22
+ border-left-color: black;
23
23
  -moz-border-radius: 10px;
24
24
  font-size: 2em;
25
25
  font-weight: bold;
@@ -28,25 +28,25 @@
28
28
 
29
29
  #right {
30
30
  border-top-width: 2px;
31
- border-top-color: #fc0;
31
+ border-top-color: #ffcc00;
32
32
  border-left-width: 1px;
33
- border-left-color: #000;
33
+ border-left-color: black;
34
34
  -moz-border-radius: 10px;
35
- color: #f00;
35
+ color: red;
36
36
  font-size: 20px;
37
37
  float: right;
38
38
  }
39
39
 
40
40
  .bordered {
41
41
  border-top-width: 2px;
42
- border-top-color: #fc0;
42
+ border-top-color: #ffcc00;
43
43
  border-left-width: 1px;
44
- border-left-color: #000;
44
+ border-left-color: black;
45
45
  -moz-border-radius: 10px;
46
46
  }
47
47
 
48
48
  .complex {
49
- color: #f00;
49
+ color: red;
50
50
  font-size: 20px;
51
51
  text-decoration: none;
52
52
  }
@@ -59,12 +59,12 @@
59
59
  }
60
60
  * html .complex {
61
61
  height: 1px;
62
- color: #f00;
62
+ color: red;
63
63
  font-size: 20px;
64
64
  }
65
65
 
66
66
  .more-complex {
67
- color: #f00;
67
+ color: red;
68
68
  font-size: 20px;
69
69
  text-decoration: none;
70
70
  display: inline;
@@ -80,16 +80,16 @@
80
80
  }
81
81
  * html .more-complex {
82
82
  height: 1px;
83
- color: #f00;
83
+ color: red;
84
84
  font-size: 20px;
85
85
  }
86
86
  .more-complex a:hover {
87
87
  text-decoration: underline;
88
- color: #f00;
88
+ color: red;
89
89
  font-size: 20px;
90
90
  border-top-width: 2px;
91
- border-top-color: #fc0;
91
+ border-top-color: #ffcc00;
92
92
  border-left-width: 1px;
93
- border-left-color: #000;
93
+ border-left-color: black;
94
94
  -moz-border-radius: 10px;
95
95
  }
@@ -1,6 +1,6 @@
1
1
  #main {
2
2
  width: 15em;
3
- color: #0000ff; }
3
+ color: blue; }
4
4
  #main p {
5
5
  border-style: dotted;
6
6
  /* Nested comment
@@ -1,5 +1,5 @@
1
- a { color: #000; }
2
- a:hover { color: #f00; }
1
+ a { color: black; }
2
+ a:hover { color: red; }
3
3
 
4
4
  p, div { width: 100em; }
5
5
  p foo, div foo { width: 10em; }
@@ -1,7 +1,7 @@
1
- #main { content: Hello\!; qstr: 'Quo"ted"!'; hstr: Hyph-en\!; width: 30em; background-color: #000; color: #ffa; short-color: #123; named-color: olive; con: "foo" bar 9 hi there "boom"; con2: "noquo" quo; }
2
- #main #sidebar { background-color: #00ff98; num-normal: 10; num-dec: 10.2; num-dec0: 99; num-neg: -10; esc: 10\+12; many: 6; order: 7; complex: #4c9db1hi16; }
1
+ #main { content: Hello\!; qstr: 'Quo"ted"!'; hstr: Hyph-en\!; width: 30em; background-color: black; color: #ffffaa; short-color: #112233; named-color: olive; con: "foo" bar 9 hi there "boom"; con2: "noquo" quo; }
2
+ #main #sidebar { background-color: #00ff98; num-normal: 10; num-dec: 10.2; num-dec0: 99; num-neg: -10; esc: 10 \+12; many: 6; order: 7; complex: #4c9db1hi16; }
3
3
 
4
- #plus { num-num: 7; num-num-un: 25em; num-num-un2: 23em; num-num-neg: 9.87; num-str: 100px; num-col: #b7b7b7; num-perc: 31%; str-str: "hi there"; str-str2: "hi there"; str-col: "14em solid #123"; str-num: "times: 13"; col-num: #ff7b9d; col-col: #5173ff; }
4
+ #plus { num-num: 7; num-num-un: 25em; num-num-un2: 23em; num-num-neg: 9.87; num-str: 100px; num-col: #b7b7b7; num-perc: 31%; str-str: "hi\ there"; str-str2: "hi there"; str-col: "14em solid #112233"; str-num: "times: 13"; col-num: #ff7b9d; col-col: #5173ff; }
5
5
 
6
6
  #minus { num-num: 900; col-num: #f9f9f4; col-col: #000035; unary-num: -1; unary-const: 10; unary-paren: -11; unary-two: 12; unary-many: 12; unary-crazy: -15; }
7
7
 
@@ -26,6 +26,6 @@ body { font: Arial; background: blue; }
26
26
  #content.user.show #container.top #column.right { width: 600px; }
27
27
  #content.user.show #container.bottom { background: brown; }
28
28
 
29
- #foo { background-color: #baf; }
29
+ #foo { background-color: #bbaaff; }
30
30
 
31
31
  nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
@@ -3,7 +3,7 @@
3
3
  require File.dirname(__FILE__) + '/../test_helper'
4
4
  require 'sass/engine'
5
5
 
6
- class SassScriptConversionTest < MiniTest::Test
6
+ class SassScriptConversionTest < Test::Unit::TestCase
7
7
  def test_bool
8
8
  assert_renders "true"
9
9
  assert_renders "false"
@@ -13,8 +13,9 @@ class SassScriptConversionTest < MiniTest::Test
13
13
  assert_renders "#abcdef"
14
14
  assert_renders "blue"
15
15
  assert_renders "rgba(0, 1, 2, 0.2)"
16
- assert_renders "#abc"
17
- assert_renders "#0000ff"
16
+
17
+ assert_equal "#aabbcc", render("#abc")
18
+ assert_equal "blue", render("#0000ff")
18
19
  end
19
20
 
20
21
  def test_number
@@ -57,10 +58,6 @@ class SassScriptConversionTest < MiniTest::Test
57
58
  assert_renders "foo($karg1: val, $karg2: val2)"
58
59
  end
59
60
 
60
- def test_funcall_with_hyphen_conversion_keyword_arg
61
- assert_renders "foo($a-b_c: val)"
62
- end
63
-
64
61
  def test_url
65
62
  assert_renders "url(foo.gif)"
66
63
  assert_renders "url($var)"
@@ -86,37 +83,11 @@ class SassScriptConversionTest < MiniTest::Test
86
83
  assert_renders "foo(a, b, (a, b, c)...)"
87
84
  end
88
85
 
89
- def test_singleton_list
90
- assert_renders "(1,)"
91
- assert_renders "(1 2 3,)"
92
- assert_renders "((1, 2, 3),)"
93
- end
94
-
95
- def test_map
96
- assert_renders "(foo: bar)"
97
- assert_renders "(foo: bar, baz: bip)"
98
- assert_renders "(foo: bar, baz: (bip: bap))"
99
- end
100
-
101
- def test_map_in_list
102
- assert_renders "(foo: bar) baz"
103
- assert_renders "(foo: bar), (baz: bip)"
104
- end
105
-
106
- def test_list_in_map
107
- assert_renders "(foo: bar baz)"
108
- assert_renders "(foo: (bar, baz), bip: bop)"
109
- end
110
-
111
- def test_selector
112
- assert_renders "&"
113
- end
114
-
115
86
  def self.test_precedence(outer, inner)
116
87
  op_outer = Sass::Script::Lexer::OPERATORS_REVERSE[outer]
117
88
  op_inner = Sass::Script::Lexer::OPERATORS_REVERSE[inner]
118
89
  class_eval <<RUBY
119
- def test_precedence_#{outer}_#{inner}
90
+ def test_precedence_#{outer}_#{inner}
120
91
  assert_renders "$foo #{op_outer} $bar #{op_inner} $baz"
121
92
  assert_renders "$foo #{op_inner} $bar #{op_outer} $baz"
122
93
 
@@ -135,7 +106,7 @@ RUBY
135
106
  op = separator_for(op_name)
136
107
  sibling = separator_for(sibling_name)
137
108
  class_eval <<RUBY
138
- def test_associative_#{op_name}_#{sibling_name}
109
+ def test_associative_#{op_name}_#{sibling_name}
139
110
  assert_renders "$foo#{op}$bar#{op}$baz"
140
111
 
141
112
  assert_equal "$foo#{op}$bar#{op}$baz",
@@ -163,7 +134,7 @@ RUBY
163
134
  op = Sass::Script::Lexer::OPERATORS_REVERSE[op_name]
164
135
  sibling = Sass::Script::Lexer::OPERATORS_REVERSE[sibling_name]
165
136
  class_eval <<RUBY
166
- def test_non_associative_#{op_name}_#{sibling_name}
137
+ def test_non_associative_#{op_name}_#{sibling_name}
167
138
  assert_renders "$foo #{op} $bar #{op} $baz"
168
139
 
169
140
  assert_renders "$foo #{op} ($bar #{op} $baz)"
@@ -1,12 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
3
2
  require File.dirname(__FILE__) + '/../test_helper'
4
3
  require 'sass/engine'
5
4
 
6
5
  module Sass::Script::Functions::UserFunctions
7
6
  def assert_options(val)
8
7
  val.options[:foo]
9
- Sass::Script::Value::String.new("Options defined!")
8
+ Sass::Script::String.new("Options defined!")
10
9
  end
11
10
 
12
11
  def arg_error
@@ -18,73 +17,46 @@ module Sass::Script::Functions
18
17
  include Sass::Script::Functions::UserFunctions
19
18
  end
20
19
 
21
- class SassScriptTest < MiniTest::Test
20
+ class SassScriptTest < Test::Unit::TestCase
22
21
  include Sass::Script
23
22
 
24
- def test_color_clamps_input
25
- assert_equal 0, Sass::Script::Value::Color.new([1, 2, -1]).blue
26
- assert_equal 255, Sass::Script::Value::Color.new([256, 2, 3]).red
23
+ def test_color_checks_input
24
+ assert_raise_message(ArgumentError, "Blue value -1 must be between 0 and 255") {Color.new([1, 2, -1])}
25
+ assert_raise_message(ArgumentError, "Red value 256 must be between 0 and 255") {Color.new([256, 2, 3])}
27
26
  end
28
27
 
29
- def test_color_clamps_rgba_input
30
- assert_equal 1, Sass::Script::Value::Color.new([1, 2, 3, 1.1]).alpha
31
- assert_equal 0, Sass::Script::Value::Color.new([1, 2, 3, -0.1]).alpha
28
+ def test_color_checks_rgba_input
29
+ assert_raise_message(ArgumentError, "Alpha channel 1.1 must be between 0 and 1") {Color.new([1, 2, 3, 1.1])}
30
+ assert_raise_message(ArgumentError, "Alpha channel -0.1 must be between 0 and 1") {Color.new([1, 2, 3, -0.1])}
32
31
  end
33
32
 
34
33
  def test_string_escapes
35
34
  assert_equal "'", resolve("\"'\"")
36
35
  assert_equal '"', resolve("\"\\\"\"")
37
- assert_equal "\\", resolve("\"\\\\\"")
38
- assert_equal "", resolve("\"\\2603\"")
39
- assert_equal "☃f", resolve("\"\\2603 f\"")
40
- assert_equal "☃x", resolve("\"\\2603x\"")
41
- assert_equal "\\2603", resolve("\"\\\\2603\"")
42
-
43
- # U+FFFD is the replacement character, "�".
44
- assert_equal [0xFFFD].pack("U"), resolve("\"\\0\"")
45
- assert_equal [0xFFFD].pack("U"), resolve("\"\\FFFFFF\"")
46
- assert_equal [0xFFFD].pack("U"), resolve("\"\\D800\"")
47
- assert_equal [0xD7FF].pack("U"), resolve("\"\\D7FF\"")
48
- assert_equal [0xFFFD].pack("U"), resolve("\"\\DFFF\"")
49
- assert_equal [0xE000].pack("U"), resolve("\"\\E000\"")
50
- end
51
-
52
- def test_string_escapes_are_resolved_before_operators
53
- assert_equal "true", resolve('"abc" == "\61\62\63"')
54
- end
36
+ assert_equal "\\\\", resolve("\"\\\\\"")
37
+ assert_equal "\\02fa", resolve("\"\\02fa\"")
55
38
 
56
- def test_string_quote
57
- assert_equal '"foo"', resolve_quoted('"foo"')
58
- assert_equal "'f\"oo'", resolve_quoted('"f\"oo"')
59
- assert_equal "\"f'oo\"", resolve_quoted("'f\\'oo'")
60
- assert_equal "\"f'o\\\"o\"", resolve_quoted("'f\\'o\"o'")
61
- assert_equal '"foo bar"', resolve_quoted('"foo\20 bar"')
62
- assert_equal '"foo\a bar"', resolve_quoted('"foo\a bar"')
63
- assert_equal '"x\ay"', resolve_quoted('"x\a y"')
64
- assert_equal '"\a "', resolve_quoted('"\a\20"')
65
- assert_equal '"\a abcdef"', resolve_quoted('"\a abcdef"')
66
- assert_equal '"☃abcdef"', resolve_quoted('"\2603 abcdef"')
67
- assert_equal '"\\\\"', resolve_quoted('"\\\\"')
68
- assert_equal '"foobar"', resolve_quoted("\"foo\\\nbar\"")
39
+ assert_equal "'", resolve("'\\''")
40
+ assert_equal '"', resolve("'\"'")
41
+ assert_equal "\\\\", resolve("'\\\\'")
42
+ assert_equal "\\02fa", resolve("'\\02fa'")
69
43
  end
70
44
 
71
45
  def test_color_names
72
46
  assert_equal "white", resolve("white")
73
- assert_equal "#ffffff", resolve("#ffffff")
47
+ assert_equal "white", resolve("#ffffff")
74
48
  assert_equal "#fffffe", resolve("white - #000001")
75
- assert_equal "transparent", resolve("transparent")
76
- assert_equal "transparent", resolve("rgba(0, 0, 0, 0)")
77
49
  end
78
50
 
79
51
  def test_rgba_color_literals
80
- assert_equal Sass::Script::Value::Color.new([1, 2, 3, 0.75]), eval("rgba(1, 2, 3, 0.75)")
52
+ assert_equal Sass::Script::Color.new([1, 2, 3, 0.75]), eval("rgba(1, 2, 3, 0.75)")
81
53
  assert_equal "rgba(1, 2, 3, 0.75)", resolve("rgba(1, 2, 3, 0.75)")
82
54
 
83
- assert_equal Sass::Script::Value::Color.new([1, 2, 3, 0]), eval("rgba(1, 2, 3, 0)")
55
+ assert_equal Sass::Script::Color.new([1, 2, 3, 0]), eval("rgba(1, 2, 3, 0)")
84
56
  assert_equal "rgba(1, 2, 3, 0)", resolve("rgba(1, 2, 3, 0)")
85
57
 
86
- assert_equal Sass::Script::Value::Color.new([1, 2, 3]), eval("rgba(1, 2, 3, 1)")
87
- assert_equal Sass::Script::Value::Color.new([1, 2, 3, 1]), eval("rgba(1, 2, 3, 1)")
58
+ assert_equal Sass::Script::Color.new([1, 2, 3]), eval("rgba(1, 2, 3, 1)")
59
+ assert_equal Sass::Script::Color.new([1, 2, 3, 1]), eval("rgba(1, 2, 3, 1)")
88
60
  assert_equal "#010203", resolve("rgba(1, 2, 3, 1)")
89
61
  assert_equal "white", resolve("rgba(255, 255, 255, 1)")
90
62
  end
@@ -119,11 +91,10 @@ class SassScriptTest < MiniTest::Test
119
91
  assert_equal "#123", resolve("#112233", :style => :compressed)
120
92
  assert_equal "#000", resolve("black", :style => :compressed)
121
93
  assert_equal "red", resolve("#f00", :style => :compressed)
122
- assert_equal "blue", resolve("blue", :style => :compressed)
94
+ assert_equal "blue", resolve("#00f", :style => :compressed)
123
95
  assert_equal "navy", resolve("#000080", :style => :compressed)
124
96
  assert_equal "navy #fff", resolve("#000080 white", :style => :compressed)
125
97
  assert_equal "This color is #fff", resolve('"This color is #{ white }"', :style => :compressed)
126
- assert_equal "transparent", resolve("rgba(0, 0, 0, 0)", :style => :compressed)
127
98
  end
128
99
 
129
100
  def test_compressed_comma
@@ -133,8 +104,8 @@ class SassScriptTest < MiniTest::Test
133
104
  end
134
105
 
135
106
  def test_implicit_strings
136
- assert_equal Sass::Script::Value::String.new("foo"), eval("foo")
137
- assert_equal Sass::Script::Value::String.new("foo/bar"), eval("foo/bar")
107
+ assert_equal Sass::Script::String.new("foo"), eval("foo")
108
+ assert_equal Sass::Script::String.new("foo/bar"), eval("foo/bar")
138
109
  end
139
110
 
140
111
  def test_basic_interpolation
@@ -206,11 +177,6 @@ class SassScriptTest < MiniTest::Test
206
177
  assert_equal "foo1bar5baz4bang", resolve('\'foo#{1 + "bar#{2 + 3}baz" + 4}bang\'')
207
178
  end
208
179
 
209
- def test_interpolation_with_newline
210
- assert_equal "\nbang", resolve('"#{"\a "}bang"')
211
- assert_equal "\n\nbang", resolve('"#{"\a "}\a bang"')
212
- end
213
-
214
180
  def test_rule_interpolation
215
181
  assert_equal(<<CSS, render(<<SASS))
216
182
  foo bar baz bang {
@@ -263,9 +229,9 @@ SASS
263
229
  end
264
230
 
265
231
  def test_dynamic_url
266
- assert_equal "url(foo-bar)", resolve("url($foo)", {}, env('foo' => Sass::Script::Value::String.new("foo-bar")))
267
- assert_equal "url(foo-bar baz)", resolve("url($foo $bar)", {}, env('foo' => Sass::Script::Value::String.new("foo-bar"), 'bar' => Sass::Script::Value::String.new("baz")))
268
- assert_equal "url(foo baz)", resolve("url(foo $bar)", {}, env('bar' => Sass::Script::Value::String.new("baz")))
232
+ assert_equal "url(foo-bar)", resolve("url($foo)", {}, env('foo' => Sass::Script::String.new("foo-bar")))
233
+ assert_equal "url(foo-bar baz)", resolve("url($foo $bar)", {}, env('foo' => Sass::Script::String.new("foo-bar"), 'bar' => Sass::Script::String.new("baz")))
234
+ assert_equal "url(foo baz)", resolve("url(foo $bar)", {}, env('bar' => Sass::Script::String.new("baz")))
269
235
  assert_equal "url(foo bar)", resolve("url(foo bar)")
270
236
  end
271
237
 
@@ -277,7 +243,7 @@ SASS
277
243
  end
278
244
 
279
245
  def test_hyphenated_variables
280
- assert_equal("a-b", resolve("$a-b", {}, env("a-b" => Sass::Script::Value::String.new("a-b"))))
246
+ assert_equal("a-b", resolve("$a-b", {}, env("a-b" => Sass::Script::String.new("a-b"))))
281
247
  end
282
248
 
283
249
  def test_ruby_equality
@@ -286,8 +252,8 @@ SASS
286
252
  assert_equal eval('1 2 3.0'), eval('1 2 3')
287
253
  assert_equal eval('1, 2, 3.0'), eval('1, 2, 3')
288
254
  assert_equal eval('(1 2), (3, 4), (5 6)'), eval('(1 2), (3, 4), (5 6)')
289
- refute_equal eval('1, 2, 3'), eval('1 2 3')
290
- refute_equal eval('1'), eval('"1"')
255
+ assert_not_equal eval('1, 2, 3'), eval('1 2 3')
256
+ assert_not_equal eval('1'), eval('"1"')
291
257
  end
292
258
 
293
259
  def test_booleans
@@ -347,7 +313,6 @@ SASS
347
313
  assert_equal '"foo", "bar"', resolve("'foo' , 'bar'")
348
314
  assert_equal "true, 1", resolve('true , 1')
349
315
  assert_equal "foobar", resolve('"foo" + "bar"')
350
- assert_equal "\nfoo\nxyz", resolve('"\a foo" + "\axyz"')
351
316
  assert_equal "true1", resolve('true + 1')
352
317
  assert_equal '"foo"-"bar"', resolve("'foo' - 'bar'")
353
318
  assert_equal "true-1", resolve('true - 1')
@@ -408,7 +373,7 @@ SASS
408
373
 
409
374
  def test_equals
410
375
  assert_equal("true", resolve('"foo" == $foo', {},
411
- env("foo" => Sass::Script::Value::String.new("foo"))))
376
+ env("foo" => Sass::Script::String.new("foo"))))
412
377
  assert_equal "true", resolve("1 == 1.0")
413
378
  assert_equal "true", resolve("false != true")
414
379
  assert_equal "false", resolve("1em == 1px")
@@ -433,12 +398,6 @@ SASS
433
398
  assert_equal "true", resolve('() != null')
434
399
  end
435
400
 
436
- def test_mod
437
- assert_equal "5", resolve("29 % 12")
438
- assert_equal "5px", resolve("29px % 12")
439
- assert_equal "5px", resolve("29px % 12px")
440
- end
441
-
442
401
  def test_operation_precedence
443
402
  assert_equal "false true", resolve("true and false false or true")
444
403
  assert_equal "true", resolve("false and true or true and true")
@@ -462,36 +421,6 @@ SASS
462
421
  assert_equal "true", resolve("1.1cm == 11mm")
463
422
  end
464
423
 
465
- def test_length_units
466
- assert_equal "2.54", resolve("(1in/1cm)")
467
- assert_equal "2.3622", resolve("(1cm/1pc)")
468
- assert_equal "4.23333", resolve("(1pc/1mm)")
469
- assert_equal "2.83465", resolve("(1mm/1pt)")
470
- assert_equal "1.33333", resolve("(1pt/1px)")
471
- assert_equal "0.01042", resolve("(1px/1in)")
472
- end
473
-
474
- def test_angle_units
475
- assert_equal "1.11111", resolve("(1deg/1grad)")
476
- assert_equal "0.01571", resolve("(1grad/1rad)")
477
- assert_equal "0.15915", resolve("(1rad/1turn)")
478
- assert_equal "360", resolve("(1turn/1deg)")
479
- end
480
-
481
- def test_time_units
482
- assert_equal "1000", resolve("(1s/1ms)")
483
- end
484
-
485
- def test_frequency_units
486
- assert_equal "0.001", resolve("(1Hz/1kHz)")
487
- end
488
-
489
- def test_resolution_units
490
- assert_equal "2.54", resolve("(1dpi/1dpcm)")
491
- assert_equal "37.79528", resolve("(1dpcm/1dppx)")
492
- assert_equal "0.01042", resolve("(1dppx/1dpi)")
493
- end
494
-
495
424
  def test_operations_have_options
496
425
  assert_equal "Options defined!", resolve("assert_options(1 + 1)")
497
426
  assert_equal "Options defined!", resolve("assert_options('bar' + 'baz')")
@@ -524,22 +453,22 @@ SASS
524
453
  assert_equal "0.5", resolve("$var", {}, env("var" => eval("1px/2px")))
525
454
  end
526
455
 
527
- def test_non_ident_colors_with_wrong_number_of_digits
456
+ def test_colors_with_wrong_number_of_digits
457
+ assert_raise_message(Sass::SyntaxError,
458
+ "Colors must have either three or six digits: '#0'") {eval("#0")}
528
459
  assert_raise_message(Sass::SyntaxError,
529
- 'Invalid CSS after "": expected expression (e.g. 1px, bold), was "#1"') {eval("#1")}
460
+ "Colors must have either three or six digits: '#12'") {eval("#12")}
530
461
  assert_raise_message(Sass::SyntaxError,
531
- 'Invalid CSS after "": expected expression (e.g. 1px, bold), was "#12"') {eval("#12")}
462
+ "Colors must have either three or six digits: '#abcd'") {eval("#abcd")}
532
463
  assert_raise_message(Sass::SyntaxError,
533
- 'Invalid CSS after "": expected expression (e.g. 1px, bold), was "#1234"') {eval("#1234")}
464
+ "Colors must have either three or six digits: '#abcdE'") {eval("#abcdE")}
534
465
  assert_raise_message(Sass::SyntaxError,
535
- 'Invalid CSS after "": expected expression (e.g. 1px, bold), was "#12345"') {eval("#12345")}
536
- assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "": expected expression (e.g. ' \
537
- '1px, bold), was "#1234567"') {eval("#1234567")}
466
+ "Colors must have either three or six digits: '#abcdEFA'") {eval("#abcdEFA")}
538
467
  end
539
468
 
540
469
  def test_case_insensitive_color_names
541
- assert_equal "BLUE", resolve("BLUE")
542
- assert_equal "rEd", resolve("rEd")
470
+ assert_equal "blue", resolve("BLUE")
471
+ assert_equal "red", resolve("rEd")
543
472
  assert_equal "#7f4000", resolve("mix(GrEeN, ReD)")
544
473
  end
545
474
 
@@ -560,59 +489,6 @@ SASS
560
489
  assert_equal "1 2 3", resolve("null 1 2 3")
561
490
  end
562
491
 
563
- def test_map_can_have_trailing_comma
564
- assert_equal("(foo: 1, bar: 2)", eval("(foo: 1, bar: 2,)").to_sass)
565
- end
566
-
567
- def test_list_can_have_trailing_comma
568
- assert_equal("1, 2, 3", resolve("1, 2, 3,"))
569
- end
570
-
571
- def test_trailing_comma_defines_singleton_list
572
- assert_equal("1 2 3", resolve("nth((1 2 3,), 1)"))
573
- end
574
-
575
- def test_map_cannot_have_duplicate_keys
576
- assert_raise_message(Sass::SyntaxError, 'Duplicate key "foo" in map (foo: bar, foo: baz).') do
577
- eval("(foo: bar, foo: baz)")
578
- end
579
- assert_raise_message(Sass::SyntaxError, 'Duplicate key "foo" in map (foo: bar, fo + o: baz).') do
580
- eval("(foo: bar, fo + o: baz)")
581
- end
582
- assert_raise_message(Sass::SyntaxError, 'Duplicate key "foo" in map (foo: bar, "foo": baz).') do
583
- eval("(foo: bar, 'foo': baz)")
584
- end
585
- assert_raise_message(Sass::SyntaxError, 'Duplicate key 2px in map (2px: bar, 1px + 1px: baz).') do
586
- eval("(2px: bar, 1px + 1px: baz)")
587
- end
588
- assert_raise_message(Sass::SyntaxError, 'Duplicate key #0000ff in map (blue: bar, #00f: baz).') do
589
- eval("(blue: bar, #00f: baz)")
590
- end
591
- end
592
-
593
- def test_non_duplicate_map_keys
594
- # These shouldn't throw errors
595
- eval("(foo: foo, bar: bar)")
596
- eval("(2px: foo, 2: bar)")
597
- eval("(2px: foo, 2em: bar)")
598
- eval("('2px': foo, 2px: bar)")
599
- end
600
-
601
- def test_map_syntax_errors
602
- assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(foo:": expected expression (e.g. 1px, bold), was ")"') do
603
- eval("(foo:)")
604
- end
605
- assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(": expected ")", was ":bar)"') do
606
- eval("(:bar)")
607
- end
608
- assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(foo, bar": expected ")", was ": baz)"') do
609
- eval("(foo, bar: baz)")
610
- end
611
- assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "(foo: bar, baz": expected ":", was ")"') do
612
- eval("(foo: bar, baz)")
613
- end
614
- end
615
-
616
492
  def test_deep_argument_error_not_unwrapped
617
493
  # JRuby (as of 1.6.7.2) offers no way of distinguishing between
618
494
  # argument errors caused by programming errors in a function and
@@ -620,7 +496,7 @@ SASS
620
496
  return if RUBY_PLATFORM =~ /java/
621
497
 
622
498
  # Don't validate the message; it's different on Rubinius.
623
- assert_raises(ArgumentError) {resolve("arg-error()")}
499
+ assert_raise(ArgumentError) {resolve("arg-error()")}
624
500
  end
625
501
 
626
502
  def test_shallow_argument_error_unwrapped
@@ -628,268 +504,12 @@ SASS
628
504
  end
629
505
 
630
506
  def test_boolean_ops_short_circuit
631
- assert_equal "false", resolve("$ie and $ie <= 7", {}, env('ie' => Sass::Script::Value::Bool.new(false)))
632
- assert_equal "true", resolve("$ie or $undef", {}, env('ie' => Sass::Script::Value::Bool.new(true)))
633
- end
634
-
635
- def test_selector
636
- env = Sass::Environment.new
637
- assert_equal "true", resolve("& == null", {}, env)
638
-
639
- env.selector = selector('.foo.bar .baz.bang, .bip.bop')
640
- assert_equal ".foo.bar .baz.bang, .bip.bop", resolve("&", {}, env)
641
- assert_equal ".foo.bar .baz.bang", resolve("nth(&, 1)", {}, env)
642
- assert_equal ".bip.bop", resolve("nth(&, 2)", {}, env)
643
- assert_equal ".foo.bar", resolve("nth(nth(&, 1), 1)", {}, env)
644
- assert_equal ".baz.bang", resolve("nth(nth(&, 1), 2)", {}, env)
645
- assert_equal ".bip.bop", resolve("nth(nth(&, 2), 1)", {}, env)
646
- assert_equal "string", resolve("type-of(nth(nth(&, 1), 1))", {}, env)
647
-
648
- env.selector = selector('.foo > .bar')
649
- assert_equal ".foo > .bar", resolve("&", {}, env)
650
- assert_equal ".foo > .bar", resolve("nth(&, 1)", {}, env)
651
- assert_equal ".foo", resolve("nth(nth(&, 1), 1)", {}, env)
652
- assert_equal ">", resolve("nth(nth(&, 1), 2)", {}, env)
653
- assert_equal ".bar", resolve("nth(nth(&, 1), 3)", {}, env)
654
- end
655
-
656
- def test_selector_with_newlines
657
- env = Sass::Environment.new
658
- env.selector = selector(".foo.bar\n.baz.bang,\n\n.bip.bop")
659
- assert_equal ".foo.bar .baz.bang, .bip.bop", resolve("&", {}, env)
660
- assert_equal ".foo.bar .baz.bang", resolve("nth(&, 1)", {}, env)
661
- assert_equal ".bip.bop", resolve("nth(&, 2)", {}, env)
662
- assert_equal ".foo.bar", resolve("nth(nth(&, 1), 1)", {}, env)
663
- assert_equal ".baz.bang", resolve("nth(nth(&, 1), 2)", {}, env)
664
- assert_equal ".bip.bop", resolve("nth(nth(&, 2), 1)", {}, env)
665
- assert_equal "string", resolve("type-of(nth(nth(&, 1), 1))", {}, env)
666
- end
667
-
668
- def test_setting_global_variable_globally
669
- assert_no_warning {assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))}
670
- .foo {
671
- a: 1; }
672
-
673
- .bar {
674
- b: 2; }
675
- CSS
676
- $var: 1;
677
-
678
- .foo {
679
- a: $var;
680
- }
681
-
682
- $var: 2;
683
-
684
- .bar {
685
- b: $var;
686
- }
687
- SCSS
688
- end
689
-
690
- def test_setting_global_variable_locally
691
- assert_no_warning {assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))}
692
- .bar {
693
- a: x;
694
- b: y;
695
- c: z; }
696
- CSS
697
- $var1: 1;
698
- $var3: 3;
699
-
700
- .foo {
701
- $var1: x !global;
702
- $var2: y !global;
703
- @each $var3 in _ {
704
- $var3: z !global;
705
- }
706
- }
707
-
708
- .bar {
709
- a: $var1;
710
- b: $var2;
711
- c: $var3;
712
- }
713
- SCSS
714
- end
715
-
716
- def test_setting_global_variable_locally_with_default
717
- assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))
718
- .bar {
719
- a: 1;
720
- b: y;
721
- c: z; }
722
- CSS
723
- $var1: 1;
724
-
725
- .foo {
726
- $var1: x !global !default;
727
- $var2: y !global !default;
728
- @each $var3 in _ {
729
- $var3: z !global !default;
730
- }
731
- }
732
-
733
- .bar {
734
- a: $var1;
735
- b: $var2;
736
- c: $var3;
737
- }
738
- SCSS
739
- end
740
-
741
- def test_setting_local_variable
742
- assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))
743
- .a {
744
- value: inside; }
745
-
746
- .b {
747
- value: outside; }
748
- CSS
749
- $var: outside;
750
-
751
- .a {
752
- $var: inside;
753
- value: $var;
754
- }
755
-
756
- .b {
757
- value: $var;
758
- }
759
- SCSS
760
- end
761
-
762
- def test_setting_local_variable_from_inner_scope
763
- assert_equal(<<CSS, render(<<SCSS, :syntax => :scss))
764
- .a .b {
765
- value: inside; }
766
- .a .c {
767
- value: inside; }
768
- CSS
769
- .a {
770
- $var: outside;
771
-
772
- .b {
773
- $var: inside;
774
- value: $var;
775
- }
776
-
777
- .c {
778
- value: $var;
779
- }
780
- }
781
- SCSS
782
- end
783
-
784
- def test_color_format_is_preserved_by_default
785
- assert_equal "blue", resolve("blue")
786
- assert_equal "bLuE", resolve("bLuE")
787
- assert_equal "#00f", resolve("#00f")
788
- assert_equal "blue #00F", resolve("blue #00F")
789
- assert_equal "blue", resolve("nth(blue #00F, 1)")
790
- assert_equal "#00F", resolve("nth(blue #00F, 2)")
791
- end
792
-
793
- def test_color_format_isnt_always_preserved_in_compressed_style
794
- assert_equal "red", resolve("red", :style => :compressed)
795
- assert_equal "red", resolve("#f00", :style => :compressed)
796
- assert_equal "red red", resolve("red #f00", :style => :compressed)
797
- assert_equal "red", resolve("nth(red #f00, 2)", :style => :compressed)
798
- end
799
-
800
- def test_color_format_is_sometimes_preserved_in_compressed_style
801
- assert_equal "ReD", resolve("ReD", :style => :compressed)
802
- assert_equal "blue", resolve("blue", :style => :compressed)
803
- assert_equal "#00f", resolve("#00f", :style => :compressed)
804
- end
805
-
806
- def test_color_format_isnt_preserved_when_modified
807
- assert_equal "magenta", resolve("#f00 + #00f")
808
- end
809
-
810
- def test_ids
811
- assert_equal "#foo", resolve("#foo")
812
- assert_equal "#abcd", resolve("#abcd")
813
- assert_equal "#abc-def", resolve("#abc-def")
814
- assert_equal "#abc_def", resolve("#abc_def")
815
- assert_equal "#uvw-xyz", resolve("#uvw-xyz")
816
- assert_equal "#uvw_xyz", resolve("#uvw_xyz")
817
- assert_equal "#uvwxyz", resolve("#uvw + xyz")
818
- end
819
-
820
- def test_scientific_notation
821
- assert_equal "2000", resolve("2e3")
822
- assert_equal "2000", resolve("2E3")
823
- assert_equal "2000", resolve("2e+3")
824
- assert_equal "2000em", resolve("2e3em")
825
- assert_equal "25000000000", resolve("2.5e10")
826
- assert_equal "0.1234", resolve("1234e-4")
827
- assert_equal "12.34", resolve("1.234e1")
828
- end
829
-
830
- def test_identifier_units
831
- assert_equal "5-foo", resolve("2-foo + 3-foo")
832
- assert_equal "5-foo-", resolve("2-foo- + 3-foo-")
833
- assert_equal "5-\\u2603", resolve("2-\\u2603 + 3-\\u2603")
834
- end
835
-
836
- def test_backslash_newline_in_string
837
- assert_equal 'foobar', resolve("\"foo\\\nbar\"")
838
- assert_equal 'foobar', resolve("'foo\\\nbar'")
839
- end
840
-
841
- def test_unclosed_special_fun
842
- assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "calc(foo()": expected ")", was ""') do
843
- resolve("calc(foo()")
844
- end
845
- assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "calc(#{\')\'}": expected ")", was ""') do
846
- resolve("calc(\#{')'}")
847
- end
848
- assert_raise_message(Sass::SyntaxError, 'Invalid CSS after "calc(#{foo": expected "}", was ""') do
849
- resolve("calc(\#{foo")
850
- end
851
- end
852
-
853
- def test_special_fun_with_interpolation
854
- assert_equal "calc())", resolve("calc(\#{')'})")
855
- assert_equal "calc(# {foo})", resolve("calc(# {foo})")
507
+ assert_equal "false", resolve("$ie and $ie <= 7", {}, env('ie' => Sass::Script::Bool.new(false)))
508
+ assert_equal "true", resolve("$ie or $undef", {}, env('ie' => Sass::Script::Bool.new(true)))
856
509
  end
857
510
 
858
511
  # Regression Tests
859
512
 
860
- def test_repeatedly_modified_color
861
- assert_equal(<<CSS, render(<<SASS))
862
- a {
863
- link-color: #161C14;
864
- link-color-hover: black;
865
- link-color-tap: rgba(22, 28, 20, 0.3); }
866
- CSS
867
- $green: #161C14
868
- $link-color: $green
869
- $link-color-hover: darken($link-color, 10%)
870
- $link-color-tap: rgba($green, 0.3)
871
-
872
- a
873
- link-color: $link-color
874
- link-color-hover: $link-color-hover
875
- link-color-tap: $link-color-tap
876
- SASS
877
- end
878
-
879
- def test_inspect_divided_numbers
880
- assert_equal "1px/2px", resolve("inspect(1px/2px)")
881
- assert_equal "0.5", resolve("inspect((1px/2px))")
882
- end
883
-
884
- def test_minus_without_whitespace
885
- assert_equal "5px", resolve("15px-10px")
886
- assert_equal "5px-", resolve("15px--10px-")
887
- end
888
-
889
- def test_minus_preceded_by_comment
890
- assert_equal "15px -10px", resolve("15px/**/-10px")
891
- end
892
-
893
513
  def test_user_defined_function_forces_division
894
514
  assert_equal(<<CSS, render(<<SASS))
895
515
  a {
@@ -928,17 +548,6 @@ end
928
548
  assert_equal "teal\\+bang(12)", resolve("teal\\+bang(12)")
929
549
  end
930
550
 
931
- def test_and_or_not_disallowed_as_function_names
932
- %w[and or not].each do |name|
933
- assert_raise_message(Sass::SyntaxError, "Invalid function name \"#{name}\".") do
934
- render(<<SASS)
935
- @function #{name}()
936
- @return null
937
- SASS
938
- end
939
- end
940
- end
941
-
942
551
  def test_interpolation_after_hash
943
552
  assert_equal "#2", resolve('"##{1 + 1}"')
944
553
  end
@@ -960,67 +569,26 @@ SASS
960
569
  assert_equal "and-bang", resolve("and-bang")
961
570
  end
962
571
 
963
- def test_number_initialization
964
- assert_equal Sass::Script::Value::Number.new(10, ["px"]), Sass::Script::Value::Number.new(10, "px")
965
- assert_equal Sass::Script::Value::Number.new(10, ["px"], ["em"]), Sass::Script::Value::Number.new(10, "px", "em")
966
- end
967
-
968
- def test_is_unit
969
- assert Sass::Script::Value::Number.new(10, "px").is_unit?("px")
970
- assert Sass::Script::Value::Number.new(10).is_unit?(nil)
971
- assert !Sass::Script::Value::Number.new(10, "px", "em").is_unit?("px")
972
- assert !Sass::Script::Value::Number.new(10, [], "em").is_unit?("em")
973
- assert !Sass::Script::Value::Number.new(10, ["px", "em"]).is_unit?("px")
974
- end
975
-
976
- def test_rename_redirect
977
- assert_no_warning do
978
- assert_equal Sass::Script::Value::Base, Sass::Script::Literal
979
- assert_equal Sass::Script::Tree::Node, Sass::Script::Node
980
- assert_equal Sass::Script::Tree::Operation, Sass::Script::Operation
981
- assert_equal Sass::Script::Value::String, Sass::Script::String
982
- end
983
- end
984
-
985
- def test_number_printing
986
- assert_equal "1", resolve("1")
987
- assert_equal "1", resolve("1.0")
988
- assert_equal "1000000000", resolve("1000000000")
989
- assert_equal "0.00001", resolve("0.00001")
990
- assert_equal "1.12121", resolve("1.121214")
991
- assert_equal "1.12122", resolve("1.121215")
992
- assert_equal "Infinity", resolve("(1.0/0.0)")
993
- assert_equal "-Infinity", resolve("(-1.0/0.0)")
994
- assert_equal "NaN", resolve("(0.0/0.0)")
995
- end
996
-
997
572
  private
998
573
 
999
574
  def resolve(str, opts = {}, environment = env)
1000
575
  munge_filename opts
1001
576
  val = eval(str, opts, environment)
1002
- assert_kind_of Sass::Script::Value::Base, val
1003
- val.is_a?(Sass::Script::Value::String) ? val.value : val.to_s
1004
- end
1005
-
1006
- def resolve_quoted(str, opts = {}, environment = env)
1007
- munge_filename opts
1008
- val = eval(str, opts, environment)
1009
- assert_kind_of Sass::Script::Value::Base, val
1010
- val.to_s
577
+ assert_kind_of Sass::Script::Literal, val
578
+ val.is_a?(Sass::Script::String) ? val.value : val.to_s
1011
579
  end
1012
580
 
1013
581
  def assert_unquoted(str, opts = {}, environment = env)
1014
582
  munge_filename opts
1015
583
  val = eval(str, opts, environment)
1016
- assert_kind_of Sass::Script::Value::String, val
584
+ assert_kind_of Sass::Script::String, val
1017
585
  assert_equal :identifier, val.type
1018
586
  end
1019
587
 
1020
588
  def assert_quoted(str, opts = {}, environment = env)
1021
589
  munge_filename opts
1022
590
  val = eval(str, opts, environment)
1023
- assert_kind_of Sass::Script::Value::String, val
591
+ assert_kind_of Sass::Script::String, val
1024
592
  assert_equal :string, val.type
1025
593
  end
1026
594
 
@@ -1042,13 +610,13 @@ SASS
1042
610
  env
1043
611
  end
1044
612
 
1045
- def selector(str)
1046
- parser = Sass::SCSS::StaticParser.new(
1047
- str, filename_for_test, Sass::Importers::Filesystem.new('.'))
1048
- parser.parse_selector
1049
- end
1050
-
1051
- def test_null_is_a_singleton
1052
- assert_same Sass::Script::Value::Null.new, Sass::Script::Value::Null.new
613
+ def test_number_printing
614
+ assert_equal "1", eval("1")
615
+ assert_equal "1", eval("1.0")
616
+ assert_equal "1.121", eval("1.1214")
617
+ assert_equal "1.122", eval("1.1215")
618
+ assert_equal "Infinity", eval("1.0/0.0")
619
+ assert_equal "-Infinity", eval("-1.0/0.0")
620
+ assert_equal "NaN", eval("0.0/0.0")
1053
621
  end
1054
622
  end