sass 3.3.0.rc.1 → 3.3.0.rc.2

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 (78) hide show
  1. data/Rakefile +1 -1
  2. data/VERSION +1 -1
  3. data/VERSION_DATE +1 -1
  4. data/lib/sass.rb +5 -0
  5. data/lib/sass/engine.rb +3 -5
  6. data/lib/sass/plugin.rb +0 -1
  7. data/lib/sass/plugin/compiler.rb +1 -2
  8. data/lib/sass/script/functions.rb +16 -2
  9. data/lib/sass/script/lexer.rb +22 -12
  10. data/lib/sass/script/parser.rb +27 -14
  11. data/lib/sass/script/tree/variable.rb +1 -1
  12. data/lib/sass/script/value/base.rb +1 -1
  13. data/lib/sass/script/value/color.rb +29 -17
  14. data/lib/sass/script/value/list.rb +1 -1
  15. data/lib/sass/script/value/number.rb +8 -1
  16. data/lib/sass/scss/parser.rb +2 -2
  17. data/lib/sass/selector/sequence.rb +18 -19
  18. data/lib/sass/selector/simple_sequence.rb +5 -5
  19. data/lib/sass/source/map.rb +1 -1
  20. data/lib/sass/tree/node.rb +25 -0
  21. data/lib/sass/tree/variable_node.rb +5 -0
  22. data/lib/sass/tree/visitors/base.rb +4 -7
  23. data/lib/sass/tree/visitors/check_nesting.rb +2 -2
  24. data/lib/sass/tree/visitors/perform.rb +12 -7
  25. data/lib/sass/util.rb +95 -50
  26. data/lib/sass/util/normalized_map.rb +63 -14
  27. data/lib/sass/util/ordered_hash.rb +9 -5
  28. data/lib/sass/version.rb +10 -12
  29. data/test/sass/engine_test.rb +37 -0
  30. data/test/sass/functions_test.rb +9 -2
  31. data/test/sass/importer_test.rb +3 -3
  32. data/test/sass/script_test.rb +12 -10
  33. data/test/sass/source_map_test.rb +8 -8
  34. data/test/sass/util/normalized_map_test.rb +22 -1
  35. data/test/sass/util_test.rb +18 -0
  36. data/test/test_helper.rb +16 -0
  37. data/vendor/listen/CHANGELOG.md +228 -0
  38. data/vendor/listen/CONTRIBUTING.md +38 -0
  39. data/vendor/listen/Gemfile +30 -0
  40. data/vendor/listen/Guardfile +8 -0
  41. data/vendor/listen/LICENSE +20 -0
  42. data/vendor/listen/README.md +315 -0
  43. data/vendor/listen/Rakefile +47 -0
  44. data/vendor/listen/Vagrantfile +96 -0
  45. data/vendor/listen/lib/listen.rb +40 -0
  46. data/vendor/listen/lib/listen/adapter.rb +214 -0
  47. data/vendor/listen/lib/listen/adapters/bsd.rb +112 -0
  48. data/vendor/listen/lib/listen/adapters/darwin.rb +85 -0
  49. data/vendor/listen/lib/listen/adapters/linux.rb +113 -0
  50. data/vendor/listen/lib/listen/adapters/polling.rb +67 -0
  51. data/vendor/listen/lib/listen/adapters/windows.rb +87 -0
  52. data/vendor/listen/lib/listen/dependency_manager.rb +126 -0
  53. data/vendor/listen/lib/listen/directory_record.rb +371 -0
  54. data/vendor/listen/lib/listen/listener.rb +225 -0
  55. data/vendor/listen/lib/listen/multi_listener.rb +143 -0
  56. data/vendor/listen/lib/listen/turnstile.rb +28 -0
  57. data/vendor/listen/lib/listen/version.rb +3 -0
  58. data/vendor/listen/listen.gemspec +22 -0
  59. data/vendor/listen/spec/listen/adapter_spec.rb +183 -0
  60. data/vendor/listen/spec/listen/adapters/bsd_spec.rb +36 -0
  61. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +37 -0
  62. data/vendor/listen/spec/listen/adapters/linux_spec.rb +47 -0
  63. data/vendor/listen/spec/listen/adapters/polling_spec.rb +68 -0
  64. data/vendor/listen/spec/listen/adapters/windows_spec.rb +30 -0
  65. data/vendor/listen/spec/listen/dependency_manager_spec.rb +107 -0
  66. data/vendor/listen/spec/listen/directory_record_spec.rb +1225 -0
  67. data/vendor/listen/spec/listen/listener_spec.rb +169 -0
  68. data/vendor/listen/spec/listen/multi_listener_spec.rb +174 -0
  69. data/vendor/listen/spec/listen/turnstile_spec.rb +56 -0
  70. data/vendor/listen/spec/listen_spec.rb +73 -0
  71. data/vendor/listen/spec/spec_helper.rb +21 -0
  72. data/vendor/listen/spec/support/adapter_helper.rb +629 -0
  73. data/vendor/listen/spec/support/directory_record_helper.rb +55 -0
  74. data/vendor/listen/spec/support/fixtures_helper.rb +29 -0
  75. data/vendor/listen/spec/support/listeners_helper.rb +156 -0
  76. data/vendor/listen/spec/support/platform_helper.rb +15 -0
  77. metadata +318 -300
  78. data/test/Gemfile.lock +0 -10
