fortitude 0.0.4-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/.rspec-local +4 -0
  4. data/.travis.yml +50 -0
  5. data/CHANGES.md +62 -0
  6. data/CONTRIBUTORS.md +6 -0
  7. data/Gemfile +5 -0
  8. data/LICENSE.txt +22 -0
  9. data/README-erector.md +246 -0
  10. data/README.md +15 -0
  11. data/Rakefile +67 -0
  12. data/ext/FortitudeJrubyNativeExtService.java +11 -0
  13. data/ext/com/fortituderuby/ext/fortitude/FortitudeNativeLibrary.java +223 -0
  14. data/ext/fortitude_native_ext/extconf.rb +4 -0
  15. data/ext/fortitude_native_ext/fortitude_native_ext.c +333 -0
  16. data/fortitude.gemspec +42 -0
  17. data/lib/fortitude.rb +7 -0
  18. data/lib/fortitude/doctypes.rb +48 -0
  19. data/lib/fortitude/doctypes/base.rb +42 -0
  20. data/lib/fortitude/doctypes/html4.rb +21 -0
  21. data/lib/fortitude/doctypes/html4_frameset.rb +20 -0
  22. data/lib/fortitude/doctypes/html4_strict.rb +18 -0
  23. data/lib/fortitude/doctypes/html4_tags_frameset.rb +53 -0
  24. data/lib/fortitude/doctypes/html4_tags_strict.rb +274 -0
  25. data/lib/fortitude/doctypes/html4_tags_transitional.rb +115 -0
  26. data/lib/fortitude/doctypes/html4_transitional.rb +19 -0
  27. data/lib/fortitude/doctypes/html5.rb +373 -0
  28. data/lib/fortitude/doctypes/unknown_doctype.rb +20 -0
  29. data/lib/fortitude/doctypes/xhtml10.rb +20 -0
  30. data/lib/fortitude/doctypes/xhtml10_frameset.rb +18 -0
  31. data/lib/fortitude/doctypes/xhtml10_strict.rb +18 -0
  32. data/lib/fortitude/doctypes/xhtml10_transitional.rb +18 -0
  33. data/lib/fortitude/doctypes/xhtml11.rb +30 -0
  34. data/lib/fortitude/errors.rb +153 -0
  35. data/lib/fortitude/extensions/fortitude_ruby_ext.rb +76 -0
  36. data/lib/fortitude/extensions/native_extensions.rb +33 -0
  37. data/lib/fortitude/method_templates/assign_locals_from_template.rb.smpl +22 -0
  38. data/lib/fortitude/method_templates/need_assignment_template.rb.smpl +16 -0
  39. data/lib/fortitude/method_templates/need_method_template.rb.smpl +4 -0
  40. data/lib/fortitude/method_templates/simple_template.rb +50 -0
  41. data/lib/fortitude/method_templates/tag_method_template.rb.smpl +68 -0
  42. data/lib/fortitude/method_templates/text_method_template.rb.smpl +17 -0
  43. data/lib/fortitude/rails.rb +26 -0
  44. data/lib/fortitude/rails/helpers.rb +153 -0
  45. data/lib/fortitude/rails/railtie.rb +256 -0
  46. data/lib/fortitude/rails/renderer.rb +43 -0
  47. data/lib/fortitude/rails/template_handler.rb +23 -0
  48. data/lib/fortitude/rails/widget_methods.rb +13 -0
  49. data/lib/fortitude/rails/yielded_object_outputter.rb +31 -0
  50. data/lib/fortitude/rendering_context.rb +205 -0
  51. data/lib/fortitude/support/assigns_proxy.rb +77 -0
  52. data/lib/fortitude/support/class_inheritable_attributes.rb +98 -0
  53. data/lib/fortitude/support/instance_variable_set.rb +76 -0
  54. data/lib/fortitude/support/staticized_method.rb +87 -0
  55. data/lib/fortitude/tags/partial_tag_placeholder.rb +19 -0
  56. data/lib/fortitude/tags/tag.rb +189 -0
  57. data/lib/fortitude/tags/tag_return_value.rb +13 -0
  58. data/lib/fortitude/tags/tag_store.rb +53 -0
  59. data/lib/fortitude/tags/tag_support.rb +51 -0
  60. data/lib/fortitude/tags/tags_module.rb +16 -0
  61. data/lib/fortitude/tilt.rb +17 -0
  62. data/lib/fortitude/tilt/fortitude_template.rb +169 -0
  63. data/lib/fortitude/version.rb +3 -0
  64. data/lib/fortitude/widget.rb +54 -0
  65. data/lib/fortitude/widget/around_content.rb +53 -0
  66. data/lib/fortitude/widget/capturing.rb +37 -0
  67. data/lib/fortitude/widget/content.rb +61 -0
  68. data/lib/fortitude/widget/doctypes.rb +53 -0
  69. data/lib/fortitude/widget/helpers.rb +62 -0
  70. data/lib/fortitude/widget/integration.rb +76 -0
  71. data/lib/fortitude/widget/localization.rb +63 -0
  72. data/lib/fortitude/widget/modules_and_subclasses.rb +58 -0
  73. data/lib/fortitude/widget/needs.rb +164 -0
  74. data/lib/fortitude/widget/non_rails_widget_methods.rb +13 -0
  75. data/lib/fortitude/widget/rendering.rb +98 -0
  76. data/lib/fortitude/widget/start_and_end_comments.rb +69 -0
  77. data/lib/fortitude/widget/staticization.rb +50 -0
  78. data/lib/fortitude/widget/tag_like_methods.rb +102 -0
  79. data/lib/fortitude/widget/tags.rb +55 -0
  80. data/lib/fortitude/widget/temporary_overrides.rb +28 -0
  81. data/lib/fortitude/widget/widget_class_inheritable_attributes.rb +35 -0
  82. data/lib/fortitude/widgets.rb +12 -0
  83. data/lib/fortitude/widgets/html4_frameset.rb +9 -0
  84. data/lib/fortitude/widgets/html4_strict.rb +9 -0
  85. data/lib/fortitude/widgets/html4_transitional.rb +9 -0
  86. data/lib/fortitude/widgets/html5.rb +9 -0
  87. data/lib/fortitude/widgets/xhtml10_frameset.rb +9 -0
  88. data/lib/fortitude/widgets/xhtml10_strict.rb +9 -0
  89. data/lib/fortitude/widgets/xhtml10_transitional.rb +9 -0
  90. data/lib/fortitude/widgets/xhtml11.rb +9 -0
  91. data/lib/fortitude_jruby_native_ext.jar +0 -0
  92. data/spec/helpers/global_helper.rb +8 -0
  93. data/spec/helpers/rails_helpers.rb +85 -0
  94. data/spec/helpers/rails_server.rb +386 -0
  95. data/spec/helpers/system_helpers.rb +117 -0
  96. data/spec/rails/basic_rails_system_spec.rb +7 -0
  97. data/spec/rails/capture_system_spec.rb +75 -0
  98. data/spec/rails/class_loading_system_spec.rb +63 -0
  99. data/spec/rails/complex_helpers_system_spec.rb +33 -0
  100. data/spec/rails/data_passing_system_spec.rb +96 -0
  101. data/spec/rails/default_layout_system_spec.rb +15 -0
  102. data/spec/rails/development_mode_system_spec.rb +67 -0
  103. data/spec/rails/erb_integration_system_spec.rb +23 -0
  104. data/spec/rails/helpers_include_all_off_system_spec.rb +7 -0
  105. data/spec/rails/helpers_system_spec.rb +79 -0
  106. data/spec/rails/helpers_unrefined_system_spec.rb +7 -0
  107. data/spec/rails/layouts_system_spec.rb +60 -0
  108. data/spec/rails/localization_system_spec.rb +38 -0
  109. data/spec/rails/production_mode_system_spec.rb +13 -0
  110. data/spec/rails/rendering_context_system_spec.rb +64 -0
  111. data/spec/rails/rendering_system_spec.rb +158 -0
  112. data/spec/rails/rules_system_spec.rb +23 -0
  113. data/spec/rails/static_method_system_spec.rb +12 -0
  114. data/spec/rails/templates/base/app/controllers/application_controller.rb +15 -0
  115. data/spec/rails/templates/base/app/controllers/working_controller.rb +5 -0
  116. data/spec/rails/templates/base/app/views/layouts/application.html.erb +11 -0
  117. data/spec/rails/templates/base/config/routes.rb +4 -0
  118. data/spec/rails/templates/base/config/secrets.yml +22 -0
  119. data/spec/rails/templates/basic_rails_system_spec/app/controllers/basic_rails_system_spec_controller.rb +8 -0
  120. data/spec/rails/templates/basic_rails_system_spec/app/views/basic_rails_system_spec/trivial_widget.rb +5 -0
  121. data/spec/rails/templates/capture_system_spec/app/controllers/capture_system_spec_controller.rb +37 -0
  122. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/_some_erb_partial.html.erb +1 -0
  123. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/another_widget.rb +7 -0
  124. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/capture_erb_from_widget.rb +11 -0
  125. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/capture_widget_from_erb.html.erb +9 -0
  126. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/capture_widget_from_widget.rb +17 -0
  127. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/some_widget.rb +5 -0
  128. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/widget_content_for.rb +19 -0
  129. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/widget_layout_needing_content_yield_with_erb.html.erb +13 -0
  130. data/spec/rails/templates/capture_system_spec/app/views/capture_system_spec/widget_provide.rb +13 -0
  131. data/spec/rails/templates/capture_system_spec/app/views/layouts/erb_layout_needing_content.html.erb +15 -0
  132. data/spec/rails/templates/capture_system_spec/app/views/layouts/widget_layout_needing_content_content_for.rb +23 -0
  133. data/spec/rails/templates/capture_system_spec/app/views/layouts/widget_layout_needing_content_yield.rb +23 -0
  134. data/spec/rails/templates/class_loading_system_spec/app/controllers/class_loading_system_spec_controller.rb +74 -0
  135. data/spec/rails/templates/class_loading_system_spec/app/models/views/app_models_helper.rb +5 -0
  136. data/spec/rails/templates/class_loading_system_spec/app/models/views/models_widget.rb +5 -0
  137. data/spec/rails/templates/class_loading_system_spec/app/views/autoload_namespace/autoload_widget.rb +11 -0
  138. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_loaded_underscore_widget.rb +11 -0
  139. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_underscore_view.rb +5 -0
  140. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/_underscore_widget.rb +11 -0
  141. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/app_models.rb +6 -0
  142. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/autoload_one_widget_from_another.rb +7 -0
  143. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/class_should_not_load.rb +9 -0
  144. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/lib_views.rb +8 -0
  145. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/use_lib_widget_from_view_widget.rb +9 -0
  146. data/spec/rails/templates/class_loading_system_spec/app/views/class_loading_system_spec/use_models_widget_from_view_widget.rb +7 -0
  147. data/spec/rails/templates/class_loading_system_spec/app/views/some_namespace/some_other_namespace/.git_keep +0 -0
  148. data/spec/rails/templates/class_loading_system_spec/app/views/sub_widget.rb +5 -0
  149. data/spec/rails/templates/class_loading_system_spec/lib/arbitrary_name/some_widget.rb +7 -0
  150. data/spec/rails/templates/class_loading_system_spec/lib/views/class_loading_system_spec/lib_views_helper.rb +5 -0
  151. data/spec/rails/templates/class_loading_system_spec/lib/views/class_loading_system_spec/widget_defined_outside_app_views.rb +5 -0
  152. data/spec/rails/templates/class_loading_system_spec/lib/views/lib_widget.rb +5 -0
  153. data/spec/rails/templates/complex_helpers_system_spec/app/controllers/complex_helpers_system_spec_controller.rb +14 -0
  154. data/spec/rails/templates/complex_helpers_system_spec/app/views/complex_helpers_system_spec/cache_test.rb +12 -0
  155. data/spec/rails/templates/complex_helpers_system_spec/app/views/complex_helpers_system_spec/fields_for_test.rb +14 -0
  156. data/spec/rails/templates/complex_helpers_system_spec/app/views/complex_helpers_system_spec/form_for_test.rb +14 -0
  157. data/spec/rails/templates/complex_helpers_system_spec/config/environments/development.rb +31 -0
  158. data/spec/rails/templates/data_passing_system_spec/app/controllers/data_passing_system_spec_controller.rb +101 -0
  159. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_erb_to_parallel_widget_handoff_erb.html.erb +3 -0
  160. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_implicit_erb_to_widget_handoff_erb.html.erb +3 -0
  161. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_implicit_variable_write_erb.html.erb +1 -0
  162. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/_widget_to_parallel_erb_handoff_erb.html.erb +1 -0
  163. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/erb_copied_variables.html.erb +1 -0
  164. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/erb_to_parallel_widget_handoff.html.erb +2 -0
  165. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/erb_to_parallel_widget_handoff_widget.rb +5 -0
  166. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/explicit_controller_variable_read.rb +6 -0
  167. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/extra_variables.rb +23 -0
  168. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/extra_variables_requested.rb +24 -0
  169. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_erb_to_widget_handoff.html.erb +2 -0
  170. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_erb_to_widget_handoff_widget.rb +7 -0
  171. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access.rb +5 -0
  172. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance.rb +6 -0
  173. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance_child_one.rb +7 -0
  174. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance_child_two.rb +5 -0
  175. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inheritance_parent.rb +3 -0
  176. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_shared_variable_access_inner.rb +8 -0
  177. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_read.rb +5 -0
  178. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_read_inner.rb +7 -0
  179. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_write.html.erb +2 -0
  180. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/implicit_variable_write_widget.rb +7 -0
  181. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing.rb +7 -0
  182. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing_child.rb +7 -0
  183. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing_partial.rb +7 -0
  184. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/parent_to_child_passing_partial_child.rb +7 -0
  185. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/passing_data_widget.rb +8 -0
  186. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/passing_locals_and_controller_variables_widget.rb +9 -0
  187. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/passing_locals_widget.rb +8 -0
  188. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/variables_to_layout.rb +7 -0
  189. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/widget_copied_variables.rb +9 -0
  190. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/widget_to_parallel_erb_handoff.html.erb +2 -0
  191. data/spec/rails/templates/data_passing_system_spec/app/views/data_passing_system_spec/widget_to_parallel_erb_handoff_widget.rb +5 -0
  192. data/spec/rails/templates/data_passing_system_spec/app/views/layouts/data_layout.rb +14 -0
  193. data/spec/rails/templates/default_layout_system_spec/app/controllers/default_layout_system_spec_controller.rb +9 -0
  194. data/spec/rails/templates/default_layout_system_spec/app/views/default_layout_system_spec/erb_with_widget_default_layout.html.erb +1 -0
  195. data/spec/rails/templates/default_layout_system_spec/app/views/default_layout_system_spec/widget_with_widget_default_layout.rb +5 -0
  196. data/spec/rails/templates/default_layout_system_spec/app/views/layouts/application.rb +12 -0
  197. data/spec/rails/templates/development_mode_system_spec/app/controllers/development_mode_system_spec_controller.rb +9 -0
  198. data/spec/rails/templates/development_mode_system_spec/app/views/development_mode_system_spec/reload_widget.rb +7 -0
  199. data/spec/rails/templates/development_mode_system_spec/app/views/development_mode_system_spec/sample_output.rb +9 -0
  200. data/spec/rails/templates/erb_integration_system_spec/app/controllers/erb_integration_system_spec_controller.rb +10 -0
  201. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/_erb_partial_from_widget_partial.html.erb +1 -0
  202. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/_fortitude_partial_with_underscore_partial.rb +5 -0
  203. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/_prefers_erb_partial_partial.html.erb +1 -0
  204. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/erb_partial_from_widget.rb +7 -0
  205. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/erb_to_widget_with_render_partial.html.erb +3 -0
  206. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/erb_to_widget_with_render_partial_widget.rb +5 -0
  207. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/fortitude_partial_with_underscore.html.erb +3 -0
  208. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/prefers_erb_partial.html.erb +3 -0
  209. data/spec/rails/templates/erb_integration_system_spec/app/views/erb_integration_system_spec/prefers_erb_partial_partial.rb +5 -0
  210. data/spec/rails/templates/helpers_include_all_off_system_spec/app/controllers/helpers_include_all_off_system_spec_controller.rb +13 -0
  211. data/spec/rails/templates/helpers_include_all_off_system_spec/app/helpers/application_helper.rb +5 -0
  212. data/spec/rails/templates/helpers_include_all_off_system_spec/app/helpers/some_helper.rb +5 -0
  213. data/spec/rails/templates/helpers_include_all_off_system_spec/app/views/helpers_include_all_off_system_spec/include_all_off.rb +23 -0
  214. data/spec/rails/templates/helpers_include_all_off_system_spec/config/application.rb +28 -0
  215. data/spec/rails/templates/helpers_system_spec/app/controllers/helpers_system_spec_controller.rb +86 -0
  216. data/spec/rails/templates/helpers_system_spec/app/helpers/some_helper.rb +21 -0
  217. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_disabled.rb +37 -0
  218. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance.rb +6 -0
  219. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance_child_one.rb +34 -0
  220. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance_child_two.rb +36 -0
  221. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/automatic_helpers_inheritance_parent.rb +4 -0
  222. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/basic_helpers.rb +13 -0
  223. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/block_helpers.rb +7 -0
  224. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/built_in_outputting_helpers.rb +13 -0
  225. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/built_in_outputting_to_returning.rb +8 -0
  226. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/built_in_returning_to_outputting.rb +10 -0
  227. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/controller_helper_method.rb +5 -0
  228. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/controller_helper_module.rb +5 -0
  229. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_helper_outputs.rb +6 -0
  230. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_helpers_basic.rb +5 -0
  231. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_helpers_with_a_block.rb +6 -0
  232. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_outputting_to_returning.rb +7 -0
  233. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/custom_returning_to_outputting.rb +10 -0
  234. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/helper_settings_inheritance.rb +10 -0
  235. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/helper_settings_inheritance_parent.rb +4 -0
  236. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/helpers_that_output_when_refined.rb +9 -0
  237. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/private_helper_erb.html.erb +1 -0
  238. data/spec/rails/templates/helpers_system_spec/app/views/helpers_system_spec/private_helper_fortitude.rb +5 -0
  239. data/spec/rails/templates/helpers_system_spec/lib/some_stuff.rb +5 -0
  240. data/spec/rails/templates/helpers_unrefined_system_spec/app/controllers/helpers_unrefined_system_spec_controller.rb +7 -0
  241. data/spec/rails/templates/helpers_unrefined_system_spec/app/views/helpers_unrefined_system_spec/helpers_that_output_when_refined.rb +9 -0
  242. data/spec/rails/templates/helpers_unrefined_system_spec/config/environments/production.rb +31 -0
  243. data/spec/rails/templates/layouts_system_spec/app/controllers/layouts_system_spec_controller.rb +31 -0
  244. data/spec/rails/templates/layouts_system_spec/app/views/layouts/alternate.html.erb +11 -0
  245. data/spec/rails/templates/layouts_system_spec/app/views/layouts/application.html.erb +26 -0
  246. data/spec/rails/templates/layouts_system_spec/app/views/layouts/explicit_yield.rb +12 -0
  247. data/spec/rails/templates/layouts_system_spec/app/views/layouts/widget_layout.rb +22 -0
  248. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/erb_inside_widget_layout.html.erb +8 -0
  249. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/the_render_widget.rb +5 -0
  250. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/widget_inside_erb_layout.rb +8 -0
  251. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/widget_inside_widget_layout.rb +8 -0
  252. data/spec/rails/templates/layouts_system_spec/app/views/layouts_system_spec/yield_from_widget_explicitly.rb +5 -0
  253. data/spec/rails/templates/localization_system_spec/app/controllers/localization_system_spec_controller.rb +31 -0
  254. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/content_method.rb +13 -0
  255. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/dot_notation.rb +5 -0
  256. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/explicit_html.rb +13 -0
  257. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/i18n_t.rb +5 -0
  258. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/native_support.rb +7 -0
  259. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/readjust_base.rb +7 -0
  260. data/spec/rails/templates/localization_system_spec/app/views/localization_system_spec/t.rb +5 -0
  261. data/spec/rails/templates/localization_system_spec/config/locales/en.yml +21 -0
  262. data/spec/rails/templates/localization_system_spec/config/locales/fr.yml +14 -0
  263. data/spec/rails/templates/localization_system_spec/config/locales/pt.yml +2 -0
  264. data/spec/rails/templates/production_mode_system_spec/app/controllers/production_mode_system_spec_controller.rb +5 -0
  265. data/spec/rails/templates/production_mode_system_spec/app/views/production_mode_system_spec/sample_output.rb +9 -0
  266. data/spec/rails/templates/rendering_context_system_spec/app/controllers/rendering_context_system_spec_controller.rb +72 -0
  267. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/_start_end_widget_through_partials_partial.html.erb +1 -0
  268. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/_uses_direct_context_for_all_widgets_partial.html.erb +1 -0
  269. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/_uses_specified_context_through_nesting_partial.html.erb +2 -0
  270. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/render_widget.rb +5 -0
  271. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_basic.rb +12 -0
  272. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_basic_inner.rb +7 -0
  273. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_through_partials.rb +16 -0
  274. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/start_end_widget_through_partials_partial_widget.rb +7 -0
  275. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_direct_context_for_all_widgets.rb +7 -0
  276. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_direct_context_for_all_widgets_widget.rb +5 -0
  277. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_direct_context_in_view.rb +5 -0
  278. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_in_partials.html.erb +3 -0
  279. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_in_partials_partial.rb +5 -0
  280. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_in_view.rb +5 -0
  281. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_through_nesting.rb +6 -0
  282. data/spec/rails/templates/rendering_context_system_spec/app/views/rendering_context_system_spec/uses_specified_context_through_nesting_inner_partial.rb +5 -0
  283. data/spec/rails/templates/rendering_context_system_spec/lib/simple_rc.rb +17 -0
  284. data/spec/rails/templates/rendering_system_spec/app/controllers/rendering_system_spec_controller.rb +111 -0
  285. data/spec/rails/templates/rendering_system_spec/app/views/layouts/application.html.erb +19 -0
  286. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/_layout_for_partial.html.erb +3 -0
  287. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/_the_partial.html.erb +1 -0
  288. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/partial_with_layout.rb +5 -0
  289. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_collection.html.erb +3 -0
  290. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_collection_as.html.erb +3 -0
  291. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_file_from_widget.rb +7 -0
  292. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_html_safe_strings.rb +16 -0
  293. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_inline_from_widget.rb +11 -0
  294. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_object.html.erb +3 -0
  295. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_partial_from_widget.rb +7 -0
  296. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_partial_with_layout.html.erb +3 -0
  297. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_partial_with_widget_layout.html.erb +3 -0
  298. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_template_from_widget.rb +7 -0
  299. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/render_text_from_widget.rb +7 -0
  300. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/stream_widget.rb +13 -0
  301. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/trivial_widget.rb +5 -0
  302. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/widget_layout_for_partial.rb +7 -0
  303. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/widget_with_name.rb +7 -0
  304. data/spec/rails/templates/rendering_system_spec/app/views/rendering_system_spec/word.rb +7 -0
  305. data/spec/rails/templates/rendering_system_spec/app/views/widget_to_render.rb +7 -0
  306. data/spec/rails/templates/rules_system_spec/app/controllers/rules_system_spec_controller.rb +22 -0
  307. data/spec/rails/templates/rules_system_spec/app/views/layouts/fortitude_layout_with_p.rb +19 -0
  308. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/_intervening_partial_erb_partial.html.erb +1 -0
  309. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/intervening_partial.rb +9 -0
  310. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/intervening_partial_fortitude_partial.rb +9 -0
  311. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalid_start_tag_in_partial.html.erb +3 -0
  312. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalid_start_tag_in_partial_partial.rb +9 -0
  313. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalid_start_tag_in_view.rb +9 -0
  314. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalidly_nested_tag.rb +11 -0
  315. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalidly_nested_tag_in_partial.html.erb +3 -0
  316. data/spec/rails/templates/rules_system_spec/app/views/rules_system_spec/invalidly_nested_tag_in_partial_partial.rb +11 -0
  317. data/spec/rails/templates/static_method_system_spec/app/controllers/static_method_system_spec_controller.rb +15 -0
  318. data/spec/rails/templates/static_method_system_spec/app/helpers/some_helper.rb +10 -0
  319. data/spec/rails/templates/static_method_system_spec/app/views/static_method_system_spec/allows_helper_access.rb +8 -0
  320. data/spec/rails/templates/static_method_system_spec/app/views/static_method_system_spec/localization.rb +7 -0
  321. data/spec/rails/templates/static_method_system_spec/config/locales/en.yml +4 -0
  322. data/spec/rails/templates/static_method_system_spec/config/locales/fr.yml +4 -0
  323. data/spec/system/around_content_system_spec.rb +399 -0
  324. data/spec/system/assigns_system_spec.rb +316 -0
  325. data/spec/system/attribute_rules_system_spec.rb +227 -0
  326. data/spec/system/basic_system_spec.rb +9 -0
  327. data/spec/system/content_inheritance_system_spec.rb +13 -0
  328. data/spec/system/convenience_methods_system_spec.rb +30 -0
  329. data/spec/system/doctypes_system_spec.rb +228 -0
  330. data/spec/system/erector_compatibility_system_spec.rb +84 -0
  331. data/spec/system/escaping_system_spec.rb +43 -0
  332. data/spec/system/formatting_system_spec.rb +63 -0
  333. data/spec/system/helpers_system_spec.rb +235 -0
  334. data/spec/system/id_uniqueness_system_spec.rb +205 -0
  335. data/spec/system/inline_system_spec.rb +58 -0
  336. data/spec/system/localization_system_spec.rb +94 -0
  337. data/spec/system/method_precedence_system_spec.rb +48 -0
  338. data/spec/system/needs_system_spec.rb +381 -0
  339. data/spec/system/other_outputters_system_spec.rb +117 -0
  340. data/spec/system/rails_not_available_spec.rb +11 -0
  341. data/spec/system/rebuild_notifications_system_spec.rb +208 -0
  342. data/spec/system/rendering_context_system_spec.rb +83 -0
  343. data/spec/system/setting_inheritance_system_spec.rb +585 -0
  344. data/spec/system/shared_variable_system_spec.rb +120 -0
  345. data/spec/system/start_end_comments_system_spec.rb +363 -0
  346. data/spec/system/static_method_system_spec.rb +348 -0
  347. data/spec/system/tag_rendering_system_spec.rb +260 -0
  348. data/spec/system/tag_return_value_system_spec.rb +41 -0
  349. data/spec/system/tag_rules_system_spec.rb +196 -0
  350. data/spec/system/tag_updating_system_spec.rb +171 -0
  351. data/spec/system/tilt_system_spec.rb +382 -0
  352. data/spec/system/unparsed_data_system_spec.rb +16 -0
  353. data/spec/system/void_tags_system_spec.rb +90 -0
  354. data/spec/system/widget_return_values_system_spec.rb +107 -0
  355. metadata +759 -0
