middleman 2.0.16.1 → 3.0.0.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (259) hide show
  1. data/.gitignore +2 -1
  2. data/CHANGELOG +16 -8
  3. data/features/builder.feature +2 -5
  4. data/features/cache_buster.feature +1 -1
  5. data/features/clean_build.feature +0 -1
  6. data/features/coffee-script.feature +3 -3
  7. data/features/custom_layout_engines.feature +10 -0
  8. data/features/directory_index.feature +0 -1
  9. data/features/dynamic_pages.feature +0 -1
  10. data/features/fonts.feature +0 -1
  11. data/features/{padrino_helpers.feature → former_padrino_helpers.feature} +1 -1
  12. data/features/sprockets.feature +34 -5
  13. data/features/sprockets_gems.feature +7 -4
  14. data/features/step_definitions/asset_host_steps.rb +7 -6
  15. data/features/step_definitions/builder_steps.rb +4 -0
  16. data/features/step_definitions/middleman_steps.rb +22 -16
  17. data/features/step_definitions/page_layout_steps.rb +10 -8
  18. data/fixtures/custom-layout-app/config.rb +1 -0
  19. data/fixtures/custom-layout-app/source/index.html.erb +1 -0
  20. data/fixtures/custom-layout-app/source/layout.haml +6 -0
  21. data/fixtures/sprockets-app/config.rb +2 -1
  22. data/fixtures/sprockets-app/source/library/css/bootstrap_include.css.scss +1 -0
  23. data/fixtures/sprockets-app/source/library/css/plain.css +3 -0
  24. data/fixtures/sprockets-app/source/library/css/sprockets_base1.css.scss +1 -0
  25. data/fixtures/sprockets-app/source/library/css/sprockets_base2.css.scss +1 -0
  26. data/fixtures/sprockets-app/source/library/css/sprockets_sub.css.scss +1 -0
  27. data/fixtures/sprockets-app/source/{jquery_include.js → library/js/jquery_include.js} +0 -0
  28. data/fixtures/sprockets-app/source/library/js/plain.js +3 -0
  29. data/fixtures/sprockets-app/source/library/{javascripts → js}/sprockets_base.js +0 -0
  30. data/fixtures/sprockets-app/source/library/{javascripts → js}/sprockets_sub.js +0 -0
  31. data/fixtures/test-app/config.rb +5 -4
  32. data/fixtures/test-app/source/{padrino_test.html.haml → former_padrino_test.html.haml} +0 -0
  33. data/fixtures/test-app/source/stylesheets/sprockets_base1.css.scss +1 -0
  34. data/fixtures/test-app/source/stylesheets/sprockets_base2.css.scss +1 -0
  35. data/fixtures/test-app/source/stylesheets/sprockets_sub.css.scss +1 -0
  36. data/lib/middleman.rb +27 -25
  37. data/lib/middleman/base.rb +408 -166
  38. data/lib/middleman/builder.rb +78 -162
  39. data/lib/middleman/cli.rb +61 -32
  40. data/lib/middleman/core_extensions/assets.rb +4 -44
  41. data/lib/middleman/core_extensions/builder.rb +12 -16
  42. data/lib/middleman/core_extensions/compass.rb +28 -57
  43. data/lib/middleman/core_extensions/data.rb +65 -49
  44. data/lib/middleman/core_extensions/default_helpers.rb +33 -18
  45. data/lib/middleman/core_extensions/features.rb +48 -26
  46. data/lib/middleman/core_extensions/file_watcher.rb +66 -0
  47. data/lib/middleman/core_extensions/front_matter.rb +91 -86
  48. data/lib/middleman/core_extensions/rendering.rb +9 -8
  49. data/lib/middleman/core_extensions/routing.rb +19 -53
  50. data/lib/middleman/core_extensions/sitemap.rb +229 -0
  51. data/lib/middleman/core_extensions/sprockets.rb +53 -37
  52. data/lib/middleman/features/asset_host.rb +20 -10
  53. data/lib/middleman/features/automatic_image_sizes.rb +12 -9
  54. data/lib/middleman/features/cache_buster.rb +38 -25
  55. data/lib/middleman/features/directory_indexes.rb +31 -28
  56. data/lib/middleman/features/minify_css.rb +3 -2
  57. data/lib/middleman/features/minify_css/cssmin.rb +55 -0
  58. data/lib/middleman/features/minify_javascript.rb +12 -5
  59. data/lib/middleman/features/relative_assets.rb +28 -25
  60. data/lib/middleman/features/sitemap_tree.rb +34 -0
  61. data/lib/middleman/guard.rb +57 -23
  62. data/lib/middleman/renderers/erb.rb +29 -0
  63. data/lib/middleman/renderers/liquid.rb +3 -12
  64. data/lib/middleman/renderers/markdown.rb +16 -15
  65. data/lib/middleman/renderers/sass.rb +34 -38
  66. data/lib/middleman/vendor/hooks-0.2.0/CHANGES.textile +9 -0
  67. data/lib/middleman/vendor/hooks-0.2.0/Gemfile +3 -0
  68. data/lib/middleman/vendor/hooks-0.2.0/README.rdoc +107 -0
  69. data/lib/middleman/vendor/hooks-0.2.0/Rakefile +12 -0
  70. data/lib/middleman/vendor/hooks-0.2.0/hooks.gemspec +22 -0
  71. data/lib/middleman/vendor/hooks-0.2.0/lib/hooks.rb +109 -0
  72. data/lib/middleman/vendor/hooks-0.2.0/lib/hooks/inheritable_attribute.rb +33 -0
  73. data/lib/middleman/vendor/hooks-0.2.0/test/hooks_test.rb +141 -0
  74. data/lib/middleman/vendor/hooks-0.2.0/test/inheritable_attribute_test.rb +55 -0
  75. data/lib/middleman/vendor/hooks-0.2.0/test/test_helper.rb +10 -0
  76. data/lib/middleman/vendor/padrino-core-0.10.5/.document +5 -0
  77. data/lib/middleman/vendor/padrino-core-0.10.5/.gitignore +22 -0
  78. data/lib/middleman/vendor/padrino-core-0.10.5/.yardopts +1 -0
  79. data/lib/middleman/vendor/padrino-core-0.10.5/LICENSE.txt +20 -0
  80. data/lib/middleman/vendor/padrino-core-0.10.5/README.rdoc +294 -0
  81. data/lib/middleman/vendor/padrino-core-0.10.5/Rakefile +5 -0
  82. data/lib/middleman/vendor/padrino-core-0.10.5/bin/padrino +9 -0
  83. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core.rb +167 -0
  84. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application.rb +270 -0
  85. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application/rendering.rb +292 -0
  86. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application/routing.rb +934 -0
  87. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/application/showexceptions.rb +20 -0
  88. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/caller.rb +53 -0
  89. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/adapter.rb +24 -0
  90. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/base.rb +151 -0
  91. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/console.rb +20 -0
  92. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/rake.rb +24 -0
  93. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/cli/rake_tasks.rb +59 -0
  94. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/command.rb +38 -0
  95. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/images/404.png +0 -0
  96. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/images/500.png +0 -0
  97. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/loader.rb +210 -0
  98. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/cs.yml +34 -0
  99. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/da.yml +34 -0
  100. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/de.yml +34 -0
  101. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/en.yml +34 -0
  102. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/es.yml +34 -0
  103. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/fr.yml +34 -0
  104. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/hu.yml +34 -0
  105. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/it.yml +40 -0
  106. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/ja.yml +34 -0
  107. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/lv.yml +34 -0
  108. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/nl.yml +34 -0
  109. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/no.yml +35 -0
  110. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/pl.yml +34 -0
  111. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/pt_br.yml +40 -0
  112. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/ru.yml +35 -0
  113. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/tr.yml +34 -0
  114. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/uk.yml +34 -0
  115. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/zh_cn.yml +34 -0
  116. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/locale/zh_tw.yml +34 -0
  117. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/logger.rb +345 -0
  118. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/mounter.rb +224 -0
  119. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/reloader.rb +254 -0
  120. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/router.rb +98 -0
  121. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/server.rb +79 -0
  122. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/support_lite.rb +199 -0
  123. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/tasks.rb +21 -0
  124. data/lib/middleman/vendor/padrino-core-0.10.5/lib/padrino-core/version.rb +20 -0
  125. data/lib/middleman/vendor/padrino-core-0.10.5/padrino-core.gemspec +38 -0
  126. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/.components +6 -0
  127. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/.gitignore +7 -0
  128. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/complex.rb +32 -0
  129. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/apps/simple.rb +33 -0
  130. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/a.rb +9 -0
  131. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/b.rb +4 -0
  132. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/c.rb +1 -0
  133. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/e.rb +13 -0
  134. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/f.rb +2 -0
  135. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/circular/g.rb +2 -0
  136. data/lib/middleman/vendor/padrino-core-0.10.5/test/fixtures/dependencies/d.rb +4 -0
  137. data/lib/middleman/vendor/padrino-core-0.10.5/test/helper.rb +81 -0
  138. data/lib/middleman/vendor/padrino-core-0.10.5/test/mini_shoulda.rb +45 -0
  139. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_application.rb +108 -0
  140. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_core.rb +79 -0
  141. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_dependencies.rb +44 -0
  142. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_filters.rb +278 -0
  143. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_locale.rb +21 -0
  144. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_logger.rb +100 -0
  145. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_mounter.rb +177 -0
  146. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_reloader_complex.rb +75 -0
  147. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_reloader_simple.rb +98 -0
  148. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_rendering.rb +461 -0
  149. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_restful_routing.rb +33 -0
  150. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_router.rb +146 -0
  151. data/lib/middleman/vendor/padrino-core-0.10.5/test/test_routing.rb +1673 -0
  152. data/lib/middleman/vendor/padrino-helpers-0.10.5/.document +5 -0
  153. data/lib/middleman/vendor/padrino-helpers-0.10.5/.gitignore +21 -0
  154. data/lib/middleman/vendor/padrino-helpers-0.10.5/.yardopts +1 -0
  155. data/lib/middleman/vendor/padrino-helpers-0.10.5/LICENSE.txt +20 -0
  156. data/lib/middleman/vendor/padrino-helpers-0.10.5/README.rdoc +239 -0
  157. data/lib/middleman/vendor/padrino-helpers-0.10.5/Rakefile +5 -0
  158. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers.rb +58 -0
  159. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/asset_tag_helpers.rb +420 -0
  160. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_builder/abstract_form_builder.rb +220 -0
  161. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_builder/standard_form_builder.rb +43 -0
  162. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/form_helpers.rb +602 -0
  163. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/format_helpers.rb +381 -0
  164. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/cs.yml +103 -0
  165. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/da.yml +91 -0
  166. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/de.yml +81 -0
  167. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/en.yml +103 -0
  168. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/es.yml +103 -0
  169. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/fr.yml +80 -0
  170. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/hu.yml +103 -0
  171. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/it.yml +89 -0
  172. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/ja.yml +103 -0
  173. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/lv.yml +103 -0
  174. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/nl.yml +82 -0
  175. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/no.yml +91 -0
  176. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/pl.yml +95 -0
  177. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/pt_br.yml +103 -0
  178. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/ru.yml +103 -0
  179. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/tr.yml +103 -0
  180. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/uk.yml +103 -0
  181. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/zh_cn.yml +104 -0
  182. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/locale/zh_tw.yml +103 -0
  183. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/number_helpers.rb +288 -0
  184. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers.rb +175 -0
  185. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/abstract_handler.rb +98 -0
  186. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/erb_handler.rb +79 -0
  187. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/haml_handler.rb +63 -0
  188. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/output_helpers/slim_handler.rb +81 -0
  189. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/render_helpers.rb +60 -0
  190. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/tag_helpers.rb +103 -0
  191. data/lib/middleman/vendor/padrino-helpers-0.10.5/lib/padrino-helpers/translation_helpers.rb +38 -0
  192. data/lib/middleman/vendor/padrino-helpers-0.10.5/padrino-helpers.gemspec +27 -0
  193. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/app.rb +73 -0
  194. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.erb +14 -0
  195. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.haml +12 -0
  196. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/capture_concat.slim +13 -0
  197. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.erb +14 -0
  198. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.haml +12 -0
  199. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_for.slim +12 -0
  200. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.erb +11 -0
  201. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.haml +9 -0
  202. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/content_tag.slim +9 -0
  203. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.erb +5 -0
  204. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.haml +5 -0
  205. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/current_engine.slim +5 -0
  206. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.erb +20 -0
  207. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.haml +15 -0
  208. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/fields_for.slim +15 -0
  209. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.erb +56 -0
  210. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.haml +47 -0
  211. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_for.slim +47 -0
  212. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.erb +56 -0
  213. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.haml +45 -0
  214. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/form_tag.slim +45 -0
  215. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.erb +5 -0
  216. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.haml +4 -0
  217. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/link_to.slim +4 -0
  218. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.erb +3 -0
  219. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.haml +3 -0
  220. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/mail_to.slim +3 -0
  221. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.erb +3 -0
  222. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.haml +3 -0
  223. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/meta_tag.slim +3 -0
  224. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_erb.erb +1 -0
  225. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_haml.haml +1 -0
  226. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/partials/_slim.slim +1 -0
  227. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.erb +1 -0
  228. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.haml +1 -0
  229. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/markup_app/views/simple_partial.slim +1 -0
  230. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/app.rb +50 -0
  231. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engine.haml +5 -0
  232. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_erb.erb +1 -0
  233. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_haml.haml +1 -0
  234. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/current_engines/_slim.slim +1 -0
  235. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/erb/test.erb +1 -0
  236. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/explicit_engine.haml +5 -0
  237. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/haml/test.haml +1 -0
  238. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/_user.haml +7 -0
  239. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/haml_template.haml +1 -0
  240. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/fixtures/render_app/views/template/some_template.haml +2 -0
  241. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/helper.rb +66 -0
  242. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_asset_tag_helpers.rb +320 -0
  243. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_form_builder.rb +996 -0
  244. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_form_helpers.rb +645 -0
  245. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_format_helpers.rb +227 -0
  246. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_locale.rb +20 -0
  247. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_number_helpers.rb +136 -0
  248. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_output_helpers.rb +153 -0
  249. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_render_helpers.rb +76 -0
  250. data/lib/middleman/vendor/padrino-helpers-0.10.5/test/test_tag_helpers.rb +105 -0
  251. data/lib/middleman/version.rb +1 -1
  252. data/middleman-x86-mingw32.gemspec +16 -33
  253. data/middleman.gemspec +16 -31
  254. metadata +590 -349
  255. data/features/sinatra.feature +0 -6
  256. data/lib/middleman/core_extensions/rack_map.rb +0 -35
  257. data/lib/middleman/renderers/coffee_script.rb +0 -8
  258. data/lib/middleman/renderers/haml.rb +0 -31
  259. data/lib/middleman/renderers/slim.rb +0 -8
