sass 3.4.25 → 3.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (237) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +1 -1
  3. data/CONTRIBUTING.md +3 -3
  4. data/README.md +17 -9
  5. data/VERSION +1 -1
  6. data/VERSION_DATE +1 -1
  7. data/VERSION_NAME +1 -1
  8. data/extra/sass-spec-ref.sh +9 -1
  9. data/lib/sass.rb +0 -7
  10. data/lib/sass/cache_stores/filesystem.rb +1 -1
  11. data/lib/sass/css.rb +1 -2
  12. data/lib/sass/engine.rb +39 -29
  13. data/lib/sass/environment.rb +26 -5
  14. data/lib/sass/error.rb +2 -2
  15. data/lib/sass/exec/base.rb +2 -13
  16. data/lib/sass/exec/sass_scss.rb +1 -5
  17. data/lib/sass/features.rb +1 -0
  18. data/lib/sass/importers/filesystem.rb +6 -4
  19. data/lib/sass/logger/base.rb +11 -0
  20. data/lib/sass/plugin/compiler.rb +20 -50
  21. data/lib/sass/plugin/configuration.rb +2 -2
  22. data/lib/sass/railtie.rb +1 -1
  23. data/lib/sass/script/css_parser.rb +4 -1
  24. data/lib/sass/script/functions.rb +308 -81
  25. data/lib/sass/script/lexer.rb +63 -9
  26. data/lib/sass/script/parser.rb +287 -118
  27. data/lib/sass/script/tree/funcall.rb +35 -34
  28. data/lib/sass/script/tree/interpolation.rb +0 -3
  29. data/lib/sass/script/tree/list_literal.rb +23 -8
  30. data/lib/sass/script/tree/map_literal.rb +2 -2
  31. data/lib/sass/script/tree/node.rb +0 -8
  32. data/lib/sass/script/tree/operation.rb +1 -8
  33. data/lib/sass/script/value.rb +2 -0
  34. data/lib/sass/script/value/arg_list.rb +1 -1
  35. data/lib/sass/script/value/base.rb +17 -0
  36. data/lib/sass/script/value/callable.rb +25 -0
  37. data/lib/sass/script/value/color.rb +8 -2
  38. data/lib/sass/script/value/function.rb +19 -0
  39. data/lib/sass/script/value/helpers.rb +37 -11
  40. data/lib/sass/script/value/list.rb +35 -14
  41. data/lib/sass/script/value/map.rb +2 -2
  42. data/lib/sass/script/value/number.rb +3 -2
  43. data/lib/sass/scss/css_parser.rb +6 -1
  44. data/lib/sass/scss/parser.rb +145 -56
  45. data/lib/sass/scss/rx.rb +5 -11
  46. data/lib/sass/scss/static_parser.rb +20 -42
  47. data/lib/sass/selector.rb +4 -0
  48. data/lib/sass/selector/abstract_sequence.rb +7 -6
  49. data/lib/sass/selector/comma_sequence.rb +9 -5
  50. data/lib/sass/selector/pseudo.rb +20 -3
  51. data/lib/sass/selector/sequence.rb +35 -10
  52. data/lib/sass/selector/simple.rb +9 -2
  53. data/lib/sass/selector/simple_sequence.rb +8 -4
  54. data/lib/sass/source/map.rb +2 -6
  55. data/lib/sass/stack.rb +21 -1
  56. data/lib/sass/tree/charset_node.rb +1 -1
  57. data/lib/sass/tree/prop_node.rb +45 -53
  58. data/lib/sass/tree/rule_node.rb +6 -8
  59. data/lib/sass/tree/visitors/check_nesting.rb +1 -1
  60. data/lib/sass/tree/visitors/convert.rb +2 -3
  61. data/lib/sass/tree/visitors/cssize.rb +4 -15
  62. data/lib/sass/tree/visitors/deep_copy.rb +1 -1
  63. data/lib/sass/tree/visitors/extend.rb +2 -8
  64. data/lib/sass/tree/visitors/perform.rb +23 -15
  65. data/lib/sass/tree/visitors/set_options.rb +1 -1
  66. data/lib/sass/tree/visitors/to_css.rb +49 -22
  67. data/lib/sass/util.rb +72 -310
  68. data/lib/sass/util/multibyte_string_scanner.rb +127 -131
  69. data/lib/sass/util/normalized_map.rb +1 -8
  70. data/lib/sass/version.rb +0 -4
  71. metadata +55 -202
  72. data/Rakefile +0 -453
  73. data/lib/sass/script/css_variable_warning.rb +0 -52
  74. data/lib/sass/util/cross_platform_random.rb +0 -19
  75. data/lib/sass/util/ordered_hash.rb +0 -192
  76. data/test/sass-spec.yml +0 -3
  77. data/test/sass/cache_test.rb +0 -131
  78. data/test/sass/callbacks_test.rb +0 -61
  79. data/test/sass/compiler_test.rb +0 -236
  80. data/test/sass/conversion_test.rb +0 -2188
  81. data/test/sass/css2sass_test.rb +0 -526
  82. data/test/sass/css_variable_test.rb +0 -132
  83. data/test/sass/data/hsl-rgb.txt +0 -319
  84. data/test/sass/encoding_test.rb +0 -219
  85. data/test/sass/engine_test.rb +0 -3447
  86. data/test/sass/exec_test.rb +0 -96
  87. data/test/sass/extend_test.rb +0 -1733
  88. data/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
  89. data/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
  90. data/test/sass/functions_test.rb +0 -1977
  91. data/test/sass/importer_test.rb +0 -421
  92. data/test/sass/logger_test.rb +0 -58
  93. data/test/sass/mock_importer.rb +0 -49
  94. data/test/sass/more_results/more1.css +0 -9
  95. data/test/sass/more_results/more1_with_line_comments.css +0 -26
  96. data/test/sass/more_results/more_import.css +0 -29
  97. data/test/sass/more_templates/_more_partial.sass +0 -2
  98. data/test/sass/more_templates/more1.sass +0 -23
  99. data/test/sass/more_templates/more_import.sass +0 -11
  100. data/test/sass/plugin_test.rb +0 -556
  101. data/test/sass/results/alt.css +0 -4
  102. data/test/sass/results/basic.css +0 -9
  103. data/test/sass/results/cached_import_option.css +0 -3
  104. data/test/sass/results/compact.css +0 -5
  105. data/test/sass/results/complex.css +0 -86
  106. data/test/sass/results/compressed.css +0 -1
  107. data/test/sass/results/expanded.css +0 -19
  108. data/test/sass/results/filename_fn.css +0 -3
  109. data/test/sass/results/if.css +0 -3
  110. data/test/sass/results/import.css +0 -31
  111. data/test/sass/results/import_charset.css +0 -5
  112. data/test/sass/results/import_charset_1_8.css +0 -5
  113. data/test/sass/results/import_charset_ibm866.css +0 -5
  114. data/test/sass/results/import_content.css +0 -1
  115. data/test/sass/results/line_numbers.css +0 -49
  116. data/test/sass/results/mixins.css +0 -95
  117. data/test/sass/results/multiline.css +0 -24
  118. data/test/sass/results/nested.css +0 -22
  119. data/test/sass/results/options.css +0 -1
  120. data/test/sass/results/parent_ref.css +0 -13
  121. data/test/sass/results/script.css +0 -16
  122. data/test/sass/results/scss_import.css +0 -31
  123. data/test/sass/results/scss_importee.css +0 -2
  124. data/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  125. data/test/sass/results/subdir/subdir.css +0 -3
  126. data/test/sass/results/units.css +0 -11
  127. data/test/sass/results/warn.css +0 -0
  128. data/test/sass/results/warn_imported.css +0 -0
  129. data/test/sass/script_conversion_test.rb +0 -357
  130. data/test/sass/script_test.rb +0 -1431
  131. data/test/sass/scss/css_test.rb +0 -1281
  132. data/test/sass/scss/rx_test.rb +0 -160
  133. data/test/sass/scss/scss_test.rb +0 -4205
  134. data/test/sass/scss/test_helper.rb +0 -37
  135. data/test/sass/source_map_test.rb +0 -1055
  136. data/test/sass/superselector_test.rb +0 -210
  137. data/test/sass/templates/_cached_import_option_partial.scss +0 -1
  138. data/test/sass/templates/_double_import_loop2.sass +0 -1
  139. data/test/sass/templates/_filename_fn_import.scss +0 -11
  140. data/test/sass/templates/_imported_charset_ibm866.sass +0 -4
  141. data/test/sass/templates/_imported_charset_utf8.sass +0 -4
  142. data/test/sass/templates/_imported_content.sass +0 -3
  143. data/test/sass/templates/_partial.sass +0 -2
  144. data/test/sass/templates/_same_name_different_partiality.scss +0 -1
  145. data/test/sass/templates/alt.sass +0 -16
  146. data/test/sass/templates/basic.sass +0 -23
  147. data/test/sass/templates/bork1.sass +0 -2
  148. data/test/sass/templates/bork2.sass +0 -2
  149. data/test/sass/templates/bork3.sass +0 -2
  150. data/test/sass/templates/bork4.sass +0 -2
  151. data/test/sass/templates/bork5.sass +0 -3
  152. data/test/sass/templates/cached_import_option.scss +0 -3
  153. data/test/sass/templates/compact.sass +0 -17
  154. data/test/sass/templates/complex.sass +0 -305
  155. data/test/sass/templates/compressed.sass +0 -15
  156. data/test/sass/templates/double_import_loop1.sass +0 -1
  157. data/test/sass/templates/expanded.sass +0 -17
  158. data/test/sass/templates/filename_fn.scss +0 -18
  159. data/test/sass/templates/if.sass +0 -11
  160. data/test/sass/templates/import.sass +0 -12
  161. data/test/sass/templates/import_charset.sass +0 -9
  162. data/test/sass/templates/import_charset_1_8.sass +0 -6
  163. data/test/sass/templates/import_charset_ibm866.sass +0 -11
  164. data/test/sass/templates/import_content.sass +0 -4
  165. data/test/sass/templates/importee.less +0 -2
  166. data/test/sass/templates/importee.sass +0 -19
  167. data/test/sass/templates/line_numbers.sass +0 -13
  168. data/test/sass/templates/mixin_bork.sass +0 -5
  169. data/test/sass/templates/mixins.sass +0 -76
  170. data/test/sass/templates/multiline.sass +0 -20
  171. data/test/sass/templates/nested.sass +0 -25
  172. data/test/sass/templates/nested_bork1.sass +0 -2
  173. data/test/sass/templates/nested_bork2.sass +0 -2
  174. data/test/sass/templates/nested_bork3.sass +0 -2
  175. data/test/sass/templates/nested_bork4.sass +0 -2
  176. data/test/sass/templates/nested_import.sass +0 -2
  177. data/test/sass/templates/nested_mixin_bork.sass +0 -6
  178. data/test/sass/templates/options.sass +0 -2
  179. data/test/sass/templates/parent_ref.sass +0 -25
  180. data/test/sass/templates/same_name_different_ext.sass +0 -2
  181. data/test/sass/templates/same_name_different_ext.scss +0 -1
  182. data/test/sass/templates/same_name_different_partiality.scss +0 -1
  183. data/test/sass/templates/script.sass +0 -101
  184. data/test/sass/templates/scss_import.scss +0 -12
  185. data/test/sass/templates/scss_importee.scss +0 -1
  186. data/test/sass/templates/single_import_loop.sass +0 -1
  187. data/test/sass/templates/subdir/import_up1.scss +0 -1
  188. data/test/sass/templates/subdir/import_up2.scss +0 -1
  189. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  190. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  191. data/test/sass/templates/subdir/subdir.sass +0 -6
  192. data/test/sass/templates/units.sass +0 -11
  193. data/test/sass/templates/warn.sass +0 -3
  194. data/test/sass/templates/warn_imported.sass +0 -4
  195. data/test/sass/test_helper.rb +0 -8
  196. data/test/sass/util/multibyte_string_scanner_test.rb +0 -155
  197. data/test/sass/util/normalized_map_test.rb +0 -51
  198. data/test/sass/util/subset_map_test.rb +0 -91
  199. data/test/sass/util_test.rb +0 -438
  200. data/test/sass/value_helpers_test.rb +0 -179
  201. data/test/test_helper.rb +0 -110
  202. data/vendor/listen/CHANGELOG.md +0 -1
  203. data/vendor/listen/CONTRIBUTING.md +0 -38
  204. data/vendor/listen/Gemfile +0 -20
  205. data/vendor/listen/Guardfile +0 -8
  206. data/vendor/listen/LICENSE +0 -20
  207. data/vendor/listen/README.md +0 -349
  208. data/vendor/listen/Rakefile +0 -5
  209. data/vendor/listen/Vagrantfile +0 -96
  210. data/vendor/listen/lib/listen.rb +0 -54
  211. data/vendor/listen/lib/listen/adapter.rb +0 -327
  212. data/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
  213. data/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
  214. data/vendor/listen/lib/listen/adapters/linux.rb +0 -81
  215. data/vendor/listen/lib/listen/adapters/polling.rb +0 -58
  216. data/vendor/listen/lib/listen/adapters/windows.rb +0 -91
  217. data/vendor/listen/lib/listen/directory_record.rb +0 -406
  218. data/vendor/listen/lib/listen/listener.rb +0 -323
  219. data/vendor/listen/lib/listen/turnstile.rb +0 -32
  220. data/vendor/listen/lib/listen/version.rb +0 -3
  221. data/vendor/listen/listen.gemspec +0 -28
  222. data/vendor/listen/spec/listen/adapter_spec.rb +0 -149
  223. data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
  224. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
  225. data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
  226. data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
  227. data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
  228. data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
  229. data/vendor/listen/spec/listen/listener_spec.rb +0 -258
  230. data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
  231. data/vendor/listen/spec/listen_spec.rb +0 -67
  232. data/vendor/listen/spec/spec_helper.rb +0 -25
  233. data/vendor/listen/spec/support/adapter_helper.rb +0 -666
  234. data/vendor/listen/spec/support/directory_record_helper.rb +0 -57
  235. data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
  236. data/vendor/listen/spec/support/listeners_helper.rb +0 -179
  237. data/vendor/listen/spec/support/platform_helper.rb +0 -15
