classiccms 0.3.0 → 0.3.1

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 (369) hide show
  1. data/lib/classiccms/application.rb +2 -3
  2. data/lib/classiccms/cli.rb +6 -0
  3. data/lib/classiccms/scaffold/Gemfile +4 -0
  4. data/lib/classiccms/{mongoid.yml → scaffold/config/mongoid.yml} +3 -4
  5. data/lib/classiccms/scaffold/spec/models/article_spec.rb +8 -0
  6. data/lib/classiccms/scaffold/spec/spec_helper.rb +24 -0
  7. data/lib/classiccms/version.rb +1 -1
  8. data/spec/cli_spec.rb +8 -0
  9. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/build/v8/libv8.a +0 -0
  10. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/build/v8/libv8preparser.a +0 -0
  11. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-debug.h +395 -0
  12. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-preparser.h +117 -0
  13. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-profiler.h +505 -0
  14. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-testing.h +104 -0
  15. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8.h +4124 -0
  16. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8stdint.h +53 -0
  17. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/version.rb +6 -0
  18. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8.rb +15 -0
  19. data/vendor/bundle/gems/sass-3.1.19/.yardopts +11 -0
  20. data/vendor/bundle/gems/sass-3.1.19/CONTRIBUTING +3 -0
  21. data/vendor/bundle/gems/sass-3.1.19/MIT-LICENSE +20 -0
  22. data/vendor/bundle/gems/sass-3.1.19/README.md +200 -0
  23. data/vendor/bundle/gems/sass-3.1.19/REVISION +1 -0
  24. data/vendor/bundle/gems/sass-3.1.19/Rakefile +339 -0
  25. data/vendor/bundle/gems/sass-3.1.19/VERSION +1 -0
  26. data/vendor/bundle/gems/sass-3.1.19/VERSION_NAME +1 -0
  27. data/vendor/bundle/gems/sass-3.1.19/bin/sass +8 -0
  28. data/vendor/bundle/gems/sass-3.1.19/bin/sass-convert +7 -0
  29. data/vendor/bundle/gems/sass-3.1.19/bin/scss +8 -0
  30. data/vendor/bundle/gems/sass-3.1.19/extra/update_watch.rb +13 -0
  31. data/vendor/bundle/gems/sass-3.1.19/init.rb +18 -0
  32. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/base.rb +86 -0
  33. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/chain.rb +33 -0
  34. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/filesystem.rb +61 -0
  35. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/memory.rb +47 -0
  36. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/null.rb +25 -0
  37. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores.rb +15 -0
  38. data/vendor/bundle/gems/sass-3.1.19/lib/sass/callbacks.rb +66 -0
  39. data/vendor/bundle/gems/sass-3.1.19/lib/sass/css.rb +390 -0
  40. data/vendor/bundle/gems/sass-3.1.19/lib/sass/engine.rb +880 -0
  41. data/vendor/bundle/gems/sass-3.1.19/lib/sass/environment.rb +180 -0
  42. data/vendor/bundle/gems/sass-3.1.19/lib/sass/error.rb +201 -0
  43. data/vendor/bundle/gems/sass-3.1.19/lib/sass/exec.rb +682 -0
  44. data/vendor/bundle/gems/sass-3.1.19/lib/sass/importers/base.rb +139 -0
  45. data/vendor/bundle/gems/sass-3.1.19/lib/sass/importers/filesystem.rb +149 -0
  46. data/vendor/bundle/gems/sass-3.1.19/lib/sass/importers.rb +22 -0
  47. data/vendor/bundle/gems/sass-3.1.19/lib/sass/less.rb +382 -0
  48. data/vendor/bundle/gems/sass-3.1.19/lib/sass/logger/base.rb +32 -0
  49. data/vendor/bundle/gems/sass-3.1.19/lib/sass/logger/log_level.rb +49 -0
  50. data/vendor/bundle/gems/sass-3.1.19/lib/sass/logger.rb +15 -0
  51. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/compiler.rb +384 -0
  52. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/configuration.rb +123 -0
  53. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/generic.rb +15 -0
  54. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/merb.rb +48 -0
  55. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/rack.rb +60 -0
  56. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/rails.rb +47 -0
  57. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/staleness_checker.rb +183 -0
  58. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin.rb +132 -0
  59. data/vendor/bundle/gems/sass-3.1.19/lib/sass/railtie.rb +9 -0
  60. data/vendor/bundle/gems/sass-3.1.19/lib/sass/repl.rb +57 -0
  61. data/vendor/bundle/gems/sass-3.1.19/lib/sass/root.rb +7 -0
  62. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/bool.rb +18 -0
  63. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/color.rb +475 -0
  64. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/css_lexer.rb +29 -0
  65. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/css_parser.rb +31 -0
  66. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/funcall.rb +175 -0
  67. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/functions.rb +1381 -0
  68. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/interpolation.rb +79 -0
  69. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/lexer.rb +337 -0
  70. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/list.rb +84 -0
  71. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/literal.rb +230 -0
  72. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/node.rb +99 -0
  73. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/number.rb +452 -0
  74. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/operation.rb +107 -0
  75. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/parser.rb +474 -0
  76. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/string.rb +51 -0
  77. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/string_interpolation.rb +103 -0
  78. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/unary_operation.rb +64 -0
  79. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/variable.rb +58 -0
  80. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script.rb +39 -0
  81. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/css_parser.rb +46 -0
  82. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/parser.rb +1055 -0
  83. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/rx.rb +137 -0
  84. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/sass_parser.rb +11 -0
  85. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/script_lexer.rb +15 -0
  86. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/script_parser.rb +25 -0
  87. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/static_parser.rb +40 -0
  88. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss.rb +17 -0
  89. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/abstract_sequence.rb +71 -0
  90. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/comma_sequence.rb +86 -0
  91. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/sequence.rb +296 -0
  92. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/simple.rb +119 -0
  93. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/simple_sequence.rb +154 -0
  94. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector.rb +373 -0
  95. data/vendor/bundle/gems/sass-3.1.19/lib/sass/shared.rb +76 -0
  96. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/charset_node.rb +22 -0
  97. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/comment_node.rb +90 -0
  98. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/debug_node.rb +18 -0
  99. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/directive_node.rb +28 -0
  100. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/each_node.rb +24 -0
  101. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/extend_node.rb +29 -0
  102. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/for_node.rb +36 -0
  103. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/function_node.rb +27 -0
  104. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/if_node.rb +52 -0
  105. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/import_node.rb +68 -0
  106. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/media_node.rb +32 -0
  107. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/mixin_def_node.rb +27 -0
  108. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/mixin_node.rb +32 -0
  109. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/node.rb +188 -0
  110. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/prop_node.rb +148 -0
  111. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/return_node.rb +18 -0
  112. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/root_node.rb +28 -0
  113. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/rule_node.rb +127 -0
  114. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/variable_node.rb +30 -0
  115. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/base.rb +75 -0
  116. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/check_nesting.rb +127 -0
  117. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/convert.rb +262 -0
  118. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/cssize.rb +206 -0
  119. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/deep_copy.rb +87 -0
  120. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/extend.rb +42 -0
  121. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/perform.rb +357 -0
  122. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/set_options.rb +97 -0
  123. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/to_css.rb +219 -0
  124. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/warn_node.rb +18 -0
  125. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/while_node.rb +18 -0
  126. data/vendor/bundle/gems/sass-3.1.19/lib/sass/util/multibyte_string_scanner.rb +134 -0
  127. data/vendor/bundle/gems/sass-3.1.19/lib/sass/util/subset_map.rb +101 -0
  128. data/vendor/bundle/gems/sass-3.1.19/lib/sass/util.rb +800 -0
  129. data/vendor/bundle/gems/sass-3.1.19/lib/sass/version.rb +112 -0
  130. data/vendor/bundle/gems/sass-3.1.19/lib/sass.rb +73 -0
  131. data/vendor/bundle/gems/sass-3.1.19/rails/init.rb +1 -0
  132. data/vendor/bundle/gems/sass-3.1.19/test/Gemfile +4 -0
  133. data/vendor/bundle/gems/sass-3.1.19/test/sass/cache_test.rb +89 -0
  134. data/vendor/bundle/gems/sass-3.1.19/test/sass/callbacks_test.rb +61 -0
  135. data/vendor/bundle/gems/sass-3.1.19/test/sass/conversion_test.rb +1245 -0
  136. data/vendor/bundle/gems/sass-3.1.19/test/sass/css2sass_test.rb +397 -0
  137. data/vendor/bundle/gems/sass-3.1.19/test/sass/data/hsl-rgb.txt +319 -0
  138. data/vendor/bundle/gems/sass-3.1.19/test/sass/engine_test.rb +2730 -0
  139. data/vendor/bundle/gems/sass-3.1.19/test/sass/extend_test.rb +1663 -0
  140. data/vendor/bundle/gems/sass-3.1.19/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
  141. data/vendor/bundle/gems/sass-3.1.19/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
  142. data/vendor/bundle/gems/sass-3.1.19/test/sass/functions_test.rb +1047 -0
  143. data/vendor/bundle/gems/sass-3.1.19/test/sass/importer_test.rb +192 -0
  144. data/vendor/bundle/gems/sass-3.1.19/test/sass/less_conversion_test.rb +653 -0
  145. data/vendor/bundle/gems/sass-3.1.19/test/sass/logger_test.rb +58 -0
  146. data/vendor/bundle/gems/sass-3.1.19/test/sass/mock_importer.rb +49 -0
  147. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_results/more1.css +9 -0
  148. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_results/more1_with_line_comments.css +26 -0
  149. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_results/more_import.css +29 -0
  150. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_templates/_more_partial.sass +2 -0
  151. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_templates/more1.sass +23 -0
  152. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_templates/more_import.sass +11 -0
  153. data/vendor/bundle/gems/sass-3.1.19/test/sass/plugin_test.rb +496 -0
  154. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/alt.css +4 -0
  155. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/basic.css +9 -0
  156. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/compact.css +5 -0
  157. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/complex.css +86 -0
  158. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/compressed.css +1 -0
  159. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/expanded.css +19 -0
  160. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/if.css +3 -0
  161. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import.css +31 -0
  162. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import_charset.css +5 -0
  163. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import_charset_1_8.css +5 -0
  164. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import_charset_ibm866.css +5 -0
  165. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/line_numbers.css +49 -0
  166. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/mixins.css +95 -0
  167. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/multiline.css +24 -0
  168. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/nested.css +22 -0
  169. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/options.css +1 -0
  170. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/parent_ref.css +13 -0
  171. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/script.css +16 -0
  172. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/scss_import.css +31 -0
  173. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/scss_importee.css +2 -0
  174. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  175. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/subdir/subdir.css +3 -0
  176. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/units.css +11 -0
  177. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/warn.css +0 -0
  178. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/warn_imported.css +0 -0
  179. data/vendor/bundle/gems/sass-3.1.19/test/sass/script_conversion_test.rb +285 -0
  180. data/vendor/bundle/gems/sass-3.1.19/test/sass/script_test.rb +519 -0
  181. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/css_test.rb +975 -0
  182. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/rx_test.rb +156 -0
  183. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/scss_test.rb +1308 -0
  184. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/test_helper.rb +37 -0
  185. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_double_import_loop2.sass +1 -0
  186. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_imported_charset_ibm866.sass +4 -0
  187. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_imported_charset_utf8.sass +4 -0
  188. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_partial.sass +2 -0
  189. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/alt.sass +16 -0
  190. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/basic.sass +23 -0
  191. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork1.sass +2 -0
  192. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork2.sass +2 -0
  193. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork3.sass +2 -0
  194. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork4.sass +2 -0
  195. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork5.sass +3 -0
  196. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/compact.sass +17 -0
  197. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/complex.sass +305 -0
  198. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/compressed.sass +15 -0
  199. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/double_import_loop1.sass +1 -0
  200. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/expanded.sass +17 -0
  201. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/if.sass +11 -0
  202. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import.sass +12 -0
  203. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import_charset.sass +9 -0
  204. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import_charset_1_8.sass +6 -0
  205. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import_charset_ibm866.sass +11 -0
  206. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/importee.less +2 -0
  207. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/importee.sass +19 -0
  208. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/line_numbers.sass +13 -0
  209. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/mixin_bork.sass +5 -0
  210. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/mixins.sass +76 -0
  211. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/multiline.sass +20 -0
  212. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested.sass +25 -0
  213. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork1.sass +2 -0
  214. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork2.sass +2 -0
  215. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork3.sass +2 -0
  216. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork4.sass +2 -0
  217. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork5.sass +2 -0
  218. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_import.sass +2 -0
  219. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_mixin_bork.sass +6 -0
  220. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/options.sass +2 -0
  221. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/parent_ref.sass +25 -0
  222. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/script.sass +101 -0
  223. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/scss_import.scss +11 -0
  224. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/scss_importee.scss +1 -0
  225. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/single_import_loop.sass +1 -0
  226. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  227. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  228. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/subdir/subdir.sass +6 -0
  229. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/units.sass +11 -0
  230. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/warn.sass +3 -0
  231. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/warn_imported.sass +4 -0
  232. data/vendor/bundle/gems/sass-3.1.19/test/sass/test_helper.rb +8 -0
  233. data/vendor/bundle/gems/sass-3.1.19/test/sass/util/multibyte_string_scanner_test.rb +147 -0
  234. data/vendor/bundle/gems/sass-3.1.19/test/sass/util/subset_map_test.rb +91 -0
  235. data/vendor/bundle/gems/sass-3.1.19/test/sass/util_test.rb +282 -0
  236. data/vendor/bundle/gems/sass-3.1.19/test/test_helper.rb +70 -0
  237. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/CHANGELOG.md +90 -0
  238. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Gemfile +35 -0
  239. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Guardfile +8 -0
  240. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/LICENSE +20 -0
  241. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/README.md +312 -0
  242. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Rakefile +47 -0
  243. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Vagrantfile +96 -0
  244. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapter.rb +167 -0
  245. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/darwin.rb +84 -0
  246. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/linux.rb +110 -0
  247. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/polling.rb +66 -0
  248. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/windows.rb +81 -0
  249. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/directory_record.rb +317 -0
  250. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/listener.rb +203 -0
  251. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/multi_listener.rb +121 -0
  252. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/turnstile.rb +28 -0
  253. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/version.rb +3 -0
  254. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen.rb +38 -0
  255. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/listen.gemspec +26 -0
  256. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapter_spec.rb +142 -0
  257. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/darwin_spec.rb +31 -0
  258. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/linux_spec.rb +41 -0
  259. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/polling_spec.rb +68 -0
  260. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/windows_spec.rb +24 -0
  261. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/directory_record_spec.rb +1034 -0
  262. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/listener_spec.rb +155 -0
  263. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/multi_listener_spec.rb +156 -0
  264. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/turnstile_spec.rb +56 -0
  265. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen_spec.rb +73 -0
  266. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/spec_helper.rb +16 -0
  267. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/adapter_helper.rb +716 -0
  268. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/directory_record_helper.rb +55 -0
  269. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/fixtures_helper.rb +29 -0
  270. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/listeners_helper.rb +144 -0
  271. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/platform_helper.rb +11 -0
  272. data/vendor/bundle/gems/therubyracer-0.10.1/.gitignore +13 -0
  273. data/vendor/bundle/gems/therubyracer-0.10.1/.gitmodules +3 -0
  274. data/vendor/bundle/gems/therubyracer-0.10.1/.travis.yml +9 -0
  275. data/vendor/bundle/gems/therubyracer-0.10.1/.yardopts +1 -0
  276. data/vendor/bundle/gems/therubyracer-0.10.1/Changelog.md +196 -0
  277. data/vendor/bundle/gems/therubyracer-0.10.1/Gemfile +1 -0
  278. data/vendor/bundle/gems/therubyracer-0.10.1/README.md +167 -0
  279. data/vendor/bundle/gems/therubyracer-0.10.1/Rakefile +23 -0
  280. data/vendor/bundle/gems/therubyracer-0.10.1/bin/therubyracer +11 -0
  281. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/Makefile +213 -0
  282. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/extconf.rb +26 -0
  283. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/gem_make.out +156 -0
  284. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/rr.cpp +189 -0
  285. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/rr.h +41 -0
  286. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8.cpp +48 -0
  287. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_array.cpp +48 -0
  288. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_array.h +8 -0
  289. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_callbacks.cpp +81 -0
  290. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_callbacks.h +8 -0
  291. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_context.cpp +92 -0
  292. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_context.h +6 -0
  293. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_date.cpp +34 -0
  294. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_date.h +6 -0
  295. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_debug.cpp +17 -0
  296. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_debug.h +6 -0
  297. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_exception.cpp +133 -0
  298. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_exception.h +11 -0
  299. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_external.cpp +70 -0
  300. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_external.h +8 -0
  301. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_function.cpp +69 -0
  302. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_function.h +11 -0
  303. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_handle.cpp +186 -0
  304. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_handle.h +48 -0
  305. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_locker.cpp +139 -0
  306. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_locker.h +6 -0
  307. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_message.cpp +67 -0
  308. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_message.h +10 -0
  309. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_object.cpp +122 -0
  310. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_object.h +10 -0
  311. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_script.cpp +36 -0
  312. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_script.h +8 -0
  313. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_string.cpp +52 -0
  314. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_string.h +9 -0
  315. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_template.cpp +344 -0
  316. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_template.h +8 -0
  317. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_try_catch.cpp +70 -0
  318. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_try_catch.h +5 -0
  319. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_v8.cpp +35 -0
  320. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_v8.h +6 -0
  321. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_value.cpp +175 -0
  322. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_value.h +10 -0
  323. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_weakref.cpp +61 -0
  324. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_weakref.h +29 -0
  325. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/access.rb +87 -0
  326. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/array.rb +17 -0
  327. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/c/locker.rb +18 -0
  328. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/cli.rb +133 -0
  329. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/context.rb +111 -0
  330. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/error.rb +130 -0
  331. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/function.rb +44 -0
  332. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/object.rb +69 -0
  333. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/caller.rb +37 -0
  334. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/constructor.rb +98 -0
  335. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/function.rb +63 -0
  336. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/interceptors.rb +152 -0
  337. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/proxies.rb +151 -0
  338. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/templates.rb +73 -0
  339. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal.rb +86 -0
  340. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/stack.rb +66 -0
  341. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/tap.rb +9 -0
  342. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/version.rb +3 -0
  343. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8.rb +23 -0
  344. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/array_spec.rb +15 -0
  345. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/cxt_spec.rb +57 -0
  346. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/ext_spec_helper.rb +27 -0
  347. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/func_spec.rb +64 -0
  348. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/object_spec.rb +10 -0
  349. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/string_spec.rb +11 -0
  350. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/try_catch_spec.rb +60 -0
  351. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/.gitignore +1 -0
  352. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/README.txt +8 -0
  353. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/jsapi_spec.rb +922 -0
  354. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/loadme.js +1 -0
  355. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs_helper.rb +3 -0
  356. data/vendor/bundle/gems/therubyracer-0.10.1/spec/spec_helper.rb +9 -0
  357. data/vendor/bundle/gems/therubyracer-0.10.1/spec/v8/error_spec.rb +131 -0
  358. data/vendor/bundle/gems/therubyracer-0.10.1/spec/v8/portal/proxies_spec.rb +106 -0
  359. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/handle_memspec.rb +41 -0
  360. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/object_memspec.rb +14 -0
  361. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/proxies_memspec.rb +49 -0
  362. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/spec_helper.rb +24 -0
  363. data/vendor/bundle/gems/therubyracer-0.10.1/specthread/spec_helper.rb +2 -0
  364. data/vendor/bundle/gems/therubyracer-0.10.1/specthread/threading_spec.rb +13 -0
  365. data/vendor/bundle/gems/therubyracer-0.10.1/thefrontside.png +0 -0
  366. data/vendor/bundle/gems/therubyracer-0.10.1/therubyracer.gemspec +29 -0
  367. data/vendor/bundle/specifications/libv8-3.3.10.4-x86_64-darwin-11.gemspec +33 -0
  368. data/vendor/bundle/specifications/sass-3.1.19.gemspec +35 -0
  369. metadata +365 -3
