oreorenasass 3.4.4 → 3.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +50 -70
  4. data/Rakefile +5 -26
  5. data/VERSION +1 -1
  6. data/VERSION_NAME +1 -1
  7. data/bin/sass +1 -1
  8. data/bin/scss +1 -1
  9. data/lib/sass.rb +12 -19
  10. data/lib/sass/cache_stores/base.rb +2 -2
  11. data/lib/sass/cache_stores/chain.rb +1 -2
  12. data/lib/sass/cache_stores/filesystem.rb +5 -1
  13. data/lib/sass/cache_stores/memory.rb +1 -1
  14. data/lib/sass/cache_stores/null.rb +2 -2
  15. data/lib/sass/callbacks.rb +0 -1
  16. data/lib/sass/css.rb +13 -11
  17. data/lib/sass/engine.rb +173 -424
  18. data/lib/sass/environment.rb +58 -148
  19. data/lib/sass/error.rb +14 -11
  20. data/lib/sass/exec.rb +703 -5
  21. data/lib/sass/importers/base.rb +6 -49
  22. data/lib/sass/importers/filesystem.rb +19 -44
  23. data/lib/sass/logger.rb +4 -1
  24. data/lib/sass/logger/base.rb +4 -2
  25. data/lib/sass/logger/log_level.rb +7 -3
  26. data/lib/sass/media.rb +23 -20
  27. data/lib/sass/plugin.rb +7 -7
  28. data/lib/sass/plugin/compiler.rb +145 -304
  29. data/lib/sass/plugin/configuration.rb +23 -18
  30. data/lib/sass/plugin/merb.rb +1 -1
  31. data/lib/sass/plugin/staleness_checker.rb +3 -3
  32. data/lib/sass/repl.rb +3 -3
  33. data/lib/sass/script.rb +8 -35
  34. data/lib/sass/script/{value/arg_list.rb → arg_list.rb} +25 -9
  35. data/lib/sass/script/bool.rb +18 -0
  36. data/lib/sass/script/color.rb +606 -0
  37. data/lib/sass/script/css_lexer.rb +4 -8
  38. data/lib/sass/script/css_parser.rb +2 -5
  39. data/lib/sass/script/funcall.rb +245 -0
  40. data/lib/sass/script/functions.rb +408 -1491
  41. data/lib/sass/script/interpolation.rb +79 -0
  42. data/lib/sass/script/lexer.rb +68 -172
  43. data/lib/sass/script/list.rb +85 -0
  44. data/lib/sass/script/literal.rb +221 -0
  45. data/lib/sass/script/{tree/node.rb → node.rb} +12 -22
  46. data/lib/sass/script/{value/null.rb → null.rb} +7 -14
  47. data/lib/sass/script/{value/number.rb → number.rb} +75 -152
  48. data/lib/sass/script/{tree/operation.rb → operation.rb} +24 -17
  49. data/lib/sass/script/parser.rb +110 -245
  50. data/lib/sass/script/string.rb +51 -0
  51. data/lib/sass/script/{tree/string_interpolation.rb → string_interpolation.rb} +4 -5
  52. data/lib/sass/script/{tree/unary_operation.rb → unary_operation.rb} +6 -6
  53. data/lib/sass/script/variable.rb +58 -0
  54. data/lib/sass/scss/css_parser.rb +3 -9
  55. data/lib/sass/scss/parser.rb +421 -450
  56. data/lib/sass/scss/rx.rb +11 -19
  57. data/lib/sass/scss/static_parser.rb +7 -321
  58. data/lib/sass/selector.rb +194 -68
  59. data/lib/sass/selector/abstract_sequence.rb +14 -29
  60. data/lib/sass/selector/comma_sequence.rb +25 -108
  61. data/lib/sass/selector/sequence.rb +66 -159
  62. data/lib/sass/selector/simple.rb +25 -23
  63. data/lib/sass/selector/simple_sequence.rb +63 -173
  64. data/lib/sass/shared.rb +1 -1
  65. data/lib/sass/supports.rb +15 -13
  66. data/lib/sass/tree/charset_node.rb +1 -1
  67. data/lib/sass/tree/comment_node.rb +3 -3
  68. data/lib/sass/tree/css_import_node.rb +11 -11
  69. data/lib/sass/tree/debug_node.rb +2 -2
  70. data/lib/sass/tree/directive_node.rb +4 -21
  71. data/lib/sass/tree/each_node.rb +8 -8
  72. data/lib/sass/tree/extend_node.rb +7 -14
  73. data/lib/sass/tree/for_node.rb +4 -4
  74. data/lib/sass/tree/function_node.rb +4 -9
  75. data/lib/sass/tree/if_node.rb +1 -1
  76. data/lib/sass/tree/import_node.rb +5 -4
  77. data/lib/sass/tree/media_node.rb +14 -4
  78. data/lib/sass/tree/mixin_def_node.rb +4 -4
  79. data/lib/sass/tree/mixin_node.rb +8 -21
  80. data/lib/sass/tree/node.rb +12 -54
  81. data/lib/sass/tree/prop_node.rb +20 -39
  82. data/lib/sass/tree/return_node.rb +2 -3
  83. data/lib/sass/tree/root_node.rb +3 -19
  84. data/lib/sass/tree/rule_node.rb +22 -35
  85. data/lib/sass/tree/supports_node.rb +13 -0
  86. data/lib/sass/tree/trace_node.rb +1 -2
  87. data/lib/sass/tree/variable_node.rb +3 -9
  88. data/lib/sass/tree/visitors/base.rb +8 -5
  89. data/lib/sass/tree/visitors/check_nesting.rb +19 -49
  90. data/lib/sass/tree/visitors/convert.rb +56 -74
  91. data/lib/sass/tree/visitors/cssize.rb +74 -202
  92. data/lib/sass/tree/visitors/deep_copy.rb +5 -10
  93. data/lib/sass/tree/visitors/extend.rb +7 -7
  94. data/lib/sass/tree/visitors/perform.rb +185 -278
  95. data/lib/sass/tree/visitors/set_options.rb +6 -20
  96. data/lib/sass/tree/visitors/to_css.rb +81 -234
  97. data/lib/sass/tree/warn_node.rb +2 -2
  98. data/lib/sass/tree/while_node.rb +2 -2
  99. data/lib/sass/util.rb +152 -522
  100. data/lib/sass/util/multibyte_string_scanner.rb +0 -2
  101. data/lib/sass/util/subset_map.rb +3 -4
  102. data/lib/sass/util/test.rb +1 -0
  103. data/lib/sass/version.rb +22 -20
  104. data/test/Gemfile +3 -0
  105. data/test/Gemfile.lock +10 -0
  106. data/test/sass/cache_test.rb +20 -62
  107. data/test/sass/callbacks_test.rb +1 -1
  108. data/test/sass/conversion_test.rb +2 -296
  109. data/test/sass/css2sass_test.rb +4 -23
  110. data/test/sass/engine_test.rb +354 -411
  111. data/test/sass/exec_test.rb +2 -2
  112. data/test/sass/extend_test.rb +145 -324
  113. data/test/sass/functions_test.rb +86 -873
  114. data/test/sass/importer_test.rb +21 -241
  115. data/test/sass/logger_test.rb +1 -1
  116. data/test/sass/more_results/more_import.css +1 -1
  117. data/test/sass/plugin_test.rb +26 -16
  118. data/test/sass/results/compact.css +1 -1
  119. data/test/sass/results/complex.css +4 -4
  120. data/test/sass/results/expanded.css +1 -1
  121. data/test/sass/results/import.css +1 -1
  122. data/test/sass/results/import_charset_ibm866.css +2 -2
  123. data/test/sass/results/mixins.css +17 -17
  124. data/test/sass/results/nested.css +1 -1
  125. data/test/sass/results/parent_ref.css +2 -2
  126. data/test/sass/results/script.css +3 -3
  127. data/test/sass/results/scss_import.css +1 -1
  128. data/test/sass/script_conversion_test.rb +7 -36
  129. data/test/sass/script_test.rb +53 -485
  130. data/test/sass/scss/css_test.rb +28 -143
  131. data/test/sass/scss/rx_test.rb +4 -4
  132. data/test/sass/scss/scss_test.rb +325 -2119
  133. data/test/sass/templates/scss_import.scss +1 -2
  134. data/test/sass/test_helper.rb +1 -1
  135. data/test/sass/util/multibyte_string_scanner_test.rb +1 -1
  136. data/test/sass/util/subset_map_test.rb +2 -2
  137. data/test/sass/util_test.rb +1 -86
  138. data/test/test_helper.rb +8 -37
  139. metadata +19 -66
  140. data/lib/sass/exec/base.rb +0 -187
  141. data/lib/sass/exec/sass_convert.rb +0 -264
  142. data/lib/sass/exec/sass_scss.rb +0 -424
  143. data/lib/sass/features.rb +0 -47
  144. data/lib/sass/script/tree.rb +0 -16
  145. data/lib/sass/script/tree/funcall.rb +0 -306
  146. data/lib/sass/script/tree/interpolation.rb +0 -118
  147. data/lib/sass/script/tree/list_literal.rb +0 -77
  148. data/lib/sass/script/tree/literal.rb +0 -45
  149. data/lib/sass/script/tree/map_literal.rb +0 -64
  150. data/lib/sass/script/tree/selector.rb +0 -26
  151. data/lib/sass/script/tree/variable.rb +0 -57
  152. data/lib/sass/script/value.rb +0 -11
  153. data/lib/sass/script/value/base.rb +0 -240
  154. data/lib/sass/script/value/bool.rb +0 -35
  155. data/lib/sass/script/value/color.rb +0 -680
  156. data/lib/sass/script/value/helpers.rb +0 -262
  157. data/lib/sass/script/value/list.rb +0 -113
  158. data/lib/sass/script/value/map.rb +0 -70
  159. data/lib/sass/script/value/string.rb +0 -97
  160. data/lib/sass/selector/pseudo.rb +0 -256
  161. data/lib/sass/source/map.rb +0 -210
  162. data/lib/sass/source/position.rb +0 -39
  163. data/lib/sass/source/range.rb +0 -41
  164. data/lib/sass/stack.rb +0 -120
  165. data/lib/sass/tree/at_root_node.rb +0 -83
  166. data/lib/sass/tree/error_node.rb +0 -18
  167. data/lib/sass/tree/keyframe_rule_node.rb +0 -15
  168. data/lib/sass/util/cross_platform_random.rb +0 -19
  169. data/lib/sass/util/normalized_map.rb +0 -130
  170. data/lib/sass/util/ordered_hash.rb +0 -192
  171. data/test/sass/compiler_test.rb +0 -232
  172. data/test/sass/encoding_test.rb +0 -219
  173. data/test/sass/source_map_test.rb +0 -977
  174. data/test/sass/superselector_test.rb +0 -191
  175. data/test/sass/util/normalized_map_test.rb +0 -51
  176. data/test/sass/value_helpers_test.rb +0 -179
@@ -1,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