@@ -1,421 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require File.dirname(__FILE__) + '/../test_helper'
3
- require File.dirname(__FILE__) + '/test_helper'
4
- require 'mock_importer'
5
- require 'sass/plugin'
6
-
7
- class ImporterTest < MiniTest::Test
8
-
9
- class FruitImporter < Sass::Importers::Base
10
- def find(name, context = nil)
11
- fruit = parse(name)
12
- return unless fruit
13
- color = case fruit
14
- when "apple"
15
- "red"
16
- when "orange"
17
- "orange"
18
- else
19
- "blue"
20
- end
21
- contents = %Q{
22
- $#{fruit}-color: #{color} !default;
23
- @mixin #{fruit} {
24
- color: $#{fruit}-color;
25
- }
26
- }
27
- Sass::Engine.new(contents, :filename => name, :syntax => :scss, :importer => self)
28
- end
29
-
30
- def key(name, context)
31
- [self.class.name, name]
32
- end
33
-
34
- def public_url(name, sourcemap_directory = nil)
35
- "http://#{parse(name)}.example.com/style.scss"
36
- end
37
-
38
- private
39
-
40
- def parse(name)
41
- name[%r{fruits/(\w+)(\.s[ac]ss)?}, 1]
42
- end
43
- end
44
-
45
- class NoPublicUrlImporter < FruitImporter
46
- def public_url(name, sourcemap_directory = nil)
47
- nil
48
- end
49
-
50
- private
51
-
52
- def parse(name)
53
- name[%r{ephemeral/(\w+)(\.s[ac]ss)?}, 1]
54
- end
55
- end
56
-
57
- # This class proves that you can override the extension scheme for importers
58
- class ReversedExtImporter < Sass::Importers::Filesystem
59
- def extensions
60
- {"sscs" => :scss, "ssas" => :sass}
61
- end
62
- end
63
-
64
- # This importer maps one import to another import
65
- # based on the mappings passed to importer's constructor.
66
- class IndirectImporter < Sass::Importers::Base
67
- def initialize(mappings, mtimes)
68
- @mappings = mappings
69
- @mtimes = mtimes
70
- end
71
- def find_relative(uri, base, options)
72
- nil
73
- end
74
- def find(name, options)
75
- if @mappings.has_key?(name)
76
- Sass::Engine.new(
77
- %Q[@import "#{@mappings[name]}";],
78
- options.merge(
79
- :filename => name,
80
- :syntax => :scss,
81
- :importer => self
82
- )
83
- )
84
- end
85
- end
86
- def mtime(uri, options)
87
- @mtimes.fetch(uri, @mtimes.has_key?(uri) ? Time.now : nil)
88
- end
89
- def key(uri, options)
90
- [self.class.name, uri]
91
- end
92
- def to_s
93
- "IndirectImporter(#{@mappings.keys.join(", ")})"
94
- end
95
- end
96
-
97
- # This importer maps the import to single class
98
- # based on the mappings passed to importer's constructor.
99
- class ClassImporter < Sass::Importers::Base
100
- def initialize(mappings, mtimes)
101
- @mappings = mappings
102
- @mtimes = mtimes
103
- end
104
- def find_relative(uri, base, options)
105
- nil
106
- end
107
- def find(name, options)
108
- if @mappings.has_key?(name)
109
- Sass::Engine.new(
110
- %Q[.#{name}{#{@mappings[name]}}],
111
- options.merge(
112
- :filename => name,
113
- :syntax => :scss,
114
- :importer => self
115
- )
116
- )
117
- end
118
- end
119
- def mtime(uri, options)
120
- @mtimes.fetch(uri, @mtimes.has_key?(uri) ? Time.now : nil)
121
- end
122
- def key(uri, options)
123
- [self.class.name, uri]
124
- end
125
- def to_s
126
- "ClassImporter(#{@mappings.keys.join(", ")})"
127
- end
128
- end
129
-
130
- def test_can_resolve_generated_imports
131
- scss_file = %Q{
132
- $pear-color: green;
133
- @import "fruits/apple"; @import "fruits/orange"; @import "fruits/pear";
134
- .apple { @include apple; }
135
- .orange { @include orange; }
136
- .pear { @include pear; }
137
- }
138
- css_file = <<CSS
139
- .apple { color: red; }
140
-
141
- .orange { color: orange; }
142
-
143
- .pear { color: green; }
144
- CSS
145
- options = {:style => :compact, :load_paths => [FruitImporter.new], :syntax => :scss}
146
- assert_equal css_file, Sass::Engine.new(scss_file, options).render
147
- end
148
-
149
- def test_extension_overrides
150
- FileUtils.mkdir_p(absolutize("tmp"))
151
- open(absolutize("tmp/foo.ssas"), "w") {|f| f.write(".foo\n reversed: true\n")}
152
- open(absolutize("tmp/bar.sscs"), "w") {|f| f.write(".bar {reversed: true}\n")}
153
- scss_file = %Q{
154
- @import "foo", "bar";
155
- @import "foo.ssas", "bar.sscs";
156
- }
157
- css_file = <<CSS
158
- .foo { reversed: true; }
159
-
160
- .bar { reversed: true; }
161
-
162
- .foo { reversed: true; }
163
-
164
- .bar { reversed: true; }
165
- CSS
166
- options = {:style => :compact, :load_paths => [ReversedExtImporter.new(absolutize("tmp"))], :syntax => :scss}
167
- assert_equal css_file, Sass::Engine.new(scss_file, options).render
168
- ensure
169
- FileUtils.rm_rf(absolutize("tmp"))
170
- end
171
-
172
- def test_staleness_check_across_importers
173
- file_system_importer = Sass::Importers::Filesystem.new(fixture_dir)
174
- # Make sure the first import is older
175
- indirect_importer = IndirectImporter.new({"apple" => "pear"}, {"apple" => Time.now - 1})
176
- # Make css file is newer so the dependencies are the only way for the css file to be out of date.
177
- FileUtils.touch(fixture_file("test_staleness_check_across_importers.css"))
178
- # Make sure the first import is older
179
- class_importer = ClassImporter.new({"pear" => %Q{color: green;}}, {"pear" => Time.now + 1})
180
-
181
- options = {
182
- :style => :compact,
183
- :filename => fixture_file("test_staleness_check_across_importers.scss"),
184
- :importer => file_system_importer,
185
- :load_paths => [file_system_importer, indirect_importer, class_importer],
186
- :syntax => :scss
187
- }
188
-
189
- assert_equal File.read(fixture_file("test_staleness_check_across_importers.css")),
190
- Sass::Engine.new(File.read(fixture_file("test_staleness_check_across_importers.scss")), options).render
191
-
192
- checker = Sass::Plugin::StalenessChecker.new(options)
193
-
194
- assert checker.stylesheet_needs_update?(
195
- fixture_file("test_staleness_check_across_importers.css"),
196
- fixture_file("test_staleness_check_across_importers.scss"),
197
- file_system_importer
198
- )
199
- end
200
-
201
- def test_source_map_with_only_css_uri_supports_public_url_imports
202
- fruit_importer = FruitImporter.new
203
-
204
- options = {
205
- :filename => 'fruits/orange',
206
- :importer => fruit_importer,
207
- :syntax => :scss
208
- }
209
-
210
- engine = Sass::Engine.new(<<SCSS, options)
211
- .orchard {
212
- color: blue;
213
- }
214
- SCSS
215
-
216
- _, sourcemap = engine.render_with_sourcemap('sourcemap_uri')
217
- assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => 'css_uri')
218
- {
219
- "version": 3,
220
- "mappings": "AAAA,QAAS;EACP,KAAK,EAAE,IAAI",
221
- "sources": ["http://orange.example.com/style.scss"],
222
- "names": [],
223
- "file": "css_uri"
224
- }
225
- JSON
226
- end
227
-
228
- def test_source_map_with_only_css_uri_can_have_no_public_url
229
- ephemeral_importer = NoPublicUrlImporter.new
230
- mock_importer = MockImporter.new
231
- def mock_importer.public_url(name, sourcemap_directory = nil)
232
- "source_uri"
233
- end
234
-
235
- options = {
236
- :filename => filename_for_test,
237
- :sourcemap_filename => sourcemap_filename_for_test,
238
- :importer => mock_importer,
239
- :syntax => :scss,
240
- :load_paths => [ephemeral_importer],
241
- :cache => false
242
- }
243
-
244
- engine = Sass::Engine.new(<<SCSS, options)
245
- @import "ephemeral/orange";
246
- .orange {
247
- @include orange;
248
- }
249
- SCSS
250
-
251
- css_output, sourcemap = engine.render_with_sourcemap('sourcemap_uri')
252
- assert_equal <<CSS.strip, css_output.strip
253
- .orange {
254
- color: orange; }
255
-
256
- /*# sourceMappingURL=sourcemap_uri */
257
- CSS
258
- map = sourcemap.to_json(:css_uri => 'css_uri')
259
- assert_equal <<JSON.strip, map
260
- {
261
- "version": 3,
262
- "mappings": "AACA,OAAQ",
263
- "sources": ["source_uri"],
264
- "names": [],
265
- "file": "css_uri"
266
- }
267
- JSON
268
- end
269
-
270
- def test_source_map_with_only_css_uri_falls_back_to_file_uris
271
- file_system_importer = Sass::Importers::Filesystem.new('.')
272
- options = {
273
- :filename => filename_for_test(:scss),
274
- :sourcemap_filename => sourcemap_filename_for_test,
275
- :importer => file_system_importer,
276
- :syntax => :scss
277
- }
278
-
279
- engine = Sass::Engine.new(<<SCSS, options)
280
- .foo {a: b}
281
- SCSS
282
-
283
- _, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
284
-
285
- uri = Sass::Util.file_uri_from_path(Sass::Util.absolute_path(filename_for_test(:scss)))
286
- assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => 'css_uri')
287
- {
288
- "version": 3,
289
- "mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
290
- "sources": ["#{uri}"],
291
- "names": [],
292
- "file": "css_uri"
293
- }
294
- JSON
295
- end
296
-
297
- def test_source_map_with_css_uri_and_css_path_falls_back_to_file_uris
298
- file_system_importer = Sass::Importers::Filesystem.new('.')
299
- options = {
300
- :filename => filename_for_test(:scss),
301
- :sourcemap_filename => sourcemap_filename_for_test,
302
- :importer => file_system_importer,
303
- :syntax => :scss
304
- }
305
-
306
- engine = Sass::Engine.new(<<SCSS, options)
307
- .foo {a: b}
308
- SCSS
309
-
310
- _, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
311
-
312
- uri = Sass::Util.file_uri_from_path(Sass::Util.absolute_path(filename_for_test(:scss)))
313
- assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => 'css_uri', :css_path => 'css_path')
314
- {
315
- "version": 3,
316
- "mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
317
- "sources": ["#{uri}"],
318
- "names": [],
319
- "file": "css_uri"
320
- }
321
- JSON
322
- end
323
-
324
- def test_source_map_with_css_uri_and_sourcemap_path_supports_filesystem_importer
325
- file_system_importer = Sass::Importers::Filesystem.new('.')
326
- css_uri = 'css_uri'
327
- sourcemap_path = 'map/style.map'
328
- options = {
329
- :filename => 'sass/style.scss',
330
- :sourcemap_filename => sourcemap_path,
331
- :importer => file_system_importer,
332
- :syntax => :scss
333
- }
334
-
335
- engine = Sass::Engine.new(<<SCSS, options)
336
- .foo {a: b}
337
- SCSS
338
-
339
- rendered, sourcemap = engine.render_with_sourcemap('http://1.example.com/style.map')
340
-
341
-
342
- rendered, sourcemap = engine.render_with_sourcemap('http://map.example.com/map/style.map')
343
- assert_equal <<JSON.strip, sourcemap.to_json(:css_uri => css_uri, :sourcemap_path => sourcemap_path)
344
- {
345
- "version": 3,
346
- "mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
347
- "sources": ["../sass/style.scss"],
348
- "names": [],
349
- "file": "css_uri"
350
- }
351
- JSON
352
- end
353
-
354
- def test_source_map_with_css_path_and_sourcemap_path_supports_file_system_importer
355
- file_system_importer = Sass::Importers::Filesystem.new('.')
356
- sass_path = 'sass/style.scss'
357
- css_path = 'static/style.css'
358
- sourcemap_path = 'map/style.map'
359
- options = {
360
- :filename => sass_path,
361
- :sourcemap_filename => sourcemap_path,
362
- :importer => file_system_importer,
363
- :syntax => :scss
364
- }
365
-
366
- engine = Sass::Engine.new(<<SCSS, options)
367
- .foo {a: b}
368
- SCSS
369
-
370
- _, sourcemap = engine.render_with_sourcemap('http://map.example.com/map/style.map')
371
- assert_equal <<JSON.strip, sourcemap.to_json(:css_path => css_path, :sourcemap_path => sourcemap_path)
372
- {
373
- "version": 3,
374
- "mappings": "AAAA,IAAK;EAAC,CAAC,EAAE,CAAC",
375
- "sources": ["../sass/style.scss"],
376
- "names": [],
377
- "file": "../static/style.css"
378
- }
379
- JSON
380
- end
381
-
382
- def test_render_with_sourcemap_requires_filename
383
- file_system_importer = Sass::Importers::Filesystem.new('.')
384
- engine = Sass::Engine.new(".foo {a: b}", :syntax => :scss, :importer => file_system_importer)
385
- assert_raise_message(Sass::SyntaxError, <<MESSAGE) {engine.render_with_sourcemap('sourcemap_url')}
386
- Error generating source map: couldn't determine public URL for the source stylesheet.
387
- No filename is available so there's nothing for the source map to link to.
388
- MESSAGE
389
- end
390
-
391
- def test_render_with_sourcemap_requires_importer_with_public_url
392
- class_importer = ClassImporter.new({"pear" => "color: green;"}, {"pear" => Time.now})
393
- assert_raise_message(Sass::SyntaxError, <<MESSAGE) {class_importer.find("pear", {}).render_with_sourcemap('sourcemap_url')}
394
- Error generating source map: couldn't determine public URL for "pear".
395
- Without a public URL, there's nothing for the source map to link to.
396
- Custom importers should define the #public_url method.
397
- MESSAGE
398
- end
399
-
400
- def fixture_dir
401
- File.join(File.dirname(__FILE__), "fixtures")
402
- end
403
-
404
- def fixture_file(path)
405
- File.join(fixture_dir, path)
406
- end
407
-
408
- def test_filesystem_importer_eql
409
- importer = Sass::Importers::Filesystem.new('.')
410
- assert importer.eql?(Sass::Importers::Filesystem.new('.'))
411
- assert importer.eql?(ReversedExtImporter.new('.'))
412
- assert !importer.eql?(Sass::Importers::Filesystem.new('foo'))
413
- assert !importer.eql?(nil)
414
- assert !importer.eql?('foo')
415
- end
416
-
417
- def test_absolute_files_across_template_locations
418
- importer = Sass::Importers::Filesystem.new(absolutize 'templates')
419
- refute_nil importer.mtime(absolutize('more_templates/more1.sass'), {})
420
- end
421
- end
@@ -1,58 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require File.dirname(__FILE__) + '/../test_helper'
3
- require 'pathname'
4
-
5
- class LoggerTest < MiniTest::Test
6
-
7
- class InterceptedLogger < Sass::Logger::Base
8
-
9
- attr_accessor :messages
10
-
11
- def initialize(*args)
12
- super
13
- self.messages = []
14
- end
15
-
16
- def reset!
17
- self.messages = []
18
- end
19
-
20
- def _log(*args)
21
- messages << [args]
22
- end
23
-
24
- end
25
-
26
- def test_global_sass_logger_instance_exists
27
- assert Sass.logger.respond_to?(:warn)
28
- end
29
-
30
- def test_log_level_orders
31
- logged_levels = {
32
- :trace => [ [], [:trace, :debug, :info, :warn, :error]],
33
- :debug => [ [:trace], [:debug, :info, :warn, :error]],
34
- :info => [ [:trace, :debug], [:info, :warn, :error]],
35
- :warn => [ [:trace, :debug, :info], [:warn, :error]],
36
- :error => [ [:trace, :debug, :info, :warn], [:error]]
37
- }
38
- logged_levels.each do |level, (should_not_be_logged, should_be_logged)|
39
- logger = Sass::Logger::Base.new(level)
40
- should_not_be_logged.each do |should_level|
41
- assert !logger.logging_level?(should_level)
42
- end
43
- should_be_logged.each do |should_level|
44
- assert logger.logging_level?(should_level)
45
- end
46
- end
47
- end
48
-
49
- def test_logging_can_be_disabled
50
- logger = InterceptedLogger.new
51
- logger.error("message #1")
52
- assert_equal 1, logger.messages.size
53
- logger.reset!
54
- logger.disabled = true
55
- logger.error("message #2")
56
- assert_equal 0, logger.messages.size
57
- end
58
- end