xass 0.1.0

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 (242) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +11 -0
  3. data/CONTRIBUTING +3 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.md +201 -0
  6. data/Rakefile +349 -0
  7. data/VERSION +1 -0
  8. data/VERSION_NAME +1 -0
  9. data/bin/push +13 -0
  10. data/bin/sass +13 -0
  11. data/bin/sass-convert +12 -0
  12. data/bin/scss +13 -0
  13. data/extra/update_watch.rb +13 -0
  14. data/init.rb +18 -0
  15. data/lib/sass/cache_stores/base.rb +88 -0
  16. data/lib/sass/cache_stores/chain.rb +33 -0
  17. data/lib/sass/cache_stores/filesystem.rb +64 -0
  18. data/lib/sass/cache_stores/memory.rb +47 -0
  19. data/lib/sass/cache_stores/null.rb +25 -0
  20. data/lib/sass/cache_stores.rb +15 -0
  21. data/lib/sass/callbacks.rb +66 -0
  22. data/lib/sass/css.rb +409 -0
  23. data/lib/sass/engine.rb +930 -0
  24. data/lib/sass/environment.rb +101 -0
  25. data/lib/sass/error.rb +201 -0
  26. data/lib/sass/exec.rb +707 -0
  27. data/lib/sass/importers/base.rb +139 -0
  28. data/lib/sass/importers/filesystem.rb +186 -0
  29. data/lib/sass/importers.rb +22 -0
  30. data/lib/sass/logger/base.rb +32 -0
  31. data/lib/sass/logger/log_level.rb +49 -0
  32. data/lib/sass/logger.rb +15 -0
  33. data/lib/sass/media.rb +213 -0
  34. data/lib/sass/plugin/compiler.rb +406 -0
  35. data/lib/sass/plugin/configuration.rb +123 -0
  36. data/lib/sass/plugin/generic.rb +15 -0
  37. data/lib/sass/plugin/merb.rb +48 -0
  38. data/lib/sass/plugin/rack.rb +60 -0
  39. data/lib/sass/plugin/rails.rb +47 -0
  40. data/lib/sass/plugin/staleness_checker.rb +199 -0
  41. data/lib/sass/plugin.rb +133 -0
  42. data/lib/sass/railtie.rb +10 -0
  43. data/lib/sass/repl.rb +57 -0
  44. data/lib/sass/root.rb +7 -0
  45. data/lib/sass/script/arg_list.rb +52 -0
  46. data/lib/sass/script/bool.rb +18 -0
  47. data/lib/sass/script/color.rb +606 -0
  48. data/lib/sass/script/css_lexer.rb +29 -0
  49. data/lib/sass/script/css_parser.rb +31 -0
  50. data/lib/sass/script/funcall.rb +245 -0
  51. data/lib/sass/script/functions.rb +1543 -0
  52. data/lib/sass/script/interpolation.rb +79 -0
  53. data/lib/sass/script/lexer.rb +345 -0
  54. data/lib/sass/script/list.rb +85 -0
  55. data/lib/sass/script/literal.rb +221 -0
  56. data/lib/sass/script/node.rb +99 -0
  57. data/lib/sass/script/null.rb +37 -0
  58. data/lib/sass/script/number.rb +453 -0
  59. data/lib/sass/script/operation.rb +110 -0
  60. data/lib/sass/script/parser.rb +502 -0
  61. data/lib/sass/script/string.rb +51 -0
  62. data/lib/sass/script/string_interpolation.rb +103 -0
  63. data/lib/sass/script/unary_operation.rb +69 -0
  64. data/lib/sass/script/variable.rb +58 -0
  65. data/lib/sass/script.rb +39 -0
  66. data/lib/sass/scss/css_parser.rb +36 -0
  67. data/lib/sass/scss/parser.rb +1180 -0
  68. data/lib/sass/scss/rx.rb +133 -0
  69. data/lib/sass/scss/script_lexer.rb +15 -0
  70. data/lib/sass/scss/script_parser.rb +25 -0
  71. data/lib/sass/scss/static_parser.rb +54 -0
  72. data/lib/sass/scss.rb +16 -0
  73. data/lib/sass/selector/abstract_sequence.rb +94 -0
  74. data/lib/sass/selector/comma_sequence.rb +92 -0
  75. data/lib/sass/selector/sequence.rb +507 -0
  76. data/lib/sass/selector/simple.rb +119 -0
  77. data/lib/sass/selector/simple_sequence.rb +215 -0
  78. data/lib/sass/selector.rb +452 -0
  79. data/lib/sass/shared.rb +76 -0
  80. data/lib/sass/supports.rb +229 -0
  81. data/lib/sass/tree/charset_node.rb +22 -0
  82. data/lib/sass/tree/comment_node.rb +82 -0
  83. data/lib/sass/tree/content_node.rb +9 -0
  84. data/lib/sass/tree/css_import_node.rb +60 -0
  85. data/lib/sass/tree/debug_node.rb +18 -0
  86. data/lib/sass/tree/directive_node.rb +42 -0
  87. data/lib/sass/tree/each_node.rb +24 -0
  88. data/lib/sass/tree/extend_node.rb +36 -0
  89. data/lib/sass/tree/for_node.rb +36 -0
  90. data/lib/sass/tree/function_node.rb +34 -0
  91. data/lib/sass/tree/if_node.rb +52 -0
  92. data/lib/sass/tree/import_node.rb +75 -0
  93. data/lib/sass/tree/media_node.rb +58 -0
  94. data/lib/sass/tree/mixin_def_node.rb +38 -0
  95. data/lib/sass/tree/mixin_node.rb +39 -0
  96. data/lib/sass/tree/node.rb +196 -0
  97. data/lib/sass/tree/prop_node.rb +152 -0
  98. data/lib/sass/tree/return_node.rb +18 -0
  99. data/lib/sass/tree/root_node.rb +78 -0
  100. data/lib/sass/tree/rule_node.rb +132 -0
  101. data/lib/sass/tree/supports_node.rb +51 -0
  102. data/lib/sass/tree/trace_node.rb +32 -0
  103. data/lib/sass/tree/variable_node.rb +30 -0
  104. data/lib/sass/tree/visitors/base.rb +75 -0
  105. data/lib/sass/tree/visitors/check_nesting.rb +147 -0
  106. data/lib/sass/tree/visitors/convert.rb +316 -0
  107. data/lib/sass/tree/visitors/cssize.rb +241 -0
  108. data/lib/sass/tree/visitors/deep_copy.rb +102 -0
  109. data/lib/sass/tree/visitors/extend.rb +68 -0
  110. data/lib/sass/tree/visitors/perform.rb +446 -0
  111. data/lib/sass/tree/visitors/set_options.rb +125 -0
  112. data/lib/sass/tree/visitors/to_css.rb +228 -0
  113. data/lib/sass/tree/warn_node.rb +18 -0
  114. data/lib/sass/tree/while_node.rb +18 -0
  115. data/lib/sass/util/multibyte_string_scanner.rb +155 -0
  116. data/lib/sass/util/subset_map.rb +109 -0
  117. data/lib/sass/util/test.rb +10 -0
  118. data/lib/sass/util.rb +948 -0
  119. data/lib/sass/version.rb +126 -0
  120. data/lib/sass.rb +95 -0
  121. data/rails/init.rb +1 -0
  122. data/test/Gemfile +3 -0
  123. data/test/Gemfile.lock +10 -0
  124. data/test/sass/cache_test.rb +89 -0
  125. data/test/sass/callbacks_test.rb +61 -0
  126. data/test/sass/conversion_test.rb +1760 -0
  127. data/test/sass/css2sass_test.rb +458 -0
  128. data/test/sass/data/hsl-rgb.txt +319 -0
  129. data/test/sass/engine_test.rb +3244 -0
  130. data/test/sass/exec_test.rb +86 -0
  131. data/test/sass/extend_test.rb +1482 -0
  132. data/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
  133. data/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
  134. data/test/sass/functions_test.rb +1139 -0
  135. data/test/sass/importer_test.rb +192 -0
  136. data/test/sass/logger_test.rb +58 -0
  137. data/test/sass/mock_importer.rb +49 -0
  138. data/test/sass/more_results/more1.css +9 -0
  139. data/test/sass/more_results/more1_with_line_comments.css +26 -0
  140. data/test/sass/more_results/more_import.css +29 -0
  141. data/test/sass/more_templates/_more_partial.sass +2 -0
  142. data/test/sass/more_templates/more1.sass +23 -0
  143. data/test/sass/more_templates/more_import.sass +11 -0
  144. data/test/sass/plugin_test.rb +564 -0
  145. data/test/sass/results/alt.css +4 -0
  146. data/test/sass/results/basic.css +9 -0
  147. data/test/sass/results/cached_import_option.css +3 -0
  148. data/test/sass/results/compact.css +5 -0
  149. data/test/sass/results/complex.css +86 -0
  150. data/test/sass/results/compressed.css +1 -0
  151. data/test/sass/results/expanded.css +19 -0
  152. data/test/sass/results/filename_fn.css +3 -0
  153. data/test/sass/results/if.css +3 -0
  154. data/test/sass/results/import.css +31 -0
  155. data/test/sass/results/import_charset.css +5 -0
  156. data/test/sass/results/import_charset_1_8.css +5 -0
  157. data/test/sass/results/import_charset_ibm866.css +5 -0
  158. data/test/sass/results/import_content.css +1 -0
  159. data/test/sass/results/line_numbers.css +49 -0
  160. data/test/sass/results/mixins.css +95 -0
  161. data/test/sass/results/multiline.css +24 -0
  162. data/test/sass/results/nested.css +22 -0
  163. data/test/sass/results/options.css +1 -0
  164. data/test/sass/results/parent_ref.css +13 -0
  165. data/test/sass/results/script.css +16 -0
  166. data/test/sass/results/scss_import.css +31 -0
  167. data/test/sass/results/scss_importee.css +2 -0
  168. data/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  169. data/test/sass/results/subdir/subdir.css +3 -0
  170. data/test/sass/results/units.css +11 -0
  171. data/test/sass/results/warn.css +0 -0
  172. data/test/sass/results/warn_imported.css +0 -0
  173. data/test/sass/script_conversion_test.rb +299 -0
  174. data/test/sass/script_test.rb +622 -0
  175. data/test/sass/scss/css_test.rb +1100 -0
  176. data/test/sass/scss/rx_test.rb +156 -0
  177. data/test/sass/scss/scss_test.rb +2106 -0
  178. data/test/sass/scss/test_helper.rb +37 -0
  179. data/test/sass/templates/_cached_import_option_partial.scss +1 -0
  180. data/test/sass/templates/_double_import_loop2.sass +1 -0
  181. data/test/sass/templates/_filename_fn_import.scss +11 -0
  182. data/test/sass/templates/_imported_charset_ibm866.sass +4 -0
  183. data/test/sass/templates/_imported_charset_utf8.sass +4 -0
  184. data/test/sass/templates/_imported_content.sass +3 -0
  185. data/test/sass/templates/_partial.sass +2 -0
  186. data/test/sass/templates/_same_name_different_partiality.scss +1 -0
  187. data/test/sass/templates/alt.sass +16 -0
  188. data/test/sass/templates/basic.sass +23 -0
  189. data/test/sass/templates/bork1.sass +2 -0
  190. data/test/sass/templates/bork2.sass +2 -0
  191. data/test/sass/templates/bork3.sass +2 -0
  192. data/test/sass/templates/bork4.sass +2 -0
  193. data/test/sass/templates/bork5.sass +3 -0
  194. data/test/sass/templates/cached_import_option.scss +3 -0
  195. data/test/sass/templates/compact.sass +17 -0
  196. data/test/sass/templates/complex.sass +305 -0
  197. data/test/sass/templates/compressed.sass +15 -0
  198. data/test/sass/templates/double_import_loop1.sass +1 -0
  199. data/test/sass/templates/expanded.sass +17 -0
  200. data/test/sass/templates/filename_fn.scss +18 -0
  201. data/test/sass/templates/if.sass +11 -0
  202. data/test/sass/templates/import.sass +12 -0
  203. data/test/sass/templates/import_charset.sass +9 -0
  204. data/test/sass/templates/import_charset_1_8.sass +6 -0
  205. data/test/sass/templates/import_charset_ibm866.sass +11 -0
  206. data/test/sass/templates/import_content.sass +4 -0
  207. data/test/sass/templates/importee.less +2 -0
  208. data/test/sass/templates/importee.sass +19 -0
  209. data/test/sass/templates/line_numbers.sass +13 -0
  210. data/test/sass/templates/mixin_bork.sass +5 -0
  211. data/test/sass/templates/mixins.sass +76 -0
  212. data/test/sass/templates/multiline.sass +20 -0
  213. data/test/sass/templates/nested.sass +25 -0
  214. data/test/sass/templates/nested_bork1.sass +2 -0
  215. data/test/sass/templates/nested_bork2.sass +2 -0
  216. data/test/sass/templates/nested_bork3.sass +2 -0
  217. data/test/sass/templates/nested_bork4.sass +2 -0
  218. data/test/sass/templates/nested_import.sass +2 -0
  219. data/test/sass/templates/nested_mixin_bork.sass +6 -0
  220. data/test/sass/templates/options.sass +2 -0
  221. data/test/sass/templates/parent_ref.sass +25 -0
  222. data/test/sass/templates/same_name_different_ext.sass +2 -0
  223. data/test/sass/templates/same_name_different_ext.scss +1 -0
  224. data/test/sass/templates/same_name_different_partiality.scss +1 -0
  225. data/test/sass/templates/script.sass +101 -0
  226. data/test/sass/templates/scss_import.scss +11 -0
  227. data/test/sass/templates/scss_importee.scss +1 -0
  228. data/test/sass/templates/single_import_loop.sass +1 -0
  229. data/test/sass/templates/subdir/import_up1.scss +1 -0
  230. data/test/sass/templates/subdir/import_up2.scss +1 -0
  231. data/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  232. data/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  233. data/test/sass/templates/subdir/subdir.sass +6 -0
  234. data/test/sass/templates/units.sass +11 -0
  235. data/test/sass/templates/warn.sass +3 -0
  236. data/test/sass/templates/warn_imported.sass +4 -0
  237. data/test/sass/test_helper.rb +8 -0
  238. data/test/sass/util/multibyte_string_scanner_test.rb +147 -0
  239. data/test/sass/util/subset_map_test.rb +91 -0
  240. data/test/sass/util_test.rb +382 -0
  241. data/test/test_helper.rb +80 -0
  242. metadata +354 -0
