radiant 1.0.0.rc1 → 1.0.0.rc2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of radiant might be problematic. Click here for more details.

Files changed (623) hide show
  1. data/app/controllers/admin/resource_controller.rb +1 -0
  2. data/app/controllers/application_controller.rb +1 -1
  3. data/app/models/deprecated_tags.rb +5 -48
  4. data/app/models/user_action_observer.rb +8 -2
  5. data/app/views/layouts/application.html.haml +1 -1
  6. data/config/boot.rb +2 -2
  7. data/config/environment.rb +5 -3
  8. data/config/initializers/compass.rb +5 -0
  9. data/config/locales/en.yml +2 -2
  10. data/features/step_definitions/admin/pages_management_steps.rb +6 -1
  11. data/features/support/paths.rb +13 -0
  12. data/lib/generators/extension/templates/cucumber_env.rb +5 -1
  13. data/lib/generators/extension/templates/cucumber_paths.rb +20 -12
  14. data/lib/generators/extension/templates/gemspec.rb +10 -5
  15. data/lib/generators/instance/templates/instance_environment.rb +4 -2
  16. data/lib/radiant.rb +1 -1
  17. data/lib/radiant/gem_dependency_fix.rb +1 -1
  18. data/lib/radiant/taggable.rb +42 -3
  19. data/lib/tasks/framework.rake +6 -6
  20. data/{vendor/plugins/haml/test/sass/results/warn.css → log/.keep} +0 -0
  21. data/radiant.gemspec +3 -2
  22. data/script/console +2 -2
  23. data/spec/controllers/admin/pages_controller_spec.rb +1 -1
  24. data/spec/lib/radiant/taggable_spec.rb +53 -0
  25. data/vendor/extensions/archive/Rakefile +3 -3
  26. data/vendor/extensions/archive/features/support/env.rb +5 -1
  27. data/vendor/extensions/archive/features/support/paths.rb +20 -12
  28. data/vendor/extensions/archive/radiant-archive-extension.gemspec +10 -5
  29. data/vendor/extensions/archive/tmp/cache/meta/0e/da69d02186242cdfda62e46044566f2bc50f3a +0 -0
  30. data/vendor/extensions/{assets → clipped}/LICENSE +0 -0
  31. data/vendor/extensions/{assets → clipped}/README.md +21 -21
  32. data/vendor/extensions/{assets → clipped}/Rakefile +29 -31
  33. data/vendor/extensions/{assets → clipped}/app/controllers/admin/assets_controller.rb +16 -11
  34. data/vendor/extensions/clipped/app/controllers/admin/page_attachments_controller.rb +18 -0
  35. data/vendor/extensions/clipped/app/helpers/admin/assets_helper.rb +16 -0
  36. data/vendor/extensions/{assets → clipped}/app/models/asset.rb +12 -9
  37. data/vendor/extensions/{assets → clipped}/app/models/asset_tags.rb +36 -53
  38. data/vendor/extensions/{assets → clipped}/app/models/asset_type.rb +1 -7
  39. data/vendor/extensions/{assets → clipped}/app/models/old_page_attachment.rb +0 -0
  40. data/vendor/extensions/clipped/app/models/page_attachment.rb +21 -0
  41. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/_asset.html.haml +2 -2
  42. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/_asset_table.html.haml +4 -4
  43. data/vendor/extensions/clipped/app/views/admin/assets/_errors.html.haml +3 -0
  44. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/_form.html.haml +2 -2
  45. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/_page_assets.html.haml +1 -1
  46. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/_search.html.haml +0 -0
  47. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/_search_results.html.haml +1 -1
  48. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/edit.html.haml +7 -8
  49. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/index.html.haml +3 -2
  50. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/new.html.haml +2 -2
  51. data/vendor/extensions/clipped/app/views/admin/assets/refresh.html.haml +14 -0
  52. data/vendor/extensions/{assets → clipped}/app/views/admin/assets/remove.html.haml +3 -3
  53. data/vendor/extensions/{assets → clipped}/app/views/admin/configuration/_edit.html.haml +1 -1
  54. data/vendor/extensions/{assets → clipped}/app/views/admin/configuration/_show.html.haml +1 -1
  55. data/vendor/extensions/clipped/app/views/admin/page_attachments/_attachment.html.haml +25 -0
  56. data/vendor/extensions/{assets → clipped}/app/views/admin/page_parts/_page_part.html.haml +3 -2
  57. data/vendor/extensions/{assets → clipped}/app/views/admin/pages/_asset_popups.html.haml +7 -7
  58. data/vendor/extensions/clipped/app/views/admin/pages/_assets.html.haml +11 -0
  59. data/vendor/extensions/{assets → clipped}/app/views/admin/removed/_assets_bucket.html.haml +1 -1
  60. data/vendor/extensions/{assets → clipped}/app/views/admin/removed/_assets_container.html.haml +9 -9
  61. data/vendor/extensions/{assets → clipped}/app/views/admin/removed/_bucket.html.haml +1 -1
  62. data/vendor/extensions/{assets → clipped}/app/views/admin/removed/_bucket_asset.html.haml +2 -2
  63. data/vendor/extensions/clipped/app/views/admin/removed/_show_bucket_link.html.haml +4 -0
  64. data/vendor/extensions/{assets → clipped}/app/views/admin/removed/_upload_to_page.html.haml +2 -2
  65. data/vendor/extensions/{assets → clipped}/app/views/admin/removed/bucket/_iframe.html.haml +0 -0
  66. data/vendor/extensions/{assets → clipped}/artwork/icons.png +0 -0
  67. data/vendor/extensions/{assets/assets_extension.rb → clipped/clipped_extension.rb} +10 -10
  68. data/vendor/extensions/{assets → clipped}/config/initializers/interpolation.rb +0 -0
  69. data/vendor/extensions/clipped/config/initializers/processors.rb +12 -0
  70. data/vendor/extensions/{assets → clipped}/config/initializers/radiant_config.rb +5 -4
  71. data/vendor/extensions/{assets → clipped}/config/locales/en.yml +6 -3
  72. data/vendor/extensions/{assets → clipped}/config/locales/nl.yml +1 -1
  73. data/vendor/extensions/{assets → clipped}/config/routes.rb +2 -2
  74. data/vendor/extensions/clipped/cucumber.yml +1 -0
  75. data/vendor/extensions/{assets → clipped}/db/migrate/001_create_assets.rb +0 -0
  76. data/vendor/extensions/{assets → clipped}/db/migrate/002_create_paperclip_attributes.rb +0 -0
  77. data/vendor/extensions/{assets → clipped}/db/migrate/003_create_user_observer.rb +0 -0
  78. data/vendor/extensions/{assets → clipped}/db/migrate/004_create_page_attachments.rb +0 -0
  79. data/vendor/extensions/{assets → clipped}/db/migrate/005_rename_users.rb +0 -0
  80. data/vendor/extensions/{assets → clipped}/db/migrate/20090316132151_disable_file_types.rb +0 -0
  81. data/vendor/extensions/{assets → clipped}/db/migrate/20110513205050_asset_uuid.rb +0 -0
  82. data/vendor/extensions/clipped/features/support/env.rb +11 -0
  83. data/vendor/extensions/clipped/features/support/paths.rb +22 -0
  84. data/vendor/extensions/{assets/lib/assets_admin_ui.rb → clipped/lib/clipped_admin_ui.rb} +1 -1
  85. data/vendor/extensions/{assets → clipped}/lib/page_asset_associations.rb +1 -1
  86. data/vendor/extensions/{assets → clipped}/lib/paperclip/frame_grab.rb +0 -0
  87. data/vendor/extensions/clipped/lib/radiant-clipped-extension.rb +2 -0
  88. data/vendor/extensions/clipped/lib/radiant-clipped-extension/version.rb +3 -0
  89. data/vendor/extensions/{assets/lib/tasks/assets_extension_tasks.rake → clipped/lib/tasks/clipped_extension_tasks.rake} +22 -16
  90. data/vendor/extensions/{assets → clipped}/lib/tasks/paperclip_tasks.rake +0 -0
  91. data/{public → vendor/extensions/clipped/public}/flash/ZeroClipboard.swf +0 -0
  92. data/{public → vendor/extensions/clipped/public}/images/admin/assets/add.png +0 -0
  93. data/{public → vendor/extensions/clipped/public}/images/admin/assets/archive_icon.png +0 -0
  94. data/{public → vendor/extensions/clipped/public}/images/admin/assets/audio_icon.png +0 -0
  95. data/{public → vendor/extensions/clipped/public}/images/admin/assets/audio_thumbnail.png +0 -0
  96. data/{public → vendor/extensions/clipped/public}/images/admin/assets/c_icon.png +0 -0
  97. data/{public → vendor/extensions/clipped/public}/images/admin/assets/copy.png +0 -0
  98. data/{public → vendor/extensions/clipped/public}/images/admin/assets/css_icon.png +0 -0
  99. data/{public → vendor/extensions/clipped/public}/images/admin/assets/database_icon.png +0 -0
  100. data/{public → vendor/extensions/clipped/public}/images/admin/assets/delete.png +0 -0
  101. data/{public → vendor/extensions/clipped/public}/images/admin/assets/document_icon.png +0 -0
  102. data/{public → vendor/extensions/clipped/public}/images/admin/assets/document_thumbnail.png +0 -0
  103. data/{public → vendor/extensions/clipped/public}/images/admin/assets/flash_icon.png +0 -0
  104. data/{public → vendor/extensions/clipped/public}/images/admin/assets/flash_thumbnail.png +0 -0
  105. data/{public → vendor/extensions/clipped/public}/images/admin/assets/font_icon.png +0 -0
  106. data/{public → vendor/extensions/clipped/public}/images/admin/assets/gzip_icon.png +0 -0
  107. data/{public → vendor/extensions/clipped/public}/images/admin/assets/html_icon.png +0 -0
  108. data/{public → vendor/extensions/clipped/public}/images/admin/assets/image_icon.png +0 -0
  109. data/{public → vendor/extensions/clipped/public}/images/admin/assets/image_thumbnail.png +0 -0
  110. data/{public → vendor/extensions/clipped/public}/images/admin/assets/java_icon.png +0 -0
  111. data/{public → vendor/extensions/clipped/public}/images/admin/assets/page_edit.png +0 -0
  112. data/{public → vendor/extensions/clipped/public}/images/admin/assets/perl_icon.png +0 -0
  113. data/{public → vendor/extensions/clipped/public}/images/admin/assets/php_icon.png +0 -0
  114. data/{public → vendor/extensions/clipped/public}/images/admin/assets/presentation_icon.png +0 -0
  115. data/{public → vendor/extensions/clipped/public}/images/admin/assets/python_icon.png +0 -0
  116. data/{public → vendor/extensions/clipped/public}/images/admin/assets/reorder_assets.png +0 -0
  117. data/{public → vendor/extensions/clipped/public}/images/admin/assets/ruby_icon.png +0 -0
  118. data/{public → vendor/extensions/clipped/public}/images/admin/assets/script_icon.png +0 -0
  119. data/{public → vendor/extensions/clipped/public}/images/admin/assets/spreadsheet_icon.png +0 -0
  120. data/{public → vendor/extensions/clipped/public}/images/admin/assets/tar_icon.png +0 -0
  121. data/{public → vendor/extensions/clipped/public}/images/admin/assets/unknown_icon.png +0 -0
  122. data/{public → vendor/extensions/clipped/public}/images/admin/assets/unknown_thumbnail.png +0 -0
  123. data/{public → vendor/extensions/clipped/public}/images/admin/assets/video_icon.png +0 -0
  124. data/{public → vendor/extensions/clipped/public}/images/admin/assets/video_thumbnail.png +0 -0
  125. data/{public → vendor/extensions/clipped/public}/images/admin/assets/xml_icon.png +0 -0
  126. data/{public → vendor/extensions/clipped/public}/images/admin/assets/zip_icon.png +0 -0
  127. data/vendor/extensions/{assets → clipped}/public/javascripts/admin/assets.js +66 -8
  128. data/vendor/extensions/{assets → clipped}/public/stylesheets/sass/admin/assets.sass +12 -6
  129. data/vendor/extensions/clipped/radiant-clipped-extension.gemspec +33 -0
  130. data/vendor/extensions/{assets → clipped}/spec/controllers/admin/assets_controller_spec.rb +0 -0
  131. data/vendor/extensions/clipped/spec/controllers/admin/page_attachments_controller_spec.rb +50 -0
  132. data/vendor/extensions/{assets → clipped}/spec/datasets/assets_dataset.rb +2 -1
  133. data/vendor/extensions/{assets/spec/lib/tag_deprecation_spec.rb → clipped/spec/lib/asset_tags_spec.rb} +3 -15
  134. data/vendor/extensions/{assets → clipped}/spec/models/asset_spec.rb +3 -2
  135. data/vendor/extensions/{assets → clipped}/spec/models/asset_type_spec.rb +0 -0
  136. data/vendor/extensions/{assets → clipped}/spec/spec.opts +0 -0
  137. data/vendor/extensions/{assets → clipped}/spec/spec_helper.rb +0 -0
  138. data/vendor/extensions/{assets → clipped}/wireframes/edit-page-assets-2.bmml +0 -0
  139. data/vendor/extensions/{assets → clipped}/wireframes/edit-page-assets-2.png +0 -0
  140. data/vendor/extensions/{assets → clipped}/wireframes/edit-page-assets-3.bmml +0 -0
  141. data/vendor/extensions/{assets → clipped}/wireframes/edit-page-assets-3.png +0 -0
  142. data/vendor/extensions/{assets → clipped}/wireframes/edit-page-assets.bmml +0 -0
  143. data/vendor/extensions/{assets → clipped}/wireframes/edit-page-assets.png +0 -0
  144. data/vendor/extensions/{assets → clipped}/wireframes/edit-page.bmml +0 -0
  145. data/vendor/extensions/{assets → clipped}/wireframes/edit-page.png +0 -0
  146. data/vendor/extensions/sheets/Rakefile +30 -18
  147. data/vendor/extensions/sheets/app/controllers/admin/sheet_resource_controller.rb +1 -1
  148. data/vendor/extensions/sheets/app/models/sheet.rb +4 -0
  149. data/vendor/extensions/sheets/app/views/admin/scripts/index.html.haml +9 -5
  150. data/vendor/extensions/sheets/app/views/admin/styles/index.html.haml +1 -1
  151. data/vendor/extensions/sheets/config/locales/en.yml +3 -1
  152. data/vendor/extensions/sheets/features/admin/managing_javascripts.feature +65 -0
  153. data/vendor/extensions/sheets/features/admin/managing_stylesheets.feature +65 -0
  154. data/vendor/extensions/sheets/features/support/env.rb +2 -7
  155. data/vendor/extensions/sheets/features/support/paths.rb +9 -12
  156. data/vendor/extensions/sheets/lib/radiant-sheets-extension/version.rb +1 -1
  157. data/vendor/extensions/sheets/radiant-sheets-extension.gemspec +9 -4
  158. data/vendor/extensions/sheets/spec/datasets/javascripts_dataset.rb +3 -1
  159. data/vendor/extensions/sheets/spec/datasets/stylesheets_dataset.rb +3 -1
  160. data/vendor/extensions/sheets/spec/lib/javascript_tags_spec.rb +4 -4
  161. data/vendor/extensions/sheets/spec/lib/stylesheet_tags_spec.rb +4 -4
  162. metadata +189 -599
  163. data/Gemfile +0 -3
  164. data/lib/generators/extension/templates/cucumber_datasets_loader.rb +0 -3
  165. data/public/assets/1/2375_1115822414591_1197894784_30347214_1109_n.jpg +0 -0
  166. data/public/assets/1/2375_1115822414591_1197894784_30347214_1109_n_icon.png +0 -0
  167. data/public/assets/1/2375_1115822414591_1197894784_30347214_1109_n_normal.jpg +0 -0
  168. data/public/assets/1/2375_1115822414591_1197894784_30347214_1109_n_thumbnail.png +0 -0
  169. data/public/images/roasters/banner.jpg +0 -0
  170. data/public/images/roasters/closelabel.gif +0 -0
  171. data/public/images/roasters/comment.png +0 -0
  172. data/public/images/roasters/gallery1.jpg +0 -0
  173. data/public/images/roasters/gallery2.jpg +0 -0
  174. data/public/images/roasters/gallery3.jpg +0 -0
  175. data/public/images/roasters/gallery4.jpg +0 -0
  176. data/public/images/roasters/gift.gif +0 -0
  177. data/public/images/roasters/green.gif +0 -0
  178. data/public/images/roasters/nav-background.gif +0 -0
  179. data/public/images/roasters/nav-divider.gif +0 -0
  180. data/public/images/roasters/nextlabel.gif +0 -0
  181. data/public/images/roasters/open.gif +0 -0
  182. data/public/images/roasters/preview-1.jpg +0 -0
  183. data/public/images/roasters/preview.jpg +0 -0
  184. data/public/images/roasters/prevlabel.gif +0 -0
  185. data/public/images/roasters/prize.gif +0 -0
  186. data/public/images/roasters/recycle.gif +0 -0
  187. data/public/images/roasters/rss.gif +0 -0
  188. data/public/images/roasters/thumb-grinder.jpg +0 -0
  189. data/public/images/roasters/thumb-grower.jpg +0 -0
  190. data/public/images/roasters/thumb-roaster.jpg +0 -0
  191. data/public/images/roasters/truck.gif +0 -0
  192. data/vendor/extensions/assets/HELP_admin.markdown +0 -69
  193. data/vendor/extensions/assets/VERSION +0 -1
  194. data/vendor/extensions/assets/app/controllers/admin/page_attachments_controller.rb +0 -45
  195. data/vendor/extensions/assets/app/helpers/admin/assets_helper.rb +0 -11
  196. data/vendor/extensions/assets/app/models/page_attachment.rb +0 -14
  197. data/vendor/extensions/assets/app/views/admin/assets/_errors.html.haml +0 -3
  198. data/vendor/extensions/assets/app/views/admin/page_attachments/_attachment.html.haml +0 -22
  199. data/vendor/extensions/assets/app/views/admin/page_attachments/_new_attachment.html.haml +0 -18
  200. data/vendor/extensions/assets/app/views/admin/pages/_assets.html.haml +0 -13
  201. data/vendor/extensions/assets/app/views/admin/removed/_show_bucket_link.html.haml +0 -4
  202. data/vendor/extensions/assets/lib/tag_deprecation.rb +0 -73
  203. data/vendor/extensions/assets/public/flash/ZeroClipboard.swf +0 -0
  204. data/vendor/extensions/assets/public/images/admin/assets/add.png +0 -0
  205. data/vendor/extensions/assets/public/images/admin/assets/archive_icon.png +0 -0
  206. data/vendor/extensions/assets/public/images/admin/assets/audio_icon.png +0 -0
  207. data/vendor/extensions/assets/public/images/admin/assets/audio_thumbnail.png +0 -0
  208. data/vendor/extensions/assets/public/images/admin/assets/c_icon.png +0 -0
  209. data/vendor/extensions/assets/public/images/admin/assets/copy.png +0 -0
  210. data/vendor/extensions/assets/public/images/admin/assets/css_icon.png +0 -0
  211. data/vendor/extensions/assets/public/images/admin/assets/database_icon.png +0 -0
  212. data/vendor/extensions/assets/public/images/admin/assets/delete.png +0 -0
  213. data/vendor/extensions/assets/public/images/admin/assets/document_icon.png +0 -0
  214. data/vendor/extensions/assets/public/images/admin/assets/document_thumbnail.png +0 -0
  215. data/vendor/extensions/assets/public/images/admin/assets/flash_icon.png +0 -0
  216. data/vendor/extensions/assets/public/images/admin/assets/flash_thumbnail.png +0 -0
  217. data/vendor/extensions/assets/public/images/admin/assets/font_icon.png +0 -0
  218. data/vendor/extensions/assets/public/images/admin/assets/gzip_icon.png +0 -0
  219. data/vendor/extensions/assets/public/images/admin/assets/html_icon.png +0 -0
  220. data/vendor/extensions/assets/public/images/admin/assets/image_icon.png +0 -0
  221. data/vendor/extensions/assets/public/images/admin/assets/image_thumbnail.png +0 -0
  222. data/vendor/extensions/assets/public/images/admin/assets/java_icon.png +0 -0
  223. data/vendor/extensions/assets/public/images/admin/assets/page_edit.png +0 -0
  224. data/vendor/extensions/assets/public/images/admin/assets/perl_icon.png +0 -0
  225. data/vendor/extensions/assets/public/images/admin/assets/php_icon.png +0 -0
  226. data/vendor/extensions/assets/public/images/admin/assets/presentation_icon.png +0 -0
  227. data/vendor/extensions/assets/public/images/admin/assets/python_icon.png +0 -0
  228. data/vendor/extensions/assets/public/images/admin/assets/reorder_assets.png +0 -0
  229. data/vendor/extensions/assets/public/images/admin/assets/ruby_icon.png +0 -0
  230. data/vendor/extensions/assets/public/images/admin/assets/script_icon.png +0 -0
  231. data/vendor/extensions/assets/public/images/admin/assets/spreadsheet_icon.png +0 -0
  232. data/vendor/extensions/assets/public/images/admin/assets/tar_icon.png +0 -0
  233. data/vendor/extensions/assets/public/images/admin/assets/unknown_icon.png +0 -0
  234. data/vendor/extensions/assets/public/images/admin/assets/unknown_thumbnail.png +0 -0
  235. data/vendor/extensions/assets/public/images/admin/assets/video_icon.png +0 -0
  236. data/vendor/extensions/assets/public/images/admin/assets/video_thumbnail.png +0 -0
  237. data/vendor/extensions/assets/public/images/admin/assets/xml_icon.png +0 -0
  238. data/vendor/extensions/assets/public/images/admin/assets/zip_icon.png +0 -0
  239. data/vendor/extensions/assets/spec/controllers/admin/page_attachment_controller_spec.rb +0 -51
  240. data/vendor/extensions/assets/spec/lib/asset_tags_spec.rb +0 -9
  241. data/vendor/plugins/haml/CONTRIBUTING +0 -4
  242. data/vendor/plugins/haml/MIT-LICENSE +0 -20
  243. data/vendor/plugins/haml/README.md +0 -298
  244. data/vendor/plugins/haml/Rakefile +0 -436
  245. data/vendor/plugins/haml/TODO +0 -53
  246. data/vendor/plugins/haml/VERSION +0 -1
  247. data/vendor/plugins/haml/VERSION_NAME +0 -1
  248. data/vendor/plugins/haml/bin/css2sass +0 -13
  249. data/vendor/plugins/haml/bin/haml +0 -9
  250. data/vendor/plugins/haml/bin/html2haml +0 -7
  251. data/vendor/plugins/haml/bin/sass +0 -8
  252. data/vendor/plugins/haml/bin/sass-convert +0 -7
  253. data/vendor/plugins/haml/doc-src/FAQ.md +0 -187
  254. data/vendor/plugins/haml/doc-src/HAML_CHANGELOG.md +0 -1091
  255. data/vendor/plugins/haml/doc-src/HAML_REFERENCE.md +0 -1344
  256. data/vendor/plugins/haml/doc-src/INDENTED_SYNTAX.md +0 -210
  257. data/vendor/plugins/haml/doc-src/SASS_CHANGELOG.md +0 -1914
  258. data/vendor/plugins/haml/doc-src/SASS_REFERENCE.md +0 -1680
  259. data/vendor/plugins/haml/doc-src/SCSS_FOR_SASS_USERS.md +0 -155
  260. data/vendor/plugins/haml/ext/extconf.rb +0 -10
  261. data/vendor/plugins/haml/extra/haml-mode.el +0 -753
  262. data/vendor/plugins/haml/extra/sass-mode.el +0 -207
  263. data/vendor/plugins/haml/extra/update_watch.rb +0 -13
  264. data/vendor/plugins/haml/haml.gemspec +0 -35
  265. data/vendor/plugins/haml/init.rb +0 -18
  266. data/vendor/plugins/haml/init.rbc +0 -404
  267. data/vendor/plugins/haml/lib/haml.rb +0 -44
  268. data/vendor/plugins/haml/lib/haml.rbc +0 -569
  269. data/vendor/plugins/haml/lib/haml/buffer.rb +0 -320
  270. data/vendor/plugins/haml/lib/haml/buffer.rbc +0 -4048
  271. data/vendor/plugins/haml/lib/haml/engine.rb +0 -308
  272. data/vendor/plugins/haml/lib/haml/engine.rbc +0 -3852
  273. data/vendor/plugins/haml/lib/haml/error.rb +0 -22
  274. data/vendor/plugins/haml/lib/haml/error.rbc +0 -339
  275. data/vendor/plugins/haml/lib/haml/exec.rb +0 -862
  276. data/vendor/plugins/haml/lib/haml/filters.rb +0 -371
  277. data/vendor/plugins/haml/lib/haml/filters.rbc +0 -5617
  278. data/vendor/plugins/haml/lib/haml/helpers.rb +0 -605
  279. data/vendor/plugins/haml/lib/haml/helpers.rbc +0 -7086
  280. data/vendor/plugins/haml/lib/haml/helpers/action_view_extensions.rb +0 -57
  281. data/vendor/plugins/haml/lib/haml/helpers/action_view_extensions.rbc +0 -522
  282. data/vendor/plugins/haml/lib/haml/helpers/action_view_mods.rb +0 -244
  283. data/vendor/plugins/haml/lib/haml/helpers/action_view_mods.rbc +0 -5515
  284. data/vendor/plugins/haml/lib/haml/helpers/xss_mods.rb +0 -165
  285. data/vendor/plugins/haml/lib/haml/html.rb +0 -428
  286. data/vendor/plugins/haml/lib/haml/html/erb.rb +0 -141
  287. data/vendor/plugins/haml/lib/haml/precompiler.rb +0 -1104
  288. data/vendor/plugins/haml/lib/haml/precompiler.rbc +0 -22247
  289. data/vendor/plugins/haml/lib/haml/railtie.rb +0 -21
  290. data/vendor/plugins/haml/lib/haml/railtie.rbc +0 -409
  291. data/vendor/plugins/haml/lib/haml/root.rb +0 -7
  292. data/vendor/plugins/haml/lib/haml/root.rbc +0 -160
  293. data/vendor/plugins/haml/lib/haml/shared.rb +0 -78
  294. data/vendor/plugins/haml/lib/haml/shared.rbc +0 -1137
  295. data/vendor/plugins/haml/lib/haml/template.rb +0 -97
  296. data/vendor/plugins/haml/lib/haml/template.rbc +0 -1838
  297. data/vendor/plugins/haml/lib/haml/template/options.rb +0 -16
  298. data/vendor/plugins/haml/lib/haml/template/options.rbc +0 -235
  299. data/vendor/plugins/haml/lib/haml/template/patch.rb +0 -58
  300. data/vendor/plugins/haml/lib/haml/template/plugin.rb +0 -122
  301. data/vendor/plugins/haml/lib/haml/template/plugin.rbc +0 -2720
  302. data/vendor/plugins/haml/lib/haml/util.rb +0 -809
  303. data/vendor/plugins/haml/lib/haml/util.rbc +0 -12059
  304. data/vendor/plugins/haml/lib/haml/util/subset_map.rb +0 -101
  305. data/vendor/plugins/haml/lib/haml/util/subset_map.rbc +0 -1316
  306. data/vendor/plugins/haml/lib/haml/version.rb +0 -102
  307. data/vendor/plugins/haml/lib/haml/version.rbc +0 -1671
  308. data/vendor/plugins/haml/lib/sass.rb +0 -29
  309. data/vendor/plugins/haml/lib/sass.rbc +0 -492
  310. data/vendor/plugins/haml/lib/sass/callbacks.rb +0 -52
  311. data/vendor/plugins/haml/lib/sass/callbacks.rbc +0 -388
  312. data/vendor/plugins/haml/lib/sass/css.rb +0 -294
  313. data/vendor/plugins/haml/lib/sass/engine.rb +0 -720
  314. data/vendor/plugins/haml/lib/sass/engine.rbc +0 -17020
  315. data/vendor/plugins/haml/lib/sass/environment.rb +0 -143
  316. data/vendor/plugins/haml/lib/sass/environment.rbc +0 -1751
  317. data/vendor/plugins/haml/lib/sass/error.rb +0 -198
  318. data/vendor/plugins/haml/lib/sass/error.rbc +0 -2801
  319. data/vendor/plugins/haml/lib/sass/files.rb +0 -160
  320. data/vendor/plugins/haml/lib/sass/files.rbc +0 -3118
  321. data/vendor/plugins/haml/lib/sass/less.rb +0 -382
  322. data/vendor/plugins/haml/lib/sass/plugin.rb +0 -276
  323. data/vendor/plugins/haml/lib/sass/plugin.rbc +0 -4356
  324. data/vendor/plugins/haml/lib/sass/plugin/configuration.rb +0 -221
  325. data/vendor/plugins/haml/lib/sass/plugin/configuration.rbc +0 -1343
  326. data/vendor/plugins/haml/lib/sass/plugin/generic.rb +0 -15
  327. data/vendor/plugins/haml/lib/sass/plugin/merb.rb +0 -37
  328. data/vendor/plugins/haml/lib/sass/plugin/rack.rb +0 -47
  329. data/vendor/plugins/haml/lib/sass/plugin/rack.rbc +0 -446
  330. data/vendor/plugins/haml/lib/sass/plugin/rails.rb +0 -32
  331. data/vendor/plugins/haml/lib/sass/plugin/rails.rbc +0 -879
  332. data/vendor/plugins/haml/lib/sass/plugin/staleness_checker.rb +0 -123
  333. data/vendor/plugins/haml/lib/sass/plugin/staleness_checker.rbc +0 -2019
  334. data/vendor/plugins/haml/lib/sass/repl.rb +0 -58
  335. data/vendor/plugins/haml/lib/sass/script.rb +0 -63
  336. data/vendor/plugins/haml/lib/sass/script.rbc +0 -1188
  337. data/vendor/plugins/haml/lib/sass/script/bool.rb +0 -18
  338. data/vendor/plugins/haml/lib/sass/script/bool.rbc +0 -366
  339. data/vendor/plugins/haml/lib/sass/script/color.rb +0 -491
  340. data/vendor/plugins/haml/lib/sass/script/color.rbc +0 -8148
  341. data/vendor/plugins/haml/lib/sass/script/css_lexer.rb +0 -29
  342. data/vendor/plugins/haml/lib/sass/script/css_lexer.rbc +0 -809
  343. data/vendor/plugins/haml/lib/sass/script/css_parser.rb +0 -31
  344. data/vendor/plugins/haml/lib/sass/script/css_parser.rbc +0 -628
  345. data/vendor/plugins/haml/lib/sass/script/funcall.rb +0 -77
  346. data/vendor/plugins/haml/lib/sass/script/funcall.rbc +0 -1805
  347. data/vendor/plugins/haml/lib/sass/script/functions.rb +0 -861
  348. data/vendor/plugins/haml/lib/sass/script/functions.rbc +0 -8418
  349. data/vendor/plugins/haml/lib/sass/script/interpolation.rb +0 -70
  350. data/vendor/plugins/haml/lib/sass/script/interpolation.rbc +0 -1225
  351. data/vendor/plugins/haml/lib/sass/script/lexer.rb +0 -337
  352. data/vendor/plugins/haml/lib/sass/script/lexer.rbc +0 -7231
  353. data/vendor/plugins/haml/lib/sass/script/literal.rb +0 -236
  354. data/vendor/plugins/haml/lib/sass/script/literal.rbc +0 -3365
  355. data/vendor/plugins/haml/lib/sass/script/node.rb +0 -112
  356. data/vendor/plugins/haml/lib/sass/script/node.rbc +0 -1418
  357. data/vendor/plugins/haml/lib/sass/script/number.rb +0 -423
  358. data/vendor/plugins/haml/lib/sass/script/number.rbc +0 -6024
  359. data/vendor/plugins/haml/lib/sass/script/operation.rb +0 -95
  360. data/vendor/plugins/haml/lib/sass/script/operation.rbc +0 -1856
  361. data/vendor/plugins/haml/lib/sass/script/parser.rb +0 -401
  362. data/vendor/plugins/haml/lib/sass/script/parser.rbc +0 -8418
  363. data/vendor/plugins/haml/lib/sass/script/string.rb +0 -67
  364. data/vendor/plugins/haml/lib/sass/script/string.rbc +0 -1357
  365. data/vendor/plugins/haml/lib/sass/script/string_interpolation.rb +0 -93
  366. data/vendor/plugins/haml/lib/sass/script/string_interpolation.rbc +0 -1643
  367. data/vendor/plugins/haml/lib/sass/script/unary_operation.rb +0 -57
  368. data/vendor/plugins/haml/lib/sass/script/unary_operation.rbc +0 -1144
  369. data/vendor/plugins/haml/lib/sass/script/variable.rb +0 -48
  370. data/vendor/plugins/haml/lib/sass/script/variable.rbc +0 -844
  371. data/vendor/plugins/haml/lib/sass/scss.rb +0 -17
  372. data/vendor/plugins/haml/lib/sass/scss.rbc +0 -242
  373. data/vendor/plugins/haml/lib/sass/scss/css_parser.rb +0 -46
  374. data/vendor/plugins/haml/lib/sass/scss/css_parser.rbc +0 -1106
  375. data/vendor/plugins/haml/lib/sass/scss/parser.rb +0 -846
  376. data/vendor/plugins/haml/lib/sass/scss/parser.rbc +0 -19348
  377. data/vendor/plugins/haml/lib/sass/scss/rx.rb +0 -126
  378. data/vendor/plugins/haml/lib/sass/scss/rx.rbc +0 -2849
  379. data/vendor/plugins/haml/lib/sass/scss/sass_parser.rb +0 -11
  380. data/vendor/plugins/haml/lib/sass/scss/sass_parser.rbc +0 -287
  381. data/vendor/plugins/haml/lib/sass/scss/script_lexer.rb +0 -15
  382. data/vendor/plugins/haml/lib/sass/scss/script_lexer.rbc +0 -439
  383. data/vendor/plugins/haml/lib/sass/scss/script_parser.rb +0 -25
  384. data/vendor/plugins/haml/lib/sass/scss/script_parser.rbc +0 -482
  385. data/vendor/plugins/haml/lib/sass/scss/static_parser.rb +0 -40
  386. data/vendor/plugins/haml/lib/sass/scss/static_parser.rbc +0 -971
  387. data/vendor/plugins/haml/lib/sass/selector.rb +0 -361
  388. data/vendor/plugins/haml/lib/sass/selector.rbc +0 -4193
  389. data/vendor/plugins/haml/lib/sass/selector/abstract_sequence.rb +0 -62
  390. data/vendor/plugins/haml/lib/sass/selector/abstract_sequence.rbc +0 -798
  391. data/vendor/plugins/haml/lib/sass/selector/comma_sequence.rb +0 -82
  392. data/vendor/plugins/haml/lib/sass/selector/comma_sequence.rbc +0 -1814
  393. data/vendor/plugins/haml/lib/sass/selector/sequence.rb +0 -237
  394. data/vendor/plugins/haml/lib/sass/selector/sequence.rbc +0 -4928
  395. data/vendor/plugins/haml/lib/sass/selector/simple.rb +0 -113
  396. data/vendor/plugins/haml/lib/sass/selector/simple.rbc +0 -1553
  397. data/vendor/plugins/haml/lib/sass/selector/simple_sequence.rb +0 -136
  398. data/vendor/plugins/haml/lib/sass/selector/simple_sequence.rbc +0 -2346
  399. data/vendor/plugins/haml/lib/sass/tree/charset_node.rb +0 -37
  400. data/vendor/plugins/haml/lib/sass/tree/charset_node.rbc +0 -606
  401. data/vendor/plugins/haml/lib/sass/tree/comment_node.rb +0 -128
  402. data/vendor/plugins/haml/lib/sass/tree/comment_node.rbc +0 -2397
  403. data/vendor/plugins/haml/lib/sass/tree/debug_node.rb +0 -36
  404. data/vendor/plugins/haml/lib/sass/tree/debug_node.rbc +0 -740
  405. data/vendor/plugins/haml/lib/sass/tree/directive_node.rb +0 -75
  406. data/vendor/plugins/haml/lib/sass/tree/directive_node.rbc +0 -1302
  407. data/vendor/plugins/haml/lib/sass/tree/extend_node.rb +0 -65
  408. data/vendor/plugins/haml/lib/sass/tree/extend_node.rbc +0 -1276
  409. data/vendor/plugins/haml/lib/sass/tree/for_node.rb +0 -67
  410. data/vendor/plugins/haml/lib/sass/tree/for_node.rbc +0 -1145
  411. data/vendor/plugins/haml/lib/sass/tree/if_node.rb +0 -81
  412. data/vendor/plugins/haml/lib/sass/tree/if_node.rbc +0 -1119
  413. data/vendor/plugins/haml/lib/sass/tree/import_node.rb +0 -102
  414. data/vendor/plugins/haml/lib/sass/tree/import_node.rbc +0 -2242
  415. data/vendor/plugins/haml/lib/sass/tree/mixin_def_node.rb +0 -60
  416. data/vendor/plugins/haml/lib/sass/tree/mixin_def_node.rbc +0 -1001
  417. data/vendor/plugins/haml/lib/sass/tree/mixin_node.rb +0 -123
  418. data/vendor/plugins/haml/lib/sass/tree/mixin_node.rbc +0 -3355
  419. data/vendor/plugins/haml/lib/sass/tree/node.rb +0 -465
  420. data/vendor/plugins/haml/lib/sass/tree/node.rbc +0 -5533
  421. data/vendor/plugins/haml/lib/sass/tree/prop_node.rb +0 -220
  422. data/vendor/plugins/haml/lib/sass/tree/prop_node.rbc +0 -3949
  423. data/vendor/plugins/haml/lib/sass/tree/root_node.rb +0 -157
  424. data/vendor/plugins/haml/lib/sass/tree/root_node.rbc +0 -3112
  425. data/vendor/plugins/haml/lib/sass/tree/rule_node.rb +0 -273
  426. data/vendor/plugins/haml/lib/sass/tree/rule_node.rbc +0 -5636
  427. data/vendor/plugins/haml/lib/sass/tree/variable_node.rb +0 -39
  428. data/vendor/plugins/haml/lib/sass/tree/variable_node.rbc +0 -845
  429. data/vendor/plugins/haml/lib/sass/tree/warn_node.rb +0 -42
  430. data/vendor/plugins/haml/lib/sass/tree/warn_node.rbc +0 -1043
  431. data/vendor/plugins/haml/lib/sass/tree/while_node.rb +0 -48
  432. data/vendor/plugins/haml/lib/sass/tree/while_node.rbc +0 -722
  433. data/vendor/plugins/haml/rails/init.rb +0 -1
  434. data/vendor/plugins/haml/test/benchmark.rb +0 -99
  435. data/vendor/plugins/haml/test/haml/engine_test.rb +0 -1805
  436. data/vendor/plugins/haml/test/haml/erb/_av_partial_1.erb +0 -12
  437. data/vendor/plugins/haml/test/haml/erb/_av_partial_2.erb +0 -8
  438. data/vendor/plugins/haml/test/haml/erb/action_view.erb +0 -62
  439. data/vendor/plugins/haml/test/haml/erb/standard.erb +0 -54
  440. data/vendor/plugins/haml/test/haml/helper_test.rb +0 -450
  441. data/vendor/plugins/haml/test/haml/html2haml/erb_tests.rb +0 -426
  442. data/vendor/plugins/haml/test/haml/html2haml_test.rb +0 -336
  443. data/vendor/plugins/haml/test/haml/markaby/standard.mab +0 -52
  444. data/vendor/plugins/haml/test/haml/mocks/article.rb +0 -6
  445. data/vendor/plugins/haml/test/haml/results/content_for_layout.xhtml +0 -12
  446. data/vendor/plugins/haml/test/haml/results/eval_suppressed.xhtml +0 -9
  447. data/vendor/plugins/haml/test/haml/results/filters.xhtml +0 -62
  448. data/vendor/plugins/haml/test/haml/results/helpers.xhtml +0 -70
  449. data/vendor/plugins/haml/test/haml/results/helpful.xhtml +0 -10
  450. data/vendor/plugins/haml/test/haml/results/just_stuff.xhtml +0 -70
  451. data/vendor/plugins/haml/test/haml/results/list.xhtml +0 -12
  452. data/vendor/plugins/haml/test/haml/results/nuke_inner_whitespace.xhtml +0 -40
  453. data/vendor/plugins/haml/test/haml/results/nuke_outer_whitespace.xhtml +0 -148
  454. data/vendor/plugins/haml/test/haml/results/original_engine.xhtml +0 -20
  455. data/vendor/plugins/haml/test/haml/results/partial_layout.xhtml +0 -5
  456. data/vendor/plugins/haml/test/haml/results/partials.xhtml +0 -21
  457. data/vendor/plugins/haml/test/haml/results/render_layout.xhtml +0 -3
  458. data/vendor/plugins/haml/test/haml/results/silent_script.xhtml +0 -74
  459. data/vendor/plugins/haml/test/haml/results/standard.xhtml +0 -162
  460. data/vendor/plugins/haml/test/haml/results/tag_parsing.xhtml +0 -23
  461. data/vendor/plugins/haml/test/haml/results/very_basic.xhtml +0 -5
  462. data/vendor/plugins/haml/test/haml/results/whitespace_handling.xhtml +0 -89
  463. data/vendor/plugins/haml/test/haml/spec/LICENSE +0 -14
  464. data/vendor/plugins/haml/test/haml/spec/README.md +0 -106
  465. data/vendor/plugins/haml/test/haml/spec/lua_haml_spec.lua +0 -38
  466. data/vendor/plugins/haml/test/haml/spec/perl_haml_test.pl +0 -81
  467. data/vendor/plugins/haml/test/haml/spec/ruby_haml_test.rb +0 -19
  468. data/vendor/plugins/haml/test/haml/spec/tests.json +0 -603
  469. data/vendor/plugins/haml/test/haml/spec_test.rb +0 -44
  470. data/vendor/plugins/haml/test/haml/template_test.rb +0 -417
  471. data/vendor/plugins/haml/test/haml/templates/_av_partial_1.haml +0 -9
  472. data/vendor/plugins/haml/test/haml/templates/_av_partial_1_ugly.haml +0 -9
  473. data/vendor/plugins/haml/test/haml/templates/_av_partial_2.haml +0 -5
  474. data/vendor/plugins/haml/test/haml/templates/_av_partial_2_ugly.haml +0 -5
  475. data/vendor/plugins/haml/test/haml/templates/_layout.erb +0 -3
  476. data/vendor/plugins/haml/test/haml/templates/_layout_for_partial.haml +0 -3
  477. data/vendor/plugins/haml/test/haml/templates/_partial.haml +0 -8
  478. data/vendor/plugins/haml/test/haml/templates/_text_area.haml +0 -3
  479. data/vendor/plugins/haml/test/haml/templates/action_view.haml +0 -47
  480. data/vendor/plugins/haml/test/haml/templates/action_view_ugly.haml +0 -47
  481. data/vendor/plugins/haml/test/haml/templates/breakage.haml +0 -8
  482. data/vendor/plugins/haml/test/haml/templates/content_for_layout.haml +0 -8
  483. data/vendor/plugins/haml/test/haml/templates/eval_suppressed.haml +0 -11
  484. data/vendor/plugins/haml/test/haml/templates/filters.haml +0 -66
  485. data/vendor/plugins/haml/test/haml/templates/helpers.haml +0 -55
  486. data/vendor/plugins/haml/test/haml/templates/helpful.haml +0 -11
  487. data/vendor/plugins/haml/test/haml/templates/just_stuff.haml +0 -85
  488. data/vendor/plugins/haml/test/haml/templates/list.haml +0 -12
  489. data/vendor/plugins/haml/test/haml/templates/nuke_inner_whitespace.haml +0 -32
  490. data/vendor/plugins/haml/test/haml/templates/nuke_outer_whitespace.haml +0 -144
  491. data/vendor/plugins/haml/test/haml/templates/original_engine.haml +0 -17
  492. data/vendor/plugins/haml/test/haml/templates/partial_layout.haml +0 -7
  493. data/vendor/plugins/haml/test/haml/templates/partialize.haml +0 -1
  494. data/vendor/plugins/haml/test/haml/templates/partials.haml +0 -12
  495. data/vendor/plugins/haml/test/haml/templates/render_layout.haml +0 -2
  496. data/vendor/plugins/haml/test/haml/templates/silent_script.haml +0 -40
  497. data/vendor/plugins/haml/test/haml/templates/standard.haml +0 -42
  498. data/vendor/plugins/haml/test/haml/templates/standard_ugly.haml +0 -42
  499. data/vendor/plugins/haml/test/haml/templates/tag_parsing.haml +0 -21
  500. data/vendor/plugins/haml/test/haml/templates/very_basic.haml +0 -4
  501. data/vendor/plugins/haml/test/haml/templates/whitespace_handling.haml +0 -87
  502. data/vendor/plugins/haml/test/haml/util/subset_map_test.rb +0 -91
  503. data/vendor/plugins/haml/test/haml/util_test.rb +0 -268
  504. data/vendor/plugins/haml/test/linked_rails.rb +0 -42
  505. data/vendor/plugins/haml/test/sass/callbacks_test.rb +0 -61
  506. data/vendor/plugins/haml/test/sass/conversion_test.rb +0 -1218
  507. data/vendor/plugins/haml/test/sass/css2sass_test.rb +0 -364
  508. data/vendor/plugins/haml/test/sass/data/hsl-rgb.txt +0 -319
  509. data/vendor/plugins/haml/test/sass/engine_test.rb +0 -2263
  510. data/vendor/plugins/haml/test/sass/extend_test.rb +0 -1348
  511. data/vendor/plugins/haml/test/sass/functions_test.rb +0 -556
  512. data/vendor/plugins/haml/test/sass/less_conversion_test.rb +0 -653
  513. data/vendor/plugins/haml/test/sass/more_results/more1.css +0 -9
  514. data/vendor/plugins/haml/test/sass/more_results/more1_with_line_comments.css +0 -26
  515. data/vendor/plugins/haml/test/sass/more_results/more_import.css +0 -29
  516. data/vendor/plugins/haml/test/sass/more_templates/_more_partial.sass +0 -2
  517. data/vendor/plugins/haml/test/sass/more_templates/more1.sass +0 -23
  518. data/vendor/plugins/haml/test/sass/more_templates/more_import.sass +0 -11
  519. data/vendor/plugins/haml/test/sass/plugin_test.rb +0 -433
  520. data/vendor/plugins/haml/test/sass/results/alt.css +0 -4
  521. data/vendor/plugins/haml/test/sass/results/basic.css +0 -9
  522. data/vendor/plugins/haml/test/sass/results/compact.css +0 -5
  523. data/vendor/plugins/haml/test/sass/results/complex.css +0 -86
  524. data/vendor/plugins/haml/test/sass/results/compressed.css +0 -1
  525. data/vendor/plugins/haml/test/sass/results/expanded.css +0 -19
  526. data/vendor/plugins/haml/test/sass/results/import.css +0 -31
  527. data/vendor/plugins/haml/test/sass/results/import_charset.css +0 -4
  528. data/vendor/plugins/haml/test/sass/results/import_charset_1_8.css +0 -4
  529. data/vendor/plugins/haml/test/sass/results/import_charset_ibm866.css +0 -4
  530. data/vendor/plugins/haml/test/sass/results/line_numbers.css +0 -49
  531. data/vendor/plugins/haml/test/sass/results/mixins.css +0 -95
  532. data/vendor/plugins/haml/test/sass/results/multiline.css +0 -24
  533. data/vendor/plugins/haml/test/sass/results/nested.css +0 -22
  534. data/vendor/plugins/haml/test/sass/results/options.css +0 -1
  535. data/vendor/plugins/haml/test/sass/results/parent_ref.css +0 -13
  536. data/vendor/plugins/haml/test/sass/results/script.css +0 -16
  537. data/vendor/plugins/haml/test/sass/results/scss_import.css +0 -31
  538. data/vendor/plugins/haml/test/sass/results/scss_importee.css +0 -2
  539. data/vendor/plugins/haml/test/sass/results/subdir/nested_subdir/nested_subdir.css +0 -1
  540. data/vendor/plugins/haml/test/sass/results/subdir/subdir.css +0 -3
  541. data/vendor/plugins/haml/test/sass/results/units.css +0 -11
  542. data/vendor/plugins/haml/test/sass/results/warn_imported.css +0 -0
  543. data/vendor/plugins/haml/test/sass/script_conversion_test.rb +0 -314
  544. data/vendor/plugins/haml/test/sass/script_test.rb +0 -470
  545. data/vendor/plugins/haml/test/sass/scss/css_test.rb +0 -916
  546. data/vendor/plugins/haml/test/sass/scss/rx_test.rb +0 -156
  547. data/vendor/plugins/haml/test/sass/scss/scss_test.rb +0 -1088
  548. data/vendor/plugins/haml/test/sass/scss/test_helper.rb +0 -37
  549. data/vendor/plugins/haml/test/sass/templates/_imported_charset_ibm866.sass +0 -4
  550. data/vendor/plugins/haml/test/sass/templates/_imported_charset_utf8.sass +0 -4
  551. data/vendor/plugins/haml/test/sass/templates/_partial.sass +0 -2
  552. data/vendor/plugins/haml/test/sass/templates/alt.sass +0 -16
  553. data/vendor/plugins/haml/test/sass/templates/basic.sass +0 -23
  554. data/vendor/plugins/haml/test/sass/templates/bork1.sass +0 -2
  555. data/vendor/plugins/haml/test/sass/templates/bork2.sass +0 -2
  556. data/vendor/plugins/haml/test/sass/templates/bork3.sass +0 -2
  557. data/vendor/plugins/haml/test/sass/templates/bork4.sass +0 -2
  558. data/vendor/plugins/haml/test/sass/templates/compact.sass +0 -17
  559. data/vendor/plugins/haml/test/sass/templates/complex.sass +0 -305
  560. data/vendor/plugins/haml/test/sass/templates/compressed.sass +0 -15
  561. data/vendor/plugins/haml/test/sass/templates/expanded.sass +0 -17
  562. data/vendor/plugins/haml/test/sass/templates/import.sass +0 -12
  563. data/vendor/plugins/haml/test/sass/templates/import_charset.sass +0 -7
  564. data/vendor/plugins/haml/test/sass/templates/import_charset_1_8.sass +0 -4
  565. data/vendor/plugins/haml/test/sass/templates/import_charset_ibm866.sass +0 -9
  566. data/vendor/plugins/haml/test/sass/templates/importee.less +0 -2
  567. data/vendor/plugins/haml/test/sass/templates/importee.sass +0 -19
  568. data/vendor/plugins/haml/test/sass/templates/line_numbers.sass +0 -13
  569. data/vendor/plugins/haml/test/sass/templates/mixin_bork.sass +0 -5
  570. data/vendor/plugins/haml/test/sass/templates/mixins.sass +0 -76
  571. data/vendor/plugins/haml/test/sass/templates/multiline.sass +0 -20
  572. data/vendor/plugins/haml/test/sass/templates/nested.sass +0 -25
  573. data/vendor/plugins/haml/test/sass/templates/nested_bork1.sass +0 -2
  574. data/vendor/plugins/haml/test/sass/templates/nested_bork2.sass +0 -2
  575. data/vendor/plugins/haml/test/sass/templates/nested_bork3.sass +0 -2
  576. data/vendor/plugins/haml/test/sass/templates/nested_bork4.sass +0 -2
  577. data/vendor/plugins/haml/test/sass/templates/nested_mixin_bork.sass +0 -6
  578. data/vendor/plugins/haml/test/sass/templates/options.sass +0 -2
  579. data/vendor/plugins/haml/test/sass/templates/parent_ref.sass +0 -25
  580. data/vendor/plugins/haml/test/sass/templates/script.sass +0 -101
  581. data/vendor/plugins/haml/test/sass/templates/scss_import.scss +0 -11
  582. data/vendor/plugins/haml/test/sass/templates/scss_importee.scss +0 -1
  583. data/vendor/plugins/haml/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +0 -2
  584. data/vendor/plugins/haml/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +0 -3
  585. data/vendor/plugins/haml/test/sass/templates/subdir/subdir.sass +0 -6
  586. data/vendor/plugins/haml/test/sass/templates/units.sass +0 -11
  587. data/vendor/plugins/haml/test/sass/templates/warn.sass +0 -3
  588. data/vendor/plugins/haml/test/sass/templates/warn_imported.sass +0 -4
  589. data/vendor/plugins/haml/test/test_helper.rb +0 -98
  590. data/vendor/plugins/haml/vendor/fssm/LICENSE +0 -20
  591. data/vendor/plugins/haml/vendor/fssm/README.markdown +0 -55
  592. data/vendor/plugins/haml/vendor/fssm/Rakefile +0 -59
  593. data/vendor/plugins/haml/vendor/fssm/VERSION.yml +0 -5
  594. data/vendor/plugins/haml/vendor/fssm/example.rb +0 -9
  595. data/vendor/plugins/haml/vendor/fssm/fssm.gemspec +0 -77
  596. data/vendor/plugins/haml/vendor/fssm/lib/fssm.rb +0 -33
  597. data/vendor/plugins/haml/vendor/fssm/lib/fssm/backends/fsevents.rb +0 -36
  598. data/vendor/plugins/haml/vendor/fssm/lib/fssm/backends/inotify.rb +0 -26
  599. data/vendor/plugins/haml/vendor/fssm/lib/fssm/backends/polling.rb +0 -25
  600. data/vendor/plugins/haml/vendor/fssm/lib/fssm/backends/rubycocoa/fsevents.rb +0 -131
  601. data/vendor/plugins/haml/vendor/fssm/lib/fssm/monitor.rb +0 -26
  602. data/vendor/plugins/haml/vendor/fssm/lib/fssm/path.rb +0 -91
  603. data/vendor/plugins/haml/vendor/fssm/lib/fssm/pathname.rb +0 -502
  604. data/vendor/plugins/haml/vendor/fssm/lib/fssm/state/directory.rb +0 -57
  605. data/vendor/plugins/haml/vendor/fssm/lib/fssm/state/file.rb +0 -24
  606. data/vendor/plugins/haml/vendor/fssm/lib/fssm/support.rb +0 -63
  607. data/vendor/plugins/haml/vendor/fssm/lib/fssm/tree.rb +0 -176
  608. data/vendor/plugins/haml/vendor/fssm/profile/prof-cache.rb +0 -40
  609. data/vendor/plugins/haml/vendor/fssm/profile/prof-fssm-pathname.html +0 -1231
  610. data/vendor/plugins/haml/vendor/fssm/profile/prof-pathname.rb +0 -68
  611. data/vendor/plugins/haml/vendor/fssm/profile/prof-plain-pathname.html +0 -988
  612. data/vendor/plugins/haml/vendor/fssm/profile/prof.html +0 -2379
  613. data/vendor/plugins/haml/vendor/fssm/spec/path_spec.rb +0 -75
  614. data/vendor/plugins/haml/vendor/fssm/spec/root/duck/quack.txt +0 -0
  615. data/vendor/plugins/haml/vendor/fssm/spec/root/file.css +0 -0
  616. data/vendor/plugins/haml/vendor/fssm/spec/root/file.rb +0 -0
  617. data/vendor/plugins/haml/vendor/fssm/spec/root/file.yml +0 -0
  618. data/vendor/plugins/haml/vendor/fssm/spec/root/moo/cow.txt +0 -0
  619. data/vendor/plugins/haml/vendor/fssm/spec/spec_helper.rb +0 -14
  620. data/vendor/plugins/haml/yard/callbacks.rb +0 -29
  621. data/vendor/plugins/haml/yard/default/fulldoc/html/css/common.sass +0 -26
  622. data/vendor/plugins/haml/yard/default/layout/html/footer.erb +0 -12
  623. data/vendor/plugins/haml/yard/inherited_hash.rb +0 -41
