sass 3.4.24 → 3.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (244) 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/cache_stores/filesystem.rb +1 -1
  10. data/lib/sass/css.rb +2 -3
  11. data/lib/sass/deprecation.rb +55 -0
  12. data/lib/sass/engine.rb +52 -34
  13. data/lib/sass/environment.rb +27 -6
  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 +21 -51
  21. data/lib/sass/plugin/configuration.rb +2 -2
  22. data/lib/sass/plugin/rack.rb +2 -2
  23. data/lib/sass/plugin/staleness_checker.rb +1 -1
  24. data/lib/sass/plugin.rb +1 -1
  25. data/lib/sass/railtie.rb +1 -1
  26. data/lib/sass/script/css_parser.rb +4 -1
  27. data/lib/sass/script/functions.rb +310 -83
  28. data/lib/sass/script/lexer.rb +64 -10
  29. data/lib/sass/script/parser.rb +291 -121
  30. data/lib/sass/script/tree/funcall.rb +35 -34
  31. data/lib/sass/script/tree/interpolation.rb +0 -3
  32. data/lib/sass/script/tree/list_literal.rb +23 -8
  33. data/lib/sass/script/tree/map_literal.rb +2 -2
  34. data/lib/sass/script/tree/node.rb +1 -9
  35. data/lib/sass/script/tree/operation.rb +43 -23
  36. data/lib/sass/script/value/arg_list.rb +1 -1
  37. data/lib/sass/script/value/base.rb +18 -1
  38. data/lib/sass/script/value/callable.rb +25 -0
  39. data/lib/sass/script/value/color.rb +8 -2
  40. data/lib/sass/script/value/function.rb +19 -0
  41. data/lib/sass/script/value/helpers.rb +37 -11
  42. data/lib/sass/script/value/list.rb +35 -14
  43. data/lib/sass/script/value/map.rb +2 -2
  44. data/lib/sass/script/value/number.rb +3 -2
  45. data/lib/sass/script/value/string.rb +5 -12
  46. data/lib/sass/script/value.rb +2 -0
  47. data/lib/sass/script.rb +1 -1
  48. data/lib/sass/scss/css_parser.rb +6 -1
  49. data/lib/sass/scss/parser.rb +145 -56
  50. data/lib/sass/scss/rx.rb +5 -11
  51. data/lib/sass/scss/static_parser.rb +27 -42
  52. data/lib/sass/selector/abstract_sequence.rb +7 -6
  53. data/lib/sass/selector/comma_sequence.rb +21 -5
  54. data/lib/sass/selector/pseudo.rb +20 -3
  55. data/lib/sass/selector/sequence.rb +35 -10
  56. data/lib/sass/selector/simple.rb +10 -2
  57. data/lib/sass/selector/simple_sequence.rb +8 -4
  58. data/lib/sass/selector.rb +4 -0
  59. data/lib/sass/source/map.rb +2 -6
  60. data/lib/sass/stack.rb +21 -1
  61. data/lib/sass/tree/charset_node.rb +1 -1
  62. data/lib/sass/tree/node.rb +2 -2
  63. data/lib/sass/tree/prop_node.rb +45 -53
  64. data/lib/sass/tree/rule_node.rb +13 -6
  65. data/lib/sass/tree/visitors/check_nesting.rb +1 -1
  66. data/lib/sass/tree/visitors/convert.rb +2 -3
  67. data/lib/sass/tree/visitors/cssize.rb +4 -15
  68. data/lib/sass/tree/visitors/deep_copy.rb +2 -2
  69. data/lib/sass/tree/visitors/extend.rb +2 -8
  70. data/lib/sass/tree/visitors/perform.rb +26 -17
  71. data/lib/sass/tree/visitors/set_options.rb +1 -1
  72. data/lib/sass/tree/visitors/to_css.rb +49 -22
  73. data/lib/sass/util/multibyte_string_scanner.rb +127 -131
  74. data/lib/sass/util/normalized_map.rb +1 -8
  75. data/lib/sass/util.rb +72 -310
  76. data/lib/sass/version.rb +0 -4
  77. data/lib/sass.rb +3 -10
  78. metadata +60 -206
  79. data/Rakefile +0 -424
  80. data/lib/sass/script/css_variable_warning.rb +0 -52
  81. data/lib/sass/util/cross_platform_random.rb +0 -19
  82. data/lib/sass/util/ordered_hash.rb +0 -192
  83. data/test/sass/cache_test.rb +0 -131
  84. data/test/sass/callbacks_test.rb +0 -61
  85. data/test/sass/compiler_test.rb +0 -236
  86. data/test/sass/conversion_test.rb +0 -2188
  87. data/test/sass/css2sass_test.rb +0 -526
  88. data/test/sass/css_variable_test.rb +0 -132
  89. data/test/sass/data/hsl-rgb.txt +0 -319
  90. data/test/sass/encoding_test.rb +0 -219
  91. data/test/sass/engine_test.rb +0 -3441
  92. data/test/sass/exec_test.rb +0 -96
  93. data/test/sass/extend_test.rb +0 -1727
  94. data/test/sass/fixtures/test_staleness_check_across_importers.css +0 -1
  95. data/test/sass/fixtures/test_staleness_check_across_importers.scss +0 -1
  96. data/test/sass/functions_test.rb +0 -1974
  97. data/test/sass/importer_test.rb +0 -421
  98. data/test/sass/logger_test.rb +0 -58
  99. data/test/sass/mock_importer.rb +0 -49
  100. data/test/sass/more_results/more1.css +0 -9
  101. data/test/sass/more_results/more1_with_line_comments.css +0 -26
  102. data/test/sass/more_results/more_import.css +0 -29
  103. data/test/sass/more_templates/_more_partial.sass +0 -2
  104. data/test/sass/more_templates/more1.sass +0 -23
  105. data/test/sass/more_templates/more_import.sass +0 -11
  106. data/test/sass/plugin_test.rb +0 -556
  107. data/test/sass/results/alt.css +0 -4
  108. data/test/sass/results/basic.css +0 -9
  109. data/test/sass/results/cached_import_option.css +0 -3
  110. data/test/sass/results/compact.css +0 -5
  111. data/test/sass/results/complex.css +0 -86
  112. data/test/sass/results/compressed.css +0 -1
  113. data/test/sass/results/expanded.css +0 -19
  114. data/test/sass/results/filename_fn.css +0 -3
  115. data/test/sass/results/if.css +0 -3
  116. data/test/sass/results/import.css +0 -31
  117. data/test/sass/results/import_charset.css +0 -5
  118. data/test/sass/results/import_charset_1_8.css +0 -5
  119. data/test/sass/results/import_charset_ibm866.css +0 -5
  120. data/test/sass/results/import_content.css +0 -1
  121. data/test/sass/results/line_numbers.css +0 -49
  122. data/test/sass/results/mixins.css +0 -95
  123. data/test/sass/results/multiline.css +0 -24
  124. data/test/sass/results/nested.css +0 -22
  125. data/test/sass/results/options.css +0 -1
  126. data/test/sass/results/parent_ref.css +0 -13
  127. data/test/sass/results/script.css +0 -16
  128. data/test/sass/results/scss_import.css +0 -31
  129. data/test/sass/results/scss_importee.css +0 -2
  130. data/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  131. data/test/sass/results/subdir/subdir.css +0 -3
  132. data/test/sass/results/units.css +0 -11
  133. data/test/sass/results/warn.css +0 -0
  134. data/test/sass/results/warn_imported.css +0 -0
  135. data/test/sass/script_conversion_test.rb +0 -357
  136. data/test/sass/script_test.rb +0 -1422
  137. data/test/sass/scss/css_test.rb +0 -1281
  138. data/test/sass/scss/rx_test.rb +0 -160
  139. data/test/sass/scss/scss_test.rb +0 -4190
  140. data/test/sass/scss/test_helper.rb +0 -37
  141. data/test/sass/source_map_test.rb +0 -1055
  142. data/test/sass/superselector_test.rb +0 -210
  143. data/test/sass/templates/_cached_import_option_partial.scss +0 -1
  144. data/test/sass/templates/_double_import_loop2.sass +0 -1
  145. data/test/sass/templates/_filename_fn_import.scss +0 -11
  146. data/test/sass/templates/_imported_charset_ibm866.sass +0 -4
  147. data/test/sass/templates/_imported_charset_utf8.sass +0 -4
  148. data/test/sass/templates/_imported_content.sass +0 -3
  149. data/test/sass/templates/_partial.sass +0 -2
  150. data/test/sass/templates/_same_name_different_partiality.scss +0 -1
  151. data/test/sass/templates/alt.sass +0 -16
  152. data/test/sass/templates/basic.sass +0 -23
  153. data/test/sass/templates/bork1.sass +0 -2
  154. data/test/sass/templates/bork2.sass +0 -2
  155. data/test/sass/templates/bork3.sass +0 -2
  156. data/test/sass/templates/bork4.sass +0 -2
  157. data/test/sass/templates/bork5.sass +0 -3
  158. data/test/sass/templates/cached_import_option.scss +0 -3
  159. data/test/sass/templates/compact.sass +0 -17
  160. data/test/sass/templates/complex.sass +0 -305
  161. data/test/sass/templates/compressed.sass +0 -15
  162. data/test/sass/templates/double_import_loop1.sass +0 -1
  163. data/test/sass/templates/expanded.sass +0 -17
  164. data/test/sass/templates/filename_fn.scss +0 -18
  165. data/test/sass/templates/if.sass +0 -11
  166. data/test/sass/templates/import.sass +0 -12
  167. data/test/sass/templates/import_charset.sass +0 -9
  168. data/test/sass/templates/import_charset_1_8.sass +0 -6
  169. data/test/sass/templates/import_charset_ibm866.sass +0 -11
  170. data/test/sass/templates/import_content.sass +0 -4
  171. data/test/sass/templates/importee.less +0 -2
  172. data/test/sass/templates/importee.sass +0 -19
  173. data/test/sass/templates/line_numbers.sass +0 -13
  174. data/test/sass/templates/mixin_bork.sass +0 -5
  175. data/test/sass/templates/mixins.sass +0 -76
  176. data/test/sass/templates/multiline.sass +0 -20
  177. data/test/sass/templates/nested.sass +0 -25
  178. data/test/sass/templates/nested_bork1.sass +0 -2
  179. data/test/sass/templates/nested_bork2.sass +0 -2
  180. data/test/sass/templates/nested_bork3.sass +0 -2
  181. data/test/sass/templates/nested_bork4.sass +0 -2
  182. data/test/sass/templates/nested_import.sass +0 -2
  183. data/test/sass/templates/nested_mixin_bork.sass +0 -6
  184. data/test/sass/templates/options.sass +0 -2
  185. data/test/sass/templates/parent_ref.sass +0 -25
  186. data/test/sass/templates/same_name_different_ext.sass +0 -2
  187. data/test/sass/templates/same_name_different_ext.scss +0 -1
  188. data/test/sass/templates/same_name_different_partiality.scss +0 -1
  189. data/test/sass/templates/script.sass +0 -101
  190. data/test/sass/templates/scss_import.scss +0 -12
  191. data/test/sass/templates/scss_importee.scss +0 -1
  192. data/test/sass/templates/single_import_loop.sass +0 -1
  193. data/test/sass/templates/subdir/import_up1.scss +0 -1
  194. data/test/sass/templates/subdir/import_up2.scss +0 -1
  195. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  196. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  197. data/test/sass/templates/subdir/subdir.sass +0 -6
  198. data/test/sass/templates/units.sass +0 -11
  199. data/test/sass/templates/warn.sass +0 -3
  200. data/test/sass/templates/warn_imported.sass +0 -4
  201. data/test/sass/test_helper.rb +0 -8
  202. data/test/sass/util/multibyte_string_scanner_test.rb +0 -147
  203. data/test/sass/util/normalized_map_test.rb +0 -51
  204. data/test/sass/util/subset_map_test.rb +0 -91
  205. data/test/sass/util_test.rb +0 -438
  206. data/test/sass/value_helpers_test.rb +0 -179
  207. data/test/sass-spec.yml +0 -3
  208. data/test/test_helper.rb +0 -110
  209. data/vendor/listen/CHANGELOG.md +0 -1
  210. data/vendor/listen/CONTRIBUTING.md +0 -38
  211. data/vendor/listen/Gemfile +0 -20
  212. data/vendor/listen/Guardfile +0 -8
  213. data/vendor/listen/LICENSE +0 -20
  214. data/vendor/listen/README.md +0 -349
  215. data/vendor/listen/Rakefile +0 -5
  216. data/vendor/listen/Vagrantfile +0 -96
  217. data/vendor/listen/lib/listen/adapter.rb +0 -327
  218. data/vendor/listen/lib/listen/adapters/bsd.rb +0 -75
  219. data/vendor/listen/lib/listen/adapters/darwin.rb +0 -48
  220. data/vendor/listen/lib/listen/adapters/linux.rb +0 -81
  221. data/vendor/listen/lib/listen/adapters/polling.rb +0 -58
  222. data/vendor/listen/lib/listen/adapters/windows.rb +0 -91
  223. data/vendor/listen/lib/listen/directory_record.rb +0 -406
  224. data/vendor/listen/lib/listen/listener.rb +0 -323
  225. data/vendor/listen/lib/listen/turnstile.rb +0 -32
  226. data/vendor/listen/lib/listen/version.rb +0 -3
  227. data/vendor/listen/lib/listen.rb +0 -54
  228. data/vendor/listen/listen.gemspec +0 -28
  229. data/vendor/listen/spec/listen/adapter_spec.rb +0 -149
  230. data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
  231. data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
  232. data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
  233. data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
  234. data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
  235. data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1250
  236. data/vendor/listen/spec/listen/listener_spec.rb +0 -258
  237. data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
  238. data/vendor/listen/spec/listen_spec.rb +0 -67
  239. data/vendor/listen/spec/spec_helper.rb +0 -25
  240. data/vendor/listen/spec/support/adapter_helper.rb +0 -666
  241. data/vendor/listen/spec/support/directory_record_helper.rb +0 -57
  242. data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
  243. data/vendor/listen/spec/support/listeners_helper.rb +0 -179
  244. 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
