zena 1.1.3 → 1.2.0

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 (392) hide show
  1. data/History.txt +23 -1
  2. data/MIT-LICENSE +2 -2
  3. data/README.rdoc +2 -15
  4. data/app/controllers/acls_controller.rb +1 -1
  5. data/app/controllers/documents_controller.rb +12 -3
  6. data/app/controllers/nodes_controller.rb +1 -3
  7. data/app/controllers/sites_controller.rb +7 -0
  8. data/app/controllers/versions_controller.rb +1 -1
  9. data/app/controllers/virtual_classes_controller.rb +7 -8
  10. data/app/models/acl.rb +3 -2
  11. data/app/models/relation_proxy.rb +2 -1
  12. data/app/models/role.rb +16 -0
  13. data/app/models/site.rb +48 -0
  14. data/app/models/text_document.rb +2 -1
  15. data/app/models/user.rb +2 -1
  16. data/app/models/zip.rb +2 -1
  17. data/app/views/acls/index.rhtml +11 -1
  18. data/app/views/documents/show.rhtml +1 -1
  19. data/app/views/relations/_add.erb +2 -2
  20. data/app/views/relations/_form.erb +5 -2
  21. data/app/views/relations/_li.erb +4 -1
  22. data/app/views/relations/index.erb +3 -3
  23. data/app/views/sites/_form.erb +1 -1
  24. data/app/views/sites/_job.erb +4 -0
  25. data/app/views/sites/index.erb +1 -1
  26. data/app/views/sites/jobs.erb +10 -0
  27. data/app/views/templates/document_create_tabs/_file.rhtml +3 -0
  28. data/app/views/zafu/default/Node-+search.zafu +2 -2
  29. data/bricks/acls/zena/init.rb +2 -1
  30. data/bricks/acls/zena/test/integration/acl_integration_test.rb +5 -5
  31. data/bricks/acls/zena/test/sites/erebus/acls.yml +2 -2
  32. data/bricks/acls/zena/test/unit/acl_test.rb +2 -2
  33. data/bricks/grid/lib/bricks/grid.rb +110 -0
  34. data/bricks/grid/zena/init.rb +4 -0
  35. data/bricks/math/lib/bricks/math.rb +1 -0
  36. data/bricks/pdf/lib/bricks/pdf.rb +10 -1
  37. data/bricks/sphinx/zena/tasks.rb +8 -40
  38. data/bricks/spreadsheet/README +31 -0
  39. data/bricks/spreadsheet/lib/bricks/spreadsheet.rb +293 -0
  40. data/bricks/spreadsheet/zena/init.rb +3 -0
  41. data/bricks/spreadsheet/zena/test/sites/zena/links.yml +11 -0
  42. data/bricks/spreadsheet/zena/test/unit/xlsx_test.rb +5 -0
  43. data/bricks/spreadsheet/zena/test/zafu/README +27 -0
  44. data/bricks/spreadsheet/zena/test/zafu/spreadsheet.yml +19 -0
  45. data/bricks/worker/lib/bricks/worker.rb +11 -5
  46. data/bricks/worker/zena/init.rb +8 -0
  47. data/bricks/worker/zena/migrate/20120501091514_add_site_id_to_jobs.rb +9 -0
  48. data/bricks/zena/zena/migrate/01_base.rb +0 -7
  49. data/bricks/zena/zena/migrate/20111214112233_add_comment_to_relations.rb +9 -0
  50. data/config/bricks.yml +15 -1
  51. data/config/environments/production.rb +2 -2
  52. data/config/gems.yml +6 -1
  53. data/doc/zafu_changes.yml +1 -1
  54. data/lib/tasks/zena.rake +6 -2
  55. data/lib/zena/app.rb +1 -1
  56. data/lib/zena/code/default_syntax.rb +5 -1
  57. data/lib/zena/db_helper/mysql.rb +5 -1
  58. data/lib/zena/deploy/app_init.rhtml +11 -7
  59. data/lib/zena/deploy/awstats.conf.rhtml +1 -1
  60. data/lib/zena/deploy/start_stop.rhtml +5 -5
  61. data/lib/zena/deploy/vhost.rhtml +16 -2
  62. data/lib/zena/deploy.rb +5 -3
  63. data/lib/zena/info.rb +1 -1
  64. data/lib/zena/parser/zazen_rules.rb +7 -7
  65. data/lib/zena/remote/node.rb +7 -0
  66. data/lib/zena/routes.rb +4 -5
  67. data/lib/zena/test_controller.rb +18 -1
  68. data/lib/zena/use/action.rb +13 -4
  69. data/lib/zena/use/ajax.rb +10 -4
  70. data/lib/zena/use/authlogic.rb +1 -1
  71. data/lib/zena/use/calendar.rb +4 -0
  72. data/lib/zena/use/conditional.rb +3 -0
  73. data/lib/zena/use/dates.rb +44 -4
  74. data/lib/zena/use/display.rb +45 -15
  75. data/lib/zena/use/forms.rb +59 -30
  76. data/lib/zena/use/query_builder.rb +12 -12
  77. data/lib/zena/use/recursion.rb +1 -1
  78. data/lib/zena/use/rendering.rb +18 -17
  79. data/lib/zena/use/urls.rb +2 -1
  80. data/lib/zena/use/zafu_safe_definitions.rb +0 -9
  81. data/lib/zena/use/zafu_templates.rb +2 -2
  82. data/lib/zena/use/zazen.rb +1 -3
  83. data/lib/zena/use.rb +13 -2
  84. data/lib/zena.rb +8 -2
  85. data/public/images/bullet_back.png +0 -0
  86. data/public/javascripts/grid.js +535 -0
  87. data/public/javascripts/tablekit.js +0 -0
  88. data/public/javascripts/window.js +0 -0
  89. data/public/javascripts/zena.js +17 -7
  90. data/public/stylesheets/admin.css +5 -1
  91. data/public/stylesheets/grid.css +19 -0
  92. data/test/fixtures/files/TestNode.zafu +123 -311
  93. data/test/fixtures/files/translations_fr.yml +6 -1
  94. data/test/functional/acls_controller_test.rb +2 -2
  95. data/test/functional/nodes_controller_test.rb +17 -11
  96. data/test/functional/virtual_classes_controller_test.rb +1 -1
  97. data/test/integration/query_node/basic.yml +9 -0
  98. data/test/integration/query_node/dates.yml +1 -1
  99. data/test/integration/zafu_compiler/ajax.yml +9 -9
  100. data/test/integration/zafu_compiler/basic.yml +0 -24
  101. data/test/integration/zafu_compiler/dates.yml +24 -7
  102. data/test/integration/zafu_compiler/display.yml +45 -2
  103. data/test/integration/zafu_compiler/errors.yml +0 -6
  104. data/test/integration/zafu_compiler/forms.yml +41 -3
  105. data/test/integration/zafu_compiler/query.yml +29 -3
  106. data/test/integration/zafu_compiler/roles.yml +0 -4
  107. data/test/integration/zafu_compiler/safe_definitions.yml +1 -1
  108. data/test/integration/zafu_compiler_test.rb +11 -3
  109. data/test/selenium/Add/add3.rsel +8 -8
  110. data/test/selenium/Drop/drop1.rsel +12 -12
  111. data/test/selenium/Drop/drop2.rsel +14 -14
  112. data/test/selenium/Drop/drop3.rsel +21 -21
  113. data/test/selenium/Drop/drop4.rsel +1 -1
  114. data/test/selenium/Edit/edit2.rsel +9 -9
  115. data/test/selenium/Edit/edit4.rsel +55 -0
  116. data/test/selenium/Edit/edit5.rsel +41 -0
  117. data/test/selenium/Edit/edit6.rsel +53 -0
  118. data/test/selenium/Filter/0setup.rsel +12 -0
  119. data/test/selenium/Filter/filter1.rsel +9 -0
  120. data/test/selenium/Filter/filter2.rsel +9 -0
  121. data/test/selenium/Form/form1.rsel +1 -1
  122. data/test/selenium/Form/form2.rsel +1 -1
  123. data/test/selenium/Form/form3.rsel +15 -0
  124. data/test/selenium/Grid/0setup.rsel +13 -0
  125. data/test/selenium/Grid/grid1.rsel +11 -0
  126. data/test/selenium/Swap/0setup.rsel +12 -0
  127. data/test/selenium/Swap/swap1.rsel +13 -0
  128. data/test/selenium/Swap/swap2.rsel +11 -0
  129. data/test/selenium/Toggle/toggle1.rsel +6 -6
  130. data/test/sites/zena/versions.yml +1 -1
  131. data/test/unit/relation_proxy_test.rb +36 -0
  132. data/test/unit/site_test.rb +10 -2
  133. data/test/unit/zena/use/rendering_test.rb +7 -6
  134. data/test/unit/zena/use/zazen_test.rb +1 -2
  135. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +24 -0
  136. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +58 -0
  137. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +88 -0
  138. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +27 -0
  139. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +23 -0
  140. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +19 -0
  141. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +19 -0
  142. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +16 -0
  143. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +16 -0
  144. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +16 -0
  145. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +18 -0
  146. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +18 -0
  147. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +16 -0
  148. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +18 -0
  149. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +16 -0
  150. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +16 -0
  151. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +16 -0
  152. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +16 -0
  153. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +16 -0
  154. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +16 -0
  155. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +18 -0
  156. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +16 -0
  157. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +17 -0
  158. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +17 -0
  159. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +18 -0
  160. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +22 -0
  161. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +23 -0
  162. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +25 -0
  163. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +18 -0
  164. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +18 -0
  165. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +18 -0
  166. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +16 -0
  167. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +16 -0
  168. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +20 -0
  169. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +20 -0
  170. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +16 -0
  171. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +16 -0
  172. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +16 -0
  173. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +16 -0
  174. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +16 -0
  175. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +16 -0
  176. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +16 -0
  177. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +18 -0
  178. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +16 -0
  179. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +16 -0
  180. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +16 -0
  181. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +16 -0
  182. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +16 -0
  183. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +16 -0
  184. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +16 -0
  185. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +16 -0
  186. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +16 -0
  187. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +16 -0
  188. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +16 -0
  189. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +16 -0
  190. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +16 -0
  191. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +16 -0
  192. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +16 -0
  193. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +16 -0
  194. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +16 -0
  195. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +16 -0
  196. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +16 -0
  197. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +16 -0
  198. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +16 -0
  199. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +16 -0
  200. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +16 -0
  201. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +16 -0
  202. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +16 -0
  203. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +16 -0
  204. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +16 -0
  205. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +16 -0
  206. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +16 -0
  207. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +16 -0
  208. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +16 -0
  209. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +16 -0
  210. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  211. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +104 -0
  212. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  213. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +17 -0
  214. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +13 -0
  215. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +25 -0
  216. data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +166 -0
  217. data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +304 -0
  218. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +37 -0
  219. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +52 -0
  220. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  221. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +118 -0
  222. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  223. data/vendor/TextMate/Zena.tmbundle/info.plist +17 -0
  224. data/vendor/plugins/selenium-on-rails/CHANGELOG +125 -0
  225. data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +202 -0
  226. data/vendor/plugins/selenium-on-rails/README.md +202 -0
  227. data/vendor/plugins/selenium-on-rails/Rakefile +38 -0
  228. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +265 -0
  229. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +148 -0
  230. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +231 -0
  231. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +195 -0
  232. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +295 -0
  233. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +219 -0
  234. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +156 -0
  235. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +179 -0
  236. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +223 -0
  237. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +441 -0
  238. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +3098 -0
  239. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +2080 -0
  240. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +116 -0
  241. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +116 -0
  242. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +126 -0
  243. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +150 -0
  244. data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +422 -0
  245. data/vendor/plugins/selenium-on-rails/doc/files/README.html +321 -0
  246. data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +108 -0
  247. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +101 -0
  248. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +222 -0
  249. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +109 -0
  250. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +111 -0
  251. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +101 -0
  252. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +101 -0
  253. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +118 -0
  254. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +101 -0
  255. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +101 -0
  256. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +114 -0
  257. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +113 -0
  258. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +120 -0
  259. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +108 -0
  260. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +115 -0
  261. data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +42 -0
  262. data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +43 -0
  263. data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +182 -0
  264. data/vendor/plugins/selenium-on-rails/doc/index.html +24 -0
  265. data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +208 -0
  266. data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +19 -0
  267. data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +50 -0
  268. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +16 -0
  269. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +14 -0
  270. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +11 -0
  271. data/vendor/plugins/selenium-on-rails/init.rb +15 -0
  272. data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +122 -0
  273. data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +16 -0
  274. data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +8 -0
  275. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +215 -0
  276. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +57 -0
  277. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +36 -0
  278. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +61 -0
  279. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +20 -0
  280. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +44 -0
  281. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +87 -0
  282. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +56 -0
  283. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +116 -0
  284. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +1002 -0
  285. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +514 -0
  286. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +91 -0
  287. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +24 -0
  288. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +11 -0
  289. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +30 -0
  290. data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +18 -0
  291. data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +5 -0
  292. data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +9 -0
  293. data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +67 -0
  294. data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +26 -0
  295. data/vendor/plugins/selenium-on-rails/routes.rb +24 -0
  296. data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +7 -0
  297. data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +8 -0
  298. data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +110 -0
  299. data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +109 -0
  300. data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +145 -0
  301. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +55 -0
  302. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +177 -0
  303. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +177 -0
  304. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
  305. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
  306. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +298 -0
  307. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +16 -0
  308. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +205 -0
  309. data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
  310. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
  311. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
  312. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
  313. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
  314. data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
  315. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
  316. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
  317. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +1759 -0
  318. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +1800 -0
  319. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +6 -0
  320. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +142 -0
  321. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +150 -0
  322. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +53 -0
  323. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +356 -0
  324. data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +2006 -0
  325. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +101 -0
  326. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +815 -0
  327. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +915 -0
  328. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +958 -0
  329. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +47 -0
  330. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +283 -0
  331. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +383 -0
  332. data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +91 -0
  333. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +69 -0
  334. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +1616 -0
  335. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +72 -0
  336. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +3184 -0
  337. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +2300 -0
  338. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +153 -0
  339. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +377 -0
  340. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +175 -0
  341. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +148 -0
  342. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +695 -0
  343. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +1362 -0
  344. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +5 -0
  345. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +803 -0
  346. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +1537 -0
  347. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +979 -0
  348. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +3 -0
  349. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +75 -0
  350. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +153 -0
  351. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
  352. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +43 -0
  353. data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +316 -0
  354. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +566 -0
  355. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +2816 -0
  356. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +549 -0
  357. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +149 -0
  358. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +2450 -0
  359. data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +8 -0
  360. data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +37 -0
  361. data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +27 -0
  362. data/vendor/plugins/selenium-on-rails/test/paths_test.rb +72 -0
  363. data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +157 -0
  364. data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +708 -0
  365. data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +242 -0
  366. data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +67 -0
  367. data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +43 -0
  368. data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +35 -0
  369. data/vendor/plugins/selenium-on-rails/test/setup_test.rb +31 -0
  370. data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +109 -0
  371. data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +17 -0
  372. data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +51 -0
  373. data/vendor/plugins/selenium-on-rails/test/test_helper.rb +101 -0
  374. data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +1 -0
  375. data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +12 -0
  376. data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +6 -0
  377. data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +2 -0
  378. data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +6 -0
  379. data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +1 -0
  380. data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +5 -0
  381. data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +5 -0
  382. data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +7 -0
  383. data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +8 -0
  384. data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +7 -0
  385. data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +1 -0
  386. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +1 -0
  387. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +1 -0
  388. data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +1 -0
  389. data/zena.gemspec +290 -7
  390. metadata +346 -52
  391. data/app/views/nodes/_table.rhtml +0 -14
  392. data/lib/zena/use/grid.rb +0 -154