@@ -0,0 +1,117 @@
1
+ require 'active_support'
2
+ require 'fortitude'
3
+
4
+ module SystemHelpers
5
+ extend ActiveSupport::Concern
6
+
7
+ class IvarAccessible
8
+ def [](x)
9
+ instance_variable_get("@#{x}")
10
+ end
11
+
12
+ def []=(x, y)
13
+ instance_variable_set("@#{x}", y)
14
+ end
15
+ end
16
+
17
+ attr_reader :ivars
18
+
19
+ def rc(options = { })
20
+ options[:instance_variables_object] = ivars unless options.has_key?(:instance_variables_object)
21
+ ::Fortitude::RenderingContext.new(options)
22
+ end
23
+
24
+ def html_from(rendering_context)
25
+ rendering_context.output_buffer_holder.output_buffer.to_s
26
+ end
27
+
28
+ def define_helper(name, &block)
29
+ @helpers_class.send(:define_method, name, &block)
30
+ end
31
+
32
+ class TestDoctype < Fortitude::Doctypes::Base
33
+ def initialize
34
+ super(:test_doctype, "FORTITUDE TEST")
35
+ end
36
+
37
+ def close_void_tags_must_be
38
+ nil
39
+ end
40
+
41
+ def default_javascript_tag_attributes
42
+ { }
43
+ end
44
+
45
+ def needs_cdata_in_javascript_tag?
46
+ false
47
+ end
48
+
49
+ tag :p, :newline_before => true, :valid_attributes => %w{class}, :can_enclose => %w{a span br b _text}, :spec => 'THE_SPEC_FOR_P'
50
+ tag :div, :newline_before => true, :valid_attributes => %w{aaaaaaaaaaaaaa}, :can_enclose => %w{div p hr}
51
+ tag :span
52
+ tag :hr, :content_allowed => false
53
+ tag :br, :content_allowed => false, :spec => 'THE_SPEC_FOR_BR'
54
+ tag :a
55
+ tag :b
56
+ tag :nav, :newline_before => true
57
+ tag :h1, :newline_before => true
58
+ tag :img, :content_allowed => false
59
+ tag :script, :newline_before => true, :escape_direct_content => false
60
+ tag :head, :newline_before => true
61
+ tag :style, :newline_before => true, :escape_direct_content => false
62
+ end
63
+
64
+ class TestWidgetClass < Fortitude::Widget
65
+ doctype TestDoctype.new
66
+ end
67
+
68
+ def widget_class(options = { }, &block)
69
+ klass = Class.new(options[:superclass] || TestWidgetClass, &block)
70
+ $spec_widget_seq ||= 0
71
+ $spec_widget_seq += 1
72
+ ::Object.const_set("SpecWidget#{$spec_widget_seq}", klass)
73
+ klass
74
+ end
75
+
76
+ def widget_class_with_content(options = { }, &block)
77
+ wc = widget_class(options)
78
+ wc.send(:define_method, :content, &block)
79
+ wc
80
+ end
81
+
82
+ def render(widget_or_class, options = { })
83
+ widget = if widget_or_class.kind_of?(Class)
84
+ widget_or_class.new(options[:assigns] || { })
85
+ else
86
+ widget_or_class
87
+ end
88
+ rendering_context = options[:rendering_context] || rc
89
+ widget.render_to(rendering_context)
90
+ html_from(rendering_context)
91
+ end
92
+
93
+ def capture_exception(klass = StandardError, &block)
94
+ out = nil
95
+ begin
96
+ block.call
97
+ rescue klass => e
98
+ out = e
99
+ end
100
+ raise "Exception of class #{klass.inspect} was expected, but none was raised" unless out
101
+ out
102
+ end
103
+
104
+ def render_content(options = { }, &block)
105
+ widget_class = widget_class_with_content(options, &block)
106
+ render(widget_class, options)
107
+ end
108
+
109
+ included do
110
+ before :each do
111
+ @helpers_class = Class.new
112
+ @helpers = @helpers_class.new
113
+ @ivars = IvarAccessible.new
114
+ @yield_block = double("yield_block")
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,7 @@
1
+ describe "basic Rails support", :type => :rails do
2
+ uses_rails_with_template :basic_rails_system_spec
3
+
4
+ it "should be able to render a trivial widget" do
5
+ expect_match("trivial_widget", /layout_default/, /hello, world/)
6
+ end
7
+ end
@@ -0,0 +1,75 @@
1
+ describe "Rails capture support", :type => :rails do
2
+ uses_rails_with_template :capture_system_spec
3
+
4
+ it "should successfully capture a widget partial with capture { } in an ERb view" do
5
+ expect_match('capture_widget_from_erb', %r{Widget text is:\s+<h3>\s*this is some_widget</h3>\s*END}mi)
6
+ end
7
+
8
+ it "should successfully capture an ERb partial with capture { } in a widget" do
9
+ expect_match('capture_erb_from_widget', %r{Widget text is:\s+<h3>\s*this is some_erb_partial</h3>\s*END}mi)
10
+ end
11
+
12
+ it "should successfully capture a widget with capture { } in a widget" do
13
+ expect_match('capture_widget_from_widget', %r{Rendered with widget:\s*<h3>\s*this is another_widget rendered_with_widget</h3>.*Rendered with render_partial:\s*<h3>\s*this is another_widget rendered_with_render_partial\s*</h3>\s*END}mi)
14
+ end
15
+
16
+ it "should be able to provide content in a widget with content_for" do
17
+ expect_match('widget_content_for',
18
+ %r{erb_layout_needing_content}i,
19
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
20
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
21
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
22
+ :no_layout => true)
23
+ end
24
+
25
+ it "should be able to provide content in a widget with provide" do
26
+ skip "Rails 3.0.x doesn't support :provide" if @rails_server.rails_version =~ /^3\.0\./
27
+
28
+ expect_match('widget_provide',
29
+ %r{erb_layout_needing_content}i,
30
+ %r{Foo content is: <h5>this is content for foo!</h5>}mi,
31
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
32
+ %r{Bar content is: <h3>this is content for bar!</h3>}mi,
33
+ :no_layout => true)
34
+ end
35
+
36
+ describe "should be able to retrieve stored content in a widget with yield :name" do
37
+ it "when provided by ERb" do
38
+ expect_match('widget_layout_needing_content_yield_with_erb',
39
+ %r{widget_layout_needing_content}mi,
40
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
41
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
42
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
43
+ :no_layout => true)
44
+ end
45
+
46
+ it "when provided by a widget" do
47
+ expect_match('widget_layout_needing_content_yield_with_widget',
48
+ %r{widget_layout_needing_content}mi,
49
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
50
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
51
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
52
+ :no_layout => true)
53
+ end
54
+ end
55
+
56
+ describe "should be able to retrieve stored content in a widget with content_for :name" do
57
+ it "when provided by ERb" do
58
+ expect_match('widget_layout_needing_content_content_for_with_erb',
59
+ %r{widget_layout_needing_content}mi,
60
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
61
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
62
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
63
+ :no_layout => true)
64
+ end
65
+
66
+ it "when provided by a widget" do
67
+ expect_match('widget_layout_needing_content_content_for_with_widget',
68
+ %r{widget_layout_needing_content}mi,
69
+ %r{Foo content is: <h5>this is content for foo!</h5>\s*<h5>this is more content for foo!</h5>}mi,
70
+ %r{Main content is: <h4>this is main_content!</h4>}mi,
71
+ %r{Bar content is: <h3>this is content for bar!</h3>\s*<h3>this is more content for bar!</h3>}mi,
72
+ :no_layout => true)
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,63 @@
1
+ describe "Rails class-loading support", :type => :rails do
2
+ uses_rails_with_template :class_loading_system_spec
3
+
4
+ it "should not load classes under app/views without the Views:: prefix" do
5
+ expect_exception('the_class_should_not_load', 'NameError',
6
+ /uninitialized constant ClassLoadingSystemSpec::ClassShouldNotLoad/i)
7
+ end
8
+
9
+ it "should allow me to define classes under Views:: outside of app/views, like in lib/views" do
10
+ expect_match('lib_views', /hello: i am lib\/views/)
11
+ end
12
+
13
+ it "should allow me to define classes under Views:: outside of app/views, but in some other autoloaded place, like app/models" do
14
+ expect_match('app_models', /hello: i am app\/models/)
15
+ end
16
+
17
+ it "should not create anonymous modules without the Views:: namespace for directories under app/views/" do
18
+ expect_exception('some_namespace', 'NameError', /uninitialized constant SomeNamespace/)
19
+ expect_exception('some_other_namespace', 'NameError', /uninitialized constant SomeNamespace/)
20
+ expect_match('views_some_namespace', /Views::SomeNamespace/, :no_layout => true)
21
+ expect_match('views_some_other_namespace', /Views::SomeNamespace::SomeOtherNamespace/, :no_layout => true)
22
+ end
23
+
24
+ it "should autoload widgets under app/views/" do
25
+ expect_match('autoload_widget', /autoload_widget is here!/, :no_layout => true)
26
+ end
27
+
28
+ it "should autoload one widget from another" do
29
+ expect_match('autoload_one_widget_from_another', /about to run the sub widget.*this is the sub widget.*ran the sub widget/)
30
+ end
31
+
32
+ it "should allow use of a widget defined in lib/ from a view widget" do
33
+ expect_match('use_lib_widget_from_view_widget', /about to run the lib widget.*this is the lib widget.*ran the lib widget/)
34
+ end
35
+
36
+ it "should allow use of a widget defined on another autoload path from a view widget" do
37
+ expect_match('use_models_widget_from_view_widget', /about to run the models widget.*this is the models widget.*ran the models widget/)
38
+ end
39
+
40
+ it "should not allow me to define widgets outside of app/views/" do
41
+ expect_exception('widget_defined_outside_app_views', 'ActionView::MissingTemplate', /class_loading_system_spec\/widget_defined_outside_app_views/)
42
+ end
43
+
44
+ it "should not let me define a widget in a file starting with an underscore, and use it for a view" do
45
+ expect_exception('underscore_view', 'ActionView::MissingTemplate', /class_loading_system_spec\/underscore_view/)
46
+ end
47
+
48
+ it "should not let me define a widget in a file starting with an underscore, and autoload it" do
49
+ expect_exception('underscore_widget', 'NameError', /uninitialized constant Views::ClassLoadingSystemSpec::UnderscoreWidget/)
50
+ end
51
+
52
+ it "should not let me 'require' files in app/views without a views/ prefix" do
53
+ expect_exception('require_loaded_underscore_widget_without_views', 'LoadError', /(cannot load such file|no such file to load)/)
54
+ end
55
+
56
+ it "should not let me 'require' files in app/views with a views/ prefix" do
57
+ expect_exception('require_loaded_underscore_widget_with_views', 'LoadError', /(cannot load such file|no such file to load)/)
58
+ end
59
+
60
+ it "should let me render a widget defined outside of app/views/ if I use render :widget" do
61
+ expect_match('render_widget_outside_app_views', /arbitrary_name_some_widget/)
62
+ end
63
+ end
@@ -0,0 +1,33 @@
1
+ describe "Rails complex helper support", :type => :rails do
2
+ uses_rails_with_template :complex_helpers_system_spec
3
+
4
+ it "should render form_for correctly" do
5
+ expect_match("form_for_test",
6
+ %r{OUTSIDE_BEFORE\s*<form.*action=\"/complex_helpers_system_spec/form_for_test\".*
7
+ INSIDE_BEFORE\s*
8
+ FIRST:\s*<input.*person_first_name.*/>\s*
9
+ LAST:\s*<input.*person_last_name.*/>\s*
10
+ INSIDE_AFTER\s*
11
+ </form>\s*
12
+ OUTSIDE_AFTER}mix)
13
+ end
14
+
15
+ it "should render fields_for correctly" do
16
+ expect_match("fields_for_test",
17
+ %r{OUTSIDE_BEFORE\s*
18
+ INSIDE_BEFORE\s*
19
+ FIRST:\s*<input.*person_first_name.*/>\s*
20
+ LAST:\s*<input.*person_last_name.*/>\s*
21
+ INSIDE_AFTER\s*
22
+ OUTSIDE_AFTER}mix)
23
+ end
24
+
25
+ it "should cache based on a name properly" do
26
+ expect_match("cache_test?a=a1&b=b1",
27
+ /before_cache\(a1,b1\).*inside_cache\(a1,b1\).*after_cache\(a1,b1\)/mi)
28
+ expect_match("cache_test?a=a1&b=b2",
29
+ /before_cache\(a1,b2\).*inside_cache\(a1,b1\).*after_cache\(a1,b2\)/mi)
30
+ expect_match("cache_test?a=a2&b=b2",
31
+ /before_cache\(a2,b2\).*inside_cache\(a2,b2\).*after_cache\(a2,b2\)/mi)
32
+ end
33
+ end
@@ -0,0 +1,96 @@
1
+ describe "Rails data-passing support", :type => :rails do
2
+ uses_rails_with_template :data_passing_system_spec
3
+
4
+ it "should allow passing data to the widget through controller variables" do
5
+ expect_match("passing_data_widget", /foo is: the_foo/, /bar is: and_bar/)
6
+ end
7
+
8
+ it "should not fail if the controller provides more data than it needs" do
9
+ expect_match("extra_data_widget", /foo is: the_foo/, /bar is: and_bar/)
10
+ end
11
+
12
+ it "should allow passing data to the widget through :locals => { ... }" do
13
+ expect_match("passing_locals_widget", /foo is: local_foo/, /bar is: local_bar/)
14
+ end
15
+
16
+ it "should merge locals and controller variables, with locals winning" do
17
+ expect_match("passing_locals_and_controller_variables_widget", /foo is: controller_foo/, /bar is: local_bar/, /baz is: local_baz/)
18
+ end
19
+
20
+ it "should give you a reasonable error if you omit a variable" do
21
+ expect_exception('omitted_variable', 'Fortitude::Errors::MissingNeed', /bar/)
22
+ end
23
+
24
+ it "should not propagate un-needed variables" do
25
+ expect_match("extra_variables", /foo method call: the_foo/, /foo instance var: nil/,
26
+ /bar method call: NoMethodError/, /bar instance var: nil/,
27
+ /baz method call: NoMethodError/, /baz instance var: nil/)
28
+ end
29
+
30
+ it "should propagate un-needed variables, if asked" do
31
+ expect_match("extra_variables_requested", /foo method call: the_foo/, /foo instance var: nil/,
32
+ /bar method call: the_bar/, /bar instance var: nil/,
33
+ /baz method call: the_baz/, /baz instance var: nil/)
34
+ end
35
+
36
+ it "should not propagate a controller variable through a view to a child widget without being explicitly passed" do
37
+ expect_exception('parent_to_child_passing', 'Fortitude::Errors::MissingNeed', /foo/)
38
+ end
39
+
40
+ it "should propagate a controller variable through a view to a child widget without being explicitly passed, if invoked using render :partial" do
41
+ expect_match('parent_to_child_passing_partial', /parent before.*foo: the_foo.*parent after/)
42
+ end
43
+
44
+ it "should let a widget read a controller variable explicitly, as a Symbol or a String" do
45
+ expect_match("explicit_controller_variable_read", /explicit foo as symbol: the_foo/)
46
+ expect_match("explicit_controller_variable_read", /explicit foo as string: the_foo/)
47
+ end
48
+
49
+ it "should let a widget read a controller variable set by an earlier ERb view" do
50
+ expect_match("erb_to_parallel_widget_handoff", /widget foo: foo_from_erb/)
51
+ end
52
+
53
+ it "should let a widget write a controller variable that a later ERb view can read" do
54
+ expect_match("widget_to_parallel_erb_handoff", /erb foo: foo_from_widget/)
55
+ end
56
+
57
+ it "should let both controller variables and locals get picked up by the layout, as well as the view" do
58
+ expect_match("variables_to_layout", /widget_default_layout: foo = the_foo, bar = the_bar.*widget foo: the_foo, widget bar: the_bar/, :no_layout => true)
59
+ end
60
+
61
+ describe "backwards-compatible instance-variable mode" do
62
+ it "should let a widget read a controller variable implicitly" do
63
+ expect_match("implicit_variable_read", /inner widget foo: foo_from_controller/)
64
+ end
65
+
66
+ it "should let a widget write a controller variable implicitly" do
67
+ expect_match("implicit_variable_write", /erb foo: foo_from_widget/)
68
+ end
69
+
70
+ it "should let a widget read a controller variable set by an earlier ERb view" do
71
+ expect_match("implicit_erb_to_widget_handoff", /widget foo: foo_from_erb/)
72
+ end
73
+
74
+ it "should not enable access to local variables via @foo directly" do
75
+ expect_match("implicit_shared_variable_access", /foo: nil/)
76
+ end
77
+
78
+ it "should inherit the setting for implicit_shared_variable_access properly" do
79
+ expect_match("implicit_shared_variable_access_inheritance", /C1: foo is , bar is .*C2: foo is the_foo, bar is the_bar/mi)
80
+ end
81
+
82
+ it "should have the same set of copied variables for ERb and a widget" do
83
+ widget_copied_variables = JSON.parse(get('widget_copied_variables'))['widget_copied_variables'].sort
84
+ erb_copied_variables = JSON.parse(get('erb_copied_variables'))['erb_copied_variables'].sort
85
+
86
+ common = widget_copied_variables & erb_copied_variables
87
+ extra_widget = widget_copied_variables - erb_copied_variables
88
+ missing_widget = erb_copied_variables - widget_copied_variables
89
+
90
+ extra_widget = extra_widget.reject { |v| v =~ /^@_fortitude_/i }
91
+
92
+ expect(extra_widget).to eq([ ])
93
+ expect(missing_widget).to eq([ ])
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,15 @@
1
+ describe "Rails default layout support", :type => :rails do
2
+ uses_rails_with_template :default_layout_system_spec
3
+
4
+ it "should let you use a default layout that's a widget, and render ERb inside it" do
5
+ data = get("erb_with_widget_default_layout")
6
+ data.should match(/widget_default_layout/i)
7
+ data.should match(/erb_with_widget_default_layout/i)
8
+ end
9
+
10
+ it "should let you use a default layout that's a widget, and render a widget inside it" do
11
+ data = get("widget_with_widget_default_layout")
12
+ data.should match(/widget_default_layout/i)
13
+ data.should match(/widget_with_widget_default_layout/i)
14
+ end
15
+ end
@@ -0,0 +1,67 @@
1
+ describe "Rails development-mode support", :type => :rails do
2
+ uses_rails_with_template :development_mode_system_spec, :rails_env => :development
3
+
4
+ it "should automatically reload widgets if they change on disk" do
5
+ expect_match("reload_widget", /before_reload/)
6
+ # The sleep is unfortunate, but required: without it, Rails will not necessarily pick up our change,
7
+ # especially if we run multiple tests back-to-back. (There's a maximum frequency at which Rails can
8
+ # detect distinct file changes on disk, which on the order of 1 Hz -- i.e., once a second; any more
9
+ # than this and it fails. This is irrelevant for human-centered development, but important for
10
+ # tests like this.)
11
+ sleep 1
12
+ splat_new_widget!
13
+ expect_match("reload_widget", /after_reload/)
14
+ end
15
+
16
+ it "should let you change the controller, and that should work fine, too" do
17
+ expect_match("reload_widget", /datum\s+one\s+datum/)
18
+ sleep 1
19
+ splat_new_controller!
20
+ expect_match("reload_widget", /datum\s+two\s+datum/)
21
+ end
22
+
23
+ it "should, by default, format output" do
24
+ expect_match("sample_output", %r{<section class="one">
25
+ <p>hello, Jessica</p>
26
+ </section>}mi)
27
+ end
28
+
29
+ it "should, by default, output BEGIN/END debugging tags" do
30
+ expect_match("sample_output", %r{<!-- BEGIN Views::DevelopmentModeSystemSpec::SampleOutput depth 0: :name => "Jessica" -->
31
+ .*
32
+ <!-- END Views::DevelopmentModeSystemSpec::SampleOutput depth 0 -->}mi)
33
+ end
34
+
35
+ private
36
+ def splat_new_widget!
37
+ reload_file = File.join(rails_server.rails_root, 'app/views/development_mode_system_spec/reload_widget.rb')
38
+ File.open(reload_file, 'w') do |f|
39
+ f.puts <<-EOS
40
+ class Views::DevelopmentModeSystemSpec::ReloadWidget < Fortitude::Widgets::Html5
41
+ needs :datum
42
+
43
+ def content
44
+ p "after_reload: datum \#{datum} datum"
45
+ end
46
+ end
47
+ EOS
48
+ end
49
+ end
50
+
51
+ def splat_new_controller!
52
+ controller_file = File.join(rails_server.rails_root, 'app/controllers/development_mode_system_spec_controller.rb')
53
+ File.open(controller_file, 'w') do |f|
54
+ f.puts <<-EOS
55
+ class DevelopmentModeSystemSpecController < ApplicationController
56
+ def reload_widget
57
+ @datum = "two"
58
+ end
59
+
60
+ def sample_output
61
+ @name = "Jessica"
62
+ end
63
+ end
64
+ EOS
65
+ end
66
+ end
67
+ end