@@ -1,49 +0,0 @@
1
- class MockImporter < Sass::Importers::Base
2
- def initialize(name = "mock")
3
- @name = name
4
- @imports = Hash.new({})
5
- end
6
-
7
- def find_relative(uri, base, options)
8
- nil
9
- end
10
-
11
- def find(uri, options)
12
- contents = @imports[uri][:contents]
13
- return unless contents
14
- options[:syntax] = @imports[uri][:syntax]
15
- options[:filename] = uri
16
- options[:importer] = self
17
- @imports[uri][:engine] = Sass::Engine.new(contents, options)
18
- end
19
-
20
- def mtime(uri, options)
21
- @imports[uri][:mtime]
22
- end
23
-
24
- def key(uri, options)
25
- ["mock", uri]
26
- end
27
-
28
- def to_s
29
- @name
30
- end
31
-
32
- # Methods for testing
33
-
34
- def add_import(uri, contents, syntax = :scss, mtime = Time.now - 10)
35
- @imports[uri] = {
36
- :contents => contents,
37
- :mtime => mtime,
38
- :syntax => syntax
39
- }
40
- end
41
-
42
- def touch(uri)
43
- @imports[uri][:mtime] = Time.now
44
- end
45
-
46
- def engine(uri)
47
- @imports[uri][:engine]
48
- end
49
- end
@@ -1,9 +0,0 @@
1
- body { font: Arial; background: blue; }
2
-
3
- #page { width: 700px; height: 100; }
4
- #page #header { height: 300px; }
5
- #page #header h1 { font-size: 50px; color: blue; }
6
-
7
- #content.user.show #container.top #column.left { width: 100px; }
8
- #content.user.show #container.top #column.right { width: 600px; }
9
- #content.user.show #container.bottom { background: brown; }
@@ -1,26 +0,0 @@
1
- /* line 3, ../more_templates/more1.sass */
2
- body {
3
- font: Arial;
4
- background: blue; }
5
-
6
- /* line 7, ../more_templates/more1.sass */
7
- #page {
8
- width: 700px;
9
- height: 100; }
10
- /* line 10, ../more_templates/more1.sass */
11
- #page #header {
12
- height: 300px; }
13
- /* line 12, ../more_templates/more1.sass */
14
- #page #header h1 {
15
- font-size: 50px;
16
- color: blue; }
17
-
18
- /* line 18, ../more_templates/more1.sass */
19
- #content.user.show #container.top #column.left {
20
- width: 100px; }
21
- /* line 20, ../more_templates/more1.sass */
22
- #content.user.show #container.top #column.right {
23
- width: 600px; }
24
- /* line 22, ../more_templates/more1.sass */
25
- #content.user.show #container.bottom {
26
- background: brown; }
@@ -1,29 +0,0 @@
1
- @import url(basic.css);
2
- @import url(../results/complex.css);
3
- imported { otherconst: hello; myconst: goodbye; pre-mixin: here; }
4
-
5
- body { font: Arial; background: blue; }
6
-
7
- #page { width: 700px; height: 100; }
8
- #page #header { height: 300px; }
9
- #page #header h1 { font-size: 50px; color: blue; }
10
-
11
- #content.user.show #container.top #column.left { width: 100px; }
12
- #content.user.show #container.top #column.right { width: 600px; }
13
- #content.user.show #container.bottom { background: brown; }
14
-
15
- midrule { inthe: middle; }
16
-
17
- body { font: Arial; background: blue; }
18
-
19
- #page { width: 700px; height: 100; }
20
- #page #header { height: 300px; }
21
- #page #header h1 { font-size: 50px; color: blue; }
22
-
23
- #content.user.show #container.top #column.left { width: 100px; }
24
- #content.user.show #container.top #column.right { width: 600px; }
25
- #content.user.show #container.bottom { background: brown; }
26
-
27
- #foo { background-color: #baf; }
28
-
29
- nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
@@ -1,2 +0,0 @@
1
- #foo
2
- :background-color #baf
@@ -1,23 +0,0 @@
1
-
2
-
3
- body
4
- :font Arial
5
- :background blue
6
-
7
- #page
8
- :width 700px
9
- :height 100
10
- #header
11
- :height 300px
12
- h1
13
- :font-size 50px
14
- :color blue
15
-
16
- #content.user.show
17
- #container.top
18
- #column.left
19
- :width 100px
20
- #column.right
21
- :width 600px
22
- #container.bottom
23
- :background brown
@@ -1,11 +0,0 @@
1
- $preconst: hello
2
-
3
- =premixin
4
- pre-mixin: here
5
-
6
- @import importee, basic, basic.css, ../results/complex.css, more_partial
7
-
8
- nonimported
9
- :myconst $preconst
10
- :otherconst $postconst
11
- +postmixin