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,1663 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+
4
+ class ExtendTest < Test::Unit::TestCase
5
+ def test_basic
6
+ assert_equal <<CSS, render(<<SCSS)
7
+ .foo, .bar {
8
+ a: b; }
9
+ CSS
10
+ .foo {a: b}
11
+ .bar {@extend .foo}
12
+ SCSS
13
+
14
+ assert_equal <<CSS, render(<<SCSS)
15
+ .foo, .bar {
16
+ a: b; }
17
+ CSS
18
+ .bar {@extend .foo}
19
+ .foo {a: b}
20
+ SCSS
21
+
22
+ assert_equal <<CSS, render(<<SCSS)
23
+ .foo, .bar {
24
+ a: b; }
25
+
26
+ .bar {
27
+ c: d; }
28
+ CSS
29
+ .foo {a: b}
30
+ .bar {c: d; @extend .foo}
31
+ SCSS
32
+
33
+ assert_equal <<CSS, render(<<SCSS)
34
+ .foo, .bar {
35
+ a: b; }
36
+
37
+ .bar {
38
+ c: d; }
39
+ CSS
40
+ .foo {a: b}
41
+ .bar {@extend .foo; c: d}
42
+ SCSS
43
+ end
44
+
45
+ def test_indented_syntax
46
+ assert_equal <<CSS, render(<<SASS, :syntax => :sass)
47
+ .foo, .bar {
48
+ a: b; }
49
+ CSS
50
+ .foo
51
+ a: b
52
+ .bar
53
+ @extend .foo
54
+ SASS
55
+
56
+ assert_equal <<CSS, render(<<SASS, :syntax => :sass)
57
+ .foo, .bar {
58
+ a: b; }
59
+ CSS
60
+ .foo
61
+ a: b
62
+ .bar
63
+ @extend \#{".foo"}
64
+ SASS
65
+ end
66
+
67
+ def test_multiple_targets
68
+ assert_equal <<CSS, render(<<SCSS)
69
+ .foo, .bar {
70
+ a: b; }
71
+
72
+ .blip .foo, .blip .bar {
73
+ c: d; }
74
+ CSS
75
+ .foo {a: b}
76
+ .bar {@extend .foo}
77
+ .blip .foo {c: d}
78
+ SCSS
79
+ end
80
+
81
+ def test_multiple_extendees
82
+ assert_equal <<CSS, render(<<SCSS)
83
+ .foo, .baz {
84
+ a: b; }
85
+
86
+ .bar, .baz {
87
+ c: d; }
88
+ CSS
89
+ .foo {a: b}
90
+ .bar {c: d}
91
+ .baz {@extend .foo; @extend .bar}
92
+ SCSS
93
+ end
94
+
95
+ def test_multiple_extends_with_single_extender_and_single_target
96
+ assert_equal <<CSS, render(<<SCSS)
97
+ .foo .bar, .baz .bar, .foo .baz, .baz .baz {
98
+ a: b; }
99
+ CSS
100
+ .foo .bar {a: b}
101
+ .baz {@extend .foo; @extend .bar}
102
+ SCSS
103
+
104
+ assert_equal <<CSS, render(<<SCSS)
105
+ .foo.bar, .baz {
106
+ a: b; }
107
+ CSS
108
+ .foo.bar {a: b}
109
+ .baz {@extend .foo; @extend .bar}
110
+ SCSS
111
+ end
112
+
113
+ def test_multiple_extends_with_multiple_extenders_and_single_target
114
+ assert_equal <<CSS, render(<<SCSS)
115
+ .foo .bar, .baz .bar, .foo .bang, .baz .bang {
116
+ a: b; }
117
+ CSS
118
+ .foo .bar {a: b}
119
+ .baz {@extend .foo}
120
+ .bang {@extend .bar}
121
+ SCSS
122
+
123
+ assert_equal <<CSS, render(<<SCSS)
124
+ .foo.bar, .bar.baz, .baz.bang, .foo.bang {
125
+ a: b; }
126
+ CSS
127
+ .foo.bar {a: b}
128
+ .baz {@extend .foo}
129
+ .bang {@extend .bar}
130
+ SCSS
131
+ end
132
+
133
+ def test_chained_extends
134
+ assert_equal <<CSS, render(<<SCSS)
135
+ .foo, .bar, .baz, .bip {
136
+ a: b; }
137
+ CSS
138
+ .foo {a: b}
139
+ .bar {@extend .foo}
140
+ .baz {@extend .bar}
141
+ .bip {@extend .bar}
142
+ SCSS
143
+ end
144
+
145
+ def test_dynamic_extendee
146
+ assert_equal <<CSS, render(<<SCSS)
147
+ .foo, .bar {
148
+ a: b; }
149
+ CSS
150
+ .foo {a: b}
151
+ .bar {@extend \#{".foo"}}
152
+ SCSS
153
+
154
+ assert_equal <<CSS, render(<<SCSS)
155
+ [baz^="blip12px"], .bar {
156
+ a: b; }
157
+ CSS
158
+ [baz^="blip12px"] {a: b}
159
+ .bar {@extend [baz^="blip\#{12px}"]}
160
+ SCSS
161
+ end
162
+
163
+ def test_nested_target
164
+ assert_equal <<CSS, render(<<SCSS)
165
+ .foo .bar, .foo .baz {
166
+ a: b; }
167
+ CSS
168
+ .foo .bar {a: b}
169
+ .baz {@extend .bar}
170
+ SCSS
171
+ end
172
+
173
+ def test_target_with_child
174
+ assert_equal <<CSS, render(<<SCSS)
175
+ .foo .bar, .baz .bar {
176
+ a: b; }
177
+ CSS
178
+ .foo .bar {a: b}
179
+ .baz {@extend .foo}
180
+ SCSS
181
+ end
182
+
183
+ def test_class_unification
184
+ assert_equal <<CSS, render(<<SCSS)
185
+ .foo.bar, .bar.baz {
186
+ a: b; }
187
+ CSS
188
+ .foo.bar {a: b}
189
+ .baz {@extend .foo}
190
+ SCSS
191
+
192
+ assert_equal <<CSS, render(<<SCSS)
193
+ .baz {
194
+ a: b; }
195
+ CSS
196
+ .foo.baz {a: b}
197
+ .baz {@extend .foo}
198
+ SCSS
199
+ end
200
+
201
+ def test_id_unification
202
+ assert_equal <<CSS, render(<<SCSS)
203
+ .foo.bar, .bar#baz {
204
+ a: b; }
205
+ CSS
206
+ .foo.bar {a: b}
207
+ #baz {@extend .foo}
208
+ SCSS
209
+
210
+ assert_equal <<CSS, render(<<SCSS)
211
+ #baz {
212
+ a: b; }
213
+ CSS
214
+ .foo#baz {a: b}
215
+ #baz {@extend .foo}
216
+ SCSS
217
+
218
+ assert_equal <<CSS, render(<<SCSS)
219
+ .foo#baz {
220
+ a: b; }
221
+ CSS
222
+ .foo#baz {a: b}
223
+ #bar {@extend .foo}
224
+ SCSS
225
+ end
226
+
227
+ def test_universal_unification_with_simple_target
228
+ assert_equal <<CSS, render(<<SCSS)
229
+ .foo, * {
230
+ a: b; }
231
+ CSS
232
+ .foo {a: b}
233
+ * {@extend .foo}
234
+ SCSS
235
+
236
+ assert_equal <<CSS, render(<<SCSS)
237
+ .foo, *|* {
238
+ a: b; }
239
+ CSS
240
+ .foo {a: b}
241
+ *|* {@extend .foo}
242
+ SCSS
243
+
244
+ assert_equal <<CSS, render(<<SCSS)
245
+ .bar {
246
+ a: b; }
247
+ CSS
248
+ .foo.bar {a: b}
249
+ * {@extend .foo}
250
+ SCSS
251
+
252
+ assert_equal <<CSS, render(<<SCSS)
253
+ .bar {
254
+ a: b; }
255
+ CSS
256
+ .foo.bar {a: b}
257
+ *|* {@extend .foo}
258
+ SCSS
259
+
260
+ assert_equal <<CSS, render(<<SCSS)
261
+ .foo.bar, ns|*.bar {
262
+ a: b; }
263
+ CSS
264
+ .foo.bar {a: b}
265
+ ns|* {@extend .foo}
266
+ SCSS
267
+ end
268
+
269
+ def test_universal_unification_with_namespaceless_universal_target
270
+ assert_equal <<CSS, render(<<SCSS)
271
+ * {
272
+ a: b; }
273
+ CSS
274
+ *.foo {a: b}
275
+ * {@extend .foo}
276
+ SCSS
277
+
278
+ assert_equal <<CSS, render(<<SCSS)
279
+ * {
280
+ a: b; }
281
+ CSS
282
+ *.foo {a: b}
283
+ *|* {@extend .foo}
284
+ SCSS
285
+
286
+ assert_equal <<CSS, render(<<SCSS)
287
+ *|*.foo, * {
288
+ a: b; }
289
+ CSS
290
+ *|*.foo {a: b}
291
+ * {@extend .foo}
292
+ SCSS
293
+
294
+ assert_equal <<CSS, render(<<SCSS)
295
+ *|* {
296
+ a: b; }
297
+ CSS
298
+ *|*.foo {a: b}
299
+ *|* {@extend .foo}
300
+ SCSS
301
+
302
+ assert_equal <<CSS, render(<<SCSS)
303
+ *.foo, ns|* {
304
+ a: b; }
305
+ CSS
306
+ *.foo {a: b}
307
+ ns|* {@extend .foo}
308
+ SCSS
309
+
310
+ assert_equal <<CSS, render(<<SCSS)
311
+ *|*.foo, ns|* {
312
+ a: b; }
313
+ CSS
314
+ *|*.foo {a: b}
315
+ ns|* {@extend .foo}
316
+ SCSS
317
+ end
318
+
319
+ def test_universal_unification_with_namespaced_universal_target
320
+ assert_equal <<CSS, render(<<SCSS)
321
+ ns|* {
322
+ a: b; }
323
+ CSS
324
+ ns|*.foo {a: b}
325
+ * {@extend .foo}
326
+ SCSS
327
+
328
+ assert_equal <<CSS, render(<<SCSS)
329
+ ns|* {
330
+ a: b; }
331
+ CSS
332
+ ns|*.foo {a: b}
333
+ *|* {@extend .foo}
334
+ SCSS
335
+
336
+ assert_equal <<CSS, render(<<SCSS)
337
+ ns1|*.foo {
338
+ a: b; }
339
+ CSS
340
+ ns1|*.foo {a: b}
341
+ ns2|* {@extend .foo}
342
+ SCSS
343
+
344
+ assert_equal <<CSS, render(<<SCSS)
345
+ ns|* {
346
+ a: b; }
347
+ CSS
348
+ ns|*.foo {a: b}
349
+ ns|* {@extend .foo}
350
+ SCSS
351
+ end
352
+
353
+ def test_universal_unification_with_namespaceless_element_target
354
+ assert_equal <<CSS, render(<<SCSS)
355
+ a {
356
+ a: b; }
357
+ CSS
358
+ a.foo {a: b}
359
+ * {@extend .foo}
360
+ SCSS
361
+
362
+ assert_equal <<CSS, render(<<SCSS)
363
+ a {
364
+ a: b; }
365
+ CSS
366
+ a.foo {a: b}
367
+ *|* {@extend .foo}
368
+ SCSS
369
+
370
+ assert_equal <<CSS, render(<<SCSS)
371
+ *|a.foo, a {
372
+ a: b; }
373
+ CSS
374
+ *|a.foo {a: b}
375
+ * {@extend .foo}
376
+ SCSS
377
+
378
+ assert_equal <<CSS, render(<<SCSS)
379
+ *|a {
380
+ a: b; }
381
+ CSS
382
+ *|a.foo {a: b}
383
+ *|* {@extend .foo}
384
+ SCSS
385
+
386
+ assert_equal <<CSS, render(<<SCSS)
387
+ a.foo, ns|a {
388
+ a: b; }
389
+ CSS
390
+ a.foo {a: b}
391
+ ns|* {@extend .foo}
392
+ SCSS
393
+
394
+ assert_equal <<CSS, render(<<SCSS)
395
+ *|a.foo, ns|a {
396
+ a: b; }
397
+ CSS
398
+ *|a.foo {a: b}
399
+ ns|* {@extend .foo}
400
+ SCSS
401
+ end
402
+
403
+ def test_universal_unification_with_namespaced_element_target
404
+ assert_equal <<CSS, render(<<SCSS)
405
+ ns|a {
406
+ a: b; }
407
+ CSS
408
+ ns|a.foo {a: b}
409
+ * {@extend .foo}
410
+ SCSS
411
+
412
+ assert_equal <<CSS, render(<<SCSS)
413
+ ns|a {
414
+ a: b; }
415
+ CSS
416
+ ns|a.foo {a: b}
417
+ *|* {@extend .foo}
418
+ SCSS
419
+
420
+ assert_equal <<CSS, render(<<SCSS)
421
+ ns1|a.foo {
422
+ a: b; }
423
+ CSS
424
+ ns1|a.foo {a: b}
425
+ ns2|* {@extend .foo}
426
+ SCSS
427
+
428
+ assert_equal <<CSS, render(<<SCSS)
429
+ ns|a {
430
+ a: b; }
431
+ CSS
432
+ ns|a.foo {a: b}
433
+ ns|* {@extend .foo}
434
+ SCSS
435
+ end
436
+
437
+ def test_element_unification_with_simple_target
438
+ assert_equal <<CSS, render(<<SCSS)
439
+ .foo, a {
440
+ a: b; }
441
+ CSS
442
+ .foo {a: b}
443
+ a {@extend .foo}
444
+ SCSS
445
+
446
+ assert_equal <<CSS, render(<<SCSS)
447
+ .foo.bar, a.bar {
448
+ a: b; }
449
+ CSS
450
+ .foo.bar {a: b}
451
+ a {@extend .foo}
452
+ SCSS
453
+
454
+ assert_equal <<CSS, render(<<SCSS)
455
+ .foo.bar, *|a.bar {
456
+ a: b; }
457
+ CSS
458
+ .foo.bar {a: b}
459
+ *|a {@extend .foo}
460
+ SCSS
461
+
462
+ assert_equal <<CSS, render(<<SCSS)
463
+ .foo.bar, ns|a.bar {
464
+ a: b; }
465
+ CSS
466
+ .foo.bar {a: b}
467
+ ns|a {@extend .foo}
468
+ SCSS
469
+ end
470
+
471
+ def test_element_unification_with_namespaceless_universal_target
472
+ assert_equal <<CSS, render(<<SCSS)
473
+ *.foo, a {
474
+ a: b; }
475
+ CSS
476
+ *.foo {a: b}
477
+ a {@extend .foo}
478
+ SCSS
479
+
480
+ assert_equal <<CSS, render(<<SCSS)
481
+ *.foo, a {
482
+ a: b; }
483
+ CSS
484
+ *.foo {a: b}
485
+ *|a {@extend .foo}
486
+ SCSS
487
+
488
+ assert_equal <<CSS, render(<<SCSS)
489
+ *|*.foo, a {
490
+ a: b; }
491
+ CSS
492
+ *|*.foo {a: b}
493
+ a {@extend .foo}
494
+ SCSS
495
+
496
+ assert_equal <<CSS, render(<<SCSS)
497
+ *|*.foo, *|a {
498
+ a: b; }
499
+ CSS
500
+ *|*.foo {a: b}
501
+ *|a {@extend .foo}
502
+ SCSS
503
+
504
+ assert_equal <<CSS, render(<<SCSS)
505
+ *.foo, ns|a {
506
+ a: b; }
507
+ CSS
508
+ *.foo {a: b}
509
+ ns|a {@extend .foo}
510
+ SCSS
511
+
512
+ assert_equal <<CSS, render(<<SCSS)
513
+ *|*.foo, ns|a {
514
+ a: b; }
515
+ CSS
516
+ *|*.foo {a: b}
517
+ ns|a {@extend .foo}
518
+ SCSS
519
+ end
520
+
521
+ def test_element_unification_with_namespaced_universal_target
522
+ assert_equal <<CSS, render(<<SCSS)
523
+ ns|*.foo, ns|a {
524
+ a: b; }
525
+ CSS
526
+ ns|*.foo {a: b}
527
+ a {@extend .foo}
528
+ SCSS
529
+
530
+ assert_equal <<CSS, render(<<SCSS)
531
+ ns|*.foo, ns|a {
532
+ a: b; }
533
+ CSS
534
+ ns|*.foo {a: b}
535
+ *|a {@extend .foo}
536
+ SCSS
537
+
538
+ assert_equal <<CSS, render(<<SCSS)
539
+ ns1|*.foo {
540
+ a: b; }
541
+ CSS
542
+ ns1|*.foo {a: b}
543
+ ns2|a {@extend .foo}
544
+ SCSS
545
+
546
+ assert_equal <<CSS, render(<<SCSS)
547
+ ns|*.foo, ns|a {
548
+ a: b; }
549
+ CSS
550
+ ns|*.foo {a: b}
551
+ ns|a {@extend .foo}
552
+ SCSS
553
+ end
554
+
555
+ def test_element_unification_with_namespaceless_element_target
556
+ assert_equal <<CSS, render(<<SCSS)
557
+ a {
558
+ a: b; }
559
+ CSS
560
+ a.foo {a: b}
561
+ a {@extend .foo}
562
+ SCSS
563
+
564
+ assert_equal <<CSS, render(<<SCSS)
565
+ a {
566
+ a: b; }
567
+ CSS
568
+ a.foo {a: b}
569
+ *|a {@extend .foo}
570
+ SCSS
571
+
572
+ assert_equal <<CSS, render(<<SCSS)
573
+ *|a.foo, a {
574
+ a: b; }
575
+ CSS
576
+ *|a.foo {a: b}
577
+ a {@extend .foo}
578
+ SCSS
579
+
580
+ assert_equal <<CSS, render(<<SCSS)
581
+ *|a {
582
+ a: b; }
583
+ CSS
584
+ *|a.foo {a: b}
585
+ *|a {@extend .foo}
586
+ SCSS
587
+
588
+ assert_equal <<CSS, render(<<SCSS)
589
+ a.foo, ns|a {
590
+ a: b; }
591
+ CSS
592
+ a.foo {a: b}
593
+ ns|a {@extend .foo}
594
+ SCSS
595
+
596
+ assert_equal <<CSS, render(<<SCSS)
597
+ *|a.foo, ns|a {
598
+ a: b; }
599
+ CSS
600
+ *|a.foo {a: b}
601
+ ns|a {@extend .foo}
602
+ SCSS
603
+
604
+ assert_equal <<CSS, render(<<SCSS)
605
+ a.foo {
606
+ a: b; }
607
+ CSS
608
+ a.foo {a: b}
609
+ h1 {@extend .foo}
610
+ SCSS
611
+ end
612
+
613
+ def test_element_unification_with_namespaced_element_target
614
+ assert_equal <<CSS, render(<<SCSS)
615
+ ns|a {
616
+ a: b; }
617
+ CSS
618
+ ns|a.foo {a: b}
619
+ a {@extend .foo}
620
+ SCSS
621
+
622
+ assert_equal <<CSS, render(<<SCSS)
623
+ ns|a {
624
+ a: b; }
625
+ CSS
626
+ ns|a.foo {a: b}
627
+ *|a {@extend .foo}
628
+ SCSS
629
+
630
+ assert_equal <<CSS, render(<<SCSS)
631
+ ns1|a.foo {
632
+ a: b; }
633
+ CSS
634
+ ns1|a.foo {a: b}
635
+ ns2|a {@extend .foo}
636
+ SCSS
637
+
638
+ assert_equal <<CSS, render(<<SCSS)
639
+ ns|a {
640
+ a: b; }
641
+ CSS
642
+ ns|a.foo {a: b}
643
+ ns|a {@extend .foo}
644
+ SCSS
645
+ end
646
+
647
+ def test_attribute_unification
648
+ assert_equal <<CSS, render(<<SCSS)
649
+ [foo=bar].baz, [foo=bar][foo=baz] {
650
+ a: b; }
651
+ CSS
652
+ [foo=bar].baz {a: b}
653
+ [foo=baz] {@extend .baz}
654
+ SCSS
655
+
656
+ assert_equal <<CSS, render(<<SCSS)
657
+ [foo=bar].baz, [foo=bar][foo^=bar] {
658
+ a: b; }
659
+ CSS
660
+ [foo=bar].baz {a: b}
661
+ [foo^=bar] {@extend .baz}
662
+ SCSS
663
+
664
+ assert_equal <<CSS, render(<<SCSS)
665
+ [foo=bar].baz, [foo=bar][foot=bar] {
666
+ a: b; }
667
+ CSS
668
+ [foo=bar].baz {a: b}
669
+ [foot=bar] {@extend .baz}
670
+ SCSS
671
+
672
+ assert_equal <<CSS, render(<<SCSS)
673
+ [foo=bar].baz, [foo=bar][ns|foo=bar] {
674
+ a: b; }
675
+ CSS
676
+ [foo=bar].baz {a: b}
677
+ [ns|foo=bar] {@extend .baz}
678
+ SCSS
679
+
680
+ assert_equal <<CSS, render(<<SCSS)
681
+ [foo=bar] {
682
+ a: b; }
683
+ CSS
684
+ [foo=bar].baz {a: b}
685
+ [foo=bar] {@extend .baz}
686
+ SCSS
687
+ end
688
+
689
+ def test_pseudo_unification
690
+ assert_equal <<CSS, render(<<SCSS)
691
+ :foo.baz, :foo:foo(2n+1) {
692
+ a: b; }
693
+ CSS
694
+ :foo.baz {a: b}
695
+ :foo(2n+1) {@extend .baz}
696
+ SCSS
697
+
698
+ assert_equal <<CSS, render(<<SCSS)
699
+ :foo.baz, :foo::foo {
700
+ a: b; }
701
+ CSS
702
+ :foo.baz {a: b}
703
+ ::foo {@extend .baz}
704
+ SCSS
705
+
706
+ assert_equal <<CSS, render(<<SCSS)
707
+ ::foo.baz {
708
+ a: b; }
709
+ CSS
710
+ ::foo.baz {a: b}
711
+ ::bar {@extend .baz}
712
+ SCSS
713
+
714
+ assert_equal <<CSS, render(<<SCSS)
715
+ ::foo.baz {
716
+ a: b; }
717
+ CSS
718
+ ::foo.baz {a: b}
719
+ ::foo(2n+1) {@extend .baz}
720
+ SCSS
721
+
722
+ assert_equal <<CSS, render(<<SCSS)
723
+ ::foo {
724
+ a: b; }
725
+ CSS
726
+ ::foo.baz {a: b}
727
+ ::foo {@extend .baz}
728
+ SCSS
729
+
730
+ assert_equal <<CSS, render(<<SCSS)
731
+ ::foo(2n+1) {
732
+ a: b; }
733
+ CSS
734
+ ::foo(2n+1).baz {a: b}
735
+ ::foo(2n+1) {@extend .baz}
736
+ SCSS
737
+
738
+ assert_equal <<CSS, render(<<SCSS)
739
+ :foo.baz, :foo:bar {
740
+ a: b; }
741
+ CSS
742
+ :foo.baz {a: b}
743
+ :bar {@extend .baz}
744
+ SCSS
745
+
746
+ assert_equal <<CSS, render(<<SCSS)
747
+ .baz:foo, :foo:after {
748
+ a: b; }
749
+ CSS
750
+ .baz:foo {a: b}
751
+ :after {@extend .baz}
752
+ SCSS
753
+
754
+ assert_equal <<CSS, render(<<SCSS)
755
+ .baz:after, :foo:after {
756
+ a: b; }
757
+ CSS
758
+ .baz:after {a: b}
759
+ :foo {@extend .baz}
760
+ SCSS
761
+
762
+ assert_equal <<CSS, render(<<SCSS)
763
+ :foo {
764
+ a: b; }
765
+ CSS
766
+ :foo.baz {a: b}
767
+ :foo {@extend .baz}
768
+ SCSS
769
+ end
770
+
771
+ def test_pseudoelement_remains_at_end_of_selector
772
+ assert_equal <<CSS, render(<<SCSS)
773
+ .foo::bar, .baz::bar {
774
+ a: b; }
775
+ CSS
776
+ .foo::bar {a: b}
777
+ .baz {@extend .foo}
778
+ SCSS
779
+
780
+ assert_equal <<CSS, render(<<SCSS)
781
+ a.foo::bar, a.baz::bar {
782
+ a: b; }
783
+ CSS
784
+ a.foo::bar {a: b}
785
+ .baz {@extend .foo}
786
+ SCSS
787
+ end
788
+
789
+ def test_pseudoclass_remains_at_end_of_selector
790
+ assert_equal <<CSS, render(<<SCSS)
791
+ .foo:bar, .baz:bar {
792
+ a: b; }
793
+ CSS
794
+ .foo:bar {a: b}
795
+ .baz {@extend .foo}
796
+ SCSS
797
+
798
+ assert_equal <<CSS, render(<<SCSS)
799
+ a.foo:bar, a.baz:bar {
800
+ a: b; }
801
+ CSS
802
+ a.foo:bar {a: b}
803
+ .baz {@extend .foo}
804
+ SCSS
805
+ end
806
+
807
+ def test_not_remains_at_end_of_selector
808
+ assert_equal <<CSS, render(<<SCSS)
809
+ .foo:not(.bar), .baz:not(.bar) {
810
+ a: b; }
811
+ CSS
812
+ .foo:not(.bar) {a: b}
813
+ .baz {@extend .foo}
814
+ SCSS
815
+ end
816
+
817
+ def test_pseudoelement_goes_lefter_than_pseudoclass
818
+ assert_equal <<CSS, render(<<SCSS)
819
+ .foo::bar, .baz:bang::bar {
820
+ a: b; }
821
+ CSS
822
+ .foo::bar {a: b}
823
+ .baz:bang {@extend .foo}
824
+ SCSS
825
+
826
+ assert_equal <<CSS, render(<<SCSS)
827
+ .foo:bar, .baz:bar::bang {
828
+ a: b; }
829
+ CSS
830
+ .foo:bar {a: b}
831
+ .baz::bang {@extend .foo}
832
+ SCSS
833
+ end
834
+
835
+ def test_pseudoelement_goes_lefter_than_not
836
+ assert_equal <<CSS, render(<<SCSS)
837
+ .foo::bar, .baz:not(.bang)::bar {
838
+ a: b; }
839
+ CSS
840
+ .foo::bar {a: b}
841
+ .baz:not(.bang) {@extend .foo}
842
+ SCSS
843
+
844
+ assert_equal <<CSS, render(<<SCSS)
845
+ .foo:not(.bang), .baz:not(.bang)::bar {
846
+ a: b; }
847
+ CSS
848
+ .foo:not(.bang) {a: b}
849
+ .baz::bar {@extend .foo}
850
+ SCSS
851
+ end
852
+
853
+ def test_negation_unification
854
+ assert_equal <<CSS, render(<<SCSS)
855
+ :not(.foo).baz, :not(.foo):not(.bar) {
856
+ a: b; }
857
+ CSS
858
+ :not(.foo).baz {a: b}
859
+ :not(.bar) {@extend .baz}
860
+ SCSS
861
+
862
+ assert_equal <<CSS, render(<<SCSS)
863
+ :not(.foo) {
864
+ a: b; }
865
+ CSS
866
+ :not(.foo).baz {a: b}
867
+ :not(.foo) {@extend .baz}
868
+ SCSS
869
+
870
+ assert_equal <<CSS, render(<<SCSS)
871
+ :not([a=b]) {
872
+ a: b; }
873
+ CSS
874
+ :not([a=b]).baz {a: b}
875
+ :not([a = b]) {@extend .baz}
876
+ SCSS
877
+ end
878
+
879
+ def test_comma_extendee
880
+ assert_equal <<CSS, render(<<SCSS)
881
+ .foo, .baz {
882
+ a: b; }
883
+
884
+ .bar, .baz {
885
+ c: d; }
886
+ CSS
887
+ .foo {a: b}
888
+ .bar {c: d}
889
+ .baz {@extend .foo, .bar}
890
+ SCSS
891
+ end
892
+
893
+ ## Long Extendees
894
+
895
+ def test_long_extendee
896
+ assert_equal <<CSS, render(<<SCSS)
897
+ .foo.bar, .baz {
898
+ a: b; }
899
+ CSS
900
+ .foo.bar {a: b}
901
+ .baz {@extend .foo.bar}
902
+ SCSS
903
+ end
904
+
905
+ def test_long_extendee_requires_all_selectors
906
+ assert_equal <<CSS, render(<<SCSS)
907
+ .foo {
908
+ a: b; }
909
+ CSS
910
+ .foo {a: b}
911
+ .baz {@extend .foo.bar}
912
+ SCSS
913
+ end
914
+
915
+ def test_long_extendee_matches_supersets
916
+ assert_equal <<CSS, render(<<SCSS)
917
+ .foo.bar.bap, .bap.baz {
918
+ a: b; }
919
+ CSS
920
+ .foo.bar.bap {a: b}
921
+ .baz {@extend .foo.bar}
922
+ SCSS
923
+ end
924
+
925
+ def test_long_extendee_runs_unification
926
+ assert_equal <<CSS, render(<<SCSS)
927
+ ns|*.foo.bar, ns|a.baz {
928
+ a: b; }
929
+ CSS
930
+ ns|*.foo.bar {a: b}
931
+ a.baz {@extend .foo.bar}
932
+ SCSS
933
+ end
934
+
935
+ ## Long Extenders
936
+
937
+ def test_long_extender
938
+ assert_equal <<CSS, render(<<SCSS)
939
+ .foo.bar, .bar.baz.bang {
940
+ a: b; }
941
+ CSS
942
+ .foo.bar {a: b}
943
+ .baz.bang {@extend .foo}
944
+ SCSS
945
+ end
946
+
947
+ def test_long_extender_runs_unification
948
+ assert_equal <<CSS, render(<<SCSS)
949
+ ns|*.foo.bar, ns|a.bar.baz {
950
+ a: b; }
951
+ CSS
952
+ ns|*.foo.bar {a: b}
953
+ a.baz {@extend .foo}
954
+ SCSS
955
+ end
956
+
957
+ def test_long_extender_aborts_unification
958
+ assert_equal <<CSS, render(<<SCSS)
959
+ a.foo#bar {
960
+ a: b; }
961
+ CSS
962
+ a.foo#bar {a: b}
963
+ h1.baz {@extend .foo}
964
+ SCSS
965
+
966
+ assert_equal <<CSS, render(<<SCSS)
967
+ a.foo#bar {
968
+ a: b; }
969
+ CSS
970
+ a.foo#bar {a: b}
971
+ .bang#baz {@extend .foo}
972
+ SCSS
973
+ end
974
+
975
+ ## Nested Extenders
976
+
977
+ def test_nested_extender
978
+ assert_equal <<CSS, render(<<SCSS)
979
+ .foo, foo bar {
980
+ a: b; }
981
+ CSS
982
+ .foo {a: b}
983
+ foo bar {@extend .foo}
984
+ SCSS
985
+ end
986
+
987
+ def test_nested_extender_runs_unification
988
+ assert_equal <<CSS, render(<<SCSS)
989
+ .foo.bar, foo bar.bar {
990
+ a: b; }
991
+ CSS
992
+ .foo.bar {a: b}
993
+ foo bar {@extend .foo}
994
+ SCSS
995
+ end
996
+
997
+ def test_nested_extender_aborts_unification
998
+ assert_equal <<CSS, render(<<SCSS)
999
+ baz.foo {
1000
+ a: b; }
1001
+ CSS
1002
+ baz.foo {a: b}
1003
+ foo bar {@extend .foo}
1004
+ SCSS
1005
+ end
1006
+
1007
+ def test_nested_extender_alternates_parents
1008
+ assert_equal <<CSS, render(<<SCSS)
1009
+ .baz .bip .foo, .baz .bip foo .grank bar, foo .grank .baz .bip bar {
1010
+ a: b; }
1011
+ CSS
1012
+ .baz .bip .foo {a: b}
1013
+ foo .grank bar {@extend .foo}
1014
+ SCSS
1015
+ end
1016
+
1017
+ def test_nested_extender_unifies_identical_parents
1018
+ assert_equal <<CSS, render(<<SCSS)
1019
+ .baz .bip .foo, .baz .bip bar {
1020
+ a: b; }
1021
+ CSS
1022
+ .baz .bip .foo {a: b}
1023
+ .baz .bip bar {@extend .foo}
1024
+ SCSS
1025
+ end
1026
+
1027
+ def test_nested_extender_unifies_common_substring
1028
+ assert_equal <<CSS, render(<<SCSS)
1029
+ .baz .bip .bap .bink .foo, .baz .brat .bip .bap .bink bar, .brat .baz .bip .bap .bink bar {
1030
+ a: b; }
1031
+ CSS
1032
+ .baz .bip .bap .bink .foo {a: b}
1033
+ .brat .bip .bap bar {@extend .foo}
1034
+ SCSS
1035
+ end
1036
+
1037
+ def test_nested_extender_unifies_common_subseq
1038
+ assert_equal <<CSS, render(<<SCSS)
1039
+ .a .x .b .y .foo, .a .x .n .b .y .m bar, .a .n .x .b .y .m bar, .a .x .n .b .m .y bar, .a .n .x .b .m .y bar {
1040
+ a: b; }
1041
+ CSS
1042
+ .a .x .b .y .foo {a: b}
1043
+ .a .n .b .m bar {@extend .foo}
1044
+ SCSS
1045
+ end
1046
+
1047
+ def test_nested_extender_chooses_first_subseq
1048
+ assert_equal <<CSS, render(<<SCSS)
1049
+ .a .b .c .d .foo, .a .b .c .d .a .b .bar {
1050
+ a: b; }
1051
+ CSS
1052
+ .a .b .c .d .foo {a: b}
1053
+ .c .d .a .b .bar {@extend .foo}
1054
+ SCSS
1055
+ end
1056
+
1057
+ def test_nested_extender_counts_extended_subselectors
1058
+ assert_equal <<CSS, render(<<SCSS)
1059
+ .a .bip.bop .foo, .a .b .bip.bop .bar, .b .a .bip.bop .bar {
1060
+ a: b; }
1061
+ CSS
1062
+ .a .bip.bop .foo {a: b}
1063
+ .b .bip .bar {@extend .foo}
1064
+ SCSS
1065
+ end
1066
+
1067
+ def test_nested_extender_counts_extended_superselectors
1068
+ assert_equal <<CSS, render(<<SCSS)
1069
+ .a .bip .foo, .a .b .bip.bop .bar, .b .a .bip.bop .bar {
1070
+ a: b; }
1071
+ CSS
1072
+ .a .bip .foo {a: b}
1073
+ .b .bip.bop .bar {@extend .foo}
1074
+ SCSS
1075
+ end
1076
+
1077
+ def test_nested_extender_with_child_selector
1078
+ assert_equal <<CSS, render(<<SCSS)
1079
+ .baz .foo, .baz foo > bar {
1080
+ a: b; }
1081
+ CSS
1082
+ .baz .foo {a: b}
1083
+ foo > bar {@extend .foo}
1084
+ SCSS
1085
+ end
1086
+
1087
+ def test_nested_extender_finds_common_selectors_around_child_selector
1088
+ assert_equal <<CSS, render(<<SCSS)
1089
+ a > b c .c1, a > b c .c2 {
1090
+ a: b; }
1091
+ CSS
1092
+ a > b c .c1 {a: b}
1093
+ a c .c2 {@extend .c1}
1094
+ SCSS
1095
+
1096
+ assert_equal <<CSS, render(<<SCSS)
1097
+ a > b c .c1, a > b c .c2 {
1098
+ a: b; }
1099
+ CSS
1100
+ a > b c .c1 {a: b}
1101
+ b c .c2 {@extend .c1}
1102
+ SCSS
1103
+ end
1104
+
1105
+ def test_nested_extender_doesnt_find_common_selectors_around_adjacent_sibling_selector
1106
+ assert_equal <<CSS, render(<<SCSS)
1107
+ a + b c .c1, a + b a c .c2, a a + b c .c2 {
1108
+ a: b; }
1109
+ CSS
1110
+ a + b c .c1 {a: b}
1111
+ a c .c2 {@extend .c1}
1112
+ SCSS
1113
+
1114
+ assert_equal <<CSS, render(<<SCSS)
1115
+ a + b c .c1, a a + b c .c2 {
1116
+ a: b; }
1117
+ CSS
1118
+ a + b c .c1 {a: b}
1119
+ a b .c2 {@extend .c1}
1120
+ SCSS
1121
+
1122
+ assert_equal <<CSS, render(<<SCSS)
1123
+ a + b c .c1, a + b c .c2 {
1124
+ a: b; }
1125
+ CSS
1126
+ a + b c .c1 {a: b}
1127
+ b c .c2 {@extend .c1}
1128
+ SCSS
1129
+ end
1130
+
1131
+ def test_nested_extender_doesnt_find_common_selectors_around_sibling_selector
1132
+ assert_equal <<CSS, render(<<SCSS)
1133
+ a ~ b c .c1, a ~ b a c .c2, a a ~ b c .c2 {
1134
+ a: b; }
1135
+ CSS
1136
+ a ~ b c .c1 {a: b}
1137
+ a c .c2 {@extend .c1}
1138
+ SCSS
1139
+
1140
+ assert_equal <<CSS, render(<<SCSS)
1141
+ a ~ b c .c1, a a ~ b c .c2 {
1142
+ a: b; }
1143
+ CSS
1144
+ a ~ b c .c1 {a: b}
1145
+ a b .c2 {@extend .c1}
1146
+ SCSS
1147
+
1148
+ assert_equal <<CSS, render(<<SCSS)
1149
+ a ~ b c .c1, a ~ b c .c2 {
1150
+ a: b; }
1151
+ CSS
1152
+ a ~ b c .c1 {a: b}
1153
+ b c .c2 {@extend .c1}
1154
+ SCSS
1155
+ end
1156
+
1157
+ def test_nested_extender_with_early_child_selectors_doesnt_subseq_them
1158
+ assert_equal <<CSS, render(<<SCSS)
1159
+ .bip > .bap .foo, .bip > .bap .grip > .bap .bar, .grip > .bap .bip > .bap .bar {
1160
+ a: b; }
1161
+ CSS
1162
+ .bip > .bap .foo {a: b}
1163
+ .grip > .bap .bar {@extend .foo}
1164
+ SCSS
1165
+
1166
+ assert_equal <<CSS, render(<<SCSS)
1167
+ .bap > .bip .foo, .bap > .bip .bap > .grip .bar, .bap > .grip .bap > .bip .bar {
1168
+ a: b; }
1169
+ CSS
1170
+ .bap > .bip .foo {a: b}
1171
+ .bap > .grip .bar {@extend .foo}
1172
+ SCSS
1173
+ end
1174
+
1175
+ def test_nested_extender_with_child_selector_unifies
1176
+ assert_equal <<CSS, render(<<SCSS)
1177
+ .baz.foo, foo > bar.baz {
1178
+ a: b; }
1179
+ CSS
1180
+ .baz.foo {a: b}
1181
+ foo > bar {@extend .foo}
1182
+ SCSS
1183
+ end
1184
+
1185
+ def test_nested_extender_with_trailing_child_selector
1186
+ assert_raise(Sass::SyntaxError, "bar > can't extend: invalid selector") do
1187
+ render("bar > {@extend .baz}")
1188
+ end
1189
+ end
1190
+
1191
+ def test_nested_extender_with_sibling_selector
1192
+ assert_equal <<CSS, render(<<SCSS)
1193
+ .baz .foo, .baz foo + bar {
1194
+ a: b; }
1195
+ CSS
1196
+ .baz .foo {a: b}
1197
+ foo + bar {@extend .foo}
1198
+ SCSS
1199
+ end
1200
+
1201
+ def test_nested_extender_with_hacky_selector
1202
+ assert_equal <<CSS, render(<<SCSS)
1203
+ .baz .foo, .baz foo + > > + bar {
1204
+ a: b; }
1205
+ CSS
1206
+ .baz .foo {a: b}
1207
+ foo + > > + bar {@extend .foo}
1208
+ SCSS
1209
+
1210
+ assert_equal <<CSS, render(<<SCSS)
1211
+ .baz .foo, .baz > > bar {
1212
+ a: b; }
1213
+ CSS
1214
+ .baz .foo {a: b}
1215
+ > > bar {@extend .foo}
1216
+ SCSS
1217
+ end
1218
+
1219
+ def test_nested_extender_merges_with_same_selector
1220
+ assert_equal <<CSS, render(<<SCSS)
1221
+ .foo .bar, .foo .baz {
1222
+ a: b; }
1223
+ CSS
1224
+ .foo {
1225
+ .bar {a: b}
1226
+ .baz {@extend .bar} }
1227
+ SCSS
1228
+ end
1229
+
1230
+ def test_nested_extender_with_child_selector_merges_with_same_selector
1231
+ assert_equal <<CSS, render(<<SCSS)
1232
+ .foo > .bar .baz, .foo > .bar .bang {
1233
+ a: b; }
1234
+ CSS
1235
+ .foo > .bar .baz {a: b}
1236
+ .foo > .bar .bang {@extend .baz}
1237
+ SCSS
1238
+ end
1239
+
1240
+ # Loops
1241
+
1242
+ def test_extend_self_loop
1243
+ assert_equal <<CSS, render(<<SCSS)
1244
+ .foo {
1245
+ a: b; }
1246
+ CSS
1247
+ .foo {a: b; @extend .foo}
1248
+ SCSS
1249
+ end
1250
+
1251
+ def test_basic_extend_loop
1252
+ assert_equal <<CSS, render(<<SCSS)
1253
+ .bar, .foo {
1254
+ a: b; }
1255
+
1256
+ .foo, .bar {
1257
+ c: d; }
1258
+ CSS
1259
+ .foo {a: b; @extend .bar}
1260
+ .bar {c: d; @extend .foo}
1261
+ SCSS
1262
+ end
1263
+
1264
+ def test_three_level_extend_loop
1265
+ assert_equal <<CSS, render(<<SCSS)
1266
+ .baz, .bar, .foo {
1267
+ a: b; }
1268
+
1269
+ .foo, .baz, .bar {
1270
+ c: d; }
1271
+
1272
+ .bar, .foo, .baz {
1273
+ e: f; }
1274
+ CSS
1275
+ .foo {a: b; @extend .bar}
1276
+ .bar {c: d; @extend .baz}
1277
+ .baz {e: f; @extend .foo}
1278
+ SCSS
1279
+ end
1280
+
1281
+ def test_nested_extend_loop
1282
+ assert_equal <<CSS, render(<<SCSS)
1283
+ .bar, .bar .foo {
1284
+ a: b; }
1285
+ .bar .foo, .bar .foo .foo {
1286
+ c: d; }
1287
+ CSS
1288
+ .bar {
1289
+ a: b;
1290
+ .foo {c: d; @extend .bar}
1291
+ }
1292
+ SCSS
1293
+ end
1294
+
1295
+ def test_multiple_extender_merges_with_superset_selector
1296
+ assert_equal <<CSS, render(<<SCSS)
1297
+ a.bar.baz, a.foo {
1298
+ a: b; }
1299
+ CSS
1300
+ .foo {@extend .bar; @extend .baz}
1301
+ a.bar.baz {a: b}
1302
+ SCSS
1303
+ end
1304
+
1305
+ def test_control_flow_if
1306
+ assert_equal <<CSS, render(<<SCSS)
1307
+ .true, .also-true {
1308
+ color: green; }
1309
+
1310
+ .false, .also-false {
1311
+ color: red; }
1312
+ CSS
1313
+ .true { color: green; }
1314
+ .false { color: red; }
1315
+ .also-true {
1316
+ @if true { @extend .true; }
1317
+ @else { @extend .false; }
1318
+ }
1319
+ .also-false {
1320
+ @if false { @extend .true; }
1321
+ @else { @extend .false; }
1322
+ }
1323
+ SCSS
1324
+ end
1325
+
1326
+ def test_control_flow_for
1327
+ assert_equal <<CSS, render(<<SCSS)
1328
+ .base-0, .added {
1329
+ color: green; }
1330
+
1331
+ .base-1, .added {
1332
+ display: block; }
1333
+
1334
+ .base-2, .added {
1335
+ border: 1px solid blue; }
1336
+ CSS
1337
+ .base-0 { color: green; }
1338
+ .base-1 { display: block; }
1339
+ .base-2 { border: 1px solid blue; }
1340
+ .added {
1341
+ @for $i from 0 to 3 {
1342
+ @extend .base-\#{$i};
1343
+ }
1344
+ }
1345
+ SCSS
1346
+ end
1347
+
1348
+ def test_control_flow_while
1349
+ assert_equal <<CSS, render(<<SCSS)
1350
+ .base-0, .added {
1351
+ color: green; }
1352
+
1353
+ .base-1, .added {
1354
+ display: block; }
1355
+
1356
+ .base-2, .added {
1357
+ border: 1px solid blue; }
1358
+ CSS
1359
+ .base-0 { color: green; }
1360
+ .base-1 { display: block; }
1361
+ .base-2 { border: 1px solid blue; }
1362
+ .added {
1363
+ $i : 0;
1364
+ @while $i < 3 {
1365
+ @extend .base-\#{$i};
1366
+ $i : $i + 1;
1367
+ }
1368
+ }
1369
+ SCSS
1370
+ end
1371
+
1372
+ def test_extend_out_of_media
1373
+ assert_warning(<<WARN) {assert_equal(<<CSS, render(<<SCSS))}
1374
+ DEPRECATION WARNING on line 3 of test_extend_out_of_media_inline.sass:
1375
+ @extending an outer selector from within @media is deprecated.
1376
+ You may only @extend selectors within the same directive.
1377
+ This will be an error in Sass 3.3.
1378
+ It can only work once @extend is supported natively in the browser.
1379
+ WARN
1380
+ .foo {
1381
+ a: b; }
1382
+ CSS
1383
+ .foo {a: b}
1384
+ @media screen {
1385
+ .bar {@extend .foo}
1386
+ }
1387
+ SCSS
1388
+ end
1389
+
1390
+ def test_extend_out_of_unknown_directive
1391
+ assert_warning(<<WARN) {assert_equal(<<CSS, render(<<SCSS))}
1392
+ DEPRECATION WARNING on line 3 of test_extend_out_of_unknown_directive_inline.sass:
1393
+ @extending an outer selector from within @flooblehoof is deprecated.
1394
+ You may only @extend selectors within the same directive.
1395
+ This will be an error in Sass 3.3.
1396
+ It can only work once @extend is supported natively in the browser.
1397
+ WARN
1398
+ .foo {
1399
+ a: b; }
1400
+
1401
+ @flooblehoof {}
1402
+ CSS
1403
+ .foo {a: b}
1404
+ @flooblehoof {
1405
+ .bar {@extend .foo}
1406
+ }
1407
+ SCSS
1408
+ end
1409
+
1410
+ def test_extend_out_of_nested_directives
1411
+ assert_warning(<<WARN) {assert_equal(<<CSS, render(<<SCSS))}
1412
+ DEPRECATION WARNING on line 4 of test_extend_out_of_nested_directives_inline.sass:
1413
+ @extending an outer selector from within @flooblehoof is deprecated.
1414
+ You may only @extend selectors within the same directive.
1415
+ This will be an error in Sass 3.3.
1416
+ It can only work once @extend is supported natively in the browser.
1417
+ WARN
1418
+ @media screen {
1419
+ .foo {
1420
+ a: b; }
1421
+
1422
+ @flooblehoof {} }
1423
+ CSS
1424
+ @media screen {
1425
+ .foo {a: b}
1426
+ @flooblehoof {
1427
+ .bar {@extend .foo}
1428
+ }
1429
+ }
1430
+ SCSS
1431
+ end
1432
+
1433
+ def test_extend_within_media
1434
+ assert_equal(<<CSS, render(<<SCSS))
1435
+ @media screen {
1436
+ .foo, .bar {
1437
+ a: b; } }
1438
+ CSS
1439
+ @media screen {
1440
+ .foo {a: b}
1441
+ .bar {@extend .foo}
1442
+ }
1443
+ SCSS
1444
+ end
1445
+
1446
+ def test_extend_within_unknown_directive
1447
+ assert_equal(<<CSS, render(<<SCSS))
1448
+ @flooblehoof {
1449
+ .foo, .bar {
1450
+ a: b; } }
1451
+ CSS
1452
+ @flooblehoof {
1453
+ .foo {a: b}
1454
+ .bar {@extend .foo}
1455
+ }
1456
+ SCSS
1457
+ end
1458
+
1459
+ def test_extend_within_nested_directives
1460
+ assert_equal(<<CSS, render(<<SCSS))
1461
+ @media screen {
1462
+ @flooblehoof {
1463
+ .foo, .bar {
1464
+ a: b; } } }
1465
+ CSS
1466
+ @media screen {
1467
+ @flooblehoof {
1468
+ .foo {a: b}
1469
+ .bar {@extend .foo}
1470
+ }
1471
+ }
1472
+ SCSS
1473
+ end
1474
+
1475
+ def test_extend_within_disparate_media
1476
+ assert_equal(<<CSS, render(<<SCSS))
1477
+ @media screen {
1478
+ .foo, .bar {
1479
+ a: b; } }
1480
+ CSS
1481
+ @media screen {.foo {a: b}}
1482
+ @media screen {.bar {@extend .foo}}
1483
+ SCSS
1484
+ end
1485
+
1486
+ def test_extend_within_disparate_unknown_directive
1487
+ assert_equal(<<CSS, render(<<SCSS))
1488
+ @flooblehoof {
1489
+ .foo, .bar {
1490
+ a: b; } }
1491
+
1492
+ @flooblehoof {}
1493
+ CSS
1494
+ @flooblehoof {.foo {a: b}}
1495
+ @flooblehoof {.bar {@extend .foo}}
1496
+ SCSS
1497
+ end
1498
+
1499
+ def test_extend_within_disparate_nested_directives
1500
+ assert_equal(<<CSS, render(<<SCSS))
1501
+ @media screen {
1502
+ @flooblehoof {
1503
+ .foo, .bar {
1504
+ a: b; } } }
1505
+ @media screen {
1506
+ @flooblehoof {} }
1507
+ CSS
1508
+ @media screen {@flooblehoof {.foo {a: b}}}
1509
+ @media screen {@flooblehoof {.bar {@extend .foo}}}
1510
+ SCSS
1511
+ end
1512
+
1513
+ def test_extend_within_and_without_media
1514
+ assert_warning(<<WARN) {assert_equal(<<CSS, render(<<SCSS))}
1515
+ DEPRECATION WARNING on line 4 of test_extend_within_and_without_media_inline.sass:
1516
+ @extending an outer selector from within @media is deprecated.
1517
+ You may only @extend selectors within the same directive.
1518
+ This will be an error in Sass 3.3.
1519
+ It can only work once @extend is supported natively in the browser.
1520
+ WARN
1521
+ .foo {
1522
+ a: b; }
1523
+
1524
+ @media screen {
1525
+ .foo, .bar {
1526
+ c: d; } }
1527
+ CSS
1528
+ .foo {a: b}
1529
+ @media screen {
1530
+ .foo {c: d}
1531
+ .bar {@extend .foo}
1532
+ }
1533
+ SCSS
1534
+ end
1535
+
1536
+ def test_extend_within_and_without_unknown_directive
1537
+ assert_warning(<<WARN) {assert_equal(<<CSS, render(<<SCSS))}
1538
+ DEPRECATION WARNING on line 4 of test_extend_within_and_without_unknown_directive_inline.sass:
1539
+ @extending an outer selector from within @flooblehoof is deprecated.
1540
+ You may only @extend selectors within the same directive.
1541
+ This will be an error in Sass 3.3.
1542
+ It can only work once @extend is supported natively in the browser.
1543
+ WARN
1544
+ .foo {
1545
+ a: b; }
1546
+
1547
+ @flooblehoof {
1548
+ .foo, .bar {
1549
+ c: d; } }
1550
+ CSS
1551
+ .foo {a: b}
1552
+ @flooblehoof {
1553
+ .foo {c: d}
1554
+ .bar {@extend .foo}
1555
+ }
1556
+ SCSS
1557
+ end
1558
+
1559
+ def test_extend_within_and_without_nested_directives
1560
+ assert_warning(<<WARN) {assert_equal(<<CSS, render(<<SCSS))}
1561
+ DEPRECATION WARNING on line 5 of test_extend_within_and_without_nested_directives_inline.sass:
1562
+ @extending an outer selector from within @flooblehoof is deprecated.
1563
+ You may only @extend selectors within the same directive.
1564
+ This will be an error in Sass 3.3.
1565
+ It can only work once @extend is supported natively in the browser.
1566
+ WARN
1567
+ @media screen {
1568
+ .foo {
1569
+ a: b; }
1570
+
1571
+ @flooblehoof {
1572
+ .foo, .bar {
1573
+ c: d; } } }
1574
+ CSS
1575
+ @media screen {
1576
+ .foo {a: b}
1577
+ @flooblehoof {
1578
+ .foo {c: d}
1579
+ .bar {@extend .foo}
1580
+ }
1581
+ }
1582
+ SCSS
1583
+ end
1584
+
1585
+ # Regression Tests
1586
+
1587
+ def test_duplicated_selector_with_newlines
1588
+ assert_equal(<<CSS, render(<<SCSS))
1589
+ .example-1-1,
1590
+ .example-1-2,
1591
+ .my-page-1 .my-module-1-1,
1592
+ .example-1-3 {
1593
+ a: b; }
1594
+ CSS
1595
+ .example-1-1,
1596
+ .example-1-2,
1597
+ .example-1-3 {
1598
+ a: b;
1599
+ }
1600
+
1601
+ .my-page-1 .my-module-1-1 {@extend .example-1-2}
1602
+ SCSS
1603
+ end
1604
+
1605
+ def test_nested_selector_with_child_selector_hack_extendee
1606
+ assert_equal <<CSS, render(<<SCSS)
1607
+ > .foo, > foo bar {
1608
+ a: b; }
1609
+ CSS
1610
+ > .foo {a: b}
1611
+ foo bar {@extend .foo}
1612
+ SCSS
1613
+ end
1614
+
1615
+ def test_nested_selector_with_child_selector_hack_extender
1616
+ assert_equal <<CSS, render(<<SCSS)
1617
+ .foo .bar, > .foo foo bar, > foo .foo bar {
1618
+ a: b; }
1619
+ CSS
1620
+ .foo .bar {a: b}
1621
+ > foo bar {@extend .bar}
1622
+ SCSS
1623
+ end
1624
+
1625
+ def test_nested_selector_with_child_selector_hack_extender_and_extendee
1626
+ assert_equal <<CSS, render(<<SCSS)
1627
+ > .foo, > foo bar {
1628
+ a: b; }
1629
+ CSS
1630
+ > .foo {a: b}
1631
+ > foo bar {@extend .foo}
1632
+ SCSS
1633
+ end
1634
+
1635
+ def test_nested_selector_with_child_selector_hack_extender_and_sibling_selector_extendee
1636
+ assert_equal <<CSS, render(<<SCSS)
1637
+ ~ .foo {
1638
+ a: b; }
1639
+ CSS
1640
+ ~ .foo {a: b}
1641
+ > foo bar {@extend .foo}
1642
+ SCSS
1643
+ end
1644
+
1645
+ def test_nested_selector_with_child_selector_hack_extender_and_extendee_and_newline
1646
+ assert_equal <<CSS, render(<<SCSS)
1647
+ > .foo, > flip,
1648
+ > foo bar {
1649
+ a: b; }
1650
+ CSS
1651
+ > .foo {a: b}
1652
+ flip,
1653
+ > foo bar {@extend .foo}
1654
+ SCSS
1655
+ end
1656
+
1657
+ private
1658
+
1659
+ def render(sass, options = {})
1660
+ munge_filename options
1661
+ Sass::Engine.new(sass, {:syntax => :scss}.merge(options)).render
1662
+ end
1663
+ end