haml_ejs 0.0.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 (358) hide show
  1. data/.yardopts +11 -0
  2. data/CONTRIBUTING +3 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +68 -0
  5. data/Rakefile +419 -0
  6. data/VERSION +1 -0
  7. data/VERSION_NAME +1 -0
  8. data/bin/haml +9 -0
  9. data/bin/html2haml +7 -0
  10. data/extra/update_watch.rb +13 -0
  11. data/init.rb +18 -0
  12. data/lib/haml.rb +49 -0
  13. data/lib/haml/buffer.rb +297 -0
  14. data/lib/haml/compiler.rb +486 -0
  15. data/lib/haml/engine.rb +312 -0
  16. data/lib/haml/error.rb +22 -0
  17. data/lib/haml/exec.rb +362 -0
  18. data/lib/haml/filters.rb +388 -0
  19. data/lib/haml/haml_ejs.rb +57 -0
  20. data/lib/haml/helpers.rb +608 -0
  21. data/lib/haml/helpers/action_view_extensions.rb +57 -0
  22. data/lib/haml/helpers/action_view_mods.rb +257 -0
  23. data/lib/haml/helpers/xss_mods.rb +165 -0
  24. data/lib/haml/html.rb +412 -0
  25. data/lib/haml/html/erb.rb +141 -0
  26. data/lib/haml/parser.rb +760 -0
  27. data/lib/haml/railtie.rb +19 -0
  28. data/lib/haml/root.rb +7 -0
  29. data/lib/haml/shared.rb +78 -0
  30. data/lib/haml/template.rb +99 -0
  31. data/lib/haml/template/options.rb +16 -0
  32. data/lib/haml/template/patch.rb +58 -0
  33. data/lib/haml/template/plugin.rb +123 -0
  34. data/lib/haml/util.rb +842 -0
  35. data/lib/haml/version.rb +109 -0
  36. data/lib/sass.rb +8 -0
  37. data/lib/sass/plugin.rb +10 -0
  38. data/lib/sass/rails2_shim.rb +9 -0
  39. data/lib/sass/rails3_shim.rb +16 -0
  40. data/rails/init.rb +1 -0
  41. data/test/benchmark.rb +91 -0
  42. data/test/gemfiles/Gemfile.rails-2.0.x +8 -0
  43. data/test/gemfiles/Gemfile.rails-2.0.x.lock +38 -0
  44. data/test/gemfiles/Gemfile.rails-2.1.x +8 -0
  45. data/test/gemfiles/Gemfile.rails-2.1.x.lock +38 -0
  46. data/test/gemfiles/Gemfile.rails-2.2.x +8 -0
  47. data/test/gemfiles/Gemfile.rails-2.2.x.lock +38 -0
  48. data/test/gemfiles/Gemfile.rails-2.3.x +8 -0
  49. data/test/gemfiles/Gemfile.rails-2.3.x.lock +40 -0
  50. data/test/gemfiles/Gemfile.rails-3.0.x +8 -0
  51. data/test/gemfiles/Gemfile.rails-3.0.x.lock +85 -0
  52. data/test/gemfiles/Gemfile.rails-3.1.x +8 -0
  53. data/test/gemfiles/Gemfile.rails-3.1.x.lock +98 -0
  54. data/test/gemfiles/Gemfile.rails-xss-2.3.x +9 -0
  55. data/test/gemfiles/Gemfile.rails-xss-2.3.x.lock +42 -0
  56. data/test/haml-ejs/haml-ejs_test.rb +22 -0
  57. data/test/haml-ejs/templates/conditional.input +3 -0
  58. data/test/haml-ejs/templates/conditional.output +3 -0
  59. data/test/haml-ejs/templates/conditional_and_interpolation.input +2 -0
  60. data/test/haml-ejs/templates/conditional_and_interpolation.output +3 -0
  61. data/test/haml-ejs/templates/conditional_else.input +5 -0
  62. data/test/haml-ejs/templates/conditional_else.output +5 -0
  63. data/test/haml-ejs/templates/conditional_else_elsif.input +7 -0
  64. data/test/haml-ejs/templates/conditional_else_elsif.output +7 -0
  65. data/test/haml-ejs/templates/conditional_elsif.input +5 -0
  66. data/test/haml-ejs/templates/conditional_elsif.output +5 -0
  67. data/test/haml-ejs/templates/conditional_unless.input +3 -0
  68. data/test/haml-ejs/templates/conditional_unless.output +3 -0
  69. data/test/haml-ejs/templates/conditional_unless_else.input +5 -0
  70. data/test/haml-ejs/templates/conditional_unless_else.output +5 -0
  71. data/test/haml-ejs/templates/conditional_unless_elsif_else.input +5 -0
  72. data/test/haml-ejs/templates/conditional_unless_elsif_else.output +5 -0
  73. data/test/haml-ejs/templates/interpolation.input +2 -0
  74. data/test/haml-ejs/templates/interpolation.output +1 -0
  75. data/test/haml-ejs/templates/iteration.input +2 -0
  76. data/test/haml-ejs/templates/iteration.output +3 -0
  77. data/test/haml-ejs/templates/suite.input +26 -0
  78. data/test/haml-ejs/templates/suite.output +27 -0
  79. data/test/haml/engine_test.rb +1925 -0
  80. data/test/haml/erb/_av_partial_1.erb +12 -0
  81. data/test/haml/erb/_av_partial_2.erb +8 -0
  82. data/test/haml/erb/action_view.erb +62 -0
  83. data/test/haml/erb/standard.erb +55 -0
  84. data/test/haml/helper_test.rb +454 -0
  85. data/test/haml/html2haml/erb_tests.rb +440 -0
  86. data/test/haml/html2haml_test.rb +336 -0
  87. data/test/haml/markaby/standard.mab +52 -0
  88. data/test/haml/mocks/article.rb +6 -0
  89. data/test/haml/results/content_for_layout.xhtml +12 -0
  90. data/test/haml/results/eval_suppressed.xhtml +9 -0
  91. data/test/haml/results/filters.xhtml +62 -0
  92. data/test/haml/results/helpers.xhtml +70 -0
  93. data/test/haml/results/helpful.xhtml +10 -0
  94. data/test/haml/results/just_stuff.xhtml +70 -0
  95. data/test/haml/results/list.xhtml +12 -0
  96. data/test/haml/results/nuke_inner_whitespace.xhtml +40 -0
  97. data/test/haml/results/nuke_outer_whitespace.xhtml +148 -0
  98. data/test/haml/results/original_engine.xhtml +20 -0
  99. data/test/haml/results/partial_layout.xhtml +5 -0
  100. data/test/haml/results/partials.xhtml +21 -0
  101. data/test/haml/results/render_layout.xhtml +3 -0
  102. data/test/haml/results/silent_script.xhtml +74 -0
  103. data/test/haml/results/standard.xhtml +162 -0
  104. data/test/haml/results/tag_parsing.xhtml +23 -0
  105. data/test/haml/results/very_basic.xhtml +5 -0
  106. data/test/haml/results/whitespace_handling.xhtml +89 -0
  107. data/test/haml/spec/README.md +97 -0
  108. data/test/haml/spec/lua_haml_spec.lua +30 -0
  109. data/test/haml/spec/ruby_haml_test.rb +19 -0
  110. data/test/haml/spec/tests.json +534 -0
  111. data/test/haml/spec_test.rb +44 -0
  112. data/test/haml/template_test.rb +419 -0
  113. data/test/haml/templates/_av_partial_1.haml +9 -0
  114. data/test/haml/templates/_av_partial_1_ugly.haml +9 -0
  115. data/test/haml/templates/_av_partial_2.haml +5 -0
  116. data/test/haml/templates/_av_partial_2_ugly.haml +5 -0
  117. data/test/haml/templates/_layout.erb +3 -0
  118. data/test/haml/templates/_layout_for_partial.haml +3 -0
  119. data/test/haml/templates/_partial.haml +8 -0
  120. data/test/haml/templates/_text_area.haml +3 -0
  121. data/test/haml/templates/action_view.haml +47 -0
  122. data/test/haml/templates/action_view_ugly.haml +47 -0
  123. data/test/haml/templates/breakage.haml +8 -0
  124. data/test/haml/templates/content_for_layout.haml +8 -0
  125. data/test/haml/templates/eval_suppressed.haml +11 -0
  126. data/test/haml/templates/filters.haml +66 -0
  127. data/test/haml/templates/helpers.haml +55 -0
  128. data/test/haml/templates/helpful.haml +11 -0
  129. data/test/haml/templates/just_stuff.haml +85 -0
  130. data/test/haml/templates/list.haml +12 -0
  131. data/test/haml/templates/nuke_inner_whitespace.haml +32 -0
  132. data/test/haml/templates/nuke_outer_whitespace.haml +144 -0
  133. data/test/haml/templates/original_engine.haml +17 -0
  134. data/test/haml/templates/partial_layout.haml +10 -0
  135. data/test/haml/templates/partialize.haml +1 -0
  136. data/test/haml/templates/partials.haml +12 -0
  137. data/test/haml/templates/render_layout.haml +2 -0
  138. data/test/haml/templates/silent_script.haml +40 -0
  139. data/test/haml/templates/standard.haml +43 -0
  140. data/test/haml/templates/standard_ugly.haml +43 -0
  141. data/test/haml/templates/tag_parsing.haml +21 -0
  142. data/test/haml/templates/very_basic.haml +4 -0
  143. data/test/haml/templates/whitespace_handling.haml +87 -0
  144. data/test/haml/util_test.rb +300 -0
  145. data/test/linked_rails.rb +42 -0
  146. data/test/test_helper.rb +75 -0
  147. data/vendor/sass/CONTRIBUTING +3 -0
  148. data/vendor/sass/MIT-LICENSE +20 -0
  149. data/vendor/sass/README.md +201 -0
  150. data/vendor/sass/Rakefile +339 -0
  151. data/vendor/sass/TODO +39 -0
  152. data/vendor/sass/VERSION +1 -0
  153. data/vendor/sass/VERSION_NAME +1 -0
  154. data/vendor/sass/bin/sass +8 -0
  155. data/vendor/sass/bin/sass-convert +7 -0
  156. data/vendor/sass/bin/scss +8 -0
  157. data/vendor/sass/doc-src/FAQ.md +35 -0
  158. data/vendor/sass/doc-src/INDENTED_SYNTAX.md +210 -0
  159. data/vendor/sass/doc-src/SASS_CHANGELOG.md +2214 -0
  160. data/vendor/sass/doc-src/SASS_REFERENCE.md +1957 -0
  161. data/vendor/sass/doc-src/SCSS_FOR_SASS_USERS.md +155 -0
  162. data/vendor/sass/ext/extconf.rb +10 -0
  163. data/vendor/sass/extra/update_watch.rb +13 -0
  164. data/vendor/sass/init.rb +18 -0
  165. data/vendor/sass/lib/sass.rb +72 -0
  166. data/vendor/sass/lib/sass/cache_stores.rb +15 -0
  167. data/vendor/sass/lib/sass/cache_stores/base.rb +84 -0
  168. data/vendor/sass/lib/sass/cache_stores/chain.rb +33 -0
  169. data/vendor/sass/lib/sass/cache_stores/filesystem.rb +58 -0
  170. data/vendor/sass/lib/sass/cache_stores/memory.rb +47 -0
  171. data/vendor/sass/lib/sass/cache_stores/null.rb +25 -0
  172. data/vendor/sass/lib/sass/callbacks.rb +66 -0
  173. data/vendor/sass/lib/sass/css.rb +294 -0
  174. data/vendor/sass/lib/sass/engine.rb +862 -0
  175. data/vendor/sass/lib/sass/environment.rb +155 -0
  176. data/vendor/sass/lib/sass/error.rb +201 -0
  177. data/vendor/sass/lib/sass/exec.rb +659 -0
  178. data/vendor/sass/lib/sass/importers.rb +22 -0
  179. data/vendor/sass/lib/sass/importers/base.rb +138 -0
  180. data/vendor/sass/lib/sass/importers/filesystem.rb +144 -0
  181. data/vendor/sass/lib/sass/less.rb +382 -0
  182. data/vendor/sass/lib/sass/plugin.rb +136 -0
  183. data/vendor/sass/lib/sass/plugin/compiler.rb +358 -0
  184. data/vendor/sass/lib/sass/plugin/configuration.rb +125 -0
  185. data/vendor/sass/lib/sass/plugin/generic.rb +15 -0
  186. data/vendor/sass/lib/sass/plugin/merb.rb +48 -0
  187. data/vendor/sass/lib/sass/plugin/rack.rb +60 -0
  188. data/vendor/sass/lib/sass/plugin/rails.rb +47 -0
  189. data/vendor/sass/lib/sass/plugin/staleness_checker.rb +173 -0
  190. data/vendor/sass/lib/sass/railtie.rb +9 -0
  191. data/vendor/sass/lib/sass/repl.rb +58 -0
  192. data/vendor/sass/lib/sass/root.rb +7 -0
  193. data/vendor/sass/lib/sass/script.rb +40 -0
  194. data/vendor/sass/lib/sass/script/bool.rb +18 -0
  195. data/vendor/sass/lib/sass/script/color.rb +480 -0
  196. data/vendor/sass/lib/sass/script/css_lexer.rb +29 -0
  197. data/vendor/sass/lib/sass/script/css_parser.rb +31 -0
  198. data/vendor/sass/lib/sass/script/funcall.rb +162 -0
  199. data/vendor/sass/lib/sass/script/functions.rb +1343 -0
  200. data/vendor/sass/lib/sass/script/interpolation.rb +70 -0
  201. data/vendor/sass/lib/sass/script/lexer.rb +334 -0
  202. data/vendor/sass/lib/sass/script/list.rb +76 -0
  203. data/vendor/sass/lib/sass/script/literal.rb +245 -0
  204. data/vendor/sass/lib/sass/script/node.rb +91 -0
  205. data/vendor/sass/lib/sass/script/number.rb +429 -0
  206. data/vendor/sass/lib/sass/script/operation.rb +91 -0
  207. data/vendor/sass/lib/sass/script/parser.rb +467 -0
  208. data/vendor/sass/lib/sass/script/string.rb +51 -0
  209. data/vendor/sass/lib/sass/script/string_interpolation.rb +94 -0
  210. data/vendor/sass/lib/sass/script/unary_operation.rb +57 -0
  211. data/vendor/sass/lib/sass/script/variable.rb +54 -0
  212. data/vendor/sass/lib/sass/scss.rb +17 -0
  213. data/vendor/sass/lib/sass/scss/css_parser.rb +46 -0
  214. data/vendor/sass/lib/sass/scss/parser.rb +920 -0
  215. data/vendor/sass/lib/sass/scss/rx.rb +127 -0
  216. data/vendor/sass/lib/sass/scss/sass_parser.rb +11 -0
  217. data/vendor/sass/lib/sass/scss/script_lexer.rb +15 -0
  218. data/vendor/sass/lib/sass/scss/script_parser.rb +25 -0
  219. data/vendor/sass/lib/sass/scss/static_parser.rb +40 -0
  220. data/vendor/sass/lib/sass/selector.rb +361 -0
  221. data/vendor/sass/lib/sass/selector/abstract_sequence.rb +62 -0
  222. data/vendor/sass/lib/sass/selector/comma_sequence.rb +81 -0
  223. data/vendor/sass/lib/sass/selector/sequence.rb +233 -0
  224. data/vendor/sass/lib/sass/selector/simple.rb +113 -0
  225. data/vendor/sass/lib/sass/selector/simple_sequence.rb +134 -0
  226. data/vendor/sass/lib/sass/shared.rb +78 -0
  227. data/vendor/sass/lib/sass/tree/charset_node.rb +22 -0
  228. data/vendor/sass/lib/sass/tree/comment_node.rb +77 -0
  229. data/vendor/sass/lib/sass/tree/debug_node.rb +18 -0
  230. data/vendor/sass/lib/sass/tree/directive_node.rb +23 -0
  231. data/vendor/sass/lib/sass/tree/each_node.rb +24 -0
  232. data/vendor/sass/lib/sass/tree/extend_node.rb +29 -0
  233. data/vendor/sass/lib/sass/tree/for_node.rb +36 -0
  234. data/vendor/sass/lib/sass/tree/function_node.rb +27 -0
  235. data/vendor/sass/lib/sass/tree/if_node.rb +65 -0
  236. data/vendor/sass/lib/sass/tree/import_node.rb +68 -0
  237. data/vendor/sass/lib/sass/tree/media_node.rb +32 -0
  238. data/vendor/sass/lib/sass/tree/mixin_def_node.rb +27 -0
  239. data/vendor/sass/lib/sass/tree/mixin_node.rb +32 -0
  240. data/vendor/sass/lib/sass/tree/node.rb +204 -0
  241. data/vendor/sass/lib/sass/tree/prop_node.rb +155 -0
  242. data/vendor/sass/lib/sass/tree/return_node.rb +18 -0
  243. data/vendor/sass/lib/sass/tree/root_node.rb +28 -0
  244. data/vendor/sass/lib/sass/tree/rule_node.rb +129 -0
  245. data/vendor/sass/lib/sass/tree/variable_node.rb +30 -0
  246. data/vendor/sass/lib/sass/tree/visitors/base.rb +75 -0
  247. data/vendor/sass/lib/sass/tree/visitors/check_nesting.rb +134 -0
  248. data/vendor/sass/lib/sass/tree/visitors/convert.rb +255 -0
  249. data/vendor/sass/lib/sass/tree/visitors/cssize.rb +175 -0
  250. data/vendor/sass/lib/sass/tree/visitors/perform.rb +301 -0
  251. data/vendor/sass/lib/sass/tree/visitors/to_css.rb +216 -0
  252. data/vendor/sass/lib/sass/tree/warn_node.rb +18 -0
  253. data/vendor/sass/lib/sass/tree/while_node.rb +18 -0
  254. data/vendor/sass/lib/sass/util.rb +669 -0
  255. data/vendor/sass/lib/sass/util/subset_map.rb +101 -0
  256. data/vendor/sass/lib/sass/version.rb +112 -0
  257. data/vendor/sass/rails/init.rb +1 -0
  258. data/vendor/sass/sass.gemspec +32 -0
  259. data/vendor/sass/test/sass/cache_test.rb +74 -0
  260. data/vendor/sass/test/sass/callbacks_test.rb +61 -0
  261. data/vendor/sass/test/sass/conversion_test.rb +1203 -0
  262. data/vendor/sass/test/sass/css2sass_test.rb +364 -0
  263. data/vendor/sass/test/sass/data/hsl-rgb.txt +319 -0
  264. data/vendor/sass/test/sass/engine_test.rb +2469 -0
  265. data/vendor/sass/test/sass/extend_test.rb +1348 -0
  266. data/vendor/sass/test/sass/functions_test.rb +1025 -0
  267. data/vendor/sass/test/sass/importer_test.rb +82 -0
  268. data/vendor/sass/test/sass/less_conversion_test.rb +653 -0
  269. data/vendor/sass/test/sass/mock_importer.rb +49 -0
  270. data/vendor/sass/test/sass/more_results/more1.css +9 -0
  271. data/vendor/sass/test/sass/more_results/more1_with_line_comments.css +26 -0
  272. data/vendor/sass/test/sass/more_results/more_import.css +29 -0
  273. data/vendor/sass/test/sass/more_templates/_more_partial.sass +2 -0
  274. data/vendor/sass/test/sass/more_templates/more1.sass +23 -0
  275. data/vendor/sass/test/sass/more_templates/more_import.sass +11 -0
  276. data/vendor/sass/test/sass/plugin_test.rb +469 -0
  277. data/vendor/sass/test/sass/results/alt.css +4 -0
  278. data/vendor/sass/test/sass/results/basic.css +9 -0
  279. data/vendor/sass/test/sass/results/compact.css +5 -0
  280. data/vendor/sass/test/sass/results/complex.css +86 -0
  281. data/vendor/sass/test/sass/results/compressed.css +1 -0
  282. data/vendor/sass/test/sass/results/expanded.css +19 -0
  283. data/vendor/sass/test/sass/results/if.css +3 -0
  284. data/vendor/sass/test/sass/results/import.css +31 -0
  285. data/vendor/sass/test/sass/results/import_charset.css +4 -0
  286. data/vendor/sass/test/sass/results/import_charset_1_8.css +4 -0
  287. data/vendor/sass/test/sass/results/import_charset_ibm866.css +4 -0
  288. data/vendor/sass/test/sass/results/line_numbers.css +49 -0
  289. data/vendor/sass/test/sass/results/mixins.css +95 -0
  290. data/vendor/sass/test/sass/results/multiline.css +24 -0
  291. data/vendor/sass/test/sass/results/nested.css +22 -0
  292. data/vendor/sass/test/sass/results/options.css +1 -0
  293. data/vendor/sass/test/sass/results/parent_ref.css +13 -0
  294. data/vendor/sass/test/sass/results/script.css +16 -0
  295. data/vendor/sass/test/sass/results/scss_import.css +31 -0
  296. data/vendor/sass/test/sass/results/scss_importee.css +2 -0
  297. data/vendor/sass/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  298. data/vendor/sass/test/sass/results/subdir/subdir.css +3 -0
  299. data/vendor/sass/test/sass/results/units.css +11 -0
  300. data/vendor/sass/test/sass/results/warn.css +0 -0
  301. data/vendor/sass/test/sass/results/warn_imported.css +0 -0
  302. data/vendor/sass/test/sass/script_conversion_test.rb +283 -0
  303. data/vendor/sass/test/sass/script_test.rb +496 -0
  304. data/vendor/sass/test/sass/scss/css_test.rb +916 -0
  305. data/vendor/sass/test/sass/scss/rx_test.rb +156 -0
  306. data/vendor/sass/test/sass/scss/scss_test.rb +1249 -0
  307. data/vendor/sass/test/sass/scss/test_helper.rb +37 -0
  308. data/vendor/sass/test/sass/templates/_imported_charset_ibm866.sass +4 -0
  309. data/vendor/sass/test/sass/templates/_imported_charset_utf8.sass +4 -0
  310. data/vendor/sass/test/sass/templates/_partial.sass +2 -0
  311. data/vendor/sass/test/sass/templates/alt.sass +16 -0
  312. data/vendor/sass/test/sass/templates/basic.sass +23 -0
  313. data/vendor/sass/test/sass/templates/bork1.sass +2 -0
  314. data/vendor/sass/test/sass/templates/bork2.sass +2 -0
  315. data/vendor/sass/test/sass/templates/bork3.sass +2 -0
  316. data/vendor/sass/test/sass/templates/bork4.sass +2 -0
  317. data/vendor/sass/test/sass/templates/compact.sass +17 -0
  318. data/vendor/sass/test/sass/templates/complex.sass +305 -0
  319. data/vendor/sass/test/sass/templates/compressed.sass +15 -0
  320. data/vendor/sass/test/sass/templates/expanded.sass +17 -0
  321. data/vendor/sass/test/sass/templates/if.sass +11 -0
  322. data/vendor/sass/test/sass/templates/import.sass +12 -0
  323. data/vendor/sass/test/sass/templates/import_charset.sass +7 -0
  324. data/vendor/sass/test/sass/templates/import_charset_1_8.sass +4 -0
  325. data/vendor/sass/test/sass/templates/import_charset_ibm866.sass +9 -0
  326. data/vendor/sass/test/sass/templates/importee.less +2 -0
  327. data/vendor/sass/test/sass/templates/importee.sass +19 -0
  328. data/vendor/sass/test/sass/templates/line_numbers.sass +13 -0
  329. data/vendor/sass/test/sass/templates/mixin_bork.sass +5 -0
  330. data/vendor/sass/test/sass/templates/mixins.sass +76 -0
  331. data/vendor/sass/test/sass/templates/multiline.sass +20 -0
  332. data/vendor/sass/test/sass/templates/nested.sass +25 -0
  333. data/vendor/sass/test/sass/templates/nested_bork1.sass +2 -0
  334. data/vendor/sass/test/sass/templates/nested_bork2.sass +2 -0
  335. data/vendor/sass/test/sass/templates/nested_bork3.sass +2 -0
  336. data/vendor/sass/test/sass/templates/nested_bork4.sass +2 -0
  337. data/vendor/sass/test/sass/templates/nested_import.sass +2 -0
  338. data/vendor/sass/test/sass/templates/nested_mixin_bork.sass +6 -0
  339. data/vendor/sass/test/sass/templates/options.sass +2 -0
  340. data/vendor/sass/test/sass/templates/parent_ref.sass +25 -0
  341. data/vendor/sass/test/sass/templates/script.sass +101 -0
  342. data/vendor/sass/test/sass/templates/scss_import.scss +11 -0
  343. data/vendor/sass/test/sass/templates/scss_importee.scss +1 -0
  344. data/vendor/sass/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  345. data/vendor/sass/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  346. data/vendor/sass/test/sass/templates/subdir/subdir.sass +6 -0
  347. data/vendor/sass/test/sass/templates/units.sass +11 -0
  348. data/vendor/sass/test/sass/templates/warn.sass +3 -0
  349. data/vendor/sass/test/sass/templates/warn_imported.sass +4 -0
  350. data/vendor/sass/test/sass/test_helper.rb +8 -0
  351. data/vendor/sass/test/sass/util/subset_map_test.rb +91 -0
  352. data/vendor/sass/test/sass/util_test.rb +254 -0
  353. data/vendor/sass/test/test_helper.rb +69 -0
  354. data/vendor/sass/yard/callbacks.rb +29 -0
  355. data/vendor/sass/yard/default/fulldoc/html/css/common.sass +26 -0
  356. data/vendor/sass/yard/default/layout/html/footer.erb +12 -0
  357. data/vendor/sass/yard/inherited_hash.rb +41 -0
  358. metadata +458 -0