@@ -1 +0,0 @@
1
- Kernel.load File.join(File.dirname(__FILE__), '..', 'init.rb')
@@ -1,99 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- times = (ARGV.first || 1000).to_i
4
-
5
- if times == 0 # Invalid parameter
6
- puts <<END
7
- ruby #$0 [times=1000]
8
- Benchmark Haml against various other templating languages and Sass
9
- on its own.
10
- END
11
- exit 1
12
- end
13
-
14
- require File.dirname(__FILE__) + '/../lib/haml'
15
- require File.dirname(__FILE__) + '/linked_rails'
16
- %w[sass rubygems erb erubis markaby active_support action_controller
17
- action_view action_pack haml/template rbench].each {|dep| require(dep)}
18
-
19
- def view
20
- unless Haml::Util.has?(:instance_method, ActionView::Base, :finder)
21
- return ActionView::Base.new(File.dirname(__FILE__), {})
22
- end
23
-
24
- # Rails >=2.1.0
25
- base = ActionView::Base.new
26
- base.finder.append_view_path(File.dirname(__FILE__))
27
- base
28
- end
29
-
30
- def render(view, file)
31
- view.render :file => file
32
- end
33
-
34
- RBench.run(times) do
35
- column :haml, :title => "Haml"
36
- column :haml_ugly, :title => "Haml :ugly"
37
- column :erb, :title => "ERB"
38
- column :erubis, :title => "Erubis"
39
-
40
- template_name = 'standard'
41
- directory = File.dirname(__FILE__) + '/haml'
42
- haml_template = File.read("#{directory}/templates/#{template_name}.haml")
43
- erb_template = File.read("#{directory}/erb/#{template_name}.erb")
44
- markaby_template = File.read("#{directory}/markaby/#{template_name}.mab")
45
-
46
- report "Cached" do
47
- obj = Object.new
48
-
49
- Haml::Engine.new(haml_template).def_method(obj, :haml)
50
- Haml::Engine.new(haml_template, :ugly => true).def_method(obj, :haml_ugly)
51
- Erubis::Eruby.new(erb_template).def_method(obj, :erubis)
52
- obj.instance_eval("def erb; #{ERB.new(erb_template, nil, '-').src}; end")
53
-
54
- haml { obj.haml }
55
- haml_ugly { obj.haml_ugly }
56
- erb { obj.erb }
57
- erubis { obj.erubis }
58
- end
59
-
60
- report "ActionView" do
61
- @base = view
62
-
63
- @base.unmemoize_all
64
- Haml::Template.options[:ugly] = false
65
- # To cache the template
66
- render @base, 'haml/templates/standard'
67
- render @base, 'haml/erb/standard'
68
-
69
- haml { render @base, 'haml/templates/standard' }
70
- erb { render @base, 'haml/erb/standard' }
71
-
72
- Haml::Template.options[:ugly] = true
73
- render @base, 'haml/templates/standard_ugly'
74
- haml_ugly { render @base, 'haml/templates/standard_ugly' }
75
- end
76
-
77
- report "ActionView with deep partials" do
78
- @base = view
79
-
80
- @base.unmemoize_all
81
- Haml::Template.options[:ugly] = false
82
- # To cache the template
83
- render @base, 'haml/templates/action_view'
84
- render @base, 'haml/erb/action_view'
85
-
86
- haml { render @base, 'haml/templates/action_view' }
87
- erb { render @base, 'haml/erb/action_view' }
88
-
89
- Haml::Template.options[:ugly] = true
90
- render @base, 'haml/templates/action_view_ugly'
91
- haml_ugly { render @base, 'haml/templates/action_view_ugly' }
92
- end
93
- end
94
-
95
- RBench.run(times) do
96
- sass_template = File.read("#{File.dirname(__FILE__)}/sass/templates/complex.sass")
97
-
98
- report("Sass") { Sass::Engine.new(sass_template).render }
99
- end
@@ -1,1805 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
3
- require File.dirname(__FILE__) + '/../test_helper'
4
-
5
- class EngineTest < Test::Unit::TestCase
6
- # A map of erroneous Haml documents to the error messages they should produce.
7
- # The error messages may be arrays;
8
- # if so, the second element should be the line number that should be reported for the error.
9
- # If this isn't provided, the tests will assume the line number should be the last line of the document.
10
- EXCEPTION_MAP = {
11
- "!!!\n a" => "Illegal nesting: nesting within a header command is illegal.",
12
- "a\n b" => "Illegal nesting: nesting within plain text is illegal.",
13
- "/ a\n b" => "Illegal nesting: nesting within a tag that already has content is illegal.",
14
- "% a" => 'Invalid tag: "% a".',
15
- "%p a\n b" => "Illegal nesting: content can't be both given on the same line as %p and nested within it.",
16
- "%p=" => "There's no Ruby code for = to evaluate.",
17
- "%p~" => "There's no Ruby code for ~ to evaluate.",
18
- "~" => "There's no Ruby code for ~ to evaluate.",
19
- "=" => "There's no Ruby code for = to evaluate.",
20
- "%p/\n a" => "Illegal nesting: nesting within a self-closing tag is illegal.",
21
- ":a\n b" => ['Filter "a" is not defined.', 1],
22
- ":a= b" => 'Invalid filter name ":a= b".',
23
- "." => "Illegal element: classes and ids must have values.",
24
- ".#" => "Illegal element: classes and ids must have values.",
25
- ".{} a" => "Illegal element: classes and ids must have values.",
26
- ".() a" => "Illegal element: classes and ids must have values.",
27
- ".= a" => "Illegal element: classes and ids must have values.",
28
- "%p..a" => "Illegal element: classes and ids must have values.",
29
- "%a/ b" => "Self-closing tags can't have content.",
30
- "%p{:a => 'b',\n:c => 'd'}/ e" => ["Self-closing tags can't have content.", 2],
31
- "%p{:a => 'b',\n:c => 'd'}=" => ["There's no Ruby code for = to evaluate.", 2],
32
- "%p.{:a => 'b',\n:c => 'd'} e" => ["Illegal element: classes and ids must have values.", 1],
33
- "%p{:a => 'b',\n:c => 'd',\n:e => 'f'}\n%p/ a" => ["Self-closing tags can't have content.", 4],
34
- "%p{:a => 'b',\n:c => 'd',\n:e => 'f'}\n- raise 'foo'" => ["foo", 4],
35
- "%p{:a => 'b',\n:c => raise('foo'),\n:e => 'f'}" => ["foo", 2],
36
- "%p{:a => 'b',\n:c => 'd',\n:e => raise('foo')}" => ["foo", 3],
37
- " %p foo" => "Indenting at the beginning of the document is illegal.",
38
- " %p foo" => "Indenting at the beginning of the document is illegal.",
39
- "- end" => <<MESSAGE.rstrip,
40
- You don't need to use "- end" in Haml. Un-indent to close a block:
41
- - if foo?
42
- %strong Foo!
43
- - else
44
- Not foo.
45
- %p This line is un-indented, so it isn't part of the "if" block
46
- MESSAGE
47
- " \n\t\n %p foo" => ["Indenting at the beginning of the document is illegal.", 3],
48
- "\n\n %p foo" => ["Indenting at the beginning of the document is illegal.", 3],
49
- "%p\n foo\n foo" => ["Inconsistent indentation: 1 space was used for indentation, but the rest of the document was indented using 2 spaces.", 3],
50
- "%p\n foo\n%p\n foo" => ["Inconsistent indentation: 1 space was used for indentation, but the rest of the document was indented using 2 spaces.", 4],
51
- "%p\n\t\tfoo\n\tfoo" => ["Inconsistent indentation: 1 tab was used for indentation, but the rest of the document was indented using 2 tabs.", 3],
52
- "%p\n foo\n foo" => ["Inconsistent indentation: 3 spaces were used for indentation, but the rest of the document was indented using 2 spaces.", 3],
53
- "%p\n foo\n %p\n bar" => ["Inconsistent indentation: 3 spaces were used for indentation, but the rest of the document was indented using 2 spaces.", 4],
54
- "%p\n :plain\n bar\n \t baz" => ['Inconsistent indentation: " \t " was used for indentation, but the rest of the document was indented using 2 spaces.', 4],
55
- "%p\n foo\n%p\n bar" => ["The line was indented 2 levels deeper than the previous line.", 4],
56
- "%p\n foo\n %p\n bar" => ["The line was indented 3 levels deeper than the previous line.", 4],
57
- "%p\n \tfoo" => ["Indentation can't use both tabs and spaces.", 2],
58
- "%p(" => "Invalid attribute list: \"(\".",
59
- "%p(foo=\nbar)" => ["Invalid attribute list: \"(foo=\".", 1],
60
- "%p(foo=)" => "Invalid attribute list: \"(foo=)\".",
61
- "%p(foo 'bar')" => "Invalid attribute list: \"(foo 'bar')\".",
62
- "%p(foo 'bar'\nbaz='bang')" => ["Invalid attribute list: \"(foo 'bar'\".", 1],
63
- "%p(foo='bar'\nbaz 'bang'\nbip='bop')" => ["Invalid attribute list: \"(foo='bar' baz 'bang'\".", 2],
64
- "%p{:foo => 'bar' :bar => 'baz'}" => :compile,
65
- "%p{:foo => }" => :compile,
66
- "%p{=> 'bar'}" => :compile,
67
- "%p{:foo => 'bar}" => :compile,
68
- "%p{'foo => 'bar'}" => :compile,
69
- "%p{:foo => 'bar\"}" => :compile,
70
-
71
- # Regression tests
72
- "- raise 'foo'\n\n\n\nbar" => ["foo", 1],
73
- "= 'foo'\n-raise 'foo'" => ["foo", 2],
74
- "\n\n\n- raise 'foo'" => ["foo", 4],
75
- "%p foo |\n bar |\n baz |\nbop\n- raise 'foo'" => ["foo", 5],
76
- "foo\n\n\n bar" => ["Illegal nesting: nesting within plain text is illegal.", 4],
77
- "%p/\n\n bar" => ["Illegal nesting: nesting within a self-closing tag is illegal.", 3],
78
- "%p foo\n\n bar" => ["Illegal nesting: content can't be both given on the same line as %p and nested within it.", 3],
79
- "/ foo\n\n bar" => ["Illegal nesting: nesting within a tag that already has content is illegal.", 3],
80
- "!!!\n\n bar" => ["Illegal nesting: nesting within a header command is illegal.", 3],
81
- "foo\n:ruby\n 1\n 2\n 3\n- raise 'foo'" => ["foo", 6],
82
- "foo\n:erb\n 1\n 2\n 3\n- raise 'foo'" => ["foo", 6],
83
- "foo\n:plain\n 1\n 2\n 3\n- raise 'foo'" => ["foo", 6],
84
- "foo\n:plain\n 1\n 2\n 3\n4\n- raise 'foo'" => ["foo", 7],
85
- "foo\n:plain\n 1\n 2\n 3\#{''}\n- raise 'foo'" => ["foo", 6],
86
- "foo\n:plain\n 1\n 2\n 3\#{''}\n4\n- raise 'foo'" => ["foo", 7],
87
- "foo\n:plain\n 1\n 2\n \#{raise 'foo'}" => ["foo", 5],
88
- "= raise 'foo'\nfoo\nbar\nbaz\nbang" => ["foo", 1],
89
- "- case 1\n\n- when 1\n - raise 'foo'" => ["foo", 4],
90
- }
91
-
92
- User = Struct.new('User', :id)
93
- class CustomHamlClass < Struct.new(:id)
94
- def haml_object_ref
95
- "my_thing"
96
- end
97
- end
98
-
99
- def render(text, options = {}, &block)
100
- scope = options.delete(:scope) || Object.new
101
- locals = options.delete(:locals) || {}
102
- engine(text, options).to_html(scope, locals, &block)
103
- end
104
-
105
- def engine(text, options = {})
106
- unless options[:filename]
107
- # use caller method name as fake filename. useful for debugging
108
- i = -1
109
- caller[i+=1] =~ /`(.+?)'/ until $1 and $1.index('test_') == 0
110
- options[:filename] = "(#{$1})"
111
- end
112
- Haml::Engine.new(text, options)
113
- end
114
-
115
- def setup
116
- return if Haml::Util.ruby1_8?
117
- @old_default_internal = Encoding.default_internal
118
- Encoding.default_internal = nil
119
- end
120
-
121
- def teardown
122
- return if Haml::Util.ruby1_8?
123
- Encoding.default_internal = @old_default_internal
124
- end
125
-
126
- def test_empty_render
127
- assert_equal "", render("")
128
- end
129
-
130
- def test_flexible_tabulation
131
- assert_equal("<p>\n foo\n</p>\n<q>\n bar\n <a>\n baz\n </a>\n</q>\n",
132
- render("%p\n foo\n%q\n bar\n %a\n baz"))
133
- assert_equal("<p>\n foo\n</p>\n<q>\n bar\n <a>\n baz\n </a>\n</q>\n",
134
- render("%p\n\tfoo\n%q\n\tbar\n\t%a\n\t\tbaz"))
135
- assert_equal("<p>\n \t \t bar\n baz\n</p>\n",
136
- render("%p\n :plain\n \t \t bar\n baz"))
137
- end
138
-
139
- def test_empty_render_should_remain_empty
140
- assert_equal('', render(''))
141
- end
142
-
143
- def test_attributes_should_render_correctly
144
- assert_equal("<div class='atlantis' style='ugly'></div>", render(".atlantis{:style => 'ugly'}").chomp)
145
- end
146
-
147
- def test_css_id_as_attribute_should_be_appended_with_underscore
148
- assert_equal("<div id='my_id_1'></div>", render("#my_id{:id => '1'}").chomp)
149
- assert_equal("<div id='my_id_1'></div>", render("#my_id{:id => 1}").chomp)
150
- end
151
-
152
- def test_ruby_code_should_work_inside_attributes
153
- author = 'hcatlin'
154
- assert_equal("<p class='3'>foo</p>", render("%p{:class => 1+2} foo").chomp)
155
- end
156
-
157
- def test_class_attr_with_array
158
- assert_equal("<p class='a b'>foo</p>\n", render("%p{:class => %w[a b]} foo")) # basic
159
- assert_equal("<p class='a b css'>foo</p>\n", render("%p.css{:class => %w[a b]} foo")) # merge with css
160
- assert_equal("<p class='b css'>foo</p>\n", render("%p.css{:class => %w[css b]} foo")) # merge uniquely
161
- assert_equal("<p class='a b c d'>foo</p>\n", render("%p{:class => [%w[a b], %w[c d]]} foo")) # flatten
162
- assert_equal("<p class='a b'>foo</p>\n", render("%p{:class => [:a, :b] } foo")) # stringify
163
- assert_equal("<p>foo</p>\n", render("%p{:class => [nil, false] } foo")) # strip falsey
164
- assert_equal("<p class='a'>foo</p>\n", render("%p{:class => :a} foo")) # single stringify
165
- assert_equal("<p>foo</p>\n", render("%p{:class => false} foo")) # single falsey
166
- assert_equal("<p class='a b html'>foo</p>\n", render("%p(class='html'){:class => %w[a b]} foo")) # html attrs
167
- end
168
-
169
- def test_id_attr_with_array
170
- assert_equal("<p id='a_b'>foo</p>\n", render("%p{:id => %w[a b]} foo")) # basic
171
- assert_equal("<p id='css_a_b'>foo</p>\n", render("%p#css{:id => %w[a b]} foo")) # merge with css
172
- assert_equal("<p id='a_b_c_d'>foo</p>\n", render("%p{:id => [%w[a b], %w[c d]]} foo")) # flatten
173
- assert_equal("<p id='a_b'>foo</p>\n", render("%p{:id => [:a, :b] } foo")) # stringify
174
- assert_equal("<p>foo</p>\n", render("%p{:id => [nil, false] } foo")) # strip falsey
175
- assert_equal("<p id='a'>foo</p>\n", render("%p{:id => :a} foo")) # single stringify
176
- assert_equal("<p>foo</p>\n", render("%p{:id => false} foo")) # single falsey
177
- assert_equal("<p id='html_a_b'>foo</p>\n", render("%p(id='html'){:id => %w[a b]} foo")) # html attrs
178
- end
179
-
180
- def test_colon_in_class_attr
181
- assert_equal("<p class='foo:bar' />\n", render("%p.foo:bar/"))
182
- end
183
-
184
- def test_colon_in_id_attr
185
- assert_equal("<p id='foo:bar' />\n", render("%p#foo:bar/"))
186
- end
187
-
188
- def test_dynamic_attributes_with_no_content
189
- assert_equal(<<HTML, render(<<HAML))
190
- <p>
191
- <a href='http://haml-lang.com'></a>
192
- </p>
193
- HTML
194
- %p
195
- %a{:href => "http://" + "haml-lang.com"}
196
- HAML
197
- end
198
-
199
- def test_attributes_with_to_s
200
- assert_equal(<<HTML, render(<<HAML))
201
- <p id='foo_2'></p>
202
- <p class='2 foo'></p>
203
- <p blaz='2'></p>
204
- <p 2='2'></p>
205
- HTML
206
- %p#foo{:id => 1+1}
207
- %p.foo{:class => 1+1}
208
- %p{:blaz => 1+1}
209
- %p{(1+1) => 1+1}
210
- HAML
211
- end
212
-
213
- def test_nil_should_render_empty_tag
214
- assert_equal("<div class='no_attributes'></div>",
215
- render(".no_attributes{:nil => nil}").chomp)
216
- end
217
-
218
- def test_strings_should_get_stripped_inside_tags
219
- assert_equal("<div class='stripped'>This should have no spaces in front of it</div>",
220
- render(".stripped This should have no spaces in front of it").chomp)
221
- end
222
-
223
- def test_one_liner_should_be_one_line
224
- assert_equal("<p>Hello</p>", render('%p Hello').chomp)
225
- end
226
-
227
- def test_one_liner_with_newline_shouldnt_be_one_line
228
- assert_equal("<p>\n foo\n bar\n</p>", render('%p= "foo\nbar"').chomp)
229
- end
230
-
231
- def test_multi_render
232
- engine = engine("%strong Hi there!")
233
- assert_equal("<strong>Hi there!</strong>\n", engine.to_html)
234
- assert_equal("<strong>Hi there!</strong>\n", engine.to_html)
235
- assert_equal("<strong>Hi there!</strong>\n", engine.to_html)
236
- end
237
-
238
- def test_interpolation
239
- assert_equal("<p>Hello World</p>\n", render('%p Hello #{who}', :locals => {:who => 'World'}))
240
- assert_equal("<p>\n Hello World\n</p>\n", render("%p\n Hello \#{who}", :locals => {:who => 'World'}))
241
- end
242
-
243
- def test_interpolation_in_the_middle_of_a_string
244
- assert_equal("\"title 'Title'. \"\n",
245
- render("\"title '\#{\"Title\"}'. \""))
246
- end
247
-
248
- def test_interpolation_at_the_beginning_of_a_line
249
- assert_equal("<p>2</p>\n", render('%p #{1 + 1}'))
250
- assert_equal("<p>\n 2\n</p>\n", render("%p\n \#{1 + 1}"))
251
- end
252
-
253
- def test_escaped_interpolation
254
- assert_equal("<p>Foo &amp; Bar & Baz</p>\n", render('%p& Foo #{"&"} Bar & Baz'))
255
- end
256
-
257
- def test_nil_tag_value_should_render_as_empty
258
- assert_equal("<p></p>\n", render("%p= nil"))
259
- end
260
-
261
- def test_tag_with_failed_if_should_render_as_empty
262
- assert_equal("<p></p>\n", render("%p= 'Hello' if false"))
263
- end
264
-
265
- def test_static_attributes_with_empty_attr
266
- assert_equal("<img alt='' src='/foo.png' />\n", render("%img{:src => '/foo.png', :alt => ''}"))
267
- end
268
-
269
- def test_dynamic_attributes_with_empty_attr
270
- assert_equal("<img alt='' src='/foo.png' />\n", render("%img{:width => nil, :src => '/foo.png', :alt => String.new}"))
271
- end
272
-
273
- def test_attribute_hash_with_newlines
274
- assert_equal("<p a='b' c='d'>foop</p>\n", render("%p{:a => 'b',\n :c => 'd'} foop"))
275
- assert_equal("<p a='b' c='d'>\n foop\n</p>\n", render("%p{:a => 'b',\n :c => 'd'}\n foop"))
276
- assert_equal("<p a='b' c='d' />\n", render("%p{:a => 'b',\n :c => 'd'}/"))
277
- assert_equal("<p a='b' c='d' e='f'></p>\n", render("%p{:a => 'b',\n :c => 'd',\n :e => 'f'}"))
278
- end
279
-
280
- def test_attr_hashes_not_modified
281
- hash = {:color => 'red'}
282
- assert_equal(<<HTML, render(<<HAML, :locals => {:hash => hash}))
283
- <div color='red'></div>
284
- <div class='special' color='red'></div>
285
- <div color='red'></div>
286
- HTML
287
- %div{hash}
288
- .special{hash}
289
- %div{hash}
290
- HAML
291
- assert_equal(hash, {:color => 'red'})
292
- end
293
-
294
- def test_end_of_file_multiline
295
- assert_equal("<p>0</p>\n<p>1</p>\n<p>2</p>\n", render("- for i in (0...3)\n %p= |\n i |"))
296
- end
297
-
298
- def test_cr_newline
299
- assert_equal("<p>foo</p>\n<p>bar</p>\n<p>baz</p>\n<p>boom</p>\n", render("%p foo\r%p bar\r\n%p baz\n\r%p boom"))
300
- end
301
-
302
- def test_textareas
303
- assert_equal("<textarea>Foo&#x000A; bar&#x000A; baz</textarea>\n",
304
- render('%textarea= "Foo\n bar\n baz"'))
305
-
306
- assert_equal("<pre>Foo&#x000A; bar&#x000A; baz</pre>\n",
307
- render('%pre= "Foo\n bar\n baz"'))
308
-
309
- assert_equal("<textarea>#{'a' * 100}</textarea>\n",
310
- render("%textarea #{'a' * 100}"))
311
-
312
- assert_equal("<p>\n <textarea>Foo\n Bar\n Baz</textarea>\n</p>\n", render(<<SOURCE))
313
- %p
314
- %textarea
315
- Foo
316
- Bar
317
- Baz
318
- SOURCE
319
- end
320
-
321
- def test_pre_code
322
- assert_equal(<<HTML, render(<<HAML))
323
- <pre><code>Foo&#x000A; bar&#x000A; baz</code></pre>
324
- HTML
325
- %pre
326
- %code
327
- :preserve
328
- Foo
329
- bar
330
- baz
331
- HAML
332
- end
333
-
334
- def test_boolean_attributes
335
- assert_equal("<p bar baz='true' foo='bar'></p>\n",
336
- render("%p{:foo => 'bar', :bar => true, :baz => 'true'}", :format => :html4))
337
- assert_equal("<p bar='bar' baz='true' foo='bar'></p>\n",
338
- render("%p{:foo => 'bar', :bar => true, :baz => 'true'}", :format => :xhtml))
339
-
340
- assert_equal("<p baz='false' foo='bar'></p>\n",
341
- render("%p{:foo => 'bar', :bar => false, :baz => 'false'}", :format => :html4))
342
- assert_equal("<p baz='false' foo='bar'></p>\n",
343
- render("%p{:foo => 'bar', :bar => false, :baz => 'false'}", :format => :xhtml))
344
- end
345
-
346
- def test_both_whitespace_nukes_work_together
347
- assert_equal(<<RESULT, render(<<SOURCE))
348
- <p><q>Foo
349
- Bar</q></p>
350
- RESULT
351
- %p
352
- %q><= "Foo\\nBar"
353
- SOURCE
354
- end
355
-
356
- def test_nil_option
357
- assert_equal("<p foo='bar'></p>\n", render('%p{:foo => "bar"}', :attr_wrapper => nil))
358
- end
359
-
360
- # Regression tests
361
-
362
- def test_whitespace_nuke_with_both_newlines
363
- assert_equal("<p>foo</p>\n", render('%p<= "\nfoo\n"'))
364
- assert_equal(<<HTML, render(<<HAML))
365
- <p>
366
- <p>foo</p>
367
- </p>
368
- HTML
369
- %p
370
- %p<= "\\nfoo\\n"
371
- HAML
372
- end
373
-
374
- def test_whitespace_nuke_with_tags_and_else
375
- assert_equal(<<HTML, render(<<HAML))
376
- <a>
377
- <b>foo</b>
378
- </a>
379
- HTML
380
- %a
381
- %b<
382
- - if false
383
- = "foo"
384
- - else
385
- foo
386
- HAML
387
-
388
- assert_equal(<<HTML, render(<<HAML))
389
- <a>
390
- <b>
391
- foo
392
- </b>
393
- </a>
394
- HTML
395
- %a
396
- %b
397
- - if false
398
- = "foo"
399
- - else
400
- foo
401
- HAML
402
- end
403
-
404
- def test_outer_whitespace_nuke_with_empty_script
405
- assert_equal(<<HTML, render(<<HAML))
406
- <p>
407
- foo<a></a></p>
408
- HTML
409
- %p
410
- foo
411
- = " "
412
- %a>
413
- HAML
414
- end
415
-
416
- def test_both_case_indentation_work_with_deeply_nested_code
417
- result = <<RESULT
418
- <h2>
419
- other
420
- </h2>
421
- RESULT
422
- assert_equal(result, render(<<HAML))
423
- - case 'other'
424
- - when 'test'
425
- %h2
426
- hi
427
- - when 'other'
428
- %h2
429
- other
430
- HAML
431
- assert_equal(result, render(<<HAML))
432
- - case 'other'
433
- - when 'test'
434
- %h2
435
- hi
436
- - when 'other'
437
- %h2
438
- other
439
- HAML
440
- end
441
-
442
- def test_equals_block_with_ugly
443
- assert_equal("foo\n", render(<<HAML, :ugly => true))
444
- = capture_haml do
445
- foo
446
- HAML
447
- end
448
-
449
- def test_plain_equals_with_ugly
450
- assert_equal("foo\nbar\n", render(<<HAML, :ugly => true))
451
- = "foo"
452
- bar
453
- HAML
454
- end
455
-
456
- def test_inline_if
457
- assert_equal(<<HTML, render(<<HAML))
458
- <p>One</p>
459
- <p></p>
460
- <p>Three</p>
461
- HTML
462
- - for name in ["One", "Two", "Three"]
463
- %p= name unless name == "Two"
464
- HAML
465
- end
466
-
467
- def test_end_with_method_call
468
- assert_equal(<<HTML, render(<<HAML))
469
- 2|3|4
470
- b-a-r
471
- HTML
472
- = [1, 2, 3].map do |i|
473
- - i + 1
474
- - end.join("|")
475
- = "bar".gsub(/./) do |s|
476
- - s + "-"
477
- - end.gsub(/-$/) do |s|
478
- - ''
479
- HAML
480
- end
481
-
482
- def test_nested_end_with_method_call
483
- assert_equal(<<HTML, render(<<HAML))
484
- <p>
485
- 2|3|4
486
- b-a-r
487
- </p>
488
- HTML
489
- %p
490
- = [1, 2, 3].map do |i|
491
- - i + 1
492
- - end.join("|")
493
- = "bar".gsub(/./) do |s|
494
- - s + "-"
495
- - end.gsub(/-$/) do |s|
496
- - ''
497
- HAML
498
- end
499
-
500
- def test_silent_end_with_stuff
501
- assert_equal(<<HTML, render(<<HAML))
502
- e
503
- d
504
- c
505
- b
506
- a
507
- HTML
508
- - str = "abcde"
509
- - if true
510
- = str.slice!(-1).chr
511
- - end until str.empty?
512
- HAML
513
-
514
- assert_equal(<<HTML, render(<<HAML))
515
- <p>hi!</p>
516
- HTML
517
- - if true
518
- %p hi!
519
- - end if "foo".gsub(/f/) do
520
- - "z"
521
- - end + "bar"
522
- HAML
523
- end
524
-
525
- def test_multiline_with_colon_after_filter
526
- assert_equal(<<HTML, render(<<HAML))
527
- Foo
528
- Bar
529
- HTML
530
- :plain
531
- Foo
532
- = { :a => "Bar", |
533
- :b => "Baz" }[:a] |
534
- HAML
535
- assert_equal(<<HTML, render(<<HAML))
536
-
537
- Bar
538
- HTML
539
- :plain
540
- = { :a => "Bar", |
541
- :b => "Baz" }[:a] |
542
- HAML
543
- end
544
-
545
- def test_multiline_in_filter
546
- assert_equal(<<HTML, render(<<HAML))
547
- Foo |
548
- Bar |
549
- Baz
550
- HTML
551
- :plain
552
- Foo |
553
- Bar |
554
- Baz
555
- HAML
556
- end
557
-
558
- def test_curly_brace
559
- assert_equal(<<HTML, render(<<HAML))
560
- Foo { Bar
561
- HTML
562
- == Foo { Bar
563
- HAML
564
- end
565
-
566
- def test_escape_html
567
- html = <<HTML
568
- &amp;
569
- &
570
- &amp;
571
- HTML
572
-
573
- assert_equal(html, render(<<HAML, :escape_html => true))
574
- &= "&"
575
- != "&"
576
- = "&"
577
- HAML
578
-
579
- assert_equal(html, render(<<HAML, :escape_html => true))
580
- &~ "&"
581
- !~ "&"
582
- ~ "&"
583
- HAML
584
-
585
- assert_equal(html, render(<<HAML, :escape_html => true))
586
- & \#{"&"}
587
- ! \#{"&"}
588
- \#{"&"}
589
- HAML
590
-
591
- assert_equal(html, render(<<HAML, :escape_html => true))
592
- &== \#{"&"}
593
- !== \#{"&"}
594
- == \#{"&"}
595
- HAML
596
-
597
- tag_html = <<HTML
598
- <p>&amp;</p>
599
- <p>&</p>
600
- <p>&amp;</p>
601
- HTML
602
-
603
- assert_equal(tag_html, render(<<HAML, :escape_html => true))
604
- %p&= "&"
605
- %p!= "&"
606
- %p= "&"
607
- HAML
608
-
609
- assert_equal(tag_html, render(<<HAML, :escape_html => true))
610
- %p&~ "&"
611
- %p!~ "&"
612
- %p~ "&"
613
- HAML
614
-
615
- assert_equal(tag_html, render(<<HAML, :escape_html => true))
616
- %p& \#{"&"}
617
- %p! \#{"&"}
618
- %p \#{"&"}
619
- HAML
620
-
621
- assert_equal(tag_html, render(<<HAML, :escape_html => true))
622
- %p&== \#{"&"}
623
- %p!== \#{"&"}
624
- %p== \#{"&"}
625
- HAML
626
- end
627
-
628
- def test_new_attrs_with_hash
629
- assert_equal("<a href='#'></a>\n", render('%a(href="#")'))
630
- end
631
-
632
- def test_javascript_filter_with_dynamic_interp_and_escape_html
633
- assert_equal(<<HTML, render(<<HAML, :escape_html => true))
634
- <script type='text/javascript'>
635
- //<![CDATA[
636
- & < > &
637
- //]]>
638
- </script>
639
- HTML
640
- :javascript
641
- & < > \#{"&"}
642
- HAML
643
- end
644
-
645
- def test_erb_filter_with_multiline_expr
646
- assert_equal(<<HTML, render(<<HAML))
647
- foobarbaz
648
- HTML
649
- :erb
650
- <%= "foo" +
651
- "bar" +
652
- "baz" %>
653
- HAML
654
- end
655
-
656
- def test_silent_script_with_hyphen_case
657
- assert_equal("", render("- 'foo-case-bar-case'"))
658
- end
659
-
660
- def test_silent_script_with_hyphen_end
661
- assert_equal("", render("- 'foo-end-bar-end'"))
662
- end
663
-
664
- def test_silent_script_with_hyphen_end_and_block
665
- assert_equal(<<HTML, render(<<HAML))
666
- <p>foo-end</p>
667
- <p>bar-end</p>
668
- HTML
669
- - ("foo-end-bar-end".gsub(/\\w+-end/) do |s|
670
- %p= s
671
- - end; nil)
672
- HAML
673
- end
674
-
675
- def test_if_without_content_and_else
676
- assert_equal(<<HTML, render(<<HAML))
677
- foo
678
- HTML
679
- - if false
680
- - else
681
- foo
682
- HAML
683
-
684
- assert_equal(<<HTML, render(<<HAML))
685
- foo
686
- HTML
687
- - if true
688
- - if false
689
- - else
690
- foo
691
- HAML
692
- end
693
-
694
- def test_html_attributes_with_hash
695
- assert_equal("<a href='#' rel='top'>Foo</a>\n",
696
- render('%a(href="#" rel="top") Foo'))
697
- assert_equal("<a href='#'>Foo</a>\n",
698
- render('%a(href="#") #{"Foo"}'))
699
-
700
- assert_equal("<a href='#\"'></a>\n", render('%a(href="#\\"")'))
701
- end
702
-
703
- def test_filter_with_newline_and_interp
704
- assert_equal(<<HTML, render(<<HAML))
705
- \\n
706
- HTML
707
- :plain
708
- \\n\#{""}
709
- HAML
710
- end
711
-
712
- def test_case_assigned_to_var
713
- assert_equal(<<HTML, render(<<HAML))
714
- bar
715
- HTML
716
- - var = case 12
717
- - when 1; "foo"
718
- - when 12; "bar"
719
- = var
720
- HAML
721
-
722
- assert_equal(<<HTML, render(<<HAML))
723
- bar
724
- HTML
725
- - var = case 12
726
- - when 1
727
- - "foo"
728
- - when 12
729
- - "bar"
730
- = var
731
- HAML
732
-
733
- assert_equal(<<HTML, render(<<HAML))
734
- bar
735
- HTML
736
- - var = case 12
737
- - when 1
738
- - "foo"
739
- - when 12
740
- - "bar"
741
- = var
742
- HAML
743
- end
744
-
745
- def test_if_assigned_to_var
746
- assert_equal(<<HTML, render(<<HAML))
747
- foo
748
- HTML
749
- - var = if false
750
- - else
751
- - "foo"
752
- = var
753
- HAML
754
-
755
- assert_equal(<<HTML, render(<<HAML))
756
- foo
757
- HTML
758
- - var = if false
759
- - elsif 12
760
- - "foo"
761
- - elsif 14; "bar"
762
- - else
763
- - "baz"
764
- = var
765
- HAML
766
-
767
- assert_equal(<<HTML, render(<<HAML))
768
- foo
769
- HTML
770
- - var = if false
771
- - "bar"
772
- - else
773
- - "foo"
774
- = var
775
- HAML
776
- end
777
-
778
- def test_case_with_newline_after_case
779
- assert_equal(<<HTML, render(<<HAML))
780
- foo
781
- HTML
782
- - case 1
783
-
784
- - when 1
785
- foo
786
- - when 2
787
- bar
788
- HAML
789
-
790
- assert_equal(<<HTML, render(<<HAML))
791
- bar
792
- HTML
793
- - case 2
794
-
795
- - when 1
796
- foo
797
- - when 2
798
- bar
799
- HAML
800
- end
801
-
802
- def test_escape_html_with_interpolated_if_statement
803
- assert_equal(<<HTML, render(<<HAML, :escape_html => true))
804
- foo,
805
- HTML
806
- foo\#{"," if true}
807
- HAML
808
- end
809
-
810
- # HTML escaping tests
811
-
812
- def test_ampersand_equals_should_escape
813
- assert_equal("<p>\n foo &amp; bar\n</p>\n", render("%p\n &= 'foo & bar'", :escape_html => false))
814
- end
815
-
816
- def test_ampersand_equals_inline_should_escape
817
- assert_equal("<p>foo &amp; bar</p>\n", render("%p&= 'foo & bar'", :escape_html => false))
818
- end
819
-
820
- def test_ampersand_equals_should_escape_before_preserve
821
- assert_equal("<textarea>foo&#x000A;bar</textarea>\n", render('%textarea&= "foo\nbar"', :escape_html => false))
822
- end
823
-
824
- def test_bang_equals_should_not_escape
825
- assert_equal("<p>\n foo & bar\n</p>\n", render("%p\n != 'foo & bar'", :escape_html => true))
826
- end
827
-
828
- def test_bang_equals_inline_should_not_escape
829
- assert_equal("<p>foo & bar</p>\n", render("%p!= 'foo & bar'", :escape_html => true))
830
- end
831
-
832
- def test_static_attributes_should_be_escaped
833
- assert_equal("<img class='atlantis' style='ugly&amp;stupid' />\n",
834
- render("%img.atlantis{:style => 'ugly&stupid'}"))
835
- assert_equal("<div class='atlantis' style='ugly&amp;stupid'>foo</div>\n",
836
- render(".atlantis{:style => 'ugly&stupid'} foo"))
837
- assert_equal("<p class='atlantis' style='ugly&amp;stupid'>foo</p>\n",
838
- render("%p.atlantis{:style => 'ugly&stupid'}= 'foo'"))
839
- assert_equal("<p class='atlantis' style='ugly&#x000A;stupid'></p>\n",
840
- render("%p.atlantis{:style => \"ugly\\nstupid\"}"))
841
- end
842
-
843
- def test_dynamic_attributes_should_be_escaped
844
- assert_equal("<img alt='' src='&amp;foo.png' />\n",
845
- render("%img{:width => nil, :src => '&foo.png', :alt => String.new}"))
846
- assert_equal("<p alt='' src='&amp;foo.png'>foo</p>\n",
847
- render("%p{:width => nil, :src => '&foo.png', :alt => String.new} foo"))
848
- assert_equal("<div alt='' src='&amp;foo.png'>foo</div>\n",
849
- render("%div{:width => nil, :src => '&foo.png', :alt => String.new}= 'foo'"))
850
- assert_equal("<img alt='' src='foo&#x000A;.png' />\n",
851
- render("%img{:width => nil, :src => \"foo\\n.png\", :alt => String.new}"))
852
- end
853
-
854
- def test_string_double_equals_should_be_esaped
855
- assert_equal("<p>4&&lt;</p>\n", render("%p== \#{2+2}&\#{'<'}", :escape_html => true))
856
- assert_equal("<p>4&<</p>\n", render("%p== \#{2+2}&\#{'<'}", :escape_html => false))
857
- end
858
-
859
- def test_escaped_inline_string_double_equals
860
- assert_equal("<p>4&&lt;</p>\n", render("%p&== \#{2+2}&\#{'<'}", :escape_html => true))
861
- assert_equal("<p>4&&lt;</p>\n", render("%p&== \#{2+2}&\#{'<'}", :escape_html => false))
862
- end
863
-
864
- def test_unescaped_inline_string_double_equals
865
- assert_equal("<p>4&<</p>\n", render("%p!== \#{2+2}&\#{'<'}", :escape_html => true))
866
- assert_equal("<p>4&<</p>\n", render("%p!== \#{2+2}&\#{'<'}", :escape_html => false))
867
- end
868
-
869
- def test_escaped_string_double_equals
870
- assert_equal("<p>\n 4&&lt;\n</p>\n", render("%p\n &== \#{2+2}&\#{'<'}", :escape_html => true))
871
- assert_equal("<p>\n 4&&lt;\n</p>\n", render("%p\n &== \#{2+2}&\#{'<'}", :escape_html => false))
872
- end
873
-
874
- def test_unescaped_string_double_equals
875
- assert_equal("<p>\n 4&<\n</p>\n", render("%p\n !== \#{2+2}&\#{'<'}", :escape_html => true))
876
- assert_equal("<p>\n 4&<\n</p>\n", render("%p\n !== \#{2+2}&\#{'<'}", :escape_html => false))
877
- end
878
-
879
- def test_string_interpolation_should_be_esaped
880
- assert_equal("<p>4&&lt;</p>\n", render("%p \#{2+2}&\#{'<'}", :escape_html => true))
881
- assert_equal("<p>4&<</p>\n", render("%p \#{2+2}&\#{'<'}", :escape_html => false))
882
- end
883
-
884
- def test_escaped_inline_string_interpolation
885
- assert_equal("<p>4&&lt;</p>\n", render("%p& \#{2+2}&\#{'<'}", :escape_html => true))
886
- assert_equal("<p>4&&lt;</p>\n", render("%p& \#{2+2}&\#{'<'}", :escape_html => false))
887
- end
888
-
889
- def test_unescaped_inline_string_interpolation
890
- assert_equal("<p>4&<</p>\n", render("%p! \#{2+2}&\#{'<'}", :escape_html => true))
891
- assert_equal("<p>4&<</p>\n", render("%p! \#{2+2}&\#{'<'}", :escape_html => false))
892
- end
893
-
894
- def test_escaped_string_interpolation
895
- assert_equal("<p>\n 4&&lt;\n</p>\n", render("%p\n & \#{2+2}&\#{'<'}", :escape_html => true))
896
- assert_equal("<p>\n 4&&lt;\n</p>\n", render("%p\n & \#{2+2}&\#{'<'}", :escape_html => false))
897
- end
898
-
899
- def test_unescaped_string_interpolation
900
- assert_equal("<p>\n 4&<\n</p>\n", render("%p\n ! \#{2+2}&\#{'<'}", :escape_html => true))
901
- assert_equal("<p>\n 4&<\n</p>\n", render("%p\n ! \#{2+2}&\#{'<'}", :escape_html => false))
902
- end
903
-
904
- def test_scripts_should_respect_escape_html_option
905
- assert_equal("<p>\n foo &amp; bar\n</p>\n", render("%p\n = 'foo & bar'", :escape_html => true))
906
- assert_equal("<p>\n foo & bar\n</p>\n", render("%p\n = 'foo & bar'", :escape_html => false))
907
- end
908
-
909
- def test_inline_scripts_should_respect_escape_html_option
910
- assert_equal("<p>foo &amp; bar</p>\n", render("%p= 'foo & bar'", :escape_html => true))
911
- assert_equal("<p>foo & bar</p>\n", render("%p= 'foo & bar'", :escape_html => false))
912
- end
913
-
914
- def test_script_ending_in_comment_should_render_when_html_is_escaped
915
- assert_equal("foo&amp;bar\n", render("= 'foo&bar' #comment", :escape_html => true))
916
- end
917
-
918
- def test_script_with_if_shouldnt_output
919
- assert_equal(<<HTML, render(<<HAML))
920
- <p>foo</p>
921
- <p></p>
922
- HTML
923
- %p= "foo"
924
- %p= "bar" if false
925
- HAML
926
- end
927
-
928
- # Options tests
929
-
930
- def test_filename_and_line
931
- begin
932
- render("\n\n = abc", :filename => 'test', :line => 2)
933
- rescue Exception => e
934
- assert_kind_of Haml::SyntaxError, e
935
- assert_match(/test:4/, e.backtrace.first)
936
- end
937
-
938
- begin
939
- render("\n\n= 123\n\n= nil[]", :filename => 'test', :line => 2)
940
- rescue Exception => e
941
- assert_kind_of NoMethodError, e
942
- assert_match(/test:6/, e.backtrace.first)
943
- end
944
- end
945
-
946
- def test_stop_eval
947
- assert_equal("", render("= 'Hello'", :suppress_eval => true))
948
- assert_equal("", render("- haml_concat 'foo'", :suppress_eval => true))
949
- assert_equal("<div id='foo' yes='no' />\n", render("#foo{:yes => 'no'}/", :suppress_eval => true))
950
- assert_equal("<div id='foo' />\n", render("#foo{:yes => 'no', :call => a_function() }/", :suppress_eval => true))
951
- assert_equal("<div />\n", render("%div[1]/", :suppress_eval => true))
952
- assert_equal("", render(":ruby\n Kernel.puts 'hello'", :suppress_eval => true))
953
- end
954
-
955
- def test_doctypes
956
- assert_equal('<!DOCTYPE html>',
957
- render('!!!', :format => :html5).strip)
958
- assert_equal('<!DOCTYPE html>', render('!!! 5').strip)
959
- assert_equal('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
960
- render('!!! strict').strip)
961
- assert_equal('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
962
- render('!!! frameset').strip)
963
- assert_equal('<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">',
964
- render('!!! mobile').strip)
965
- assert_equal('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">',
966
- render('!!! basic').strip)
967
- assert_equal('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
968
- render('!!! transitional').strip)
969
- assert_equal('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
970
- render('!!!').strip)
971
- assert_equal('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',
972
- render('!!! strict', :format => :html4).strip)
973
- assert_equal('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">',
974
- render('!!! frameset', :format => :html4).strip)
975
- assert_equal('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
976
- render('!!! transitional', :format => :html4).strip)
977
- assert_equal('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
978
- render('!!!', :format => :html4).strip)
979
- end
980
-
981
- def test_attr_wrapper
982
- assert_equal("<p strange=*attrs*></p>\n", render("%p{ :strange => 'attrs'}", :attr_wrapper => '*'))
983
- assert_equal("<p escaped='quo\"te'></p>\n", render("%p{ :escaped => 'quo\"te'}", :attr_wrapper => '"'))
984
- assert_equal("<p escaped=\"quo'te\"></p>\n", render("%p{ :escaped => 'quo\\'te'}", :attr_wrapper => '"'))
985
- assert_equal("<p escaped=\"q'uo&quot;te\"></p>\n", render("%p{ :escaped => 'q\\'uo\"te'}", :attr_wrapper => '"'))
986
- assert_equal("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n", render("!!! XML", :attr_wrapper => '"'))
987
- end
988
-
989
- def test_autoclose_option
990
- assert_equal("<flaz foo='bar' />\n", render("%flaz{:foo => 'bar'}", :autoclose => ["flaz"]))
991
- assert_equal(<<HTML, render(<<HAML, :autoclose => [/^flaz/]))
992
- <flaz />
993
- <flaznicate />
994
- <flan></flan>
995
- HTML
996
- %flaz
997
- %flaznicate
998
- %flan
999
- HAML
1000
- end
1001
-
1002
- def test_attrs_parsed_correctly
1003
- assert_equal("<p boom=>biddly='bar =&gt; baz'></p>\n", render("%p{'boom=>biddly' => 'bar => baz'}"))
1004
- assert_equal("<p foo,bar='baz, qux'></p>\n", render("%p{'foo,bar' => 'baz, qux'}"))
1005
- assert_equal("<p escaped='quo&#x000A;te'></p>\n", render("%p{ :escaped => \"quo\\nte\"}"))
1006
- assert_equal("<p escaped='quo4te'></p>\n", render("%p{ :escaped => \"quo\#{2 + 2}te\"}"))
1007
- end
1008
-
1009
- def test_correct_parsing_with_brackets
1010
- assert_equal("<p class='foo'>{tada} foo</p>\n", render("%p{:class => 'foo'} {tada} foo"))
1011
- assert_equal("<p class='foo'>deep {nested { things }}</p>\n", render("%p{:class => 'foo'} deep {nested { things }}"))
1012
- assert_equal("<p class='bar foo'>{a { d</p>\n", render("%p{{:class => 'foo'}, :class => 'bar'} {a { d"))
1013
- assert_equal("<p foo='bar'>a}</p>\n", render("%p{:foo => 'bar'} a}"))
1014
-
1015
- foo = []
1016
- foo[0] = Struct.new('Foo', :id).new
1017
- assert_equal("<p class='struct_foo' id='struct_foo_new'>New User]</p>\n",
1018
- render("%p[foo[0]] New User]", :locals => {:foo => foo}))
1019
- assert_equal("<p class='prefix_struct_foo' id='prefix_struct_foo_new'>New User]</p>\n",
1020
- render("%p[foo[0], :prefix] New User]", :locals => {:foo => foo}))
1021
-
1022
- foo[0].id = 1
1023
- assert_equal("<p class='struct_foo' id='struct_foo_1'>New User]</p>\n",
1024
- render("%p[foo[0]] New User]", :locals => {:foo => foo}))
1025
- assert_equal("<p class='prefix_struct_foo' id='prefix_struct_foo_1'>New User]</p>\n",
1026
- render("%p[foo[0], :prefix] New User]", :locals => {:foo => foo}))
1027
- end
1028
-
1029
- def test_empty_attrs
1030
- assert_equal("<p attr=''>empty</p>\n", render("%p{ :attr => '' } empty"))
1031
- assert_equal("<p attr=''>empty</p>\n", render("%p{ :attr => x } empty", :locals => {:x => ''}))
1032
- end
1033
-
1034
- def test_nil_attrs
1035
- assert_equal("<p>nil</p>\n", render("%p{ :attr => nil } nil"))
1036
- assert_equal("<p>nil</p>\n", render("%p{ :attr => x } nil", :locals => {:x => nil}))
1037
- end
1038
-
1039
- def test_nil_id_with_syntactic_id
1040
- assert_equal("<p id='foo'>nil</p>\n", render("%p#foo{:id => nil} nil"))
1041
- assert_equal("<p id='foo_bar'>nil</p>\n", render("%p#foo{{:id => 'bar'}, :id => nil} nil"))
1042
- assert_equal("<p id='foo_bar'>nil</p>\n", render("%p#foo{{:id => nil}, :id => 'bar'} nil"))
1043
- end
1044
-
1045
- def test_nil_class_with_syntactic_class
1046
- assert_equal("<p class='foo'>nil</p>\n", render("%p.foo{:class => nil} nil"))
1047
- assert_equal("<p class='bar foo'>nil</p>\n", render("%p.bar.foo{:class => nil} nil"))
1048
- assert_equal("<p class='bar foo'>nil</p>\n", render("%p.foo{{:class => 'bar'}, :class => nil} nil"))
1049
- assert_equal("<p class='bar foo'>nil</p>\n", render("%p.foo{{:class => nil}, :class => 'bar'} nil"))
1050
- end
1051
-
1052
- def test_locals
1053
- assert_equal("<p>Paragraph!</p>\n", render("%p= text", :locals => { :text => "Paragraph!" }))
1054
- end
1055
-
1056
- def test_dynamic_attrs_shouldnt_register_as_literal_values
1057
- assert_equal("<p a='b2c'></p>\n", render('%p{:a => "b#{1 + 1}c"}'))
1058
- assert_equal("<p a='b2c'></p>\n", render("%p{:a => 'b' + (1 + 1).to_s + 'c'}"))
1059
- end
1060
-
1061
- def test_dynamic_attrs_with_self_closed_tag
1062
- assert_equal("<a b='2' />\nc\n", render("%a{'b' => 1 + 1}/\n= 'c'\n"))
1063
- end
1064
-
1065
- EXCEPTION_MAP.each do |key, value|
1066
- define_method("test_exception (#{key.inspect})") do
1067
- begin
1068
- render(key, :filename => __FILE__)
1069
- rescue Exception => err
1070
- value = [value] unless value.is_a?(Array)
1071
- expected_message, line_no = value
1072
- line_no ||= key.split("\n").length
1073
-
1074
- if expected_message == :compile
1075
- if Haml::Util.ruby1_8?
1076
- assert_match(/^compile error\n/, err.message, "Line: #{key}")
1077
- else
1078
- assert_match(/^#{Regexp.quote __FILE__}:#{line_no}: syntax error,/, err.message, "Line: #{key}")
1079
- end
1080
- else
1081
- assert_equal(expected_message, err.message, "Line: #{key}")
1082
- end
1083
-
1084
- if Haml::Util.ruby1_8?
1085
- assert_match(/^#{Regexp.escape(__FILE__)}:#{line_no}/, err.backtrace[0], "Line: #{key}")
1086
- end
1087
- else
1088
- assert(false, "Exception not raised for\n#{key}")
1089
- end
1090
- end
1091
- end
1092
-
1093
- def test_exception_line
1094
- render("a\nb\n!!!\n c\nd")
1095
- rescue Haml::SyntaxError => e
1096
- assert_equal("(test_exception_line):4", e.backtrace[0])
1097
- else
1098
- assert(false, '"a\nb\n!!!\n c\nd" doesn\'t produce an exception')
1099
- end
1100
-
1101
- def test_exception
1102
- render("%p\n hi\n %a= undefined\n= 12")
1103
- rescue Exception => e
1104
- assert_match("(test_exception):3", e.backtrace[0])
1105
- else
1106
- # Test failed... should have raised an exception
1107
- assert(false)
1108
- end
1109
-
1110
- def test_compile_error
1111
- render("a\nb\n- fee)\nc")
1112
- rescue Exception => e
1113
- assert_match(/\(test_compile_error\):3: syntax error/i, e.message)
1114
- else
1115
- assert(false,
1116
- '"a\nb\n- fee)\nc" doesn\'t produce an exception!')
1117
- end
1118
-
1119
- def test_unbalanced_brackets
1120
- render('foo #{1 + 5} foo #{6 + 7 bar #{8 + 9}')
1121
- rescue Haml::SyntaxError => e
1122
- assert_equal("Unbalanced brackets.", e.message)
1123
- end
1124
-
1125
- def test_balanced_conditional_comments
1126
- assert_equal("<!--[if !(IE 6)|(IE 7)]> Bracket: ] <![endif]-->\n",
1127
- render("/[if !(IE 6)|(IE 7)] Bracket: ]"))
1128
- end
1129
-
1130
- def test_empty_filter
1131
- assert_equal(<<END, render(':javascript'))
1132
- <script type='text/javascript'>
1133
- //<![CDATA[
1134
-
1135
- //]]>
1136
- </script>
1137
- END
1138
- end
1139
-
1140
- def test_ugly_filter
1141
- assert_equal(<<END, render(":sass\n #foo\n bar: baz", :ugly => true))
1142
- #foo {
1143
- bar: baz; }
1144
- END
1145
- end
1146
-
1147
- def test_css_filter
1148
- assert_equal(<<CSS, render(<<SASS))
1149
- <style type='text/css'>
1150
- /*<![CDATA[*/
1151
- #foo {
1152
- bar: baz; }
1153
- /*]]>*/
1154
- </style>
1155
- CSS
1156
- :css
1157
- #foo {
1158
- bar: baz; }
1159
- SASS
1160
- end
1161
-
1162
- def test_local_assigns_dont_modify_class
1163
- assert_equal("bar\n", render("= foo", :locals => {:foo => 'bar'}))
1164
- assert_equal(nil, defined?(foo))
1165
- end
1166
-
1167
- def test_object_ref_with_nil_id
1168
- user = User.new
1169
- assert_equal("<p class='struct_user' id='struct_user_new'>New User</p>\n",
1170
- render("%p[user] New User", :locals => {:user => user}))
1171
- end
1172
-
1173
- def test_object_ref_before_attrs
1174
- user = User.new 42
1175
- assert_equal("<p class='struct_user' id='struct_user_42' style='width: 100px;'>New User</p>\n",
1176
- render("%p[user]{:style => 'width: 100px;'} New User", :locals => {:user => user}))
1177
- end
1178
-
1179
- def test_object_ref_with_custom_haml_class
1180
- custom = CustomHamlClass.new 42
1181
- assert_equal("<p class='my_thing' id='my_thing_42' style='width: 100px;'>My Thing</p>\n",
1182
- render("%p[custom]{:style => 'width: 100px;'} My Thing", :locals => {:custom => custom}))
1183
- end
1184
-
1185
- def test_non_literal_attributes
1186
- assert_equal("<p a1='foo' a2='bar' a3='baz' />\n",
1187
- render("%p{a2, a1, :a3 => 'baz'}/",
1188
- :locals => {:a1 => {:a1 => 'foo'}, :a2 => {:a2 => 'bar'}}))
1189
- end
1190
-
1191
- def test_render_should_accept_a_binding_as_scope
1192
- string = "This is a string!"
1193
- string.instance_variable_set("@var", "Instance variable")
1194
- b = string.instance_eval do
1195
- var = "Local variable"
1196
- binding
1197
- end
1198
-
1199
- assert_equal("<p>THIS IS A STRING!</p>\n<p>Instance variable</p>\n<p>Local variable</p>\n",
1200
- render("%p= upcase\n%p= @var\n%p= var", :scope => b))
1201
- end
1202
-
1203
- def test_yield_should_work_with_binding
1204
- assert_equal("12\nFOO\n", render("= yield\n= upcase", :scope => "foo".instance_eval{binding}) { 12 })
1205
- end
1206
-
1207
- def test_yield_should_work_with_def_method
1208
- s = "foo"
1209
- engine("= yield\n= upcase").def_method(s, :render)
1210
- assert_equal("12\nFOO\n", s.render { 12 })
1211
- end
1212
-
1213
- def test_def_method_with_module
1214
- engine("= yield\n= upcase").def_method(String, :render_haml)
1215
- assert_equal("12\nFOO\n", "foo".render_haml { 12 })
1216
- end
1217
-
1218
- def test_def_method_locals
1219
- obj = Object.new
1220
- engine("%p= foo\n.bar{:baz => baz}= boom").def_method(obj, :render, :foo, :baz, :boom)
1221
- assert_equal("<p>1</p>\n<div baz='2' class='bar'>3</div>\n", obj.render(:foo => 1, :baz => 2, :boom => 3))
1222
- end
1223
-
1224
- def test_render_proc_locals
1225
- proc = engine("%p= foo\n.bar{:baz => baz}= boom").render_proc(Object.new, :foo, :baz, :boom)
1226
- assert_equal("<p>1</p>\n<div baz='2' class='bar'>3</div>\n", proc[:foo => 1, :baz => 2, :boom => 3])
1227
- end
1228
-
1229
- def test_render_proc_with_binding
1230
- assert_equal("FOO\n", engine("= upcase").render_proc("foo".instance_eval{binding}).call)
1231
- end
1232
-
1233
- def test_haml_buffer_gets_reset_even_with_exception
1234
- scope = Object.new
1235
- render("- raise Haml::Error", :scope => scope)
1236
- assert(false, "Expected exception")
1237
- rescue Exception
1238
- assert_nil(scope.send(:haml_buffer))
1239
- end
1240
-
1241
- def test_def_method_haml_buffer_gets_reset_even_with_exception
1242
- scope = Object.new
1243
- engine("- raise Haml::Error").def_method(scope, :render)
1244
- scope.render
1245
- assert(false, "Expected exception")
1246
- rescue Exception
1247
- assert_nil(scope.send(:haml_buffer))
1248
- end
1249
-
1250
- def test_render_proc_haml_buffer_gets_reset_even_with_exception
1251
- scope = Object.new
1252
- proc = engine("- raise Haml::Error").render_proc(scope)
1253
- proc.call
1254
- assert(false, "Expected exception")
1255
- rescue Exception
1256
- assert_nil(scope.send(:haml_buffer))
1257
- end
1258
-
1259
- def test_ugly_true
1260
- assert_equal("<div id='outer'>\n<div id='inner'>\n<p>hello world</p>\n</div>\n</div>\n",
1261
- render("#outer\n #inner\n %p hello world", :ugly => true))
1262
-
1263
- assert_equal("<p>#{'s' * 75}</p>\n",
1264
- render("%p #{'s' * 75}", :ugly => true))
1265
-
1266
- assert_equal("<p>#{'s' * 75}</p>\n",
1267
- render("%p= 's' * 75", :ugly => true))
1268
- end
1269
-
1270
- def test_auto_preserve_unless_ugly
1271
- assert_equal("<pre>foo&#x000A;bar</pre>\n", render('%pre="foo\nbar"'))
1272
- assert_equal("<pre>foo\nbar</pre>\n", render("%pre\n foo\n bar"))
1273
- assert_equal("<pre>foo\nbar</pre>\n", render('%pre="foo\nbar"', :ugly => true))
1274
- assert_equal("<pre>foo\nbar</pre>\n", render("%pre\n foo\n bar", :ugly => true))
1275
- end
1276
-
1277
- def test_xhtml_output_option
1278
- assert_equal "<p>\n <br />\n</p>\n", render("%p\n %br", :format => :xhtml)
1279
- assert_equal "<a />\n", render("%a/", :format => :xhtml)
1280
- end
1281
-
1282
- def test_arbitrary_output_option
1283
- assert_raise_message(Haml::Error, "Invalid output format :html1") do
1284
- engine("%br", :format => :html1)
1285
- end
1286
- end
1287
-
1288
- def test_static_hashes
1289
- assert_equal("<a b='a =&gt; b'></a>\n", render("%a{:b => 'a => b'}", :suppress_eval => true))
1290
- assert_equal("<a b='a, b'></a>\n", render("%a{:b => 'a, b'}", :suppress_eval => true))
1291
- assert_equal("<a b='a\tb'></a>\n", render('%a{:b => "a\tb"}', :suppress_eval => true))
1292
- assert_equal("<a b='a\#{foo}b'></a>\n", render('%a{:b => "a\\#{foo}b"}', :suppress_eval => true))
1293
- end
1294
-
1295
- def test_dynamic_hashes_with_suppress_eval
1296
- assert_equal("<a></a>\n", render('%a{:b => "a #{1 + 1} b", :c => "d"}', :suppress_eval => true))
1297
- end
1298
-
1299
- def test_utf8_attrs
1300
- assert_equal("<a href='héllo'></a>\n", render("%a{:href => 'héllo'}"))
1301
- assert_equal("<a href='héllo'></a>\n", render("%a(href='héllo')"))
1302
- end
1303
-
1304
- # HTML 4.0
1305
-
1306
- def test_html_has_no_self_closing_tags
1307
- assert_equal "<p>\n <br>\n</p>\n", render("%p\n %br", :format => :html4)
1308
- assert_equal "<br>\n", render("%br/", :format => :html4)
1309
- end
1310
-
1311
- def test_html_renders_empty_node_with_closing_tag
1312
- assert_equal "<div class='foo'></div>\n", render(".foo", :format => :html4)
1313
- end
1314
-
1315
- def test_html_doesnt_add_slash_to_self_closing_tags
1316
- assert_equal "<a>\n", render("%a/", :format => :html4)
1317
- assert_equal "<a foo='2'>\n", render("%a{:foo => 1 + 1}/", :format => :html4)
1318
- assert_equal "<meta>\n", render("%meta", :format => :html4)
1319
- assert_equal "<meta foo='2'>\n", render("%meta{:foo => 1 + 1}", :format => :html4)
1320
- end
1321
-
1322
- def test_html_ignores_xml_prolog_declaration
1323
- assert_equal "", render('!!! XML', :format => :html4)
1324
- end
1325
-
1326
- def test_html_has_different_doctype
1327
- assert_equal %{<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n},
1328
- render('!!!', :format => :html4)
1329
- end
1330
-
1331
- # because anything before the doctype triggers quirks mode in IE
1332
- def test_xml_prolog_and_doctype_dont_result_in_a_leading_whitespace_in_html
1333
- assert_no_match(/^\s+/, render("!!! xml\n!!!", :format => :html4))
1334
- end
1335
-
1336
- # HTML5
1337
- def test_html5_doctype
1338
- assert_equal %{<!DOCTYPE html>\n}, render('!!!', :format => :html5)
1339
- end
1340
-
1341
- # HTML5 custom data attributes
1342
- def test_html5_data_attributes
1343
- assert_equal("<div data-author_id='123' data-biz='baz' data-foo='bar'></div>\n",
1344
- render("%div{:data => {:author_id => 123, :foo => 'bar', :biz => 'baz'}}"))
1345
-
1346
- assert_equal("<div data-one_plus_one='2'></div>\n",
1347
- render("%div{:data => {:one_plus_one => 1+1}}"))
1348
-
1349
- assert_equal("<div data-foo='Here&apos;s a \"quoteful\" string.'></div>\n",
1350
- render(%{%div{:data => {:foo => %{Here's a "quoteful" string.}}}})) #'
1351
- end
1352
-
1353
- def test_html5_data_attributes_with_multiple_defs
1354
- # Should always use the more-explicit attribute
1355
- assert_equal("<div data-foo='second'></div>\n",
1356
- render("%div{:data => {:foo => 'first'}, 'data-foo' => 'second'}"))
1357
- assert_equal("<div data-foo='first'></div>\n",
1358
- render("%div{'data-foo' => 'first', :data => {:foo => 'second'}}"))
1359
- end
1360
-
1361
- def test_html5_data_attributes_with_attr_method
1362
- Haml::Helpers.module_eval do
1363
- def data_hash
1364
- {:data => {:foo => "bar", :baz => "bang"}}
1365
- end
1366
-
1367
- def data_val
1368
- {:data => "dat"}
1369
- end
1370
- end
1371
-
1372
- assert_equal("<div data-baz='bang' data-brat='wurst' data-foo='blip'></div>\n",
1373
- render("%div{data_hash, :data => {:foo => 'blip', :brat => 'wurst'}}"))
1374
- assert_equal("<div data-baz='bang' data-foo='blip'></div>\n",
1375
- render("%div{data_hash, 'data-foo' => 'blip'}"))
1376
- assert_equal("<div data-baz='bang' data-foo='bar' data='dat'></div>\n",
1377
- render("%div{data_hash, :data => 'dat'}"))
1378
- assert_equal("<div data-brat='wurst' data-foo='blip' data='dat'></div>\n",
1379
- render("%div{data_val, :data => {:foo => 'blip', :brat => 'wurst'}}"))
1380
- end
1381
-
1382
- # New attributes
1383
-
1384
- def test_basic_new_attributes
1385
- assert_equal("<a>bar</a>\n", render("%a() bar"))
1386
- assert_equal("<a href='foo'>bar</a>\n", render("%a(href='foo') bar"))
1387
- assert_equal("<a b='c' c='d' d='e'>baz</a>\n", render(%q{%a(b="c" c='d' d="e") baz}))
1388
- end
1389
-
1390
- def test_new_attribute_ids
1391
- assert_equal("<div id='foo_bar'></div>\n", render("#foo(id='bar')"))
1392
- assert_equal("<div id='foo_baz_bar'></div>\n", render("#foo{:id => 'bar'}(id='baz')"))
1393
- assert_equal("<div id='foo_baz_bar'></div>\n", render("#foo(id='baz'){:id => 'bar'}"))
1394
- foo = User.new(42)
1395
- assert_equal("<div class='struct_user' id='foo_baz_bar_struct_user_42'></div>\n",
1396
- render("#foo(id='baz'){:id => 'bar'}[foo]", :locals => {:foo => foo}))
1397
- assert_equal("<div class='struct_user' id='foo_baz_bar_struct_user_42'></div>\n",
1398
- render("#foo(id='baz')[foo]{:id => 'bar'}", :locals => {:foo => foo}))
1399
- assert_equal("<div class='struct_user' id='foo_baz_bar_struct_user_42'></div>\n",
1400
- render("#foo[foo](id='baz'){:id => 'bar'}", :locals => {:foo => foo}))
1401
- assert_equal("<div class='struct_user' id='foo_baz_bar_struct_user_42'></div>\n",
1402
- render("#foo[foo]{:id => 'bar'}(id='baz')", :locals => {:foo => foo}))
1403
- end
1404
-
1405
- def test_new_attribute_classes
1406
- assert_equal("<div class='bar foo'></div>\n", render(".foo(class='bar')"))
1407
- assert_equal("<div class='bar baz foo'></div>\n", render(".foo{:class => 'bar'}(class='baz')"))
1408
- assert_equal("<div class='bar baz foo'></div>\n", render(".foo(class='baz'){:class => 'bar'}"))
1409
- foo = User.new(42)
1410
- assert_equal("<div class='bar baz foo struct_user' id='struct_user_42'></div>\n",
1411
- render(".foo(class='baz'){:class => 'bar'}[foo]", :locals => {:foo => foo}))
1412
- assert_equal("<div class='bar baz foo struct_user' id='struct_user_42'></div>\n",
1413
- render(".foo[foo](class='baz'){:class => 'bar'}", :locals => {:foo => foo}))
1414
- assert_equal("<div class='bar baz foo struct_user' id='struct_user_42'></div>\n",
1415
- render(".foo[foo]{:class => 'bar'}(class='baz')", :locals => {:foo => foo}))
1416
- end
1417
-
1418
- def test_dynamic_new_attributes
1419
- assert_equal("<a href='12'>bar</a>\n", render("%a(href=foo) bar", :locals => {:foo => 12}))
1420
- assert_equal("<a b='12' c='13' d='14'>bar</a>\n", render("%a(b=b c='13' d=d) bar", :locals => {:b => 12, :d => 14}))
1421
- end
1422
-
1423
- def test_new_attribute_interpolation
1424
- assert_equal("<a href='12'>bar</a>\n", render('%a(href="1#{1 + 1}") bar'))
1425
- assert_equal("<a href='2: 2, 3: 3'>bar</a>\n", render(%q{%a(href='2: #{1 + 1}, 3: #{foo}') bar}, :locals => {:foo => 3}))
1426
- assert_equal(%Q{<a href='1\#{1 + 1}'>bar</a>\n}, render('%a(href="1\#{1 + 1}") bar'))
1427
- end
1428
-
1429
- def test_truthy_new_attributes
1430
- assert_equal("<a href='href'>bar</a>\n", render("%a(href) bar"))
1431
- assert_equal("<a bar='baz' href>bar</a>\n", render("%a(href bar='baz') bar", :format => :html5))
1432
- assert_equal("<a href='href'>bar</a>\n", render("%a(href=true) bar"))
1433
- assert_equal("<a>bar</a>\n", render("%a(href=false) bar"))
1434
- end
1435
-
1436
- def test_new_attribute_parsing
1437
- assert_equal("<a a2='b2'>bar</a>\n", render("%a(a2=b2) bar", :locals => {:b2 => 'b2'}))
1438
- assert_equal(%Q{<a a='foo"bar'>bar</a>\n}, render(%q{%a(a="#{'foo"bar'}") bar})) #'
1439
- assert_equal(%Q{<a a="foo'bar">bar</a>\n}, render(%q{%a(a="#{"foo'bar"}") bar})) #'
1440
- assert_equal(%Q{<a a='foo"bar'>bar</a>\n}, render(%q{%a(a='foo"bar') bar}))
1441
- assert_equal(%Q{<a a="foo'bar">bar</a>\n}, render(%q{%a(a="foo'bar") bar}))
1442
- assert_equal("<a a:b='foo'>bar</a>\n", render("%a(a:b='foo') bar"))
1443
- assert_equal("<a a='foo' b='bar'>bar</a>\n", render("%a(a = 'foo' b = 'bar') bar"))
1444
- assert_equal("<a a='foo' b='bar'>bar</a>\n", render("%a(a = foo b = bar) bar", :locals => {:foo => 'foo', :bar => 'bar'}))
1445
- assert_equal("<a a='foo'>(b='bar')</a>\n", render("%a(a='foo')(b='bar')"))
1446
- assert_equal("<a a='foo)bar'>baz</a>\n", render("%a(a='foo)bar') baz"))
1447
- assert_equal("<a a='foo'>baz</a>\n", render("%a( a = 'foo' ) baz"))
1448
- end
1449
-
1450
- def test_new_attribute_escaping
1451
- assert_equal(%Q{<a a='foo " bar'>bar</a>\n}, render(%q{%a(a="foo \" bar") bar}))
1452
- assert_equal(%Q{<a a='foo \\" bar'>bar</a>\n}, render(%q{%a(a="foo \\\\\" bar") bar}))
1453
-
1454
- assert_equal(%Q{<a a="foo ' bar">bar</a>\n}, render(%q{%a(a='foo \' bar') bar}))
1455
- assert_equal(%Q{<a a="foo \\' bar">bar</a>\n}, render(%q{%a(a='foo \\\\\' bar') bar}))
1456
-
1457
- assert_equal(%Q{<a a='foo \\ bar'>bar</a>\n}, render(%q{%a(a="foo \\\\ bar") bar}))
1458
- assert_equal(%Q{<a a='foo \#{1 + 1} bar'>bar</a>\n}, render(%q{%a(a="foo \#{1 + 1} bar") bar}))
1459
- end
1460
-
1461
- def test_multiline_new_attribute
1462
- assert_equal("<a a='b' c='d'>bar</a>\n", render("%a(a='b'\n c='d') bar"))
1463
- assert_equal("<a a='b' b='c' c='d' d='e' e='f' f='j'>bar</a>\n",
1464
- render("%a(a='b' b='c'\n c='d' d=e\n e='f' f='j') bar", :locals => {:e => 'e'}))
1465
- end
1466
-
1467
- def test_new_and_old_attributes
1468
- assert_equal("<a a='b' c='d'>bar</a>\n", render("%a(a='b'){:c => 'd'} bar"))
1469
- assert_equal("<a a='b' c='d'>bar</a>\n", render("%a{:c => 'd'}(a='b') bar"))
1470
- assert_equal("<a a='b' c='d'>bar</a>\n", render("%a(c='d'){:a => 'b'} bar"))
1471
- assert_equal("<a a='b' c='d'>bar</a>\n", render("%a{:a => 'b'}(c='d') bar"))
1472
-
1473
- # Old-style always takes precedence over new-style,
1474
- # because theoretically old-style could have arbitrary end-of-method-call syntax.
1475
- assert_equal("<a a='b'>bar</a>\n", render("%a{:a => 'b'}(a='d') bar"))
1476
- assert_equal("<a a='b'>bar</a>\n", render("%a(a='d'){:a => 'b'} bar"))
1477
-
1478
- assert_equal("<a a='b' b='c' c='d' d='e'>bar</a>\n",
1479
- render("%a{:a => 'b',\n:b => 'c'}(c='d'\nd='e') bar"))
1480
-
1481
- locals = {:b => 'b', :d => 'd'}
1482
- assert_equal("<p a='b' c='d'></p>\n", render("%p{:a => b}(c=d)", :locals => locals))
1483
- assert_equal("<p a='b' c='d'></p>\n", render("%p(a=b){:c => d}", :locals => locals))
1484
- end
1485
-
1486
- # Ruby Multiline
1487
-
1488
- def test_silent_ruby_multiline
1489
- assert_equal(<<HTML, render(<<HAML))
1490
- bar, baz, bang
1491
- <p>foo</p>
1492
- HTML
1493
- - foo = ["bar",
1494
- "baz",
1495
- "bang"]
1496
- = foo.join(", ")
1497
- %p foo
1498
- HAML
1499
- end
1500
-
1501
- def test_loud_ruby_multiline
1502
- assert_equal(<<HTML, render(<<HAML))
1503
- bar, baz, bang
1504
- <p>foo</p>
1505
- <p>bar</p>
1506
- HTML
1507
- = ["bar",
1508
- "baz",
1509
- "bang"].join(", ")
1510
- %p foo
1511
- %p bar
1512
- HAML
1513
- end
1514
-
1515
- def test_escaped_loud_ruby_multiline
1516
- assert_equal(<<HTML, render(<<HAML))
1517
- bar&lt;, baz, bang
1518
- <p>foo</p>
1519
- <p>bar</p>
1520
- HTML
1521
- &= ["bar<",
1522
- "baz",
1523
- "bang"].join(", ")
1524
- %p foo
1525
- %p bar
1526
- HAML
1527
- end
1528
-
1529
- def test_unescaped_loud_ruby_multiline
1530
- assert_equal(<<HTML, render(<<HAML, :escape_html => true))
1531
- bar<, baz, bang
1532
- <p>foo</p>
1533
- <p>bar</p>
1534
- HTML
1535
- != ["bar<",
1536
- "baz",
1537
- "bang"].join(", ")
1538
- %p foo
1539
- %p bar
1540
- HAML
1541
- end
1542
-
1543
- def test_flattened_loud_ruby_multiline
1544
- assert_equal(<<HTML, render(<<HAML))
1545
- <pre>bar&#x000A;baz&#x000A;bang</pre>
1546
- <p>foo</p>
1547
- <p>bar</p>
1548
- HTML
1549
- ~ "<pre>" + ["bar",
1550
- "baz",
1551
- "bang"].join("\\n") + "</pre>"
1552
- %p foo
1553
- %p bar
1554
- HAML
1555
- end
1556
-
1557
- def test_loud_ruby_multiline_with_block
1558
- assert_equal(<<HTML, render(<<HAML))
1559
- #{%w[far faz fang]}
1560
- <p>foo</p>
1561
- <p>bar</p>
1562
- HTML
1563
- = ["bar",
1564
- "baz",
1565
- "bang"].map do |str|
1566
- - str.gsub("ba",
1567
- "fa")
1568
- %p foo
1569
- %p bar
1570
- HAML
1571
- end
1572
-
1573
- def test_silent_ruby_multiline_with_block
1574
- assert_equal(<<HTML, render(<<HAML))
1575
- far
1576
- faz
1577
- fang
1578
- <p>foo</p>
1579
- <p>bar</p>
1580
- HTML
1581
- - ["bar",
1582
- "baz",
1583
- "bang"].map do |str|
1584
- = str.gsub("ba",
1585
- "fa")
1586
- %p foo
1587
- %p bar
1588
- HAML
1589
- end
1590
-
1591
- def test_ruby_multiline_in_tag
1592
- assert_equal(<<HTML, render(<<HAML))
1593
- <p>foo, bar, baz</p>
1594
- <p>foo</p>
1595
- <p>bar</p>
1596
- HTML
1597
- %p= ["foo",
1598
- "bar",
1599
- "baz"].join(", ")
1600
- %p foo
1601
- %p bar
1602
- HAML
1603
- end
1604
-
1605
- def test_escaped_ruby_multiline_in_tag
1606
- assert_equal(<<HTML, render(<<HAML))
1607
- <p>foo&lt;, bar, baz</p>
1608
- <p>foo</p>
1609
- <p>bar</p>
1610
- HTML
1611
- %p&= ["foo<",
1612
- "bar",
1613
- "baz"].join(", ")
1614
- %p foo
1615
- %p bar
1616
- HAML
1617
- end
1618
-
1619
- def test_unescaped_ruby_multiline_in_tag
1620
- assert_equal(<<HTML, render(<<HAML, :escape_html => true))
1621
- <p>foo<, bar, baz</p>
1622
- <p>foo</p>
1623
- <p>bar</p>
1624
- HTML
1625
- %p!= ["foo<",
1626
- "bar",
1627
- "baz"].join(", ")
1628
- %p foo
1629
- %p bar
1630
- HAML
1631
- end
1632
-
1633
- def test_ruby_multiline_with_normal_multiline
1634
- assert_equal(<<HTML, render(<<HAML))
1635
- foobarbar, baz, bang
1636
- <p>foo</p>
1637
- <p>bar</p>
1638
- HTML
1639
- = "foo" + |
1640
- "bar" + |
1641
- ["bar", |
1642
- "baz",
1643
- "bang"].join(", ")
1644
- %p foo
1645
- %p bar
1646
- HAML
1647
- end
1648
-
1649
- def test_ruby_multiline_after_filter
1650
- assert_equal(<<HTML, render(<<HAML))
1651
- foo
1652
- bar
1653
- bar, baz, bang
1654
- <p>foo</p>
1655
- <p>bar</p>
1656
- HTML
1657
- :plain
1658
- foo
1659
- bar
1660
- = ["bar",
1661
- "baz",
1662
- "bang"].join(", ")
1663
- %p foo
1664
- %p bar
1665
- HAML
1666
- end
1667
-
1668
- # Encodings
1669
-
1670
- def test_utf_8_bom
1671
- assert_equal <<HTML, render(<<HAML)
1672
- <div class='foo'>
1673
- <p>baz</p>
1674
- </div>
1675
- HTML
1676
- \xEF\xBB\xBF.foo
1677
- %p baz
1678
- HAML
1679
- end
1680
-
1681
- unless Haml::Util.ruby1_8?
1682
- def test_default_encoding
1683
- assert_equal(Encoding.find("utf-8"), render(<<HAML.encode("us-ascii")).encoding)
1684
- %p bar
1685
- %p foo
1686
- HAML
1687
- end
1688
-
1689
- def test_fake_ascii_encoding
1690
- assert_encoded_equal(<<HTML.force_encoding("ascii-8bit"), render(<<HAML, :encoding => "ascii-8bit"))
1691
- <p>bâr</p>
1692
- <p>föö</p>
1693
- HTML
1694
- %p bâr
1695
- %p föö
1696
- HAML
1697
- end
1698
-
1699
- def test_convert_template_render_proc
1700
- assert_converts_template_properly {|e| e.render_proc.call}
1701
- end
1702
-
1703
- def test_convert_template_render
1704
- assert_converts_template_properly {|e| e.render}
1705
- end
1706
-
1707
- def test_convert_template_def_method
1708
- assert_converts_template_properly do |e|
1709
- o = Object.new
1710
- e.def_method(o, :render)
1711
- o.render
1712
- end
1713
- end
1714
-
1715
- def test_encoding_error
1716
- render("foo\nbar\nb\xFEaz".force_encoding("utf-8"))
1717
- assert(false, "Expected exception")
1718
- rescue Haml::Error => e
1719
- assert_equal(3, e.line)
1720
- assert_equal('Invalid UTF-8 character "\xFE"', e.message)
1721
- end
1722
-
1723
- def test_ascii_incompatible_encoding_error
1724
- template = "foo\nbar\nb_z".encode("utf-16le")
1725
- template[9] = "\xFE".force_encoding("utf-16le")
1726
- render(template)
1727
- assert(false, "Expected exception")
1728
- rescue Haml::Error => e
1729
- assert_equal(3, e.line)
1730
- assert_equal('Invalid UTF-16LE character "\xFE"', e.message)
1731
- end
1732
-
1733
- def test_same_coding_comment_as_encoding
1734
- assert_renders_encoded(<<HTML, <<HAML)
1735
- <p>bâr</p>
1736
- <p>föö</p>
1737
- HTML
1738
- -# coding: utf-8
1739
- %p bâr
1740
- %p föö
1741
- HAML
1742
- end
1743
-
1744
- def test_coding_comments
1745
- assert_valid_encoding_comment("-# coding: ibm866")
1746
- assert_valid_encoding_comment("-# CodINg: IbM866")
1747
- assert_valid_encoding_comment("-#coding:ibm866")
1748
- assert_valid_encoding_comment("-# CodINg= ibm866")
1749
- assert_valid_encoding_comment("-# foo BAR FAOJcoding: ibm866")
1750
- assert_valid_encoding_comment("-# coding: ibm866 ASFJ (&(&#!$")
1751
- assert_valid_encoding_comment("-# -*- coding: ibm866")
1752
- assert_valid_encoding_comment("-# coding: ibm866 -*- coding: blah")
1753
- assert_valid_encoding_comment("-# -*- coding: ibm866 -*-")
1754
- assert_valid_encoding_comment("-# -*- encoding: ibm866 -*-")
1755
- assert_valid_encoding_comment('-# -*- coding: "ibm866" -*-')
1756
- assert_valid_encoding_comment("-#-*-coding:ibm866-*-")
1757
- assert_valid_encoding_comment("-#-*-coding:ibm866-*-")
1758
- assert_valid_encoding_comment("-# -*- foo: bar; coding: ibm866; baz: bang -*-")
1759
- assert_valid_encoding_comment("-# foo bar coding: baz -*- coding: ibm866 -*-")
1760
- assert_valid_encoding_comment("-# -*- coding: ibm866 -*- foo bar coding: baz")
1761
- end
1762
-
1763
- def test_different_coding_than_system
1764
- assert_renders_encoded(<<HTML.encode("IBM866"), <<HAML.encode("IBM866"))
1765
- <p>тАЬ</p>
1766
- HTML
1767
- %p тАЬ
1768
- HAML
1769
- end
1770
- end
1771
-
1772
- private
1773
-
1774
- def assert_valid_encoding_comment(comment)
1775
- assert_renders_encoded(<<HTML.encode("IBM866"), <<HAML.encode("IBM866").force_encoding("UTF-8"))
1776
- <p>ЖЛЫ</p>
1777
- <p>тАЬ</p>
1778
- HTML
1779
- #{comment}
1780
- %p ЖЛЫ
1781
- %p тАЬ
1782
- HAML
1783
- end
1784
-
1785
- def assert_converts_template_properly
1786
- engine = Haml::Engine.new(<<HAML.encode("iso-8859-1"), :encoding => "macRoman")
1787
- %p bâr
1788
- %p föö
1789
- HAML
1790
- assert_encoded_equal(<<HTML.encode("macRoman"), yield(engine))
1791
- <p>bâr</p>
1792
- <p>föö</p>
1793
- HTML
1794
- end
1795
-
1796
- def assert_renders_encoded(html, haml)
1797
- result = render(haml)
1798
- assert_encoded_equal html, result
1799
- end
1800
-
1801
- def assert_encoded_equal(expected, actual)
1802
- assert_equal expected.encoding, actual.encoding
1803
- assert_equal expected, actual
1804
- end
1805
- end