@@ -7,14 +7,11 @@ module Sass
7
7
  # to the original keys that were stored. If several different values normalize
8
8
  # to the same value, whichever is stored last wins.
9
9
  require 'sass/util/ordered_hash' if ruby1_8?
10
- class NormalizedMap < DelegateClass(ruby1_8? ? OrderedHash : Hash)
10
+ class NormalizedMap
11
11
  # Create a normalized map
12
12
  def initialize
13
13
  @key_strings = {}
14
14
  @map = Util.ruby1_8? ? OrderedHash.new : {}
15
-
16
- # We delegate all hash methods that are not overridden here to @map.
17
- super(@map)
18
15
  end
19
16
 
20
17
  # Specifies how to transform the key.
@@ -27,25 +24,26 @@ module Sass
27
24
  # @private
28
25
  def []=(k, v)
29
26
  normalized = normalize(k)
30
- super(normalized, v)
27
+ @map[normalized] = v
31
28
  @key_strings[normalized] = k
29
+ v
32
30
  end
33
31
 
34
32
  # @private
35
33
  def [](k)
36
- super(normalize(k))
34
+ @map[normalize(k)]
37
35
  end
38
36
 
39
37
  # @private
40
38
  def has_key?(k)
41
- super(normalize(k))
39
+ @map.has_key?(normalize(k))
42
40
  end
43
41
 
44
42
  # @private
45
43
  def delete(k)
46
44
  normalized = normalize(k)
47
45
  @key_strings.delete(normalized)
48
- super(normalized)
46
+ @map.delete(normalized)
49
47
  end
50
48
 
51
49
  # @return [Hash] Hash with the keys as they were stored (before normalization).
@@ -53,12 +51,63 @@ module Sass
53
51
  Sass::Util.map_keys(@map) {|k| @key_strings[k]}
54
52
  end
55
53
 
56
- # this is magically invoked by ruby, not sure why DelegateClass doesn't take care of it.
57
- # @private
58
- def initialize_dup(other)
59
- super
60
- @map = other.instance_variable_get("@map").dup
61
- __setobj__(@map)
54
+ def empty?
55
+ @map.empty?
56
+ end
57
+
58
+ def values
59
+ @map.values
60
+ end
61
+
62
+ def keys
63
+ @map.keys
64
+ end
65
+
66
+ def each
67
+ @map.each {|k, v| yield(k, v)}
68
+ end
69
+
70
+ def size
71
+ @map.size
72
+ end
73
+
74
+ def to_hash
75
+ @map.dup
76
+ end
77
+
78
+ def to_a
79
+ @map.to_a
80
+ end
81
+
82
+ def map
83
+ @map.map {|k, v| yield(k, v)}
84
+ end
85
+
86
+ def dup
87
+ d = super
88
+ d.send(:instance_variable_set, "@map", @map.dup)
89
+ d
90
+ end
91
+
92
+ def sort_by
93
+ @map.sort_by {|k, v| yield k, v}
94
+ end
95
+
96
+ def method_missing(method, *args, &block)
97
+ if Sass.tests_running
98
+ raise ArgumentError.new("The method #{method} must be implemented explicitly")
99
+ end
100
+ @map.send(method, *args, &block)
101
+ end
102
+
103
+ if Sass::Util.ruby1_8?
104
+ def respond_to?(method, include_private = false)
105
+ super || @map.respond_to?(method, include_private)
106
+ end
107
+ end
108
+
109
+ def respond_to_missing?(method, include_private = false)
110
+ @map.respond_to?(method, include_private)
62
111
  end