@@ -0,0 +1,12 @@
1
+ <h2>This is a pretty complicated partial</h2>
2
+ <div class="partial">
3
+ <p>It has several nested partials,</p>
4
+ <ul>
5
+ <% 5.times do %>
6
+ <li>
7
+ <strong>Partial:</strong>
8
+ <% @nesting = 5 %>
9
+ <%= render :partial => 'haml/erb/av_partial_2' %>
10
+ <% end %>
11
+ </ul>
12
+ </div>
@@ -0,0 +1,8 @@
1
+ <% @nesting -= 1 %>
2
+ <div class="partial" level="<%= @nesting %>">
3
+ <h3>This is a crazy deep-nested partial.</h3>
4
+ <p>Nesting level <%= @nesting %></p>
5
+ <% if @nesting > 0 %>
6
+ <%= render :partial => 'haml/erb/av_partial_2' %>
7
+ <% end %>
8
+ </div>
@@ -0,0 +1,62 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en-US'>
3
+ <head>
4
+ <title>Hampton Catlin Is Totally Awesome</title>
5
+ <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
6
+ </head>
7
+ <body>
8
+ <h1>
9
+ This is very much like the standard template,
10
+ except that it has some ActionView-specific stuff.
11
+ It's only used for benchmarking.
12
+ </h1>
13
+ <div class="crazy_partials">
14
+ <%= render :partial => 'haml/erb/av_partial_1' %>
15
+ </div>
16
+ <!-- You're In my house now! -->
17
+ <div class='header'>
18
+ Yes, ladies and gentileman. He is just that egotistical.
19
+ Fantastic! This should be multi-line output
20
+ The question is if this would translate! Ahah!
21
+ <%= 1 + 9 + 8 + 2 %>
22
+ <%# numbers should work and this should be ignored %>
23
+ </div>
24
+ <% 120.times do |number| -%>
25
+ <%= number %>
26
+ <% end -%>
27
+ <div id='body'><%= " Quotes should be loved! Just like people!" %></div>
28
+ Wow.
29
+ <p>
30
+ <%= "Holy cow " +
31
+ "multiline " +
32
+ "tags! " +
33
+ "A pipe (|) even!" %>
34
+ <%= [1, 2, 3].collect { |n| "PipesIgnored|" } %>
35
+ <%= [1, 2, 3].collect { |n|
36
+ n.to_s
37
+ }.join("|") %>
38
+ </p>
39
+ <div class='silent'>
40
+ <% foo = String.new
41
+ foo << "this"
42
+ foo << " shouldn't"
43
+ foo << " evaluate" %>
44
+ <%= foo + "but now it should!" %>
45
+ <%# Woah crap a comment! %>
46
+ </div>
47
+ <ul class='really cool'>
48
+ <% ('a'..'f').each do |a|%>
49
+ <li><%= a %>
50
+ <% end %>
51
+ <div class='of_divs_with_underscore' id='combo'><%= @should_eval = "with this text" %></div>
52
+ <%= [ 104, 101, 108, 108, 111 ].map do |byte|
53
+ byte.chr
54
+ end %>
55
+ <div class='footer'>
56
+ <strong class='shout'>
57
+ <%= "This is a really long ruby quote. It should be loved and wrapped because its more than 50 characters. This value may change in the future and this test may look stupid.\n" +
58
+ " So, I'm just making it *really* long. God, I hope this works" %>
59
+ </strong>
60
+ </div>
61
+ </body>
62
+ </html>
@@ -0,0 +1,55 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en-US' lang='en-US'>
3
+ <head>
4
+ <title>Hampton Catlin Is Totally Awesome</title>
5
+ <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
6
+ </head>
7
+ <body>
8
+ <!-- You're In my house now! -->
9
+ <div class='header'>
10
+ Yes, ladies and gentileman. He is just that egotistical.
11
+ Fantastic! This should be multi-line output
12
+ The question is if this would translate! Ahah!
13
+ <%= 1 + 9 + 8 + 2 %>
14
+ <%# numbers should work and this should be ignored %>
15
+ </div>
16
+ <% 120.times do |number| -%>
17
+ <%= number %>
18
+ <% end -%>
19
+ <div id='body'><%= " Quotes should be loved! Just like people!" %></div>
20
+ Wow.
21
+ <p code="<%= 1 + 2 %>">
22
+ <%= "Holy cow " +
23
+ "multiline " +
24
+ "tags! " +
25
+ "A pipe (|) even!" %>
26
+ <%= [1, 2, 3].collect { |n| "PipesIgnored|" }.join %>
27
+ <%= [1, 2, 3].collect { |n|
28
+ n.to_s
29
+ }.join("|") %>
30
+ </p>
31
+ <% bar = 17 %>
32
+ <div class='silent' foo="<%= bar %>">
33
+ <% foo = String.new
34
+ foo << "this"
35
+ foo << " shouldn't"
36
+ foo << " evaluate" %>
37
+ <%= foo + "but now it should!" %>
38
+ <%# Woah crap a comment! %>
39
+ </div>
40
+ <ul class='really cool'>
41
+ <% ('a'..'f').each do |a|%>
42
+ <li><%= a %></li>
43
+ <% end %>
44
+ <div class='of_divs_with_underscore' id='combo'><%= @should_eval = "with this text" %></div>
45
+ <%= "foo".each_line do |line|
46
+ nil
47
+ end %>
48
+ <div class='footer'>
49
+ <strong class='shout'>
50
+ <%= "This is a really long ruby quote. It should be loved and wrapped because its more than 50 characters. This value may change in the future and this test may look stupid.\n" +
51
+ " So, I'm just making it *really* long. God, I hope this works" %>
52
+ </strong>
53
+ </div>
54
+ </body>
55
+ </html>
@@ -0,0 +1,454 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+
4
+ class ActionView::Base
5
+ def nested_tag
6
+ content_tag(:span) {content_tag(:div) {"something"}}
7
+ end
8
+
9
+ def wacky_form
10
+ form_tag("/foo") {"bar"}
11
+ end
12
+ end
13
+
14
+ module Haml::Helpers
15
+ def something_that_uses_haml_concat
16
+ haml_concat('foo').to_s
17
+ end
18
+ end
19
+
20
+ class HelperTest < Test::Unit::TestCase
21
+ Post = Struct.new('Post', :body, :error_field, :errors)
22
+ class PostErrors
23
+ def on(name)
24
+ return unless name == 'error_field'
25
+ ["Really bad error"]
26
+ end
27
+ alias_method :full_messages, :on
28
+
29
+ def [](name)
30
+ on(name) || []
31
+ end
32
+ end
33
+
34
+ def setup
35
+ @base = ActionView::Base.new
36
+ @base.controller = ActionController::Base.new
37
+
38
+ if defined?(ActionController::Response)
39
+ # This is needed for >=3.0.0
40
+ @base.controller.response = ActionController::Response.new
41
+ end
42
+
43
+ @base.instance_variable_set('@post', Post.new("Foo bar\nbaz", nil, PostErrors.new))
44
+ end
45
+
46
+ def render(text, options = {})
47
+ if options == :action_view
48
+ @base.render :inline => text, :type => :haml
49
+ else
50
+ scope = options.delete :scope_object
51
+ Haml::Engine.new(text, options).to_html(scope ? scope : Object.new)
52
+ end
53
+ end
54
+
55
+ def test_flatten
56
+ assert_equal("FooBar", Haml::Helpers.flatten("FooBar"))
57
+
58
+ assert_equal("FooBar", Haml::Helpers.flatten("Foo\rBar"))
59
+
60
+ assert_equal("Foo&#x000A;Bar", Haml::Helpers.flatten("Foo\nBar"))
61
+
62
+ assert_equal("Hello&#x000A;World!&#x000A;YOU ARE FLAT?&#x000A;OMGZ!",
63
+ Haml::Helpers.flatten("Hello\nWorld!\nYOU ARE \rFLAT?\n\rOMGZ!"))
64
+ end
65
+
66
+ def test_list_of_should_render_correctly
67
+ assert_equal("<li>1</li>\n<li>2</li>\n", render("= list_of([1, 2]) do |i|\n = i"))
68
+ assert_equal("<li>[1]</li>\n", render("= list_of([[1]]) do |i|\n = i.inspect"))
69
+ assert_equal("<li>\n <h1>Fee</h1>\n <p>A word!</p>\n</li>\n<li>\n <h1>Fi</h1>\n <p>A word!</p>\n</li>\n<li>\n <h1>Fo</h1>\n <p>A word!</p>\n</li>\n<li>\n <h1>Fum</h1>\n <p>A word!</p>\n</li>\n",
70
+ render("= list_of(['Fee', 'Fi', 'Fo', 'Fum']) do |title|\n %h1= title\n %p A word!"))
71
+ end
72
+
73
+ def test_buffer_access
74
+ assert(render("= buffer") =~ /#<Haml::Buffer:0x[a-z0-9]+>/)
75
+ assert_equal(render("= (buffer == _hamlout)"), "true\n")
76
+ end
77
+
78
+ def test_tabs
79
+ assert_equal("foo\n bar\nbaz\n", render("foo\n- tab_up\nbar\n- tab_down\nbaz"))
80
+ assert_equal(" <p>tabbed</p>\n", render("- buffer.tabulation=5\n%p tabbed"))
81
+ end
82
+
83
+ def test_with_tabs
84
+ assert_equal(<<HTML, render(<<HAML))
85
+ Foo
86
+ Bar
87
+ Baz
88
+ Baz
89
+ HTML
90
+ Foo
91
+ - with_tabs 2 do
92
+ = "Bar\\nBaz"
93
+ Baz
94
+ HAML
95
+ end
96
+
97
+ def test_helpers_dont_leak
98
+ # Haml helpers shouldn't be accessible from ERB
99
+ render("foo")
100
+ proper_behavior = false
101
+
102
+ begin
103
+ ActionView::Base.new.render(:inline => "<%= flatten('Foo\\nBar') %>")
104
+ rescue NoMethodError, Haml::Util.av_template_class(:Error)
105
+ proper_behavior = true
106
+ end
107
+ assert(proper_behavior)
108
+
109
+ begin
110
+ ActionView::Base.new.render(:inline => "<%= concat('foo') %>")
111
+ rescue ArgumentError, NameError
112
+ proper_behavior = true
113
+ end
114
+ assert(proper_behavior)
115
+ end
116
+
117
+ def test_action_view_included
118
+ assert(Haml::Helpers.action_view?)
119
+ end
120
+
121
+ def test_form_tag
122
+ # This is usually provided by ActionController::Base.
123
+ def @base.protect_against_forgery?; false; end
124
+ assert_equal(<<HTML, render(<<HAML, :action_view))
125
+ <form #{rails_form_attr}action="foo" method="post">#{rails_form_opener}
126
+ <p>bar</p>
127
+ <strong>baz</strong>
128
+ </form>
129
+ HTML
130
+ #{rails_block_helper_char} form_tag 'foo' do
131
+ %p bar
132
+ %strong baz
133
+ HAML
134
+ end
135
+
136
+ def test_text_area
137
+ assert_equal(%(<textarea id="body" name="body">Foo&#x000A;Bar&#x000A; Baz&#x000A; Boom</textarea>\n),
138
+ render('= text_area_tag "body", "Foo\nBar\n Baz\n Boom"', :action_view))
139
+
140
+ assert_equal(%(<textarea cols="40" id="post_body" name="post[body]" rows="20">Foo bar&#x000A;baz</textarea>\n),
141
+ render('= text_area :post, :body', :action_view))
142
+
143
+ assert_equal(%(<pre>Foo bar&#x000A; baz</pre>\n),
144
+ render('= content_tag "pre", "Foo bar\n baz"', :action_view))
145
+ end
146
+
147
+ def test_capture_haml
148
+ assert_equal(<<HTML, render(<<HAML))
149
+ "<p>13</p>\\n"
150
+ HTML
151
+ - (foo = capture_haml(13) do |a|
152
+ %p= a
153
+ - end; nil)
154
+ = foo.dump
155
+ HAML
156
+ end
157
+
158
+ def test_content_tag_block
159
+ assert_equal(<<HTML.strip, render(<<HAML, :action_view).strip)
160
+ <div><p>bar</p>
161
+ <strong>bar</strong>
162
+ </div>
163
+ HTML
164
+ #{rails_block_helper_char} content_tag :div do
165
+ %p bar
166
+ %strong bar
167
+ HAML
168
+ end
169
+
170
+ def test_content_tag_error_wrapping
171
+ def @base.protect_against_forgery?; false; end
172
+ error_class = Haml::Util.ap_geq_3? ? "field_with_errors" : "fieldWithErrors"
173
+ assert_equal(<<HTML, render(<<HAML, :action_view))
174
+ <form #{rails_form_attr}action="" method="post">#{rails_form_opener}
175
+ <div class="#{error_class}"><label for="post_error_field">Error field</label></div>
176
+ </form>
177
+ HTML
178
+ #{rails_block_helper_char} form_for #{form_for_calling_convention('post')}, :url => '' do |f|
179
+ = f.label 'error_field'
180
+ HAML
181
+ end
182
+
183
+ def test_form_tag_in_helper_with_string_block
184
+ def @base.protect_against_forgery?; false; end
185
+ assert_equal(<<HTML, render(<<HAML, :action_view))
186
+ <form #{rails_form_attr}action="/foo" method="post">#{rails_form_opener}bar</form>
187
+ HTML
188
+ #{rails_block_helper_char} wacky_form
189
+ HAML
190
+ end
191
+
192
+ def test_haml_tag_name_attribute_with_id
193
+ assert_equal("<p id='some_id'></p>\n", render("- haml_tag 'p#some_id'"))
194
+ end
195
+
196
+ def test_haml_tag_name_attribute_with_colon_id
197
+ assert_equal("<p id='some:id'></p>\n", render("- haml_tag 'p#some:id'"))
198
+ end
199
+
200
+ def test_haml_tag_without_name_but_with_id
201
+ assert_equal("<div id='some_id'></div>\n", render("- haml_tag '#some_id'"))
202
+ end
203
+
204
+ def test_haml_tag_without_name_but_with_class
205
+ assert_equal("<div class='foo'></div>\n", render("- haml_tag '.foo'"))
206
+ end
207
+
208
+ def test_haml_tag_without_name_but_with_colon_class
209
+ assert_equal("<div class='foo:bar'></div>\n", render("- haml_tag '.foo:bar'"))
210
+ end
211
+
212
+ def test_haml_tag_name_with_id_and_class
213
+ assert_equal("<p class='foo' id='some_id'></p>\n", render("- haml_tag 'p#some_id.foo'"))
214
+ end
215
+
216
+ def test_haml_tag_name_with_class
217
+ assert_equal("<p class='foo'></p>\n", render("- haml_tag 'p.foo'"))
218
+ end
219
+
220
+ def test_haml_tag_name_with_class_and_id
221
+ assert_equal("<p class='foo' id='some_id'></p>\n", render("- haml_tag 'p.foo#some_id'"))
222
+ end
223
+
224
+ def test_haml_tag_name_with_id_and_multiple_classes
225
+ assert_equal("<p class='foo bar' id='some_id'></p>\n", render("- haml_tag 'p#some_id.foo.bar'"))
226
+ end
227
+
228
+ def test_haml_tag_name_with_multiple_classes_and_id
229
+ assert_equal("<p class='foo bar' id='some_id'></p>\n", render("- haml_tag 'p.foo.bar#some_id'"))
230
+ end
231
+
232
+ def test_haml_tag_name_and_attribute_classes_merging
233
+ assert_equal("<p class='foo bar' id='some_id'></p>\n", render("- haml_tag 'p#some_id.foo', :class => 'bar'"))
234
+ end
235
+
236
+ def test_haml_tag_name_and_attribute_classes_merging
237
+ assert_equal("<p class='bar foo'></p>\n", render("- haml_tag 'p.foo', :class => 'bar'"))
238
+ end
239
+
240
+ def test_haml_tag_name_merges_id_and_attribute_id
241
+ assert_equal("<p id='foo_bar'></p>\n", render("- haml_tag 'p#foo', :id => 'bar'"))
242
+ end
243
+
244
+ def test_haml_tag_attribute_html_escaping
245
+ assert_equal("<p id='foo&amp;bar'>baz</p>\n", render("%p{:id => 'foo&bar'} baz", :escape_html => true))
246
+ end
247
+
248
+ def test_haml_tag_autoclosed_tags_are_closed
249
+ assert_equal("<br class='foo' />\n", render("- haml_tag :br, :class => 'foo'"))
250
+ end
251
+
252
+ def test_haml_tag_with_class_array
253
+ assert_equal("<p class='a b'>foo</p>\n", render("- haml_tag :p, 'foo', :class => %w[a b]"))
254
+ assert_equal("<p class='a b c d'>foo</p>\n", render("- haml_tag 'p.c.d', 'foo', :class => %w[a b]"))
255
+ end
256
+
257
+ def test_haml_tag_with_id_array
258
+ assert_equal("<p id='a_b'>foo</p>\n", render("- haml_tag :p, 'foo', :id => %w[a b]"))
259
+ assert_equal("<p id='c_a_b'>foo</p>\n", render("- haml_tag 'p#c', 'foo', :id => %w[a b]"))
260
+ end
261
+
262
+ def test_haml_tag_with_data_hash
263
+ assert_equal("<p data-baz='data-baz' data-foo='bar'>foo</p>\n",
264
+ render("- haml_tag :p, 'foo', :data => {:foo => 'bar', :baz => true}"))
265
+ end
266
+
267
+ def test_haml_tag_non_autoclosed_tags_arent_closed
268
+ assert_equal("<p></p>\n", render("- haml_tag :p"))
269
+ end
270
+
271
+ def test_haml_tag_renders_text_on_a_single_line
272
+ assert_equal("<p>#{'a' * 100}</p>\n", render("- haml_tag :p, 'a' * 100"))
273
+ end
274
+
275
+ def test_haml_tag_raises_error_for_multiple_content
276
+ assert_raise(Haml::Error) { render("- haml_tag :p, 'foo' do\n bar") }
277
+ end
278
+
279
+ def test_haml_tag_flags
280
+ assert_equal("<p />\n", render("- haml_tag :p, :/"))
281
+ assert_equal("<p>kumquat</p>\n", render("- haml_tag :p, :< do\n kumquat"))
282
+
283
+ assert_raise(Haml::Error) { render("- haml_tag :p, 'foo', :/") }
284
+ assert_raise(Haml::Error) { render("- haml_tag :p, :/ do\n foo") }
285
+ end
286
+
287
+ def test_haml_tag_error_return
288
+ assert_raise(Haml::Error) { render("= haml_tag :p") }
289
+ end
290
+
291
+ def test_haml_tag_with_multiline_string
292
+ assert_equal(<<HTML, render(<<HAML))
293
+ <p>
294
+ foo
295
+ bar
296
+ baz
297
+ </p>
298
+ HTML
299
+ - haml_tag :p, "foo\\nbar\\nbaz"
300
+ HAML
301
+ end
302
+
303
+ def test_haml_concat_with_multiline_string
304
+ assert_equal(<<HTML, render(<<HAML))
305
+ <p>
306
+ foo
307
+ bar
308
+ baz
309
+ </p>
310
+ HTML
311
+ %p
312
+ - haml_concat "foo\\nbar\\nbaz"
313
+ HAML
314
+ end
315
+
316
+ def test_haml_tag_with_ugly
317
+ assert_equal(<<HTML, render(<<HAML, :ugly => true))
318
+ <p>
319
+ <strong>Hi!</strong>
320
+ </p>
321
+ HTML
322
+ - haml_tag :p do
323
+ - haml_tag :strong, "Hi!"
324
+ HAML
325
+ end
326
+
327
+ def test_is_haml
328
+ assert(!ActionView::Base.new.is_haml?)
329
+ assert_equal("true\n", render("= is_haml?"))
330
+ assert_equal("true\n", render("= is_haml?", :action_view))
331
+ assert_equal("false", @base.render(:inline => '<%= is_haml? %>'))
332
+ assert_equal("false\n", render("= render :inline => '<%= is_haml? %>'", :action_view))
333
+ end
334
+
335
+ def test_page_class
336
+ controller = Struct.new(:controller_name, :action_name).new('troller', 'tion')
337
+ scope = Struct.new(:controller).new(controller)
338
+ result = render("%div{:class => page_class} MyDiv", :scope_object => scope)
339
+ expected = "<div class='troller tion'>MyDiv</div>\n"
340
+ assert_equal expected, result
341
+ end
342
+
343
+ def test_indented_capture
344
+ prior = Haml::Util.ap_geq_3? ? "" : " \n"
345
+ assert_equal("#{prior} Foo\n ", @base.render(:inline => " <% res = capture do %>\n Foo\n <% end %><%= res %>"))
346
+ end
347
+
348
+ def test_capture_deals_properly_with_collections
349
+ Haml::Helpers.module_eval do
350
+ def trc(collection, &block)
351
+ collection.each do |record|
352
+ haml_concat capture_haml(record, &block)
353
+ end
354
+ end
355
+ end
356
+
357
+ assert_equal("1\n\n2\n\n3\n\n", render("- trc([1, 2, 3]) do |i|\n = i.inspect"))
358
+ end
359
+
360
+ def test_capture_with_string_block
361
+ assert_equal("foo\n", render("= capture { 'foo' }", :action_view))
362
+ end
363
+
364
+ def test_find_and_preserve_with_block
365
+ assert_equal("<pre>Foo&#x000A;Bar</pre>\nFoo\nBar\n",
366
+ render("= find_and_preserve do\n %pre\n Foo\n Bar\n Foo\n Bar"))
367
+ end
368
+
369
+ def test_find_and_preserve_with_block_and_tags
370
+ assert_equal("<pre>Foo\nBar</pre>\nFoo\nBar\n",
371
+ render("= find_and_preserve([]) do\n %pre\n Foo\n Bar\n Foo\n Bar"))
372
+ end
373
+
374
+ def test_preserve_with_block
375
+ assert_equal("<pre>Foo&#x000A;Bar</pre>&#x000A;Foo&#x000A;Bar\n",
376
+ render("= preserve do\n %pre\n Foo\n Bar\n Foo\n Bar"))
377
+ end
378
+
379
+ def test_init_haml_helpers
380
+ context = Object.new
381
+ class << context
382
+ include Haml::Helpers
383
+ end
384
+ context.init_haml_helpers
385
+
386
+ result = context.capture_haml do
387
+ context.haml_tag :p, :attr => "val" do
388
+ context.haml_concat "Blah"
389
+ end
390
+ end
391
+
392
+ assert_equal("<p attr='val'>\n Blah\n</p>\n", result)
393
+ end
394
+
395
+ def test_non_haml
396
+ assert_equal("false\n", render("= non_haml { is_haml? }"))
397
+ end
398
+
399
+ def test_content_tag_nested
400
+ assert_equal "<span><div>something</div></span>", render("= nested_tag", :action_view).strip
401
+ end
402
+
403
+ def test_error_return
404
+ assert_raise(Haml::Error, <<MESSAGE) {render("= haml_concat 'foo'")}
405
+ haml_concat outputs directly to the Haml template.
406
+ Disregard its return value and use the - operator,
407
+ or use capture_haml to get the value as a String.
408
+ MESSAGE
409
+ end
410
+
411
+ def test_error_return_line
412
+ render("%p foo\n= haml_concat 'foo'\n%p bar")
413
+ assert false, "Expected Haml::Error"
414
+ rescue Haml::Error => e
415
+ assert_equal 2, e.backtrace[1].scan(/:(\d+)/).first.first.to_i
416
+ end
417
+
418
+ def test_error_return_line_in_helper
419
+ render("- something_that_uses_haml_concat")
420
+ assert false, "Expected Haml::Error"
421
+ rescue Haml::Error => e
422
+ assert_equal 16, e.backtrace[0].scan(/:(\d+)/).first.first.to_i
423
+ end
424
+
425
+ class ActsLikeTag
426
+ # We want to be able to have people include monkeypatched ActionView helpers
427
+ # without redefining is_haml?.
428
+ # This is accomplished via Object#is_haml?, and this is a test for it.
429
+ include ActionView::Helpers::TagHelper
430
+ def to_s
431
+ content_tag :p, 'some tag content'
432
+ end
433
+ end
434
+
435
+ def test_random_class_includes_tag_helper
436
+ assert_equal "<p>some tag content</p>", ActsLikeTag.new.to_s
437
+ end
438
+
439
+ def test_capture_with_nuke_outer
440
+ assert_equal "<div></div>\n*<div>hi there!</div>\n", render(<<HAML)
441
+ %div
442
+ = precede("*") do
443
+ %div> hi there!
444
+ HAML
445
+
446
+ assert_equal "<div></div>\n*<div>hi there!</div>\n", render(<<HAML)
447
+ %div
448
+ = precede("*") do
449
+ = " "
450
+ %div> hi there!
451
+ HAML
452
+ end
453
+ end
454
+