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,126 @@
1
+ require 'date'
2
+
3
+ # This is necessary for loading Sass when Haml is required in Rails 3.
4
+ # Once the split is complete, we can remove it.
5
+ require File.dirname(__FILE__) + '/../sass'
6
+ require 'sass/util'
7
+
8
+ module Sass
9
+ # Handles Sass version-reporting.
10
+ # Sass not only reports the standard three version numbers,
11
+ # but its Git revision hash as well,
12
+ # if it was installed from Git.
13
+ module Version
14
+ include Sass::Util
15
+
16
+ # Returns a hash representing the version of Sass.
17
+ # The `:major`, `:minor`, and `:teeny` keys have their respective numbers as Fixnums.
18
+ # The `:name` key has the name of the version.
19
+ # The `:string` key contains a human-readable string representation of the version.
20
+ # The `:number` key is the major, minor, and teeny keys separated by periods.
21
+ # The `:date` key, which is not guaranteed to be defined, is the [DateTime] at which this release was cut.
22
+ # If Sass is checked out from Git, the `:rev` key will have the revision hash.
23
+ # For example:
24
+ #
25
+ # {
26
+ # :string => "2.1.0.9616393",
27
+ # :rev => "9616393b8924ef36639c7e82aa88a51a24d16949",
28
+ # :number => "2.1.0",
29
+ # :date => DateTime.parse("Apr 30 13:52:01 2009 -0700"),
30
+ # :major => 2, :minor => 1, :teeny => 0
31
+ # }
32
+ #
33
+ # If a prerelease version of Sass is being used,
34
+ # the `:string` and `:number` fields will reflect the full version
35
+ # (e.g. `"2.2.beta.1"`), and the `:teeny` field will be `-1`.
36
+ # A `:prerelease` key will contain the name of the prerelease (e.g. `"beta"`),
37
+ # and a `:prerelease_number` key will contain the rerelease number.
38
+ # For example:
39
+ #
40
+ # {
41
+ # :string => "3.0.beta.1",
42
+ # :number => "3.0.beta.1",
43
+ # :date => DateTime.parse("Mar 31 00:38:04 2010 -0700"),
44
+ # :major => 3, :minor => 0, :teeny => -1,
45
+ # :prerelease => "beta",
46
+ # :prerelease_number => 1
47
+ # }
48
+ #
49
+ # @return [{Symbol => String/Fixnum}] The version hash
50
+ def version
51
+ return @@version if defined?(@@version)
52
+
53
+ numbers = File.read(scope('VERSION')).strip.split('.').
54
+ map {|n| n =~ /^[0-9]+$/ ? n.to_i : n}
55
+ name = File.read(scope('VERSION_NAME')).strip
56
+ @@version = {
57
+ :major => numbers[0],
58
+ :minor => numbers[1],
59
+ :teeny => numbers[2],
60
+ :name => name
61
+ }
62
+
63
+ if date = version_date
64
+ @@version[:date] = date
65
+ end
66
+
67
+ if numbers[3].is_a?(String)
68
+ @@version[:teeny] = -1
69
+ @@version[:prerelease] = numbers[3]
70
+ @@version[:prerelease_number] = numbers[4]
71
+ end
72
+
73
+ @@version[:number] = numbers.join('.')
74
+ @@version[:string] = @@version[:number].dup
75
+
76
+ if rev = revision_number
77
+ @@version[:rev] = rev
78
+ unless rev[0] == ?(
79
+ @@version[:string] << "." << rev[0...7]
80
+ end
81
+ end
82
+
83
+ @@version[:string] << " (#{name})"
84
+ @@version
85
+ end
86
+
87
+ private
88
+
89
+ def revision_number
90
+ if File.exists?(scope('REVISION'))
91
+ rev = File.read(scope('REVISION')).strip
92
+ return rev unless rev =~ /^([a-f0-9]+|\(.*\))$/ || rev == '(unknown)'
93
+ end
94
+
95
+ return unless File.exists?(scope('.git/HEAD'))
96
+ rev = File.read(scope('.git/HEAD')).strip
97
+ return rev unless rev =~ /^ref: (.*)$/
98
+
99
+ ref_name = $1
100
+ ref_file = scope(".git/#{ref_name}")
101
+ info_file = scope(".git/info/refs")
102
+ return File.read(ref_file).strip if File.exists?(ref_file)
103
+ return unless File.exists?(info_file)
104
+ File.open(info_file) do |f|
105
+ f.each do |l|
106
+ sha, ref = l.strip.split("\t", 2)
107
+ next unless ref == ref_name
108
+ return sha
109
+ end
110
+ end
111
+ return nil
112
+ end
113
+
114
+ def version_date
115
+ return unless File.exists?(scope('VERSION_DATE'))
116
+ return DateTime.parse(File.read(scope('VERSION_DATE')).strip)
117
+ end
118
+ end
119
+
120
+ extend Sass::Version
121
+
122
+ # A string representing the version of Sass.
123
+ # A more fine-grained representation is available from Sass.version.
124
+ # @api public
125
+ VERSION = version[:string] unless defined?(Sass::VERSION)
126
+ end
data/lib/sass.rb ADDED
@@ -0,0 +1,95 @@
1
+ dir = File.dirname(__FILE__)
2
+ $LOAD_PATH.unshift dir unless $LOAD_PATH.include?(dir)
3
+
4
+ # This is necessary to set so that the Haml code that tries to load Sass
5
+ # knows that Sass is indeed loading,
6
+ # even if there's some crazy autoload stuff going on.
7
+ SASS_BEGUN_TO_LOAD = true unless defined?(SASS_BEGUN_TO_LOAD)
8
+
9
+ require 'sass/version'
10
+
11
+ # The module that contains everything Sass-related:
12
+ #
13
+ # * {Sass::Engine} is the class used to render Sass/SCSS within Ruby code.
14
+ # * {Sass::Plugin} is interfaces with web frameworks (Rails and Merb in particular).
15
+ # * {Sass::SyntaxError} is raised when Sass encounters an error.
16
+ # * {Sass::CSS} handles conversion of CSS to Sass.
17
+ #
18
+ # Also see the {file:SASS_REFERENCE.md full Sass reference}.
19
+ module Sass
20
+ # The global load paths for Sass files. This is meant for plugins and
21
+ # libraries to register the paths to their Sass stylesheets to that they may
22
+ # be `@imported`. This load path is used by every instance of [Sass::Engine].
23
+ # They are lower-precedence than any load paths passed in via the
24
+ # {file:SASS_REFERENCE.md#load_paths-option `:load_paths` option}.
25
+ #
26
+ # If the `SASS_PATH` environment variable is set,
27
+ # the initial value of `load_paths` will be initialized based on that.
28
+ # The variable should be a colon-separated list of path names
29
+ # (semicolon-separated on Windows).
30
+ #
31
+ # Note that files on the global load path are never compiled to CSS
32
+ # themselves, even if they aren't partials. They exist only to be imported.
33
+ #
34
+ # @example
35
+ # Sass.load_paths << File.dirname(__FILE__ + '/sass')
36
+ # @return [Array<String, Pathname, Sass::Importers::Base>]
37
+ def self.load_paths
38
+ @load_paths ||= ENV['SASS_PATH'] ?
39
+ ENV['SASS_PATH'].split(Sass::Util.windows? ? ';' : ':') : []
40
+ end
41
+
42
+ # Compile a Sass or SCSS string to CSS.
43
+ # Defaults to SCSS.
44
+ #
45
+ # @param contents [String] The contents of the Sass file.
46
+ # @param options [{Symbol => Object}] An options hash;
47
+ # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
48
+ # @raise [Sass::SyntaxError] if there's an error in the document
49
+ # @raise [Encoding::UndefinedConversionError] if the source encoding
50
+ # cannot be converted to UTF-8
51
+ # @raise [ArgumentError] if the document uses an unknown encoding with `@charset`
52
+ def self.compile(contents, options = {})
53
+ options[:syntax] ||= :scss
54
+ Engine.new(contents, options).to_css
55
+ end
56
+
57
+ # Compile a file on disk to CSS.
58
+ #
59
+ # @param filename [String] The path to the Sass, SCSS, or CSS file on disk.
60
+ # @param options [{Symbol => Object}] An options hash;
61
+ # see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
62
+ # @raise [Sass::SyntaxError] if there's an error in the document
63
+ # @raise [Encoding::UndefinedConversionError] if the source encoding
64
+ # cannot be converted to UTF-8
65
+ # @raise [ArgumentError] if the document uses an unknown encoding with `@charset`
66
+ #
67
+ # @overload compile_file(filename, options = {})
68
+ # Return the compiled CSS rather than writing it to a file.
69
+ #
70
+ # @return [String] The compiled CSS.
71
+ #
72
+ # @overload compile_file(filename, css_filename, options = {})
73
+ # Write the compiled CSS to a file.
74
+ #
75
+ # @param css_filename [String] The location to which to write the compiled CSS.
76
+ def self.compile_file(filename, *args)
77
+ options = args.last.is_a?(Hash) ? args.pop : {}
78
+ css_filename = args.shift
79
+ result = Sass::Engine.for_file(filename, options).render
80
+ if css_filename
81
+ options[:css_filename] ||= css_filename
82
+ open(css_filename,"w") {|css_file| css_file.write(result)}
83
+ nil
84
+ else
85
+ result
86
+ end
87
+ end
88
+ end
89
+
90
+ require 'sass/logger'
91
+ require 'sass/util'
92
+
93
+ require 'sass/engine'
94
+ require 'sass/plugin' if defined?(Merb::Plugins)
95
+ require 'sass/railtie'
data/rails/init.rb ADDED
@@ -0,0 +1 @@
1
+ Kernel.load File.join(File.dirname(__FILE__), '..', 'init.rb')
data/test/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :gemcutter
2
+
3
+ gem 'rake'
data/test/Gemfile.lock ADDED
@@ -0,0 +1,10 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ rake (0.9.2)
5
+
6
+ PLATFORMS
7
+ ruby
8
+
9
+ DEPENDENCIES
10
+ rake
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+ require File.dirname(__FILE__) + '/test_helper'
4
+ require 'sass/engine'
5
+
6
+ class CacheTest < Test::Unit::TestCase
7
+ @@cache_dir = "tmp/file_cache"
8
+
9
+ def setup
10
+ FileUtils.mkdir_p @@cache_dir
11
+ end
12
+
13
+ def teardown
14
+ FileUtils.rm_rf @@cache_dir
15
+ clean_up_sassc
16
+ end
17
+
18
+ def test_file_cache_writes_a_file
19
+ file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
20
+ file_store.store("asdf/foo.scssc", "fakesha1", root_node)
21
+ assert File.exists?("#{@@cache_dir}/asdf/foo.scssc")
22
+ end
23
+
24
+ def test_file_cache_reads_a_file
25
+ file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
26
+ assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
27
+ file_store.store("asdf/foo.scssc", "fakesha1", root_node)
28
+ assert File.exists?("#{@@cache_dir}/asdf/foo.scssc")
29
+ assert_kind_of Sass::Tree::RootNode, file_store.retrieve("asdf/foo.scssc", "fakesha1")
30
+ end
31
+
32
+ def test_file_cache_miss_returns_nil
33
+ file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
34
+ assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
35
+ assert_nil file_store.retrieve("asdf/foo.scssc", "fakesha1")
36
+ end
37
+
38
+ def test_sha_change_invalidates_cache_and_cleans_up
39
+ file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
40
+ assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
41
+ file_store.store("asdf/foo.scssc", "fakesha1", root_node)
42
+ assert File.exists?("#{@@cache_dir}/asdf/foo.scssc")
43
+ assert_nil file_store.retrieve("asdf/foo.scssc", "differentsha1")
44
+ assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
45
+ end
46
+
47
+ def test_version_change_invalidates_cache_and_cleans_up
48
+ file_store = Sass::CacheStores::Filesystem.new(@@cache_dir)
49
+ assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
50
+ file_store.store("asdf/foo.scssc", "fakesha1", root_node)
51
+ assert File.exists?("#{@@cache_dir}/asdf/foo.scssc")
52
+ real_version = Sass::VERSION
53
+ begin
54
+ Sass::VERSION.replace("a different version")
55
+ assert_nil file_store.retrieve("asdf/foo.scssc", "fakesha1")
56
+ assert !File.exists?("#{@@cache_dir}/asdf/foo.scssc")
57
+ ensure
58
+ Sass::VERSION.replace(real_version)
59
+ end
60
+ end
61
+
62
+ def test_arbitrary_objects_can_go_into_cache
63
+ cache = Sass::CacheStores::Memory.new
64
+ an_object = {:foo => :bar}
65
+ cache.store("an_object", "", an_object)
66
+ assert_equal an_object, cache.retrieve("an_object", "")
67
+ end
68
+
69
+ class Unmarshalable
70
+ def _dump(_)
71
+ raise 'Unmarshalable'
72
+ end
73
+ end
74
+
75
+ def test_cache_node_with_unmarshalable_option
76
+ engine = Sass::Engine.new("foo {a: b + c}",
77
+ :syntax => :scss, :object => Unmarshalable.new, :filename => 'file.scss',
78
+ :importer => Sass::Importers::Filesystem.new(absolutize('templates')))
79
+ engine.to_tree
80
+ end
81
+
82
+ private
83
+ def root_node
84
+ Sass::Engine.new(<<-SCSS, :syntax => :scss).to_tree
85
+ @mixin color($c) { color: $c}
86
+ div { @include color(red); }
87
+ SCSS
88
+ end
89
+ end
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+ require 'sass/callbacks'
4
+
5
+ class CallerBack
6
+ extend Sass::Callbacks
7
+ define_callback :foo
8
+ define_callback :bar
9
+
10
+ def do_foo
11
+ run_foo
12
+ end
13
+
14
+ def do_bar
15
+ run_bar 12
16
+ end
17
+ end
18
+
19
+ module ClassLevelCallerBack
20
+ extend Sass::Callbacks
21
+ define_callback :foo
22
+ extend self
23
+
24
+ def do_foo
25
+ run_foo
26
+ end
27
+ end
28
+
29
+ class SassCallbacksTest < Test::Unit::TestCase
30
+ def test_simple_callback
31
+ cb = CallerBack.new
32
+ there = false
33
+ cb.on_foo {there = true}
34
+ cb.do_foo
35
+ assert there, "Expected callback to be called."
36
+ end
37
+
38
+ def test_multiple_callbacks
39
+ cb = CallerBack.new
40
+ str = ""
41
+ cb.on_foo {str += "first"}
42
+ cb.on_foo {str += " second"}
43
+ cb.do_foo
44
+ assert_equal "first second", str
45
+ end
46
+
47
+ def test_callback_with_arg
48
+ cb = CallerBack.new
49
+ val = nil
50
+ cb.on_bar {|a| val = a}
51
+ cb.do_bar
52
+ assert_equal 12, val
53
+ end
54
+
55
+ def test_class_level_callback
56
+ there = false
57
+ ClassLevelCallerBack.on_foo {there = true}
58
+ ClassLevelCallerBack.do_foo
59
+ assert there, "Expected callback to be called."
60
+ end
61
+ end