@@ -0,0 +1,242 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class SeleneseTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @view = TestView.new
7
+ @view.extend(SeleniumOnRails::PathsTestHelper)
8
+ @sel = SeleniumOnRails::Selenese.new(@view)
9
+ end
10
+
11
+ def render_selenese(page_title, input)
12
+ create_sel_file_from(input, "html.sel")
13
+
14
+ @sel.render ActionView::Template.new(test_path_for("html.sel")), {'page_title' => page_title}
15
+ end
16
+
17
+ def create_sel_file_from(input, name)
18
+ File.open(test_path_for(name), 'w+') { |index_file| index_file << input }
19
+ end
20
+
21
+ def test_path_for(name)
22
+ "#{File.expand_path(File.dirname(__FILE__) + "/../test_data")}/#{name}"
23
+ end
24
+
25
+ def assert_selenese expected, name, input
26
+ assert_text_equal expected, render_selenese(name, input)
27
+ end
28
+
29
+ def test_empty
30
+ expected = <<END
31
+ <table>
32
+ <tr><th colspan="3">Empty</th></tr>
33
+ </table>
34
+ END
35
+ input = ''
36
+ assert_selenese expected, 'Empty', ''
37
+ end
38
+
39
+ def test_one_line
40
+ expected = <<END
41
+ <table>
42
+ <tr><th colspan="3">One line</th></tr>
43
+ <tr><td>open</td><td>/</td><td>&nbsp;</td></tr>
44
+ </table>
45
+ END
46
+ input = '|open|/|'
47
+ assert_selenese expected, 'One line', input
48
+ end
49
+
50
+ def test_comments_only
51
+ expected = <<END
52
+ <p>Comment <strong>1</strong></p>
53
+
54
+
55
+ <p>Comment 2</p>
56
+ <table>
57
+ <tr><th colspan="3">Only comments</th></tr>
58
+ </table>
59
+ END
60
+ input = <<END
61
+ Comment *1*
62
+
63
+ Comment 2
64
+
65
+ END
66
+ assert_selenese expected, 'Only comments', input
67
+ end
68
+
69
+ def test_commands_only
70
+ expected = <<END
71
+ <table>
72
+ <tr><th colspan="3">Only commands</th></tr>
73
+ <tr><td>goBack</td><td>&nbsp;</td><td>&nbsp;</td></tr>
74
+ <tr><td>open</td><td>/foo</td><td>&nbsp;</td></tr>
75
+ <tr><td>fireEvent</td><td>textField</td><td>focus</td></tr>
76
+ </table>
77
+ END
78
+ input = <<END
79
+
80
+ |goBack |
81
+
82
+ |open| /foo |
83
+ | fireEvent | textField | focus |
84
+
85
+
86
+ END
87
+ assert_selenese expected, 'Only commands', input
88
+ end
89
+
90
+ def test_commands_and_comments
91
+ expected = <<END
92
+ <table>
93
+ <tr><th colspan="3">Commands and comments</th></tr>
94
+ <tr><td>goBack</td><td>&nbsp;</td><td>&nbsp;</td></tr>
95
+ <tr><td>fireEvent</td><td>textField</td><td>focus</td></tr>
96
+ </table>
97
+ <p>Comment 1</p>
98
+
99
+
100
+ <p>Comment <strong>2</strong></p>
101
+ END
102
+ input = <<END
103
+
104
+ |goBack |
105
+
106
+ | fireEvent | textField| focus|
107
+ Comment 1
108
+
109
+ Comment *2*
110
+
111
+ END
112
+ assert_selenese expected, 'Commands and comments', input
113
+ end
114
+
115
+ def test_comments_and_commands
116
+ expected = <<END
117
+ <p>Comment 1</p>
118
+
119
+ <p>Comment <strong>2</strong></p>
120
+ <table>
121
+ <tr><th colspan="3">Comments and commands</th></tr>
122
+ <tr><td>goBack</td><td>&nbsp;</td><td>&nbsp;</td></tr>
123
+ <tr><td>fireEvent</td><td>textField</td><td>focus</td></tr>
124
+ </table>
125
+ END
126
+ input = <<END
127
+ Comment 1
128
+
129
+ Comment *2*
130
+ |goBack |
131
+
132
+ | fireEvent | textField|focus|
133
+
134
+ END
135
+ assert_selenese expected, 'Comments and commands', input
136
+ end
137
+
138
+ def test_comments_commands_comments
139
+ expected = <<END
140
+ <p>Comment 1</p>
141
+ <p>Comment <strong>2</strong></p>
142
+ <table>
143
+ <tr><th colspan="3">Comments, commands and comments</th></tr>
144
+ <tr><td>goBack</td><td>&nbsp;</td><td>&nbsp;</td></tr>
145
+ <tr><td>fireEvent</td><td>textField</td><td>focus</td></tr>
146
+ </table>
147
+ <p>Comment 3</p>
148
+ END
149
+
150
+ input = <<END
151
+ Comment 1
152
+
153
+ Comment *2*
154
+ |goBack |
155
+ | fireEvent | textField| focus|
156
+ Comment 3
157
+ END
158
+ assert_selenese expected, 'Comments, commands and comments', input
159
+ end
160
+
161
+ def test_command_html_entity_escaping
162
+ expected = <<END
163
+ <table>
164
+ <tr><th colspan="3">HTML escaping</th></tr>
165
+ <tr><td>type</td><td>nameField</td><td>&lt;&gt;&amp;</td></tr>
166
+ </table>
167
+ END
168
+ input = '|type|nameField|<>&|'
169
+ assert_selenese expected, 'HTML escaping', input
170
+ end
171
+
172
+ def test_partial_support
173
+ expected = <<END
174
+ <table>
175
+ <tr><th colspan="3">Partial support</th></tr>
176
+ <tr><td>type</td><td>partial</td><td>Selenese partial</td></tr>
177
+ </table>
178
+ END
179
+ input = '|includePartial|override|'
180
+ partial = '|type|partial|Selenese partial|'
181
+ create_sel_file_from(partial, "_override.sel")
182
+
183
+ assert_selenese(expected, 'Partial support', input)
184
+
185
+ File.delete(test_path_for("_override.sel"))
186
+ end
187
+
188
+ def test_partial_support_with_local_assigns
189
+ expected = <<END_EXPECTED
190
+ <table>
191
+ <tr><th colspan="3">Partial support with local assigns</th></tr>
192
+ <tr><td>type</td><td>assigns</td><td>a=hello,b=world!,c_123ABC=</td></tr>
193
+ <tr><td>type</td><td>assigns</td><td>a=a b c d,b=,c_123ABC=hello</td></tr>
194
+ </table>
195
+ END_EXPECTED
196
+
197
+ input = <<END_INPUT
198
+ |includePartial|override|a=hello|b=world!|
199
+ |includePartial|override|a = a b c d|b=|c_123ABC= hello |
200
+ END_INPUT
201
+
202
+ partial = <<END_PARTIAL
203
+ <table><tr><th>whatever</th></tr>
204
+ <tr><td>type</td><td>assigns</td><td>
205
+ a=<%= a if defined? a%>,
206
+ b=<%= b if defined? b%>,
207
+ c_123ABC=<%= c_123ABC if defined? c_123ABC%>
208
+ </td></tr>
209
+ </table>
210
+ END_PARTIAL
211
+
212
+ create_sel_file_from(partial, "_override.html")
213
+
214
+ assert_selenese(expected, 'Partial support with local assigns', input)
215
+
216
+ File.delete(test_path_for("_override.html"))
217
+ end
218
+
219
+ def test_raised_when_more_than_three_columns
220
+ assert_raise RuntimeError, 'There might only be a maximum of three cells!' do
221
+ render_selenese 'name', '|col1|col2|col3|col4|'
222
+ end
223
+ end
224
+
225
+ def test_raised_when_more_than_one_set_of_commands
226
+ assert_raise RuntimeError, 'You cannot have comments in the middle of commands!' do
227
+ input = <<END
228
+ comment
229
+ |command|
230
+ comment
231
+ |command|
232
+ END
233
+ render_selenese 'name', input
234
+ end
235
+ end
236
+
237
+ def test_raised_when_incorrect_partial_format
238
+ assert_raise RuntimeError, "Invalid format 'invalid'. Should be '|includePartial|partial|var1=value|var2=value|." do
239
+ render_selenese 'name', '|includePartial|partial|a=valid|invalid|'
240
+ end
241
+ end
242
+ end
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+ require 'mocha'
3
+
4
+ class SeleniumControllerTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @controller = SeleniumController.new
8
+ @controller.extend(SeleniumOnRails::PathsTestHelper)
9
+ ActionController::Routing::Routes.draw
10
+ SeleniumController.any_instance.stubs(:layout_path).returns(false)
11
+ @request = ActionController::TestRequest.new
12
+ @response = ActionController::TestResponse.new
13
+ @result_dir = File.join(File.dirname(__FILE__), "..", "test_result")
14
+
15
+ @suite = <<EOS
16
+ <script>
17
+ </script>
18
+ <table>
19
+ <tr><td bgcolor="#ccffcc"><a href="/selenium/tests/foo.sel">Foo</a></td></tr>
20
+ <tr><td bgcolor="#ccffcc"><a href="/selenium/tests/bar.sel">Bar</a></td></tr>
21
+ </table>
22
+ EOS
23
+ end
24
+
25
+ def teardown
26
+ FileUtils.rm_rf @result_dir
27
+ end
28
+
29
+ def test_record_with_result
30
+ @controller.instance_variable_set(:@result_dir, @result_dir)
31
+
32
+ post :record, :suite => @suite, "testTable.1" => "<table></table>", "testTable.2" => "<table></table>"
33
+
34
+ cur_result_dir = File.join(@result_dir, "default")
35
+ assert File.directory?(cur_result_dir)
36
+ assert_equal ["blank.html", "index.html", "suite.html", "test1.html", "test2.html"],
37
+ Dir.glob("#{cur_result_dir}/*.html").map{|path| File.basename(path)}.sort
38
+
39
+ expected = <<EOS
40
+ <html>
41
+ <head>
42
+ <link rel="stylesheet" type="text/css" href="selenium-test.css">
43
+ </head>
44
+ <body>
45
+ <table>
46
+ <tr><td bgcolor="#ccffcc"><a href="test1.html" target="testcase">Foo</a></td></tr>
47
+ <tr><td bgcolor="#ccffcc"><a href="test2.html" target="testcase">Bar</a></td></tr>
48
+ </table>
49
+ </body></html>
50
+ EOS
51
+ assert_equal expected, File.read("#{cur_result_dir}/suite.html")
52
+ end
53
+
54
+ def test_result_hash
55
+ post :record, :suite => @suite, "testTable.1" => "<table></table>", "testTable.2" => "<table></table>",
56
+ :result => 'Failed', :numTestFailures => "906", :numTestPasses => "1079", :numCommandFailures => '1027',
57
+ :numCommandErrors => '57', :numCommandPasses => '3', :totalTime => "A long time"
58
+
59
+ assert_equal 'Failed', assigns['result']['result']
60
+ assert_equal '906', assigns['result']['numTestFailures']
61
+ assert_equal '1079', assigns['result']['numTestPasses']
62
+ assert_equal '1027', assigns['result']['numCommandFailures']
63
+ assert_equal '57', assigns['result']['numCommandErrors']
64
+ assert_equal '3', assigns['result']['numCommandPasses']
65
+ assert_equal 'A long time', assigns['result']['totalTime']
66
+ end
67
+ end
@@ -0,0 +1,43 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+ require 'mocha'
3
+
4
+ class SeleniumOnRailsConfig
5
+ def self.reset_config
6
+ @@configs = nil
7
+ end
8
+ end
9
+
10
+ class SeleniumOnRailsConfigTest < Test::Unit::TestCase
11
+
12
+ def setup
13
+ SeleniumOnRailsConfig.reset_config
14
+ @selenium_file = File.join(RAILS_ROOT, 'config', 'selenium.yml')
15
+ @config_file = File.expand_path(File.dirname(__FILE__) + '/../config.yml')
16
+ @selenium_content = File.read(File.dirname(__FILE__) + '/fixtures/selenium.yml')
17
+ @config_content = File.read(File.dirname(__FILE__) + '/fixtures/config.yml')
18
+ end
19
+
20
+ def test_get_selenium_yaml
21
+ File.expects(:exist?).with(@selenium_file).returns(true)
22
+ IO.expects(:read).with(@selenium_file).returns(@selenium_content)
23
+ IO.expects(:read).with(@config_file).never
24
+ IO.expects(:exist?).with(@config_file).never
25
+
26
+ assert_equal ["test_cache"], SeleniumOnRailsConfig.get(:environments)
27
+ assert_equal({"firefox"=>"script/openfirefox"}, SeleniumOnRailsConfig.get(:browsers))
28
+ end
29
+
30
+ def test_get_when_config_yml_exists_but_selenium_yaml_not
31
+ File.expects(:exist?).with(@selenium_file).returns(false)
32
+ File.expects(:exist?).with(@config_file).returns(true)
33
+ IO.expects(:read).with(@config_file).returns(@config_content)
34
+ IO.expects(:read).with(@selenium_file).never
35
+
36
+ assert_equal ["test"], SeleniumOnRailsConfig.get(:environments)
37
+ expected_config = {"safari"=>"/Applications/Safari.app/Contents/MacOS/Safari",
38
+ "firefox"=>"/Applications/Firefox.app/Contents/MacOS/firefox-bin"}
39
+
40
+ assert_equal(expected_config, SeleniumOnRailsConfig.get(:browsers))
41
+ end
42
+
43
+ end
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class SeleniumSupportTest < Test::Unit::TestCase
4
+ def setup
5
+ @controller = SeleniumController.new
6
+ @controller.extend(SeleniumOnRails::PathsTestHelper)
7
+ ActionController::Routing::Routes.draw
8
+ @request = ActionController::TestRequest.new
9
+ @response = ActionController::TestResponse.new
10
+ end
11
+
12
+ def test_route
13
+ get :support_file, :filename => 'TestRunner.html' #initialize the controller
14
+ assert_equal 'http://test.host/selenium/TestRunner.html',
15
+ @controller.url_for(:controller => 'selenium', :action => 'support_file', :filename => 'TestRunner.html')
16
+ end
17
+
18
+ def test_test_runner_existance
19
+ get :support_file, :filename => 'TestRunner.html'
20
+ assert_response :success
21
+ assert @response.body.include?('Selenium')
22
+ end
23
+
24
+ def test_default_file
25
+ get :support_file, :filename => ''
26
+ assert_redirected_to :filename => 'TestRunner.html', :test => 'tests'
27
+ end
28
+
29
+ def test_missing_file
30
+ get :support_file, :filename => 'missing.html'
31
+ assert_response 404
32
+ assert_equal 'Not found', @response.body
33
+ end
34
+
35
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+ require 'mocha'
3
+ RAILS_ROOT = File.expand_path(File.dirname(__FILE__) + "/")
4
+
5
+ class SetupTest < Test::Unit::TestCase
6
+ def setup
7
+ @controller = SeleniumController.new
8
+ @controller.extend(SeleniumOnRails::PathsTestHelper)
9
+ SeleniumController.any_instance.stubs(:clear_tables).returns([])
10
+ SeleniumController.any_instance.stubs(:layout_path).returns(false)
11
+ ActionController::Routing::Routes.draw
12
+ @request = ActionController::TestRequest.new
13
+ @response = ActionController::TestResponse.new
14
+ end
15
+
16
+ def test_session_reset
17
+ @request.session['key'] = 'value'
18
+ get :setup
19
+ assert_nil session['key']
20
+ assert_response :success
21
+ assert_tag :content => 'The session is wiped clean.'
22
+ end
23
+
24
+ def test_session_no_reset
25
+ @request.session['key'] = 'value'
26
+ get :setup, :keep_session => true
27
+ assert_equal 'value', session['key']
28
+ assert_response :success
29
+ assert_no_tag :content => 'The session is wiped clean.'
30
+ end
31
+ end
@@ -0,0 +1,109 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class SuiteRendererTest < Test::Unit::TestCase
4
+ def setup
5
+ @controller = SeleniumController.new
6
+ @controller.extend(SeleniumOnRails::PathsTestHelper)
7
+ ActionController::Routing::Routes.draw
8
+ @request = ActionController::TestRequest.new
9
+ @response = ActionController::TestResponse.new
10
+ @controller.layout_override =<<END
11
+ <html><head><title>test layout</title></head><body>
12
+ @content_for_layout
13
+ </body></html>
14
+ END
15
+ end
16
+
17
+ def test_empty_suite
18
+ get :test_file, :testname => 'empty_suite'
19
+
20
+ assert_response :success
21
+ assert_tag :tag => "title", :content => "test layout"
22
+ assert_tag :tag => "script", :attributes => {:type => "text/javascript"}
23
+ assert_tag :tag => "select", :attributes => {:onchange => "openSuite(this)"},
24
+ :descendant => {:tag => "option", :attributes => {:value => "header"}, :content => "Suites:"},
25
+ :descendant => {:tag => "option", :attributes => {:value => ""}, :content => ".."}
26
+
27
+ assert_tag :tag => "table",
28
+ :descendant => {:tag => "th", :content => "Empty suite"}
29
+ end
30
+
31
+ def test_root_suite
32
+ _test_root_suite ''
33
+ end
34
+
35
+ def test_test_suite_html
36
+ #TestSuite.html is the default name the Selenium Runner tries to run
37
+ _test_root_suite 'TestSuite.html'
38
+ end
39
+
40
+ def _test_root_suite testname
41
+ get :test_file, :testname => testname
42
+ assert_response :success
43
+
44
+ assert_tag :tag => "title", :content => "test layout"
45
+ assert_tag :tag => "script", :attributes => {:type => "text/javascript"}
46
+ assert_tag :tag => "select", :attributes => {:onchange => "openSuite(this)"},
47
+ :descendant => {:tag => "option", :attributes => {:value => "header"}, :content => "Suites:"},
48
+ :descendant => {:tag => "option", :attributes => {:value => "/partials"}, :content => "Partials"},
49
+ :descendant => {:tag => "option", :attributes => {:value => "/suite_one"}, :content => "Suite one"},
50
+ :descendant => {:tag => "option", :attributes => {:value => "/suite_two"}, :content => "Suite two"},
51
+ :descendant => {:tag => "option", :attributes => {:value => "/suite_one/subsuite"}, :content => "Suite one.Subsuite"}
52
+
53
+ assert_tag :tag => "table",
54
+ :descendant => {:tag => "th", :content => "All test cases"},
55
+ :descendant => {:tag => "td", :content => "Html"},
56
+ :descendant => {:tag => "td", :content => "Own layout"},
57
+ :descendant => {:tag => "td", :content => "Rhtml"},
58
+ :descendant => {:tag => "td", :content => "Rselenese"},
59
+ :descendant => {:tag => "td", :content => "Selenese"},
60
+ :descendant => {:tag => "td", :content => "Partials.All partials"},
61
+ :descendant => {:tag => "td", :content => "Suite one.Suite one testcase1"},
62
+ :descendant => {:tag => "td", :content => "Suite one.Suite one testcase2"},
63
+ :descendant => {:tag => "td", :content => "Suite one.Subsuite.Suite one subsuite testcase"},
64
+ :descendant => {:tag => "td", :content => "Suite two.Suite two testcase"}
65
+ end
66
+
67
+ def test_suite_one
68
+ get :test_file, :testname => 'suite_one'
69
+
70
+ assert_response :success
71
+ assert_tag :tag => "title", :content => "test layout"
72
+ assert_tag :tag => "script", :attributes => {:type => "text/javascript"}
73
+ assert_tag :tag => "select", :attributes => {:onchange => "openSuite(this)"},
74
+ :descendant => {:tag => "option", :attributes => {:value => "header"}, :content => "Suites:"},
75
+ :descendant => {:tag => "option", :attributes => {:value => ""}, :content => ".."},
76
+ :descendant => {:tag => "option", :attributes => {:value => "/suite_one/subsuite"}, :content => "Subsuite"}
77
+
78
+ assert_tag :tag => "table",
79
+ :descendant => {:tag => "th", :content => "Suite one"},
80
+ :descendant => {:tag => "td", :content => "Suite one testcase1"},
81
+ :descendant => {:tag => "td", :content => "Suite one testcase2"},
82
+ :descendant => {:tag => "td", :content => "Subsuite.Suite one subsuite testcase"}
83
+ end
84
+
85
+ def test_sub_suite
86
+ get :test_file, :testname => 'suite_one/subsuite'
87
+
88
+ assert_response :success
89
+ assert_tag :tag => "title", :content => "test layout"
90
+ assert_tag :tag => "script", :attributes => {:type => "text/javascript"}
91
+ assert_tag :tag => "select", :attributes => {:onchange => "openSuite(this)"},
92
+ :descendant => {:tag => "option", :attributes => {:value => "header"}, :content => "Suites:"},
93
+ :descendant => {:tag => "option", :attributes => {:value => "/suite_one"}, :content => ".."}
94
+
95
+ assert_tag :tag => "table",
96
+ :descendant => {:tag => "th", :content => "Subsuite"},
97
+ :descendant => {:tag => "td", :content => "Suite one subsuite testcase"}
98
+ end
99
+
100
+ def test_missing_tests_directory
101
+ def @controller.selenium_tests_path
102
+ File.join(File.dirname(__FILE__), 'invalid')
103
+ end
104
+ get :test_file, :testname => ''
105
+ assert_response 404
106
+ assert_equal "Did not find the Selenium tests path (#{File.join(File.dirname(__FILE__), 'invalid')}). Run script/generate selenium", @response.body
107
+ end
108
+
109
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+ require 'mocha'
3
+ require 'controllers/switch_environment_controller'
4
+
5
+ class SwitchEnvironmentControllerTest < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @config = mock()
9
+ setup_controller_test(SwitchEnvironmentController)
10
+ end
11
+
12
+ def test_index
13
+ SeleniumOnRailsConfig.expects(:get).with(:environments).returns("hello dolly")
14
+ get :index
15
+ assert @response.body.include?('hello dolly')
16
+ end
17
+ end
@@ -0,0 +1,51 @@
1
+ #----------------------------------------------------------------------------
2
+ # This is a *_authortest.rb file, which means it will only run if you run:
3
+ # rake alltests
4
+ # It is not run as part of the standard test suite, as it's of limited
5
+ # value unless you're actually developing Selenium On Rails.
6
+
7
+ #----------------------------------------------------------------------------
8
+ # The test_builder_actions.rb and test_builder_accessors.rb files do not
9
+ # necessarily contain all the functions which are available in Selenium.
10
+ # Here we use the iedoc.xml file to find functions which might need to be
11
+ # added to the files. Ultimately it would be great not to need to do this
12
+ # process manually, however, this is a temporary step toward improving
13
+ # function parity.
14
+
15
+ require File.dirname(__FILE__) + '/test_helper'
16
+
17
+ class TestTheTestBuilderFunctions < Test::Unit::TestCase
18
+
19
+ def test_functions_in_iedoc_are_supported
20
+
21
+ base_path = File.dirname(__FILE__) + '/../'
22
+
23
+ iedoc_file = File.read base_path + "selenium-core/iedoc.xml"
24
+ test_builder_actions_file = File.read base_path + "lib/selenium_on_rails/test_builder_actions.rb"
25
+ test_builder_accessors_file = File.read base_path + "lib/selenium_on_rails/test_builder_accessors.rb"
26
+
27
+ # Don't include any deprecated functions
28
+ deprecated_functions = %W{dragdrop}
29
+
30
+ iedoc_functions = iedoc_file.scan(/function *name *= *["']([a-zA-Z]+)["']/)\
31
+ .sort.collect{|x| x[0]} - deprecated_functions
32
+
33
+ for function_name in iedoc_functions
34
+
35
+ function_name.gsub!(/[A-Z]/) { |s| "_" + s.downcase }
36
+
37
+ test_description = "The function listed in the iedoc.xml file, " +
38
+ "#{function_name}, exists in the test_builder files"
39
+
40
+ if test_builder_actions_file.match(/def *#{function_name}/) ||
41
+ test_builder_accessors_file.match(/(?:def *|tt>)#{function_name}/)
42
+ assert true, test_description
43
+ else
44
+ assert false, test_description
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+