63
112
  end
64
113
  end
@@ -31,7 +31,7 @@ class OrderedHash < ::Hash
31
31
  # For instance, we cannot use the inherited #merge! because albeit the algorithm
32
32
  # itself would work, our []= is not being called at all by the C code.
33
33
 
34
- def initialize(*args, &block)
34
+ def initialize(*args)
35
35
  super
36
36
  @keys = []
37
37
  end
@@ -91,8 +91,8 @@ class OrderedHash < ::Hash
91
91
  self
92
92
  end
93
93
 
94
- def reject(&block)
95
- dup.reject!(&block)
94
+ def reject
95
+ dup.reject! {|h, k| yield h, k}
96
96
  end
97
97
 
98
98
  def keys
@@ -160,8 +160,12 @@ class OrderedHash < ::Hash
160
160
 
161
161
  alias_method :update, :merge!
162
162
 
163
- def merge(other_hash, &block)
164
- dup.merge!(other_hash, &block)
163
+ def merge(other_hash)
164
+ if block_given?
165
+ dup.merge!(other_hash) {|k, v1, v2| yield k, v1, v2}
166
+ else
167
+ dup.merge!(other_hash)
168
+ end
165
169
  end
166
170
 
167
171
  # When replacing with another hash, the initial order of our keys must come from the other hash --
@@ -7,8 +7,6 @@ module Sass
7
7
  # but its Git revision hash as well,
8
8
  # if it was installed from Git.
9
9
  module Version
10
- include Sass::Util
11
-
12
10
  # Returns a hash representing the version of Sass.
13
11
  # The `:major`, `:minor`, and `:teeny` keys have their respective numbers as Fixnums.
14
12
  # The `:name` key has the name of the version.
@@ -49,9 +47,9 @@ module Sass
49
47
  def version
50
48
  return @@version if defined?(@@version)
51
49
 