@@ -0,0 +1,192 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+ require File.dirname(__FILE__) + '/test_helper'
4
+
5
+ require 'sass/plugin'
6
+
7
+ class ImporterTest < Test::Unit::TestCase
8
+
9
+ class FruitImporter < Sass::Importers::Base
10
+ def find(name, context = nil)
11
+ if name =~ %r{fruits/(\w+)(\.s[ac]ss)?}
12
+ fruit = $1
13
+ color = case $1
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
+ end
30
+
31
+ def key(name, context)
32
+ [self.class.name, name]
33
+ end
34
+ end
35
+
36
+ # This class proves that you can override the extension scheme for importers
37
+ class ReversedExtImporter < Sass::Importers::Filesystem
38
+ def extensions
39
+ {"sscs" => :scss, "ssas" => :sass}
40
+ end
41
+ end
42
+
43
+ # This importer maps one import to another import
44
+ # based on the mappings passed to importer's constructor.
45
+ class IndirectImporter < Sass::Importers::Base
46
+ def initialize(mappings, mtimes)
47
+ @mappings = mappings
48
+ @mtimes = mtimes
49
+ end
50
+ def find_relative(uri, base, options)
51
+ nil
52
+ end
53
+ def find(name, options)
54
+ if @mappings.has_key?(name)
55
+ Sass::Engine.new(
56
+ %Q[@import "#{@mappings[name]}";],
57
+ options.merge(
58
+ :filename => name,
59
+ :syntax => :scss,
60
+ :importer => self
61
+ )
62
+ )
63
+ end
64
+ end
65
+ def mtime(uri, options)
66
+ @mtimes.fetch(uri, @mtimes.has_key?(uri) ? Time.now : nil)
67
+ end
68
+ def key(uri, options)
69
+ [self.class.name, uri]
70
+ end
71
+ def to_s
72
+ "IndirectImporter(#{@mappings.keys.join(", ")})"
73
+ end
74
+ end
75
+
76
+ # This importer maps the import to single class
77
+ # based on the mappings passed to importer's constructor.
78
+ class ClassImporter < Sass::Importers::Base
79
+ def initialize(mappings, mtimes)
80
+ @mappings = mappings
81
+ @mtimes = mtimes
82
+ end
83
+ def find_relative(uri, base, options)
84
+ nil
85
+ end
86
+ def find(name, options)
87
+ if @mappings.has_key?(name)
88
+ Sass::Engine.new(
89
+ %Q[.#{name}{#{@mappings[name]}}],
90
+ options.merge(
91
+ :filename => name,
92
+ :syntax => :scss,
93
+ :importer => self
94
+ )
95
+ )
96
+ end
97
+ end
98
+ def mtime(uri, options)
99
+ @mtimes.fetch(uri, @mtimes.has_key?(uri) ? Time.now : nil)
100
+ end
101
+ def key(uri, options)
102
+ [self.class.name, uri]
103
+ end
104
+ def to_s
105
+ "ClassImporter(#{@mappings.keys.join(", ")})"
106
+ end
107
+ end
108
+
109
+ def test_can_resolve_generated_imports
110
+ scss_file = %Q{
111
+ $pear-color: green;
112
+ @import "fruits/apple"; @import "fruits/orange"; @import "fruits/pear";
113
+ .apple { @include apple; }
114
+ .orange { @include orange; }
115
+ .pear { @include pear; }
116
+ }
117
+ css_file = <<CSS
118
+ .apple { color: red; }
119
+
120
+ .orange { color: orange; }
121
+
122
+ .pear { color: green; }
123
+ CSS
124
+ options = {:style => :compact, :load_paths => [FruitImporter.new], :syntax => :scss}
125
+ assert_equal css_file, Sass::Engine.new(scss_file, options).render
126
+ end
127
+
128
+ def test_extension_overrides
129
+ FileUtils.mkdir_p(absolutize("tmp"))
130
+ open(absolutize("tmp/foo.ssas"), "w") {|f| f.write(".foo\n reversed: true\n")}
131
+ open(absolutize("tmp/bar.sscs"), "w") {|f| f.write(".bar {reversed: true}\n")}
132
+ scss_file = %Q{
133
+ @import "foo", "bar";
134
+ @import "foo.ssas", "bar.sscs";
135
+ }
136
+ css_file = <<CSS
137
+ .foo { reversed: true; }
138
+
139
+ .bar { reversed: true; }
140
+
141
+ .foo { reversed: true; }
142
+
143
+ .bar { reversed: true; }
144
+ CSS
145
+ options = {:style => :compact, :load_paths => [ReversedExtImporter.new(absolutize("tmp"))], :syntax => :scss}
146
+ assert_equal css_file, Sass::Engine.new(scss_file, options).render
147
+ ensure
148
+ FileUtils.rm_rf(absolutize("tmp"))
149
+ end
150
+
151
+ def test_staleness_check_across_importers
152
+ file_system_importer = Sass::Importers::Filesystem.new(fixture_dir)
153
+ # Make sure the first import is older
154
+ indirect_importer = IndirectImporter.new({"apple" => "pear"}, {"apple" => Time.now - 1})
155
+ # Make css file is newer so the dependencies are the only way for the css file to be out of date.
156
+ FileUtils.touch(fixture_file("test_staleness_check_across_importers.css"))
157
+ # Make sure the first import is older
158
+ class_importer = ClassImporter.new({"pear" => %Q{color: green;}}, {"pear" => Time.now + 1})
159
+
160
+ options = {
161
+ :style => :compact,
162
+ :filename => fixture_file("test_staleness_check_across_importers.scss"),
163
+ :importer => file_system_importer,
164
+ :load_paths => [file_system_importer, indirect_importer, class_importer],
165
+ :syntax => :scss
166
+ }
167
+
168
+ assert_equal File.read(fixture_file("test_staleness_check_across_importers.css")),
169
+ Sass::Engine.new(File.read(fixture_file("test_staleness_check_across_importers.scss")), options).render
170
+
171
+ checker = Sass::Plugin::StalenessChecker.new(options)
172
+
173
+ assert checker.stylesheet_needs_update?(
174
+ fixture_file("test_staleness_check_across_importers.css"),
175
+ fixture_file("test_staleness_check_across_importers.scss"),
176
+ file_system_importer
177
+ )
178
+ end
179
+
180
+ def fixture_dir
181
+ File.join(File.dirname(__FILE__), "fixtures")
182
+ end
183
+
184
+ def fixture_file(path)
185
+ File.join(fixture_dir, path)
186
+ end
187
+
188
+ def test_absolute_files_across_template_locations
189
+ importer = Sass::Importers::Filesystem.new(absolutize 'templates')
190
+ assert_not_nil importer.mtime(absolutize('more_templates/more1.sass'), {})
191
+ end
192
+ end
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+ require 'pathname'
4
+
5
+ class LoggerTest < Test::Unit::TestCase
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
@@ -0,0 +1,49 @@
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
@@ -0,0 +1,9 @@
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; }
@@ -0,0 +1,26 @@
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; }
@@ -0,0 +1,29 @@
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: #bbaaff; }
28
+
29
+ nonimported { myconst: hello; otherconst: goodbye; post-mixin: here; }
@@ -0,0 +1,2 @@
1
+ #foo
2
+ :background-color #baf
@@ -0,0 +1,23 @@
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
@@ -0,0 +1,11 @@
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