@@ -0,0 +1,1308 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ require File.dirname(__FILE__) + '/test_helper'
4
+
5
+ class ScssTest < Test::Unit::TestCase
6
+ include ScssTestHelper
7
+
8
+ ## One-Line Comments
9
+
10
+ def test_one_line_comments
11
+ assert_equal <<CSS, render(<<SCSS)
12
+ .foo {
13
+ baz: bang; }
14
+ CSS
15
+ .foo {// bar: baz;}
16
+ baz: bang; //}
17
+ }
18
+ SCSS
19
+ assert_equal <<CSS, render(<<SCSS)
20
+ .foo bar[val="//"] {
21
+ baz: bang; }
22
+ CSS
23
+ .foo bar[val="//"] {
24
+ baz: bang; //}
25
+ }
26
+ SCSS
27
+ end
28
+
29
+ ## Script
30
+
31
+ def test_variables
32
+ assert_equal <<CSS, render(<<SCSS)
33
+ blat {
34
+ a: foo; }
35
+ CSS
36
+ $var: foo;
37
+
38
+ blat {a: $var}
39
+ SCSS
40
+
41
+ assert_equal <<CSS, render(<<SCSS)
42
+ foo {
43
+ a: 2;
44
+ b: 6; }
45
+ CSS
46
+ foo {
47
+ $var: 2;
48
+ $another-var: 4;
49
+ a: $var;
50
+ b: $var + $another-var;}
51
+ SCSS
52
+ end
53
+
54
+ def test_unicode_variables
55
+ assert_equal <<CSS, render(<<SCSS)
56
+ blat {
57
+ a: foo; }
58
+ CSS
59
+ $vär: foo;
60
+
61
+ blat {a: $vär}
62
+ SCSS
63
+ end
64
+
65
+ def test_guard_assign
66
+ assert_equal <<CSS, render(<<SCSS)
67
+ foo {
68
+ a: 1; }
69
+ CSS
70
+ $var: 1;
71
+ $var: 2 !default;
72
+
73
+ foo {a: $var}
74
+ SCSS
75
+
76
+ assert_equal <<CSS, render(<<SCSS)
77
+ foo {
78
+ a: 2; }
79
+ CSS
80
+ $var: 2 !default;
81
+
82
+ foo {a: $var}
83
+ SCSS
84
+ end
85
+
86
+ def test_sass_script
87
+ assert_equal <<CSS, render(<<SCSS)
88
+ foo {
89
+ a: 3;
90
+ b: -1;
91
+ c: foobar;
92
+ d: 12px; }
93
+ CSS
94
+ foo {
95
+ a: 1 + 2;
96
+ b: 1 - 2;
97
+ c: foo + bar;
98
+ d: floor(12.3px); }
99
+ SCSS
100
+ end
101
+
102
+ def test_debug_directive
103
+ assert_warning "test_debug_directive_inline.scss:2 DEBUG: hello world!" do
104
+ assert_equal <<CSS, render(<<SCSS)
105
+ foo {
106
+ a: b; }
107
+
108
+ bar {
109
+ c: d; }
110
+ CSS
111
+ foo {a: b}
112
+ @debug "hello world!";
113
+ bar {c: d}
114
+ SCSS
115
+ end
116
+ end
117
+
118
+ def test_warn_directive
119
+ expected_warning = <<EXPECTATION
120
+ WARNING: this is a warning
121
+ on line 2 of test_warn_directive_inline.scss
122
+
123
+ WARNING: this is a mixin
124
+ on line 1 of test_warn_directive_inline.scss, in `foo'
125
+ from line 3 of test_warn_directive_inline.scss
126
+ EXPECTATION
127
+ assert_warning expected_warning do
128
+ assert_equal <<CSS, render(<<SCSS)
129
+ bar {
130
+ c: d; }
131
+ CSS
132
+ @mixin foo { @warn "this is a mixin";}
133
+ @warn "this is a warning";
134
+ bar {c: d; @include foo;}
135
+ SCSS
136
+ end
137
+ end
138
+
139
+ def test_for_directive
140
+ assert_equal <<CSS, render(<<SCSS)
141
+ .foo {
142
+ a: 1;
143
+ a: 2;
144
+ a: 3;
145
+ a: 4; }
146
+ CSS
147
+ .foo {
148
+ @for $var from 1 to 5 {a: $var;}
149
+ }
150
+ SCSS
151
+
152
+ assert_equal <<CSS, render(<<SCSS)
153
+ .foo {
154
+ a: 1;
155
+ a: 2;
156
+ a: 3;
157
+ a: 4;
158
+ a: 5; }
159
+ CSS
160
+ .foo {
161
+ @for $var from 1 through 5 {a: $var;}
162
+ }
163
+ SCSS
164
+ end
165
+
166
+ def test_if_directive
167
+ assert_equal <<CSS, render(<<SCSS)
168
+ foo {
169
+ a: b; }
170
+ CSS
171
+ @if "foo" == "foo" {foo {a: b}}
172
+ @if "foo" != "foo" {bar {a: b}}
173
+ SCSS
174
+
175
+ assert_equal <<CSS, render(<<SCSS)
176
+ bar {
177
+ a: b; }
178
+ CSS
179
+ @if "foo" != "foo" {foo {a: b}}
180
+ @else if "foo" == "foo" {bar {a: b}}
181
+ @else if true {baz {a: b}}
182
+ SCSS
183
+
184
+ assert_equal <<CSS, render(<<SCSS)
185
+ bar {
186
+ a: b; }
187
+ CSS
188
+ @if "foo" != "foo" {foo {a: b}}
189
+ @else {bar {a: b}}
190
+ SCSS
191
+ end
192
+
193
+ def test_comment_after_if_directive
194
+ assert_equal <<CSS, render(<<SCSS)
195
+ foo {
196
+ a: b;
197
+ /* This is a comment */
198
+ c: d; }
199
+ CSS
200
+ foo {
201
+ @if true {a: b}
202
+ /* This is a comment */
203
+ c: d }
204
+ SCSS
205
+ assert_equal <<CSS, render(<<SCSS)
206
+ foo {
207
+ a: b;
208
+ /* This is a comment */
209
+ c: d; }
210
+ CSS
211
+ foo {
212
+ @if true {a: b}
213
+ @else {x: y}
214
+ /* This is a comment */
215
+ c: d }
216
+ SCSS
217
+ end
218
+
219
+ def test_while_directive
220
+ assert_equal <<CSS, render(<<SCSS)
221
+ .foo {
222
+ a: 1;
223
+ a: 2;
224
+ a: 3;
225
+ a: 4; }
226
+ CSS
227
+ $i: 1;
228
+
229
+ .foo {
230
+ @while $i != 5 {
231
+ a: $i;
232
+ $i: $i + 1;
233
+ }
234
+ }
235
+ SCSS
236
+ end
237
+
238
+ def test_each_directive
239
+ assert_equal <<CSS, render(<<SCSS)
240
+ a {
241
+ b: 1px;
242
+ b: 2px;
243
+ b: 3px;
244
+ b: 4px; }
245
+
246
+ c {
247
+ d: foo;
248
+ d: bar;
249
+ d: baz;
250
+ d: bang; }
251
+ CSS
252
+ a {
253
+ @each $number in 1px 2px 3px 4px {
254
+ b: $number;
255
+ }
256
+ }
257
+ c {
258
+ @each $str in foo, bar, baz, bang {
259
+ d: $str;
260
+ }
261
+ }
262
+ SCSS
263
+ end
264
+
265
+ def test_css_import_directive
266
+ assert_equal "@import url(foo.css);\n", render('@import "foo.css";')
267
+ assert_equal "@import url(foo.css);\n", render("@import 'foo.css';")
268
+ assert_equal "@import url(\"foo.css\");\n", render('@import url("foo.css");')
269
+ assert_equal "@import url('foo.css');\n", render("@import url('foo.css');")
270
+ assert_equal "@import url(foo.css);\n", render('@import url(foo.css);')
271
+ end
272
+
273
+ def test_media_import
274
+ assert_equal("@import \"./fonts.sass\" all;\n", render("@import \"./fonts.sass\" all;"))
275
+ end
276
+
277
+ def test_http_import
278
+ assert_equal("@import \"http://fonts.googleapis.com/css?family=Droid+Sans\";\n",
279
+ render("@import \"http://fonts.googleapis.com/css?family=Droid+Sans\";"))
280
+ end
281
+
282
+ def test_url_import
283
+ assert_equal("@import url(fonts.sass);\n", render("@import url(fonts.sass);"))
284
+ end
285
+
286
+ def test_block_comment_in_script
287
+ assert_equal <<CSS, render(<<SCSS)
288
+ foo {
289
+ a: 1bar; }
290
+ CSS
291
+ foo {a: 1 + /* flang */ bar}
292
+ SCSS
293
+ end
294
+
295
+ def test_line_comment_in_script
296
+ assert_equal <<CSS, render(<<SCSS)
297
+ foo {
298
+ a: 1blang; }
299
+ CSS
300
+ foo {a: 1 + // flang }
301
+ blang }
302
+ SCSS
303
+ end
304
+
305
+ ## Nested Rules
306
+
307
+ def test_nested_rules
308
+ assert_equal <<CSS, render(<<SCSS)
309
+ foo bar {
310
+ a: b; }
311
+ CSS
312
+ foo {bar {a: b}}
313
+ SCSS
314
+ assert_equal <<CSS, render(<<SCSS)
315
+ foo bar {
316
+ a: b; }
317
+ foo baz {
318
+ b: c; }
319
+ CSS
320
+ foo {
321
+ bar {a: b}
322
+ baz {b: c}}
323
+ SCSS
324
+ assert_equal <<CSS, render(<<SCSS)
325
+ foo bar baz {
326
+ a: b; }
327
+ foo bang bip {
328
+ a: b; }
329
+ CSS
330
+ foo {
331
+ bar {baz {a: b}}
332
+ bang {bip {a: b}}}
333
+ SCSS
334
+ end
335
+
336
+ def test_nested_rules_with_declarations
337
+ assert_equal <<CSS, render(<<SCSS)
338
+ foo {
339
+ a: b; }
340
+ foo bar {
341
+ c: d; }
342
+ CSS
343
+ foo {
344
+ a: b;
345
+ bar {c: d}}
346
+ SCSS
347
+ assert_equal <<CSS, render(<<SCSS)
348
+ foo {
349
+ a: b; }
350
+ foo bar {
351
+ c: d; }
352
+ CSS
353
+ foo {
354
+ bar {c: d}
355
+ a: b}
356
+ SCSS
357
+ assert_equal <<CSS, render(<<SCSS)
358
+ foo {
359
+ ump: nump;
360
+ grump: clump; }
361
+ foo bar {
362
+ blat: bang;
363
+ habit: rabbit; }
364
+ foo bar baz {
365
+ a: b; }
366
+ foo bar bip {
367
+ c: d; }
368
+ foo bibble bap {
369
+ e: f; }
370
+ CSS
371
+ foo {
372
+ ump: nump;
373
+ grump: clump;
374
+ bar {
375
+ blat: bang;
376
+ habit: rabbit;
377
+ baz {a: b}
378
+ bip {c: d}}
379
+ bibble {
380
+ bap {e: f}}}
381
+ SCSS
382
+ end
383
+
384
+ def test_nested_rules_with_fancy_selectors
385
+ assert_equal <<CSS, render(<<SCSS)
386
+ foo .bar {
387
+ a: b; }
388
+ foo :baz {
389
+ c: d; }
390
+ foo bang:bop {
391
+ e: f; }
392
+ CSS
393
+ foo {
394
+ .bar {a: b}
395
+ :baz {c: d}
396
+ bang:bop {e: f}}
397
+ SCSS
398
+ end
399
+
400
+ def test_almost_ambiguous_nested_rules_and_declarations
401
+ assert_equal <<CSS, render(<<SCSS)
402
+ foo {
403
+ bar: baz bang bop biddle woo look at all these elems; }
404
+ foo bar:baz:bang:bop:biddle:woo:look:at:all:these:pseudoclasses {
405
+ a: b; }
406
+ foo bar:baz bang bop biddle woo look at all these elems {
407
+ a: b; }
408
+ CSS
409
+ foo {
410
+ bar:baz:bang:bop:biddle:woo:look:at:all:these:pseudoclasses {a: b};
411
+ bar:baz bang bop biddle woo look at all these elems {a: b};
412
+ bar:baz bang bop biddle woo look at all these elems; }
413
+ SCSS
414
+ end
415
+
416
+ def test_newlines_in_selectors
417
+ assert_equal <<CSS, render(<<SCSS)
418
+ foo
419
+ bar {
420
+ a: b; }
421
+ CSS
422
+ foo
423
+ bar {a: b}
424
+ SCSS
425
+
426
+ assert_equal <<CSS, render(<<SCSS)
427
+ foo baz,
428
+ foo bang,
429
+ bar baz,
430
+ bar bang {
431
+ a: b; }
432
+ CSS
433
+ foo,
434
+ bar {
435
+ baz,
436
+ bang {a: b}}
437
+ SCSS
438
+
439
+ assert_equal <<CSS, render(<<SCSS)
440
+ foo
441
+ bar baz
442
+ bang {
443
+ a: b; }
444
+ foo
445
+ bar bip bop {
446
+ c: d; }
447
+ CSS
448
+ foo
449
+ bar {
450
+ baz
451
+ bang {a: b}
452
+
453
+ bip bop {c: d}}
454
+ SCSS
455
+
456
+ assert_equal <<CSS, render(<<SCSS)
457
+ foo bang, foo bip
458
+ bop, bar
459
+ baz bang, bar
460
+ baz bip
461
+ bop {
462
+ a: b; }
463
+ CSS
464
+ foo, bar
465
+ baz {
466
+ bang, bip
467
+ bop {a: b}}
468
+ SCSS
469
+ end
470
+
471
+ def test_trailing_comma_in_selector
472
+ assert_equal <<CSS, render(<<SCSS)
473
+ #foo #bar,
474
+ #baz #boom {
475
+ a: b; }
476
+
477
+ #bip #bop {
478
+ c: d; }
479
+ CSS
480
+ #foo #bar,,
481
+ ,#baz #boom, {a: b}
482
+
483
+ #bip #bop, ,, {c: d}
484
+ SCSS
485
+ end
486
+
487
+ def test_parent_selectors
488
+ assert_equal <<CSS, render(<<SCSS)
489
+ foo:hover {
490
+ a: b; }
491
+ bar foo.baz {
492
+ c: d; }
493
+ CSS
494
+ foo {
495
+ &:hover {a: b}
496
+ bar &.baz {c: d}}
497
+ SCSS
498
+ end
499
+
500
+ ## Namespace Properties
501
+
502
+ def test_namespace_properties
503
+ assert_equal <<CSS, render(<<SCSS)
504
+ foo {
505
+ bar: baz;
506
+ bang-bip: 1px;
507
+ bang-bop: bar; }
508
+ CSS
509
+ foo {
510
+ bar: baz;
511
+ bang: {
512
+ bip: 1px;
513
+ bop: bar;}}
514
+ SCSS
515
+ end
516
+
517
+ def test_several_namespace_properties
518
+ assert_equal <<CSS, render(<<SCSS)
519
+ foo {
520
+ bar: baz;
521
+ bang-bip: 1px;
522
+ bang-bop: bar;
523
+ buzz-fram: "foo";
524
+ buzz-frum: moo; }
525
+ CSS
526
+ foo {
527
+ bar: baz;
528
+ bang: {
529
+ bip: 1px;
530
+ bop: bar;}
531
+ buzz: {
532
+ fram: "foo";
533
+ frum: moo;
534
+ }
535
+ }
536
+ SCSS
537
+ end
538
+
539
+ def test_nested_namespace_properties
540
+ assert_equal <<CSS, render(<<SCSS)
541
+ foo {
542
+ bar: baz;
543
+ bang-bip: 1px;
544
+ bang-bop: bar;
545
+ bang-blat-baf: bort; }
546
+ CSS
547
+ foo {
548
+ bar: baz;
549
+ bang: {
550
+ bip: 1px;
551
+ bop: bar;
552
+ blat:{baf:bort}}}
553
+ SCSS
554
+ end
555
+
556
+ def test_namespace_properties_with_value
557
+ assert_equal <<CSS, render(<<SCSS)
558
+ foo {
559
+ bar: baz;
560
+ bar-bip: bop;
561
+ bar-bing: bop; }
562
+ CSS
563
+ foo {
564
+ bar: baz {
565
+ bip: bop;
566
+ bing: bop; }}
567
+ SCSS
568
+ end
569
+
570
+ def test_namespace_properties_with_script_value
571
+ assert_equal <<CSS, render(<<SCSS)
572
+ foo {
573
+ bar: bazbang;
574
+ bar-bip: bop;
575
+ bar-bing: bop; }
576
+ CSS
577
+ foo {
578
+ bar: baz + bang {
579
+ bip: bop;
580
+ bing: bop; }}
581
+ SCSS
582
+ end
583
+
584
+ def test_no_namespace_properties_without_space
585
+ assert_equal <<CSS, render(<<SCSS)
586
+ foo bar:baz {
587
+ bip: bop; }
588
+ CSS
589
+ foo {
590
+ bar:baz {
591
+ bip: bop }}
592
+ SCSS
593
+ end
594
+
595
+ def test_no_namespace_properties_without_space_even_when_its_unambiguous
596
+ render(<<SCSS)
597
+ foo {
598
+ bar:1px {
599
+ bip: bop }}
600
+ SCSS
601
+ assert(false, "Expected syntax error")
602
+ rescue Sass::SyntaxError => e
603
+ assert_equal <<MESSAGE, e.message
604
+ Invalid CSS: a space is required between a property and its definition
605
+ when it has other properties nested beneath it.
606
+ MESSAGE
607
+ assert_equal 2, e.sass_line
608
+ end
609
+
610
+ ## Mixins
611
+
612
+ def test_basic_mixins
613
+ assert_equal <<CSS, render(<<SCSS)
614
+ .foo {
615
+ a: b; }
616
+ CSS
617
+ @mixin foo {
618
+ .foo {a: b}}
619
+
620
+ @include foo;
621
+ SCSS
622
+
623
+ assert_equal <<CSS, render(<<SCSS)
624
+ bar {
625
+ c: d; }
626
+ bar .foo {
627
+ a: b; }
628
+ CSS
629
+ @mixin foo {
630
+ .foo {a: b}}
631
+
632
+ bar {
633
+ @include foo;
634
+ c: d; }
635
+ SCSS
636
+
637
+ assert_equal <<CSS, render(<<SCSS)
638
+ bar {
639
+ a: b;
640
+ c: d; }
641
+ CSS
642
+ @mixin foo {a: b}
643
+
644
+ bar {
645
+ @include foo;
646
+ c: d; }
647
+ SCSS
648
+ end
649
+
650
+ def test_mixins_with_empty_args
651
+ assert_equal <<CSS, render(<<SCSS)
652
+ .foo {
653
+ a: b; }
654
+ CSS
655
+ @mixin foo() {a: b}
656
+
657
+ .foo {@include foo();}
658
+ SCSS
659
+
660
+ assert_equal <<CSS, render(<<SCSS)
661
+ .foo {
662
+ a: b; }
663
+ CSS
664
+ @mixin foo() {a: b}
665
+
666
+ .foo {@include foo;}
667
+ SCSS
668
+
669
+ assert_equal <<CSS, render(<<SCSS)
670
+ .foo {
671
+ a: b; }
672
+ CSS
673
+ @mixin foo {a: b}
674
+
675
+ .foo {@include foo();}
676
+ SCSS
677
+ end
678
+
679
+ def test_mixins_with_args
680
+ assert_equal <<CSS, render(<<SCSS)
681
+ .foo {
682
+ a: bar; }
683
+ CSS
684
+ @mixin foo($a) {a: $a}
685
+
686
+ .foo {@include foo(bar)}
687
+ SCSS
688
+
689
+ assert_equal <<CSS, render(<<SCSS)
690
+ .foo {
691
+ a: bar;
692
+ b: 12px; }
693
+ CSS
694
+ @mixin foo($a, $b) {
695
+ a: $a;
696
+ b: $b; }
697
+
698
+ .foo {@include foo(bar, 12px)}
699
+ SCSS
700
+ end
701
+
702
+ ## Functions
703
+
704
+ def test_basic_function
705
+ assert_equal(<<CSS, render(<<SASS))
706
+ bar {
707
+ a: 3; }
708
+ CSS
709
+ @function foo() {
710
+ @return 1 + 2;
711
+ }
712
+
713
+ bar {
714
+ a: foo();
715
+ }
716
+ SASS
717
+ end
718
+
719
+ def test_function_args
720
+ assert_equal(<<CSS, render(<<SASS))
721
+ bar {
722
+ a: 3; }
723
+ CSS
724
+ @function plus($var1, $var2) {
725
+ @return $var1 + $var2;
726
+ }
727
+
728
+ bar {
729
+ a: plus(1, 2);
730
+ }
731
+ SASS
732
+ end
733
+
734
+ ## Interpolation
735
+
736
+ def test_basic_selector_interpolation
737
+ assert_equal <<CSS, render(<<SCSS)
738
+ foo 3 baz {
739
+ a: b; }
740
+ CSS
741
+ foo \#{1 + 2} baz {a: b}
742
+ SCSS
743
+ assert_equal <<CSS, render(<<SCSS)
744
+ foo.bar baz {
745
+ a: b; }
746
+ CSS
747
+ foo\#{".bar"} baz {a: b}
748
+ SCSS
749
+ assert_equal <<CSS, render(<<SCSS)
750
+ foo.bar baz {
751
+ a: b; }
752
+ CSS
753
+ \#{"foo"}.bar baz {a: b}
754
+ SCSS
755
+ end
756
+
757
+ def test_selector_only_interpolation
758
+ assert_equal <<CSS, render(<<SCSS)
759
+ foo bar {
760
+ a: b; }
761
+ CSS
762
+ \#{"foo" + " bar"} {a: b}
763
+ SCSS
764
+ end
765
+
766
+ def test_selector_interpolation_before_element_name
767
+ assert_equal <<CSS, render(<<SCSS)
768
+ foo barbaz {
769
+ a: b; }
770
+ CSS
771
+ \#{"foo" + " bar"}baz {a: b}
772
+ SCSS
773
+ end
774
+
775
+ def test_selector_interpolation_in_string
776
+ assert_equal <<CSS, render(<<SCSS)
777
+ foo[val="bar foo bar baz"] {
778
+ a: b; }
779
+ CSS
780
+ foo[val="bar \#{"foo" + " bar"} baz"] {a: b}
781
+ SCSS
782
+ end
783
+
784
+ def test_selector_interpolation_in_pseudoclass
785
+ assert_equal <<CSS, render(<<SCSS)
786
+ foo:nth-child(5n) {
787
+ a: b; }
788
+ CSS
789
+ foo:nth-child(\#{5 + "n"}) {a: b}
790
+ SCSS
791
+ end
792
+
793
+ def test_selector_interpolation_at_class_begininng
794
+ assert_equal <<CSS, render(<<SCSS)
795
+ .zzz {
796
+ a: b; }
797
+ CSS
798
+ $zzz: zzz;
799
+ .\#{$zzz} { a: b; }
800
+ SCSS
801
+ end
802
+
803
+ def test_selector_interpolation_at_id_begininng
804
+ assert_equal <<CSS, render(<<SCSS)
805
+ #zzz {
806
+ a: b; }
807
+ CSS
808
+ $zzz: zzz;
809
+ #\#{$zzz} { a: b; }
810
+ SCSS
811
+ end
812
+
813
+ def test_selector_interpolation_at_pseudo_begininng
814
+ assert_equal <<CSS, render(<<SCSS)
815
+ :zzz::zzz {
816
+ a: b; }
817
+ CSS
818
+ $zzz: zzz;
819
+ :\#{$zzz}::\#{$zzz} { a: b; }
820
+ SCSS
821
+ end
822
+
823
+ def test_selector_interpolation_at_attr_beginning
824
+ assert_equal <<CSS, render(<<SCSS)
825
+ [zzz=foo] {
826
+ a: b; }
827
+ CSS
828
+ $zzz: zzz;
829
+ [\#{$zzz}=foo] { a: b; }
830
+ SCSS
831
+ end
832
+
833
+ def test_selector_interpolation_at_attr_end
834
+ assert_equal <<CSS, render(<<SCSS)
835
+ [foo=zzz] {
836
+ a: b; }
837
+ CSS
838
+ $zzz: zzz;
839
+ [foo=\#{$zzz}] { a: b; }
840
+ SCSS
841
+ end
842
+
843
+ def test_selector_interpolation_at_dashes
844
+ assert_equal <<CSS, render(<<SCSS)
845
+ div {
846
+ -foo-a-b-foo: foo; }
847
+ CSS
848
+ $a : a;
849
+ $b : b;
850
+ div { -foo-\#{$a}-\#{$b}-foo: foo }
851
+ SCSS
852
+ end
853
+
854
+ def test_basic_prop_name_interpolation
855
+ assert_equal <<CSS, render(<<SCSS)
856
+ foo {
857
+ barbazbang: blip; }
858
+ CSS
859
+ foo {bar\#{"baz" + "bang"}: blip}
860
+ SCSS
861
+ assert_equal <<CSS, render(<<SCSS)
862
+ foo {
863
+ bar3: blip; }
864
+ CSS
865
+ foo {bar\#{1 + 2}: blip}
866
+ SCSS
867
+ end
868
+
869
+ def test_prop_name_only_interpolation
870
+ assert_equal <<CSS, render(<<SCSS)
871
+ foo {
872
+ bazbang: blip; }
873
+ CSS
874
+ foo {\#{"baz" + "bang"}: blip}
875
+ SCSS
876
+ end
877
+
878
+ ## Errors
879
+
880
+ def test_mixin_defs_only_at_toplevel
881
+ render <<SCSS
882
+ foo {
883
+ @mixin bar {a: b}}
884
+ SCSS
885
+ assert(false, "Expected syntax error")
886
+ rescue Sass::SyntaxError => e
887
+ assert_equal "Mixins may only be defined at the root of a document.", e.message
888
+ assert_equal 2, e.sass_line
889
+ end
890
+
891
+ def test_rules_beneath_properties
892
+ render <<SCSS
893
+ foo {
894
+ bar: {
895
+ baz {
896
+ bang: bop }}}
897
+ SCSS
898
+ assert(false, "Expected syntax error")
899
+ rescue Sass::SyntaxError => e
900
+ assert_equal 'Illegal nesting: Only properties may be nested beneath properties.', e.message
901
+ assert_equal 3, e.sass_line
902
+ end
903
+
904
+ def test_uses_property_exception_with_star_hack
905
+ # Silence the "beginning of selector" warning
906
+ Sass::Util.silence_warnings {render <<SCSS}
907
+ foo {
908
+ *bar:baz [fail]; }
909
+ SCSS
910
+ assert(false, "Expected syntax error")
911
+ rescue Sass::SyntaxError => e
912
+ assert_equal 'Invalid CSS after " *bar:baz ": expected ";", was "[fail]; }"', e.message
913
+ assert_equal 2, e.sass_line
914
+ end
915
+
916
+ def test_uses_property_exception_with_colon_hack
917
+ render <<SCSS
918
+ foo {
919
+ :bar:baz [fail]; }
920
+ SCSS
921
+ assert(false, "Expected syntax error")
922
+ rescue Sass::SyntaxError => e
923
+ assert_equal 'Invalid CSS after " :bar:baz ": expected ";", was "[fail]; }"', e.message
924
+ assert_equal 2, e.sass_line
925
+ end
926
+
927
+ def test_uses_rule_exception_with_dot_hack
928
+ render <<SCSS
929
+ foo {
930
+ .bar:baz <fail>; }
931
+ SCSS
932
+ assert(false, "Expected syntax error")
933
+ rescue Sass::SyntaxError => e
934
+ assert_equal 'Invalid CSS after " .bar:baz ": expected "{", was "<fail>; }"', e.message
935
+ assert_equal 2, e.sass_line
936
+ end
937
+
938
+ def test_uses_property_exception_with_space_after_name
939
+ render <<SCSS
940
+ foo {
941
+ bar: baz [fail]; }
942
+ SCSS
943
+ assert(false, "Expected syntax error")
944
+ rescue Sass::SyntaxError => e
945
+ assert_equal 'Invalid CSS after " bar: baz ": expected ";", was "[fail]; }"', e.message
946
+ assert_equal 2, e.sass_line
947
+ end
948
+
949
+ def test_uses_property_exception_with_non_identifier_after_name
950
+ render <<SCSS
951
+ foo {
952
+ bar:1px [fail]; }
953
+ SCSS
954
+ assert(false, "Expected syntax error")
955
+ rescue Sass::SyntaxError => e
956
+ assert_equal 'Invalid CSS after " bar:1px ": expected ";", was "[fail]; }"', e.message
957
+ assert_equal 2, e.sass_line
958
+ end
959
+
960
+ def test_uses_property_exception_when_followed_by_open_bracket
961
+ render <<SCSS
962
+ foo {
963
+ bar:{baz: .fail} }
964
+ SCSS
965
+ assert(false, "Expected syntax error")
966
+ rescue Sass::SyntaxError => e
967
+ assert_equal 'Invalid CSS after " bar:{baz: ": expected expression (e.g. 1px, bold), was ".fail} }"', e.message
968
+ assert_equal 2, e.sass_line
969
+ end
970
+
971
+ def test_script_error
972
+ render <<SCSS
973
+ foo {
974
+ bar: "baz" * * }
975
+ SCSS
976
+ assert(false, "Expected syntax error")
977
+ rescue Sass::SyntaxError => e
978
+ assert_equal 'Invalid CSS after " bar: "baz" * ": expected expression (e.g. 1px, bold), was "* }"', e.message
979
+ assert_equal 2, e.sass_line
980
+ end
981
+
982
+ def test_multiline_script_syntax_error
983
+ render <<SCSS
984
+ foo {
985
+ bar:
986
+ "baz" * * }
987
+ SCSS
988
+ assert(false, "Expected syntax error")
989
+ rescue Sass::SyntaxError => e
990
+ assert_equal 'Invalid CSS after " "baz" * ": expected expression (e.g. 1px, bold), was "* }"', e.message
991
+ assert_equal 3, e.sass_line
992
+ end
993
+
994
+ def test_multiline_script_runtime_error
995
+ render <<SCSS
996
+ foo {
997
+ bar: "baz" +
998
+ "bar" +
999
+ $bang }
1000
+ SCSS
1001
+ assert(false, "Expected syntax error")
1002
+ rescue Sass::SyntaxError => e
1003
+ assert_equal "Undefined variable: \"$bang\".", e.message
1004
+ assert_equal 4, e.sass_line
1005
+ end
1006
+
1007
+ def test_post_multiline_script_runtime_error
1008
+ render <<SCSS
1009
+ foo {
1010
+ bar: "baz" +
1011
+ "bar" +
1012
+ "baz";
1013
+ bip: $bop; }
1014
+ SCSS
1015
+ assert(false, "Expected syntax error")
1016
+ rescue Sass::SyntaxError => e
1017
+ assert_equal "Undefined variable: \"$bop\".", e.message
1018
+ assert_equal 5, e.sass_line
1019
+ end
1020
+
1021
+ def test_multiline_property_runtime_error
1022
+ render <<SCSS
1023
+ foo {
1024
+ bar: baz
1025
+ bar
1026
+ \#{$bang} }
1027
+ SCSS
1028
+ assert(false, "Expected syntax error")
1029
+ rescue Sass::SyntaxError => e
1030
+ assert_equal "Undefined variable: \"$bang\".", e.message
1031
+ assert_equal 4, e.sass_line
1032
+ end
1033
+
1034
+ def test_post_resolution_selector_error
1035
+ render "\n\nfoo \#{\") bar\"} {a: b}"
1036
+ assert(false, "Expected syntax error")
1037
+ rescue Sass::SyntaxError => e
1038
+ assert_equal 'Invalid CSS after "foo ": expected selector, was ") bar"', e.message
1039
+ assert_equal 3, e.sass_line
1040
+ end
1041
+
1042
+ def test_parent_in_mid_selector_error
1043
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1044
+ Invalid CSS after ".foo": expected "{", was "&.bar"
1045
+
1046
+ "&" may only be used at the beginning of a selector.
1047
+ MESSAGE
1048
+ flim {
1049
+ .foo&.bar {a: b}
1050
+ }
1051
+ SCSS
1052
+ end
1053
+
1054
+ def test_parent_in_mid_selector_error
1055
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1056
+ Invalid CSS after " .foo.bar": expected "{", was "& {a: b}"
1057
+
1058
+ "&" may only be used at the beginning of a selector.
1059
+ MESSAGE
1060
+ flim {
1061
+ .foo.bar& {a: b}
1062
+ }
1063
+ SCSS
1064
+ end
1065
+
1066
+ def test_double_parent_selector_error
1067
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1068
+ Invalid CSS after " &": expected "{", was "& {a: b}"
1069
+
1070
+ "&" may only be used at the beginning of a selector.
1071
+ MESSAGE
1072
+ flim {
1073
+ && {a: b}
1074
+ }
1075
+ SCSS
1076
+ end
1077
+
1078
+ def test_no_interpolation_in_media_queries
1079
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1080
+ Invalid CSS after "...nd (min-width: ": expected expression (e.g. 1px, bold), was "\#{100}px) {"
1081
+ MESSAGE
1082
+ @media screen and (min-width: \#{100}px) {
1083
+ foo {bar: baz}
1084
+ }
1085
+ SCSS
1086
+ end
1087
+
1088
+ def test_no_interpolation_in_unrecognized_directives
1089
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1090
+ Invalid CSS after "@foo ": expected selector or at-rule, was "\#{100} {"
1091
+ MESSAGE
1092
+ @foo \#{100} {
1093
+ foo {bar: baz}
1094
+ }
1095
+ SCSS
1096
+ end
1097
+
1098
+ def test_no_lonely_else
1099
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1100
+ Invalid CSS: @else must come after @if
1101
+ MESSAGE
1102
+ @else {foo: bar}
1103
+ SCSS
1104
+ end
1105
+
1106
+ # Regression
1107
+
1108
+ def test_prop_name_interpolation_after_hyphen
1109
+ assert_equal <<CSS, render(<<SCSS)
1110
+ a {
1111
+ -foo-bar: b; }
1112
+ CSS
1113
+ a { -\#{"foo"}-bar: b; }
1114
+ SCSS
1115
+ end
1116
+
1117
+ def test_star_plus_and_parent
1118
+ assert_equal <<CSS, render(<<SCSS)
1119
+ * + html foo {
1120
+ a: b; }
1121
+ CSS
1122
+ foo {*+html & {a: b}}
1123
+ SCSS
1124
+ end
1125
+
1126
+ def test_weird_added_space
1127
+ assert_equal <<CSS, render(<<SCSS)
1128
+ foo {
1129
+ bar: -moz-bip; }
1130
+ CSS
1131
+ $value : bip;
1132
+
1133
+ foo {
1134
+ bar: -moz-\#{$value};
1135
+ }
1136
+ SCSS
1137
+ end
1138
+
1139
+ def test_interpolation_with_bracket_on_next_line
1140
+ assert_equal <<CSS, render(<<SCSS)
1141
+ a.foo b {
1142
+ color: red; }
1143
+ CSS
1144
+ a.\#{"foo"} b
1145
+ {color: red}
1146
+ SCSS
1147
+ end
1148
+
1149
+ def test_extra_comma_in_mixin_arglist_error
1150
+ assert_raise_message(Sass::SyntaxError, <<MESSAGE.rstrip) {render <<SCSS}
1151
+ Invalid CSS after "...clude foo(bar, ": expected mixin argument, was ");"
1152
+ MESSAGE
1153
+ @mixin foo($a1, $a2) {
1154
+ baz: $a1 $a2;
1155
+ }
1156
+
1157
+ .bar {
1158
+ @include foo(bar, );
1159
+ }
1160
+ SCSS
1161
+ end
1162
+
1163
+ def test_interpolation
1164
+ assert_equal <<CSS, render(<<SCSS)
1165
+ ul li#foo a span.label {
1166
+ foo: bar; }
1167
+ CSS
1168
+ $bar : "#foo";
1169
+ ul li\#{$bar} a span.label { foo: bar; }
1170
+ SCSS
1171
+ end
1172
+
1173
+ def test_mixin_with_keyword_args
1174
+ assert_equal <<CSS, render(<<SCSS)
1175
+ .mixed {
1176
+ required: foo;
1177
+ arg1: default-val1;
1178
+ arg2: non-default-val2; }
1179
+ CSS
1180
+ @mixin a-mixin($required, $arg1: default-val1, $arg2: default-val2) {
1181
+ required: $required;
1182
+ arg1: $arg1;
1183
+ arg2: $arg2;
1184
+ }
1185
+ .mixed { @include a-mixin(foo, $arg2: non-default-val2); }
1186
+ SCSS
1187
+ end
1188
+
1189
+ def test_passing_required_args_as_a_keyword_arg
1190
+ assert_equal <<CSS, render(<<SCSS)
1191
+ .mixed {
1192
+ required: foo;
1193
+ arg1: default-val1;
1194
+ arg2: default-val2; }
1195
+ CSS
1196
+ @mixin a-mixin($required, $arg1: default-val1, $arg2: default-val2) {
1197
+ required: $required;
1198
+ arg1: $arg1;
1199
+ arg2: $arg2; }
1200
+ .mixed { @include a-mixin($required: foo); }
1201
+ SCSS
1202
+ end
1203
+
1204
+ def test_passing_all_as_keyword_args_in_opposite_order
1205
+ assert_equal <<CSS, render(<<SCSS)
1206
+ .mixed {
1207
+ required: foo;
1208
+ arg1: non-default-val1;
1209
+ arg2: non-default-val2; }
1210
+ CSS
1211
+ @mixin a-mixin($required, $arg1: default-val1, $arg2: default-val2) {
1212
+ required: $required;
1213
+ arg1: $arg1;
1214
+ arg2: $arg2; }
1215
+ .mixed { @include a-mixin($arg2: non-default-val2, $arg1: non-default-val1, $required: foo); }
1216
+ SCSS
1217
+ end
1218
+
1219
+ def test_keyword_args_in_functions
1220
+ assert_equal <<CSS, render(<<SCSS)
1221
+ .keyed {
1222
+ color: rgba(170, 119, 204, 0.4); }
1223
+ CSS
1224
+ .keyed { color: rgba($color: #a7c, $alpha: 0.4) }
1225
+ SCSS
1226
+ end
1227
+
1228
+ def test_unknown_keyword_arg_raises_error
1229
+ assert_raise_message(Sass::SyntaxError, "Mixin a doesn't have an argument named $c") {render <<SCSS}
1230
+ @mixin a($b: 1) { a: $b; }
1231
+ div { @include a(1, $c: 3); }
1232
+ SCSS
1233
+ end
1234
+
1235
+
1236
+ def test_newlines_removed_from_selectors_when_compressed
1237
+ assert_equal <<CSS, render(<<SCSS, :style => :compressed)
1238
+ z a,z b{display:block}
1239
+ CSS
1240
+ a
1241
+ , b {
1242
+ z & {
1243
+ display: block;
1244
+ }
1245
+ }
1246
+ SCSS
1247
+ end
1248
+
1249
+ def test_if_error_line
1250
+ assert_raise_line(2) {render(<<SCSS)}
1251
+ @if true {foo: bar}
1252
+ }
1253
+ SCSS
1254
+ end
1255
+
1256
+ def test_multiline_var
1257
+ assert_equal <<CSS, render(<<SCSS)
1258
+ foo {
1259
+ a: 3;
1260
+ b: false;
1261
+ c: a b c; }
1262
+ CSS
1263
+ foo {
1264
+ $var1: 1 +
1265
+ 2;
1266
+ $var2: true and
1267
+ false;
1268
+ $var3: a b
1269
+ c;
1270
+ a: $var1;
1271
+ b: $var2;
1272
+ c: $var3; }
1273
+ SCSS
1274
+ end
1275
+
1276
+ def test_options_passed_to_script
1277
+ assert_equal <<CSS, render(<<SCSS, :style => :compressed)
1278
+ foo{color:#000}
1279
+ CSS
1280
+ foo {color: darken(black, 10%)}
1281
+ SCSS
1282
+ end
1283
+
1284
+ # ref: https://github.com/nex3/sass/issues/104
1285
+ def test_no_buffer_overflow
1286
+ template = render <<SCSS
1287
+ .aaa {
1288
+ background-color: white;
1289
+ }
1290
+ .aaa .aaa .aaa {
1291
+ background-color: black;
1292
+ }
1293
+ .bbb {
1294
+ @extend .aaa;
1295
+ }
1296
+ .xxx {
1297
+ @extend .bbb;
1298
+ }
1299
+ .yyy {
1300
+ @extend .bbb;
1301
+ }
1302
+ .zzz {
1303
+ @extend .bbb;
1304
+ }
1305
+ SCSS
1306
+ Sass::SCSS::Parser.new(template, "test.scss").parse
1307
+ end
1308
+ end