52
- numbers = File.read(scope('VERSION')).strip.split('.').
50
+ numbers = File.read(Sass::Util.scope('VERSION')).strip.split('.').
53
51
  map {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
54
- name = File.read(scope('VERSION_NAME')).strip
52
+ name = File.read(Sass::Util.scope('VERSION_NAME')).strip
55
53
  @@version = {
56
54
  :major => numbers[0],
57
55
  :minor => numbers[1],
@@ -87,18 +85,18 @@ module Sass
87
85
  private
88
86
 
89
87
  def revision_number
90
- if File.exists?(scope('REVISION'))
91
- rev = File.read(scope('REVISION')).strip
88
+ if File.exists?(Sass::Util.scope('REVISION'))
89
+ rev = File.read(Sass::Util.scope('REVISION')).strip
92
90
  return rev unless rev =~ /^([a-f0-9]+|\(.*\))$/ || rev == '(unknown)'
93
91
  end
94
92
 
95
- return unless File.exists?(scope('.git/HEAD'))
96
- rev = File.read(scope('.git/HEAD')).strip
93
+ return unless File.exists?(Sass::Util.scope('.git/HEAD'))
94
+ rev = File.read(Sass::Util.scope('.git/HEAD')).strip
97
95
  return rev unless rev =~ /^ref: (.*)$/
98
96
 
99
97
  ref_name = $1
100
- ref_file = scope(".git/#{ref_name}")
101
- info_file = scope(".git/info/refs")
98
+ ref_file = Sass::Util.scope(".git/#{ref_name}")
99
+ info_file = Sass::Util.scope(".git/info/refs")
102
100
  return File.read(ref_file).strip if File.exists?(ref_file)
103
101
  return unless File.exists?(info_file)
104
102
  File.open(info_file) do |f|
@@ -112,8 +110,8 @@ module Sass
112
110
  end
113
111
 
114
112
  def version_date
115
- return unless File.exists?(scope('VERSION_DATE'))
116
- DateTime.parse(File.read(scope('VERSION_DATE')).strip)
113
+ return unless File.exists?(Sass::Util.scope('VERSION_DATE'))
114
+ DateTime.parse(File.read(Sass::Util.scope('VERSION_DATE')).strip)
117
115
  end
118
116
  end
119
117
 
@@ -3329,6 +3329,43 @@ SASS
3329
3329
 
3330
3330
  end
3331
3331
 
3332
+ def test_debug_inspects_sass_objects
3333
+ assert_warning(<<END) {render("@debug (a: 1, b: 2)")}
3334
+ test_debug_inspects_sass_objects_inline.sass:1 DEBUG: (a: 1, b: 2)
3335
+ END
3336
+ assert_warning(<<END) {render("$map: (a: 1, b: 2); @debug $map", :syntax => :scss)}
3337
+ test_debug_inspects_sass_objects_inline.scss:1 DEBUG: (a: 1, b: 2)
3338
+ END
3339
+ end
3340
+
3341
+ def test_default_arg_before_splat
3342
+ assert_equal <<CSS, render(<<SASS, :syntax => :scss)
3343
+ .foo-positional {
3344
+ a: 1;
3345
+ b: 2;
3346
+ positional-arguments: 3, 4;
3347
+ keyword-arguments: (); }
3348
+
3349
+ .foo-keywords {
3350
+ a: true;
3351
+ positional-arguments: ();
3352
+ keyword-arguments: (c: c, d: d); }
3353
+ CSS
3354
+ @mixin foo($a: true, $b: null, $arguments...) {
3355
+ a: $a;
3356
+ b: $b;
3357
+ positional-arguments: inspect($arguments);
3358
+ keyword-arguments: inspect(keywords($arguments));
3359
+ }
3360
+ .foo-positional {
3361
+ @include foo(1, 2, 3, 4);
3362
+ }
3363
+ .foo-keywords {
3364
+ @include foo($c: c, $d: d);
3365
+ }
3366
+ SASS
3367
+ end
3368
+
3332
3369
  private
3333
3370
 
3334
3371
  def assert_hash_has(hash, expected)
@@ -817,8 +817,8 @@ class SassFunctionTest < Test::Unit::TestCase
817
817
 
818
818
  def test_grayscale
819
819
  assert_equal("#bbbbbb", evaluate("grayscale(#abc)"))
820
- assert_equal("grey", evaluate("grayscale(#f00)"))
821
- assert_equal("grey", evaluate("grayscale(#00f)"))
820
+ assert_equal("gray", evaluate("grayscale(#f00)"))
821
+ assert_equal("gray", evaluate("grayscale(#00f)"))
822
822
  assert_equal("white", evaluate("grayscale(white)"))
823
823
  assert_equal("black", evaluate("grayscale(black)"))
824
824
  assert_equal("black", evaluate("grayscale($color: black)"))
@@ -1567,6 +1567,13 @@ SCSS
1567
1567
  assert_error_message("2px is not a string for `variable-exists'", "variable-exists(2px)")
1568
1568
  end
1569
1569
 
1570
+ def test_inspect
1571
+ assert_equal "()", evaluate("inspect(())")
1572
+ assert_equal "null", evaluate("inspect(null)")
1573
+ assert_equal "1px null 3px", evaluate("inspect(1px null 3px)")
1574
+ assert_equal "(a: 1, b: 2)", evaluate("inspect((a: 1, b: 2))")
1575
+ end
1576
+
1570
1577
 
1571
1578
  ## Regression Tests
1572
1579
 
@@ -204,7 +204,7 @@ SCSS
204
204
  _, sourcemap = engine.render_with_sourcemap('sourcemap_uri')
205
205
  assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => 'css_uri')
206
206
  {
207
- "version": "3",
207
+ "version": 3,
208
208
  "mappings": "AAAA,QAAS;EACP,KAAK,EAAE,IAAI",
209
209
  "sources": ["http://orange.example.com/style.scss"],
210
210
  "file": "css_uri"
@@ -274,7 +274,7 @@ SCSS
274
274
  sourcemap_path = 'map/style.map'
275
275
  assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => css_uri, :sourcemap_path => sourcemap_path)
276
276
  {
277
- "version": "3",
277
+ "version": 3,
278
278
  "mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
279
279
  "sources": ["../sass/style.scss"],
280
280
  "file": "css_uri"
@@ -299,7 +299,7 @@ SCSS
299
299
  sourcemap_path = 'map/style.map'
300
300
  assert_equal <<JSON.strip, sourcemap.to_json(:css_path => css_path, :sourcemap_path => sourcemap_path)
301
301
  {
302
- "version": "3",
302
+ "version": 3,
303
303
  "mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
304
304
  "sources": ["../sass/style.scss"],
305
305
  "file": "../static/style.css"
@@ -736,6 +736,18 @@ SCSS
736
736
  end
737
737
  end
738
738
 
739
+ def test_number_printing
740
+ assert_equal "1", resolve("1")
741
+ assert_equal "1", resolve("1.0")
742
+ assert_equal "1000000000", resolve("1000000000")
743
+ assert_equal "0.00001", resolve("0.00001")
744
+ assert_equal "1.12121", resolve("1.121214")
745
+ assert_equal "1.12122", resolve("1.121215")
746
+ assert_equal "Infinity", resolve("(1.0/0.0)")
747
+ assert_equal "-Infinity", resolve("(-1.0/0.0)")
748
+ assert_equal "NaN", resolve("(0.0/0.0)")
749
+ end
750
+
739
751
  private
740
752
 
741
753
  def resolve(str, opts = {}, environment = env)
@@ -783,16 +795,6 @@ SCSS
783
795
  parser.parse_selector
784
796
  end
785
797
 
786
- def test_number_printing
787
- assert_equal "1", eval("1")
788
- assert_equal "1", eval("1.0")
789
- assert_equal "1.121", eval("1.1214")
790
- assert_equal "1.122", eval("1.1215")
791
- assert_equal "Infinity", eval("1.0/0.0")
792
- assert_equal "-Infinity", eval("-1.0/0.0")
793
- assert_equal "NaN", eval("0.0/0.0")
794
- end
795
-
796
798
  def test_null_is_a_singleton
797
799
  assert_same Sass::Script::Value::Null.new, Sass::Script::Value::Null.new
798
800
  end
@@ -27,7 +27,7 @@ a {
27
27
  /*# sourceMappingURL=test.css.map */
28
28
  CSS
29
29
  {
30
- "version": "3",
30
+ "version": 3,
31
31
  "mappings": "AAAA,CAAE;EACA,GAAG,EAAE,GAAG;;EAER,SAAS,EAAE,IAAI",
32
32
  "sources": ["test_simple_mapping_scss_inline.scss"],
33
33
  "file": "test.css"
@@ -50,7 +50,7 @@ a {
50
50
  /*# sourceMappingURL=test.css.map */
51
51
  CSS
52
52
  {
53
- "version": "3",
53
+ "version": 3,
54
54
  "mappings": "AAAA,CAAC;EACC,GAAG,EAAE,GAAG;;EAEP,SAAS,EAAC,IAAI",
55
55
  "sources": ["test_simple_mapping_sass_inline.sass"],
56
56
  "file": "test.css"
@@ -75,7 +75,7 @@ a {
75
75
  /*# sourceMappingURL=style.css.map */
76
76
  CSS
77
77
  {
78
- "version": "3",
78
+ "version": 3,
79
79
  "mappings": "AAAA,CAAE;EACA,GAAG,EAAE,GAAG;;EAER,SAAS,EAAE,IAAI",
80
80
  "sources": ["../scss/style.scss"],
81
81
  "file": "style.css"
@@ -99,7 +99,7 @@ a {
99
99
  /*# sourceMappingURL=style.css.map */
100
100
  CSS
101
101
  {
102
- "version": "3",
102
+ "version": 3,
103
103
  "mappings": "AAAA,CAAC;EACC,GAAG,EAAE,GAAG;;EAEP,SAAS,EAAC,IAAI",
104
104
  "sources": ["../sass/style.sass"],
105
105
  "file": "style.css"
@@ -121,7 +121,7 @@ a {
121
121
  /*# sourceMappingURL=test.css.map */
122
122
  CSS
123
123
  {
124
- "version": "3",
124
+ "version": 3,
125
125
  "mappings": ";AAAA,CAAE;EACA,GAAG,EAAE,GAAG",
126
126
  "sources": ["test_simple_charset_mapping_scss_inline.scss"],
127
127
  "file": "test.css"
@@ -141,7 +141,7 @@ a {
141
141
  /*# sourceMappingURL=test.css.map */
142
142
  CSS
143
143
  {
144
- "version": "3",
144
+ "version": 3,
145
145
  "mappings": ";AAAA,CAAC;EACC,GAAG,EAAE,GAAG",
146
146
  "sources": ["test_simple_charset_mapping_sass_inline.sass"],
147
147
  "file": "test.css"
@@ -163,7 +163,7 @@ f\x86\x86 {
163
163
  /*# sourceMappingURL=test.css.map */
164
164
  CSS
165
165
  {
166
- "version": "3",
166
+ "version": 3,
167
167
  "mappings": ";AACA,GAAI;EACF,CAAC,EAAE,CAAC",
168
168
  "sources": ["test_different_charset_than_encoding_scss_inline.scss"],
169
169
  "file": "test.css"
@@ -184,7 +184,7 @@ f\x86\x86 {
184
184
  /*# sourceMappingURL=test.css.map */
185
185
  CSS
186
186
  {
187
- "version": "3",
187
+ "version": 3,
188
188
  "mappings": ";AACA,GAAG;EACD,CAAC,EAAE,CAAC",
189
189
  "sources": ["test_different_charset_than_encoding_sass_inline.sass"],
190
190
  "file": "test.css"
@@ -3,6 +3,28 @@ require File.dirname(__FILE__) + '/../../test_helper'
3
3
  require 'sass/util/normalized_map'
4
4
 
5
5
  class NormalizedMapTest < Test::Unit::TestCase
6
+ extend PublicApiLinter
7
+
8
+ lint_api Hash, Sass::Util::NormalizedMap
9
+
10
+ def lint_instance
11
+ Sass::Util::NormalizedMap.new
12
+ end
13
+
14
+ def test_normalized_map_errors_unless_explicitly_implemented
15
+ assert Sass.tests_running
16
+ assert_raise_message(ArgumentError, "The method invert must be implemented explicitly") do
17
+ Sass::Util::NormalizedMap.new.invert
18
+ end
19
+ end
20
+
21
+ def test_normalized_map_does_not_error_when_released
22
+ Sass.tests_running = false
23
+ assert_equal({}, Sass::Util::NormalizedMap.new.invert)
24
+ ensure
25
+ Sass.tests_running = true
26
+ end
27
+
6
28
  def test_basic_lifecycle
7
29
  m = Sass::Util::NormalizedMap.new
8
30
  m["a-b"] = 1
@@ -26,5 +48,4 @@ class NormalizedMapTest < Test::Unit::TestCase
26
48
  assert !m.has_key?("a-b")
27
49
  assert m2.has_key?("a-b")
28
50
  end
29
-
30
51
  end
@@ -304,6 +304,15 @@ class UtilTest < Test::Unit::TestCase
304
304
  def foo
305
305
  Sass::Util.abstract(self)
306
306
  end
307
+ def old_method
308
+ Sass::Util.deprecated(self)
309
+ end
310
+ def old_method_with_custom_message
311
+ Sass::Util.deprecated(self, "Call FooBar#new_method instead.")
312
+ end
313
+ def self.another_old_method
314
+ Sass::Util.deprecated(self)
315
+ end
307
316
  end
308
317
 
309
318
  def test_abstract
@@ -311,6 +320,15 @@ class UtilTest < Test::Unit::TestCase
311
320
  "UtilTest::FooBar must implement #foo") {FooBar.new.foo}
312
321
  end
313
322
 
323
+ def test_deprecated
324
+ assert_warning("DEPRECATION WARNING: UtilTest::FooBar#old_method will be removed in a future version of Sass.") { FooBar.new.old_method }
325
+ assert_warning(<<WARNING) { FooBar.new.old_method_with_custom_message }
326
+ DEPRECATION WARNING: UtilTest::FooBar#old_method_with_custom_message will be removed in a future version of Sass.
327
+ Call FooBar#new_method instead.
328
+ WARNING
329
+ assert_warning("DEPRECATION WARNING: UtilTest::FooBar.another_old_method will be removed in a future version of Sass.") { FooBar.another_old_method }
330
+ end
331
+
314
332
  def test_json_escape_string
315
333
  assert_json_string "", ""
316
334
  alphanum = (("0".."9").to_a).concat(("a".."z").to_a).concat(("A".."Z").to_a).join