haml_ejs 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+