@@ -0,0 +1,645 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+ require File.expand_path(File.dirname(__FILE__) + '/fixtures/markup_app/app')
3
+
4
+ describe "FormHelpers" do
5
+ include Padrino::Helpers::FormHelpers
6
+
7
+ def app
8
+ MarkupDemo.tap { |app| app.set :environment, :test }
9
+ end
10
+
11
+ context 'for #form_tag method' do
12
+ should "display correct forms in ruby" do
13
+ actual_html = form_tag('/register', :"accept-charset" => "UTF-8", :class => 'test', :method => "post") { "Demo" }
14
+ assert_has_tag(:form, :"accept-charset" => "UTF-8", :class => "test") { actual_html }
15
+ assert_has_tag('form input', :type => 'hidden', :name => '_method', :count => 0) { actual_html }
16
+ end
17
+
18
+ should "display correct text inputs within form_tag" do
19
+ actual_html = form_tag('/register', :"accept-charset" => "UTF-8", :class => 'test') { text_field_tag(:username) }
20
+ assert_has_tag('form input', :type => 'text', :name => "username") { actual_html }
21
+ end
22
+
23
+ should "display correct form with remote" do
24
+ actual_html = form_tag('/update', :"accept-charset" => "UTF-8", :class => 'put-form', :remote => true) { "Demo" }
25
+ assert_has_tag(:form, :class => "put-form", :"accept-charset" => "UTF-8", :"data-remote" => 'true') { actual_html }
26
+ assert_has_no_tag(:form, "data-method" => 'post') { actual_html }
27
+ end
28
+
29
+ should "display correct form with remote and method is put" do
30
+ actual_html = form_tag('/update', :"accept-charset" => "UTF-8", :method => 'put', :remote => true) { "Demo" }
31
+ assert_has_tag(:form, "data-remote" => 'true', :"accept-charset" => "UTF-8", :"data-method" => 'put') { actual_html }
32
+ assert_has_tag('form input', :type => 'hidden', :name => "_method", :value => 'put') { actual_html }
33
+ end
34
+
35
+ should "display correct form with method :put" do
36
+ actual_html = form_tag('/update', :"accept-charset" => "UTF-8", :class => 'put-form', :method => "put") { "Demo" }
37
+ assert_has_tag(:form, :class => "put-form", :"accept-charset" => "UTF-8", :method => 'post') { actual_html }
38
+ assert_has_tag('form input', :type => 'hidden', :name => "_method", :value => 'put') { actual_html }
39
+ end
40
+
41
+ should "display correct form with method :delete and charset" do
42
+ actual_html = form_tag('/remove', :"accept-charset" => "UTF-8", :class => 'delete-form', :method => "delete") { "Demo" }
43
+ assert_has_tag(:form, :class => "delete-form", :"accept-charset" => "UTF-8", :method => 'post') { actual_html }
44
+ assert_has_tag('form input', :type => 'hidden', :name => "_method", :value => 'delete') { actual_html }
45
+ end
46
+
47
+ should "display correct form with charset" do
48
+ actual_html = form_tag('/charset', :"accept-charset" => "UTF-8", :class => 'charset-form') { "Demo" }
49
+ assert_has_tag(:form, :class => "charset-form", :"accept-charset" => "UTF-8", :method => 'post') { actual_html }
50
+ end
51
+
52
+ should "display correct form with multipart encoding" do
53
+ actual_html = form_tag('/remove', :"accept-charset" => "UTF-8", :multipart => true) { "Demo" }
54
+ assert_has_tag(:form, :enctype => "multipart/form-data") { actual_html }
55
+ end
56
+
57
+ should "display correct forms in erb" do
58
+ visit '/erb/form_tag'
59
+ assert_have_selector 'form.simple-form', :action => '/simple'
60
+ assert_have_selector 'form.advanced-form', :action => '/advanced', :id => 'advanced', :method => 'get'
61
+ end
62
+
63
+ should "display correct forms in haml" do
64
+ visit '/haml/form_tag'
65
+ assert_have_selector 'form.simple-form', :action => '/simple'
66
+ assert_have_selector 'form.advanced-form', :action => '/advanced', :id => 'advanced', :method => 'get'
67
+ end
68
+
69
+ should "display correct forms in slim" do
70
+ visit '/slim/form_tag'
71
+ assert_have_selector 'form.simple-form', :action => '/simple'
72
+ assert_have_selector 'form.advanced-form', :action => '/advanced', :id => 'advanced', :method => 'get'
73
+ end
74
+ end
75
+
76
+ context 'for #field_set_tag method' do
77
+ should "display correct field_sets in ruby" do
78
+ actual_html = field_set_tag("Basic", :class => 'basic') { "Demo" }
79
+ assert_has_tag(:fieldset, :class => 'basic') { actual_html }
80
+ assert_has_tag('fieldset legend', :content => "Basic") { actual_html }
81
+ end
82
+
83
+ should "display correct field_sets in erb" do
84
+ visit '/erb/form_tag'
85
+ assert_have_selector 'form.simple-form fieldset', :count => 1
86
+ assert_have_no_selector 'form.simple-form fieldset legend'
87
+ assert_have_selector 'form.advanced-form fieldset', :count => 1, :class => 'advanced-field-set'
88
+ assert_have_selector 'form.advanced-form fieldset legend', :content => "Advanced"
89
+ end
90
+
91
+ should "display correct field_sets in haml" do
92
+ visit '/haml/form_tag'
93
+ assert_have_selector 'form.simple-form fieldset', :count => 1
94
+ assert_have_no_selector 'form.simple-form fieldset legend'
95
+ assert_have_selector 'form.advanced-form fieldset', :count => 1, :class => 'advanced-field-set'
96
+ assert_have_selector 'form.advanced-form fieldset legend', :content => "Advanced"
97
+ end
98
+
99
+ should "display correct field_sets in slim" do
100
+ visit '/slim/form_tag'
101
+ assert_have_selector 'form.simple-form fieldset', :count => 1
102
+ assert_have_no_selector 'form.simple-form fieldset legend'
103
+ assert_have_selector 'form.advanced-form fieldset', :count => 1, :class => 'advanced-field-set'
104
+ assert_have_selector 'form.advanced-form fieldset legend', :content => "Advanced"
105
+ end
106
+ end
107
+
108
+ context 'for #error_messages_for method' do
109
+ should "display correct error messages list in ruby" do
110
+ user = mock_model("User", :errors => { :a => "1", :b => "2" }, :blank? => false)
111
+ actual_html = error_messages_for(user)
112
+ assert_has_tag('div.field-errors') { actual_html }
113
+ assert_has_tag('div.field-errors h2', :content => "2 errors prohibited this User from being saved") { actual_html }
114
+ assert_has_tag('div.field-errors p', :content => "There were problems with the following fields:") { actual_html }
115
+ assert_has_tag('div.field-errors ul') { actual_html }
116
+ assert_has_tag('div.field-errors ul li', :count => 2) { actual_html }
117
+ end
118
+
119
+ should "display correct error messages list in erb" do
120
+ visit '/erb/form_tag'
121
+ assert_have_no_selector 'form.simple-form .field-errors'
122
+ assert_have_selector 'form.advanced-form .field-errors'
123
+ assert_have_selector 'form.advanced-form .field-errors h2', :content => "There are problems with saving user!"
124
+ assert_have_selector 'form.advanced-form .field-errors p', :content => "There were problems with the following fields:"
125
+ assert_have_selector 'form.advanced-form .field-errors ul'
126
+ assert_have_selector 'form.advanced-form .field-errors ul li', :count => 4
127
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Email must be a email"
128
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Fake must be valid"
129
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Second must be present"
130
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Third must be a number"
131
+ end
132
+
133
+ should "display correct error messages list in haml" do
134
+ visit '/haml/form_tag'
135
+ assert_have_no_selector 'form.simple-form .field-errors'
136
+ assert_have_selector 'form.advanced-form .field-errors'
137
+ assert_have_selector 'form.advanced-form .field-errors h2', :content => "There are problems with saving user!"
138
+ assert_have_selector 'form.advanced-form .field-errors p', :content => "There were problems with the following fields:"
139
+ assert_have_selector 'form.advanced-form .field-errors ul'
140
+ assert_have_selector 'form.advanced-form .field-errors ul li', :count => 4
141
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Email must be a email"
142
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Fake must be valid"
143
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Second must be present"
144
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Third must be a number"
145
+ end
146
+
147
+ should "display correct error messages list in slim" do
148
+ visit '/slim/form_tag'
149
+ assert_have_no_selector 'form.simple-form .field-errors'
150
+ assert_have_selector 'form.advanced-form .field-errors'
151
+ assert_have_selector 'form.advanced-form .field-errors h2', :content => "There are problems with saving user!"
152
+ assert_have_selector 'form.advanced-form .field-errors p', :content => "There were problems with the following fields:"
153
+ assert_have_selector 'form.advanced-form .field-errors ul'
154
+ assert_have_selector 'form.advanced-form .field-errors ul li', :count => 4
155
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Email must be a email"
156
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Fake must be valid"
157
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Second must be present"
158
+ assert_have_selector 'form.advanced-form .field-errors ul li', :content => "Third must be a number"
159
+ end
160
+ end
161
+
162
+ context 'for #error_message_on method' do
163
+ should "display correct error message on specified model name in ruby" do
164
+ @user = mock_model("User", :errors => { :a => "1", :b => "2" }, :blank? => false)
165
+ actual_html = error_message_on(:user, :a, :prepend => "foo", :append => "bar")
166
+ assert_has_tag('span.error', :content => "foo 1 bar") { actual_html }
167
+ end
168
+
169
+ should "display correct error message on specified object in ruby" do
170
+ @bob = mock_model("User", :errors => { :a => "1", :b => "2" }, :blank? => false)
171
+ actual_html = error_message_on(@bob, :a, :prepend => "foo", :append => "bar")
172
+ assert_has_tag('span.error', :content => "foo 1 bar") { actual_html }
173
+ end
174
+
175
+ should "display no message when error isn't present" do
176
+ @user = mock_model("User", :errors => { :a => "1", :b => "2" }, :blank? => false)
177
+ actual_html = error_message_on(:user, :fake, :prepend => "foo", :append => "bar")
178
+ assert actual_html.blank?
179
+ end
180
+ end
181
+
182
+ context 'for #label_tag method' do
183
+ should "display label tag in ruby" do
184
+ actual_html = label_tag(:username, :class => 'long-label', :caption => "Nickname")
185
+ assert_has_tag(:label, :for => 'username', :class => 'long-label', :content => "Nickname") { actual_html }
186
+ end
187
+
188
+ should "display label tag in ruby with required" do
189
+ actual_html = label_tag(:username, :caption => "Nickname", :required => true)
190
+ assert_has_tag(:label, :for => 'username', :content => 'Nickname') { actual_html }
191
+ assert_has_tag('label[for=username] span.required', :content => "*") { actual_html }
192
+ end
193
+
194
+ should "display label tag in erb for simple form" do
195
+ visit '/erb/form_tag'
196
+ assert_have_selector 'form.simple-form label', :count => 4
197
+ assert_have_selector 'form.simple-form label', :content => "Username", :for => 'username'
198
+ assert_have_selector 'form.simple-form label', :content => "Password", :for => 'password'
199
+ assert_have_selector 'form.simple-form label', :content => "Gender", :for => 'gender'
200
+ end
201
+ should "display label tag in erb for advanced form" do
202
+ visit '/erb/form_tag'
203
+ assert_have_selector 'form.advanced-form label', :count => 6
204
+ assert_have_selector 'form.advanced-form label.first', :content => "Nickname", :for => 'username'
205
+ assert_have_selector 'form.advanced-form label.first', :content => "Password", :for => 'password'
206
+ assert_have_selector 'form.advanced-form label.about', :content => "About Me", :for => 'about'
207
+ assert_have_selector 'form.advanced-form label.photo', :content => "Photo" , :for => 'photo'
208
+ assert_have_selector 'form.advanced-form label.gender', :content => "Gender" , :for => 'gender'
209
+ end
210
+
211
+ should "display label tag in haml for simple form" do
212
+ visit '/haml/form_tag'
213
+ assert_have_selector 'form.simple-form label', :count => 4
214
+ assert_have_selector 'form.simple-form label', :content => "Username", :for => 'username'
215
+ assert_have_selector 'form.simple-form label', :content => "Password", :for => 'password'
216
+ assert_have_selector 'form.simple-form label', :content => "Gender", :for => 'gender'
217
+ end
218
+
219
+ should "display label tag in haml for advanced form" do
220
+ visit '/haml/form_tag'
221
+ assert_have_selector 'form.advanced-form label', :count => 6
222
+ assert_have_selector 'form.advanced-form label.first', :content => "Nickname", :for => 'username'
223
+ assert_have_selector 'form.advanced-form label.first', :content => "Password", :for => 'password'
224
+ assert_have_selector 'form.advanced-form label.about', :content => "About Me", :for => 'about'
225
+ assert_have_selector 'form.advanced-form label.photo', :content => "Photo" , :for => 'photo'
226
+ assert_have_selector 'form.advanced-form label.gender', :content => "Gender" , :for => 'gender'
227
+ end
228
+
229
+ should "display label tag in slim for simple form" do
230
+ visit '/slim/form_tag'
231
+ assert_have_selector 'form.simple-form label', :count => 4
232
+ assert_have_selector 'form.simple-form label', :content => "Username", :for => 'username'
233
+ assert_have_selector 'form.simple-form label', :content => "Password", :for => 'password'
234
+ assert_have_selector 'form.simple-form label', :content => "Gender", :for => 'gender'
235
+ end
236
+
237
+ should "display label tag in slim for advanced form" do
238
+ visit '/slim/form_tag'
239
+ assert_have_selector 'form.advanced-form label', :count => 6
240
+ assert_have_selector 'form.advanced-form label.first', :content => "Nickname", :for => 'username'
241
+ assert_have_selector 'form.advanced-form label.first', :content => "Password", :for => 'password'
242
+ assert_have_selector 'form.advanced-form label.about', :content => "About Me", :for => 'about'
243
+ assert_have_selector 'form.advanced-form label.photo', :content => "Photo" , :for => 'photo'
244
+ assert_have_selector 'form.advanced-form label.gender', :content => "Gender" , :for => 'gender'
245
+ end
246
+ end
247
+
248
+ context 'for #hidden_field_tag method' do
249
+ should "display hidden field in ruby" do
250
+ actual_html = hidden_field_tag(:session_key, :id => 'session_id', :value => '56768')
251
+ assert_has_tag(:input, :type => 'hidden', :id => "session_id", :name => 'session_key', :value => '56768') { actual_html }
252
+ end
253
+
254
+ should "display hidden field in erb" do
255
+ visit '/erb/form_tag'
256
+ assert_have_selector 'form.simple-form input[type=hidden]', :count => 1, :name => 'session_id', :value => "__secret__"
257
+ assert_have_selector 'form.advanced-form input[type=hidden]', :count => 1, :name => 'session_id', :value => "__secret__"
258
+ end
259
+
260
+ should "display hidden field in haml" do
261
+ visit '/haml/form_tag'
262
+ assert_have_selector 'form.simple-form input[type=hidden]', :count => 1, :name => 'session_id', :value => "__secret__"
263
+ assert_have_selector 'form.advanced-form input[type=hidden]', :count => 1, :name => 'session_id', :value => "__secret__"
264
+ end
265
+
266
+ should "display hidden field in slim" do
267
+ visit '/slim/form_tag'
268
+ assert_have_selector 'form.simple-form input[type=hidden]', :count => 1, :name => 'session_id', :value => "__secret__"
269
+ assert_have_selector 'form.advanced-form input[type=hidden]', :count => 1, :name => 'session_id', :value => "__secret__"
270
+ end
271
+ end
272
+
273
+ context 'for #text_field_tag method' do
274
+ should "display text field in ruby" do
275
+ actual_html = text_field_tag(:username, :class => 'long')
276
+ assert_has_tag(:input, :type => 'text', :class => "long", :name => 'username') { actual_html }
277
+ end
278
+
279
+ should "display text field in erb" do
280
+ visit '/erb/form_tag'
281
+ assert_have_selector 'form.simple-form input[type=text]', :count => 1, :name => 'username'
282
+ assert_have_selector 'form.advanced-form fieldset input[type=text]', :count => 1, :name => 'username', :id => 'the_username'
283
+ end
284
+
285
+ should "display text field in haml" do
286
+ visit '/haml/form_tag'
287
+ assert_have_selector 'form.simple-form input[type=text]', :count => 1, :name => 'username'
288
+ assert_have_selector 'form.advanced-form fieldset input[type=text]', :count => 1, :name => 'username', :id => 'the_username'
289
+ end
290
+
291
+ should "display text field in slim" do
292
+ visit '/slim/form_tag'
293
+ assert_have_selector 'form.simple-form input[type=text]', :count => 1, :name => 'username'
294
+ assert_have_selector 'form.advanced-form fieldset input[type=text]', :count => 1, :name => 'username', :id => 'the_username'
295
+ end
296
+ end
297
+
298
+ context 'for #text_area_tag method' do
299
+ should "display text area in ruby" do
300
+ actual_html = text_area_tag(:about, :class => 'long')
301
+ assert_has_tag(:textarea, :class => "long", :name => 'about', :rows => '', :cols => '') { actual_html }
302
+ end
303
+
304
+ should "display text area in ruby with specified content" do
305
+ actual_html = text_area_tag(:about, :value => "a test", :rows => 5, :cols => 6)
306
+ assert_has_tag(:textarea, :content => "a test", :name => 'about', :rows => "5", :cols => "6") { actual_html }
307
+ end
308
+
309
+ should "display text area in erb" do
310
+ visit '/erb/form_tag'
311
+ assert_have_selector 'form.advanced-form textarea', :count => 1, :name => 'about', :class => 'large'
312
+ end
313
+
314
+ should "display text area in haml" do
315
+ visit '/haml/form_tag'
316
+ assert_have_selector 'form.advanced-form textarea', :count => 1, :name => 'about', :class => 'large'
317
+ end
318
+
319
+ should "display text area in slim" do
320
+ visit '/slim/form_tag'
321
+ assert_have_selector 'form.advanced-form textarea', :count => 1, :name => 'about', :class => 'large'
322
+ end
323
+ end
324
+
325
+ context 'for #password_field_tag method' do
326
+ should "display password field in ruby" do
327
+ actual_html = password_field_tag(:password, :class => 'long')
328
+ assert_has_tag(:input, :type => 'password', :class => "long", :name => 'password') { actual_html }
329
+ end
330
+
331
+ should "display password field in erb" do
332
+ visit '/erb/form_tag'
333
+ assert_have_selector 'form.simple-form input[type=password]', :count => 1, :name => 'password'
334
+ assert_have_selector 'form.advanced-form input[type=password]', :count => 1, :name => 'password'
335
+ end
336
+
337
+ should "display password field in haml" do
338
+ visit '/haml/form_tag'
339
+ assert_have_selector 'form.simple-form input[type=password]', :count => 1, :name => 'password'
340
+ assert_have_selector 'form.advanced-form input[type=password]', :count => 1, :name => 'password'
341
+ end
342
+
343
+ should "display password field in slim" do
344
+ visit '/slim/form_tag'
345
+ assert_have_selector 'form.simple-form input[type=password]', :count => 1, :name => 'password'
346
+ assert_have_selector 'form.advanced-form input[type=password]', :count => 1, :name => 'password'
347
+ end
348
+ end
349
+
350
+ context 'for #file_field_tag method' do
351
+ should "display file field in ruby" do
352
+ actual_html = file_field_tag(:photo, :class => 'photo')
353
+ assert_has_tag(:input, :type => 'file', :class => "photo", :name => 'photo') { actual_html }
354
+ end
355
+
356
+ should "display file field in erb" do
357
+ visit '/erb/form_tag'
358
+ assert_have_selector 'form.advanced-form input[type=file]', :count => 1, :name => 'photo', :class => 'upload'
359
+ end
360
+
361
+ should "display file field in haml" do
362
+ visit '/haml/form_tag'
363
+ assert_have_selector 'form.advanced-form input[type=file]', :count => 1, :name => 'photo', :class => 'upload'
364
+ end
365
+
366
+ should "display file field in slim" do
367
+ visit '/slim/form_tag'
368
+ assert_have_selector 'form.advanced-form input[type=file]', :count => 1, :name => 'photo', :class => 'upload'
369
+ end
370
+ end
371
+
372
+ context "for #check_box_tag method" do
373
+ should "display check_box tag in ruby" do
374
+ actual_html = check_box_tag("clear_session")
375
+ assert_has_tag(:input, :type => 'checkbox', :value => '1', :name => 'clear_session') { actual_html }
376
+ assert_has_no_tag(:input, :type => 'hidden') { actual_html }
377
+ end
378
+
379
+ should "display check_box tag in ruby with extended attributes" do
380
+ actual_html = check_box_tag("clear_session", :disabled => true, :checked => true)
381
+ assert_has_tag(:input, :type => 'checkbox', :disabled => 'disabled', :checked => 'checked') { actual_html }
382
+ end
383
+
384
+ should "display check_box tag in erb" do
385
+ visit '/erb/form_tag'
386
+ assert_have_selector 'form.simple-form input[type=checkbox]', :count => 1
387
+ assert_have_selector 'form.advanced-form input[type=checkbox]', :value => "1", :checked => 'checked'
388
+ end
389
+
390
+ should "display check_box tag in haml" do
391
+ visit '/haml/form_tag'
392
+ assert_have_selector 'form.simple-form input[type=checkbox]', :count => 1
393
+ assert_have_selector 'form.advanced-form input[type=checkbox]', :value => "1", :checked => 'checked'
394
+ end
395
+
396
+ should "display check_box tag in slim" do
397
+ visit '/slim/form_tag'
398
+ assert_have_selector 'form.simple-form input[type=checkbox]', :count => 1
399
+ assert_have_selector 'form.advanced-form input[type=checkbox]', :value => "1", :checked => 'checked'
400
+ end
401
+ end
402
+
403
+ context "for #radio_button_tag method" do
404
+ should "display radio_button tag in ruby" do
405
+ actual_html = radio_button_tag("gender", :value => 'male')
406
+ assert_has_tag(:input, :type => 'radio', :value => 'male', :name => 'gender') { actual_html }
407
+ end
408
+
409
+ should "display radio_button tag in ruby with extended attributes" do
410
+ actual_html = radio_button_tag("gender", :disabled => true, :checked => true)
411
+ assert_has_tag(:input, :type => 'radio', :disabled => 'disabled', :checked => 'checked') { actual_html }
412
+ end
413
+
414
+ should "display radio_button tag in erb" do
415
+ visit '/erb/form_tag'
416
+ assert_have_selector 'form.simple-form input[type=radio]', :count => 1, :value => 'male'
417
+ assert_have_selector 'form.simple-form input[type=radio]', :count => 1, :value => 'female'
418
+ assert_have_selector 'form.advanced-form input[type=radio]', :value => "male", :checked => 'checked'
419
+ assert_have_selector 'form.advanced-form input[type=radio]', :value => "female"
420
+ end
421
+
422
+ should "display radio_button tag in haml" do
423
+ visit '/haml/form_tag'
424
+ assert_have_selector 'form.simple-form input[type=radio]', :count => 1, :value => 'male'
425
+ assert_have_selector 'form.simple-form input[type=radio]', :count => 1, :value => 'female'
426
+ assert_have_selector 'form.advanced-form input[type=radio]', :value => "male", :checked => 'checked'
427
+ assert_have_selector 'form.advanced-form input[type=radio]', :value => "female"
428
+ end
429
+
430
+ should "display radio_button tag in slim" do
431
+ visit '/slim/form_tag'
432
+ assert_have_selector 'form.simple-form input[type=radio]', :count => 1, :value => 'male'
433
+ assert_have_selector 'form.simple-form input[type=radio]', :count => 1, :value => 'female'
434
+ assert_have_selector 'form.advanced-form input[type=radio]', :value => "male", :checked => 'checked'
435
+ assert_have_selector 'form.advanced-form input[type=radio]', :value => "female"
436
+ end
437
+ end
438
+
439
+ context "for #select_tag method" do
440
+ should "display select tag in ruby" do
441
+ actual_html = select_tag(:favorite_color, :options => ['green', 'blue', 'black'], :include_blank => true)
442
+ assert_has_tag(:select, :name => 'favorite_color') { actual_html }
443
+ assert_has_tag('select option:first-child', :content => '') { actual_html }
444
+ assert_has_tag('select option', :content => 'green', :value => 'green') { actual_html }
445
+ assert_has_tag('select option', :content => 'blue', :value => 'blue') { actual_html }
446
+ assert_has_tag('select option', :content => 'black', :value => 'black') { actual_html }
447
+ end
448
+
449
+ should "display select tag in ruby with extended attributes" do
450
+ actual_html = select_tag(:favorite_color, :disabled => true, :options => ['only', 'option'])
451
+ assert_has_tag(:select, :disabled => 'disabled') { actual_html }
452
+ end
453
+
454
+ should "take a range as a collection for options" do
455
+ actual_html = select_tag(:favorite_color, :options => (1..3))
456
+ assert_has_tag(:select) { actual_html }
457
+ assert_has_tag('select option', :value => '1') { actual_html }
458
+ assert_has_tag('select option', :value => '2') { actual_html }
459
+ assert_has_tag('select option', :value => '3') { actual_html }
460
+ end
461
+
462
+ should "include blank for grouped options" do
463
+ opts = { "Red" => ["Rose","Fire"], "Blue" => ["Sky","Sea"] }
464
+ actual_html = select_tag( 'color', :grouped_options => opts, :include_blank => true )
465
+ assert_has_tag('select option:first-child', :value => "", :content => "") { actual_html }
466
+ end
467
+
468
+ should "return a select tag with grouped options for an nested array" do
469
+ opts = [
470
+ ["Friends",["Yoda",["Obiwan",2]]],
471
+ ["Enemies", ["Palpatine",['Darth Vader',3]]]
472
+ ]
473
+ actual_html = select_tag( 'name', :grouped_options => opts )
474
+ assert_has_tag(:select, :name => "name") { actual_html }
475
+ assert_has_tag(:optgroup, :label => "Friends") { actual_html }
476
+ assert_has_tag(:option, :value => "Yoda", :content => "Yoda") { actual_html }
477
+ assert_has_tag(:option, :value => "2", :content => "Obiwan") { actual_html }
478
+ assert_has_tag(:optgroup, :label => "Enemies") { actual_html }
479
+ assert_has_tag(:option, :value => "Palpatine", :content => "Palpatine") { actual_html }
480
+ assert_has_tag(:option, :value => "3", :content => "Darth Vader") { actual_html }
481
+ end
482
+
483
+ should "return a select tag with grouped options for a hash" do
484
+ opts = {
485
+ "Friends" => ["Yoda",["Obiwan",2]],
486
+ "Enemies" => ["Palpatine",['Darth Vader',3]]
487
+ }
488
+ actual_html = select_tag( 'name', :grouped_options => opts )
489
+ assert_has_tag(:select, :name => "name") { actual_html }
490
+ assert_has_tag(:optgroup, :label => "Friends") { actual_html }
491
+ assert_has_tag(:option, :value => "Yoda", :content => "Yoda") { actual_html }
492
+ assert_has_tag(:option, :value => "2", :content => "Obiwan") { actual_html }
493
+ assert_has_tag(:optgroup, :label => "Enemies") { actual_html }
494
+ assert_has_tag(:option, :value => "Palpatine", :content => "Palpatine") { actual_html }
495
+ assert_has_tag(:option, :value => "3", :content => "Darth Vader") { actual_html }
496
+ end
497
+
498
+ should "display select tag in ruby with multiple attribute" do
499
+ actual_html = select_tag(:favorite_color, :multiple => true, :options => ['only', 'option'])
500
+ assert_has_tag(:select, :multiple => 'multiple', :name => 'favorite_color[]') { actual_html }
501
+ end
502
+
503
+ should "display options with values and single selected" do
504
+ options = [['Green', 'green1'], ['Blue', 'blue1'], ['Black', "black1"]]
505
+ actual_html = select_tag(:favorite_color, :options => options, :selected => 'green1')
506
+ assert_has_tag(:select, :name => 'favorite_color') { actual_html }
507
+ assert_has_tag('select option', :selected => 'selected', :count => 1) { actual_html }
508
+ assert_has_tag('select option', :content => 'Green', :value => 'green1', :selected => 'selected') { actual_html }
509
+ assert_has_tag('select option', :content => 'Blue', :value => 'blue1') { actual_html }
510
+ assert_has_tag('select option', :content => 'Black', :value => 'black1') { actual_html }
511
+ end
512
+
513
+ should "display option with values and multiple selected" do
514
+ options = [['Green', 'green1'], ['Blue', 'blue1'], ['Black', "black1"]]
515
+ actual_html = select_tag(:favorite_color, :options => options, :selected => ['green1', 'Black'])
516
+ assert_has_tag(:select, :name => 'favorite_color') { actual_html }
517
+ assert_has_tag('select option', :selected => 'selected', :count => 2) { actual_html }
518
+ assert_has_tag('select option', :content => 'Green', :value => 'green1', :selected => 'selected') { actual_html }
519
+ assert_has_tag('select option', :content => 'Blue', :value => 'blue1') { actual_html }
520
+ assert_has_tag('select option', :content => 'Black', :value => 'black1', :selected => 'selected') { actual_html }
521
+ end
522
+
523
+ should "display options selected only for exact match" do
524
+ options = [['One', '1'], ['1', '10'], ['Two', "-1"]]
525
+ actual_html = select_tag(:range, :options => options, :selected => '-1')
526
+ assert_has_tag(:select, :name => 'range') { actual_html }
527
+ assert_has_tag('select option', :selected => 'selected', :count => 1) { actual_html }
528
+ assert_has_tag('select option', :content => 'Two', :value => '-1', :selected => 'selected') { actual_html }
529
+ end
530
+
531
+ should "display select tag in erb" do
532
+ visit '/erb/form_tag'
533
+ assert_have_selector 'form.simple-form select', :count => 1, :name => 'color'
534
+ assert_have_selector('select option', :content => 'green', :value => 'green')
535
+ assert_have_selector('select option', :content => 'orange', :value => 'orange')
536
+ assert_have_selector('select option', :content => 'purple', :value => 'purple')
537
+ assert_have_selector 'form.advanced-form select', :name => 'fav_color'
538
+ assert_have_selector('select option', :content => 'green', :value => '1')
539
+ assert_have_selector('select option', :content => 'orange', :value => '2', :selected => 'selected')
540
+ assert_have_selector('select option', :content => 'purple', :value => '3')
541
+ end
542
+
543
+ should "display select tag in haml" do
544
+ visit '/haml/form_tag'
545
+ assert_have_selector 'form.simple-form select', :count => 1, :name => 'color'
546
+ assert_have_selector('select option', :content => 'green', :value => 'green')
547
+ assert_have_selector('select option', :content => 'orange', :value => 'orange')
548
+ assert_have_selector('select option', :content => 'purple', :value => 'purple')
549
+ assert_have_selector 'form.advanced-form select', :name => 'fav_color'
550
+ assert_have_selector('select option', :content => 'green', :value => '1')
551
+ assert_have_selector('select option', :content => 'orange', :value => '2', :selected => 'selected')
552
+ assert_have_selector('select option', :content => 'purple', :value => '3')
553
+ end
554
+
555
+ should "display select tag in slim" do
556
+ visit '/slim/form_tag'
557
+ assert_have_selector 'form.simple-form select', :count => 1, :name => 'color'
558
+ assert_have_selector('select option', :content => 'green', :value => 'green')
559
+ assert_have_selector('select option', :content => 'orange', :value => 'orange')
560
+ assert_have_selector('select option', :content => 'purple', :value => 'purple')
561
+ assert_have_selector 'form.advanced-form select', :name => 'fav_color'
562
+ assert_have_selector('select option', :content => 'green', :value => '1')
563
+ assert_have_selector('select option', :content => 'orange', :value => '2', :selected => 'selected')
564
+ assert_have_selector('select option', :content => 'purple', :value => '3')
565
+ end
566
+ end
567
+
568
+ context 'for #submit_tag method' do
569
+ should "display submit tag in ruby" do
570
+ actual_html = submit_tag("Update", :class => 'success')
571
+ assert_has_tag(:input, :type => 'submit', :class => "success", :value => 'Update') { actual_html }
572
+ end
573
+
574
+ should "display submit tag in erb" do
575
+ visit '/erb/form_tag'
576
+ assert_have_selector 'form.simple-form input[type=submit]', :count => 1, :value => "Submit"
577
+ assert_have_selector 'form.advanced-form input[type=submit]', :count => 1, :value => "Login"
578
+ end
579
+
580
+ should "display submit tag in haml" do
581
+ visit '/haml/form_tag'
582
+ assert_have_selector 'form.simple-form input[type=submit]', :count => 1, :value => "Submit"
583
+ assert_have_selector 'form.advanced-form input[type=submit]', :count => 1, :value => "Login"
584
+ end
585
+
586
+ should "display submit tag in slim" do
587
+ visit '/slim/form_tag'
588
+ assert_have_selector 'form.simple-form input[type=submit]', :count => 1, :value => "Submit"
589
+ assert_have_selector 'form.advanced-form input[type=submit]', :count => 1, :value => "Login"
590
+ end
591
+ end
592
+
593
+ context 'for #button_tag method' do
594
+ should "display submit tag in ruby" do
595
+ actual_html = button_tag("Cancel", :class => 'clear')
596
+ assert_has_tag(:input, :type => 'button', :class => "clear", :value => 'Cancel') { actual_html }
597
+ end
598
+
599
+ should "display submit tag in erb" do
600
+ visit '/erb/form_tag'
601
+ assert_have_selector 'form.advanced-form input[type=button]', :count => 1, :value => "Cancel"
602
+ end
603
+
604
+ should "display submit tag in haml" do
605
+ visit '/haml/form_tag'
606
+ assert_have_selector 'form.advanced-form input[type=button]', :count => 1, :value => "Cancel"
607
+ end
608
+
609
+ should "display submit tag in slim" do
610
+ visit '/slim/form_tag'
611
+ assert_have_selector 'form.advanced-form input[type=button]', :count => 1, :value => "Cancel"
612
+ end
613
+ end
614
+
615
+ context 'for #image_submit_tag method' do
616
+ setup do
617
+ @stamp = stop_time_for_test.to_i
618
+ end
619
+
620
+ should "display image submit tag in ruby with relative path" do
621
+ actual_html = image_submit_tag('buttons/ok.png', :class => 'success')
622
+ assert_has_tag(:input, :type => 'image', :class => "success", :src => "/images/buttons/ok.png?#{@stamp}") { actual_html }
623
+ end
624
+
625
+ should "display image submit tag in ruby with absolute path" do
626
+ actual_html = image_submit_tag('/system/ok.png', :class => 'success')
627
+ assert_has_tag(:input, :type => 'image', :class => "success", :src => "/system/ok.png?#{@stamp}") { actual_html }
628
+ end
629
+
630
+ should "display image submit tag in erb" do
631
+ visit '/erb/form_tag'
632
+ assert_have_selector 'form.advanced-form input[type=image]', :count => 1, :src => "/images/buttons/submit.png?#{@stamp}"
633
+ end
634
+
635
+ should "display image submit tag in haml" do
636
+ visit '/haml/form_tag'
637
+ assert_have_selector 'form.advanced-form input[type=image]', :count => 1, :src => "/images/buttons/submit.png?#{@stamp}"
638
+ end
639
+
640
+ should "display image submit tag in slim" do
641
+ visit '/slim/form_tag'
642
+ assert_have_selector 'form.advanced-form input[type=image]', :count => 1, :src => "/images/buttons/submit.png?#{@stamp}"
643
+ end
644
+ end
645
+ end