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,514 @@
1
+ # The actions available for SeleniumOnRails::TestBuilder tests.
2
+ #
3
+ # For each action +foo+ there's also an action +foo_and_wait+.
4
+ module SeleniumOnRails::TestBuilderActions
5
+ # Tell Selenium on Rails to clear the session and load any fixtures. DO
6
+ # NOT CALL THIS AGAINST NON-TEST DATABASES.
7
+ # The supported +options+ are <code>:keep_session</code>,
8
+ # <code>:fixtures</code> and <code>:clear_tables</code>
9
+ # setup
10
+ # setup :keep_session
11
+ # setup :fixtures => :all
12
+ # setup :keep_session, :fixtures => [:foo, :bar]
13
+ # setup :clear_tables => [:foo, :bar]
14
+ def setup options = {}
15
+ options = {options => nil} unless options.is_a? Hash
16
+
17
+ opts = {:controller => 'selenium', :action => 'setup'}
18
+ opts[:keep_session] = true if options.has_key? :keep_session
19
+
20
+ [:fixtures, :clear_tables].each do |key|
21
+ if (f = options[key])
22
+ f = [f] unless f.is_a? Array
23
+ opts[key] = f.join ','
24
+ end
25
+ end
26
+
27
+ open opts
28
+ end
29
+
30
+ # Includes a partial.
31
+ # The path is relative to the Selenium tests root. The starting _ and the file
32
+ # extension don't have to be specified.
33
+ # #include test/selenium/_partial.*
34
+ # include_partial 'partial'
35
+ # #include test/selenium/suite/_partial.*
36
+ # include_partial 'suite/partial'
37
+ # #include test/selenium/suite/_partial.* and provide local assigns
38
+ # include_partial 'suite/partial', :foo => bar
39
+ def include_partial path, local_assigns = {}
40
+ partial = @view.render :partial => path, :locals => local_assigns
41
+ @output << partial
42
+ end
43
+
44
+ # Clicks on a link, button, checkbox or radio button. If the click action
45
+ # causes a new page to load (like a link usually does), call
46
+ # +wait_for_page_to_load+.
47
+ def click locator
48
+ command 'click', locator
49
+ end
50
+
51
+ # Clicks on a link, button, checkbox or radio button. If the click action causes
52
+ # a new page to load (like a link usually does), call wait_for_page_to_load.
53
+ def click_at locator, coord_string
54
+ command 'clickAt', locator, coord_string
55
+ end
56
+
57
+ # Explicitly simulate an event (e.g. <tt>"focus"</tt>, <tt>"blur"</tt>), to
58
+ # trigger the corresponding <tt>"on_event_"</tt> handler.
59
+ def fire_event locator, event_name
60
+ command 'fireEvent', locator, event_name
61
+ end
62
+
63
+ # Simulates a user pressing and releasing a key.
64
+ #
65
+ # +keycode+ is the numeric keycode of the key to be pressed, normally the
66
+ # ASCII value of that key.
67
+ def key_press locator, keycode
68
+ command 'keyPress', locator, keycode
69
+ end
70
+
71
+ # Simulates a user pressing a key (without releasing it yet).
72
+ #
73
+ # +keycode+ is the numeric keycode of the key to be pressed, normally the
74
+ # ASCII value of that key.
75
+ def key_down locator, keycode
76
+ command 'keyDown', locator, keycode
77
+ end
78
+
79
+ # Simulates a user releasing a key.
80
+ #
81
+ # +keycode+ is the numeric keycode of the key to be released, normally the
82
+ # ASCII value of that key.
83
+ def key_up locator, keycode
84
+ command 'keyUp', locator, keycode
85
+ end
86
+
87
+ # Simulates a user hovering a mouse over the specified element.
88
+ def mouse_over locator
89
+ command 'mouseOver', locator
90
+ end
91
+
92
+ # Simulates a user pressing the mouse button (without releasing it yet) on the
93
+ # specified element.
94
+ def mouse_down locator
95
+ command 'mouseDown', locator
96
+ end
97
+
98
+ # Sets the value of an input field, as though you typed it in.
99
+ #
100
+ # Can also be used to set the value of combo boxes, check boxes, etc. In these
101
+ # cases, +value+ should be the value of the option selected, not the visible
102
+ # text.
103
+ def type locator, value
104
+ command 'type', locator, value
105
+ end
106
+
107
+ # Check a toggle-button (checkbox/radio).
108
+ def check locator
109
+ command 'check', locator
110
+ end
111
+
112
+ # Uncheck a toggle-button (checkbox/radio).
113
+ def uncheck locator
114
+ command 'uncheck', locator
115
+ end
116
+
117
+ # Select an option from a drop-down using an option locator.
118
+ #
119
+ # Option locators provide different ways of specifying options of an HTML
120
+ # Select element (e.g. for selecting a specific option, or for asserting that
121
+ # the selected option satisfies a specification). There are several forms of
122
+ # Select Option Locator.
123
+ #
124
+ # * label=labelPattern
125
+ # matches options based on their labels, i.e. the visible text. (This is the
126
+ # default.)
127
+ # label=regexp:^[Oo]ther
128
+ # * value=valuePattern
129
+ # matches options based on their values.
130
+ # value=other
131
+ # * id=id
132
+ # matches options based on their ids.
133
+ # id=option1
134
+ # * index=index
135
+ # matches an option based on its index (offset from zero).
136
+ # index=2
137
+ #
138
+ # If no option locator prefix is provided, the default behaviour is to match
139
+ # on label.
140
+ def select locator, option_locator
141
+ command 'select', locator, option_locator
142
+ end
143
+
144
+ # Add a selection to the set of selected options in a multi-select element
145
+ # using an option locator.
146
+ #
147
+ # See the <tt>#select</tt> command for more information about option locators.
148
+ def add_selection locator, option_locator
149
+ command 'addSelection', locator, option_locator
150
+ end
151
+
152
+ # Remove a selection from the set of selected options in a multi-select
153
+ # element using an option locator.
154
+ #
155
+ # See the +select+ command for more information about option locators.
156
+ def remove_selection locator, option_locator
157
+ command 'removeSelection', locator, option_locator
158
+ end
159
+
160
+ # Submit the specified form. This is particularly useful for forms without
161
+ # submit buttons, e.g. single-input "Search" forms.
162
+ def submit locator
163
+ command 'submit', locator
164
+ end
165
+
166
+ # Opens an URL in the test frame. This accepts both relative and absolute
167
+ # URLs. The <tt>open</tt> command waits for the page to load before
168
+ # proceeding, i.e. you don't have to call +wait_for_page_to_load+.
169
+ #
170
+ # Note: The URL must be on the same domain as the runner HTML due to security
171
+ # restrictions in the browser (Same Origin Policy).
172
+ def open url
173
+ command 'open', url_arg(url)
174
+ end
175
+
176
+ # Selects a popup window; once a popup window has been selected, all commands
177
+ # go to that window. To select the main window again, use +nil+ as the target.
178
+ def select_window window_id
179
+ command 'selectWindow', window_id||'null'
180
+ end
181
+
182
+ # Waits for a popup window to appear and load up.
183
+ #
184
+ # The +timeout+ is specified in milliseconds.
185
+ def wait_for_popup window_id, timeout
186
+ command 'waitForPopUp', window_id||'null', timeout
187
+ end
188
+
189
+ # By default, Selenium's overridden <tt>window.confirm()</tt> function will return
190
+ # +true+, as if the user had manually clicked OK. After running this command,
191
+ # the next call to <tt>confirm()</tt> will return +false+, as if the user had clicked
192
+ # Cancel.
193
+ def choose_cancel_on_next_confirmation
194
+ command 'chooseCancelOnNextConfirmation'
195
+ end
196
+
197
+ # Instructs Selenium to return the specified answer string in response to the
198
+ # next JavaScript prompt (<tt>window.prompt()</tt>).
199
+ def answer_on_next_prompt answer
200
+ command 'answerOnNextPrompt', answer
201
+ end
202
+
203
+ # Simulates the user clicking the "back" button on their browser.
204
+ def go_back
205
+ command 'goBack'
206
+ end
207
+
208
+ # Simulates the user clicking the "Refresh" button on their browser.
209
+ def refresh
210
+ command 'refresh'
211
+ end
212
+
213
+ # Simulates the user clicking the "close" button in the titlebar of a popup
214
+ # window or tab.
215
+ def close
216
+ command 'close'
217
+ end
218
+
219
+ # Simulates the user pressing the alt key and hold it down until do_alt_up()
220
+ # is called or a new page is loaded.
221
+ def alt_key_down
222
+ command 'altKeyDown'
223
+ end
224
+
225
+ # Simulates the user releasing the alt key.
226
+ def alt_key_up
227
+ command 'altKeyUp'
228
+ end
229
+
230
+ # Halt the currently running test, and wait for the user to press the Continue
231
+ # button. This command is useful for debugging, but be careful when using it,
232
+ # because it will force automated tests to hang until a user intervenes manually.
233
+ #
234
+ # NOTE: <tt>break</tt> is a reserved word in Ruby, so we have to simulate
235
+ # Selenium core's <tt>break()</tt> with <tt>brake()</tt>
236
+ def brake
237
+ command 'break'
238
+ end
239
+
240
+ # Simulates the user pressing the alt key and hold it down until do_control_up()
241
+ # is called or a new page is loaded.
242
+ def control_key_down
243
+ command 'controlKeyDown'
244
+ end
245
+
246
+ # Simulates the user releasing the control key.
247
+ def control_key_up
248
+ command 'controlKeyUp'
249
+ end
250
+
251
+ # Create a new cookie whose path and domain are same with those of current page
252
+ # under test, unless you specified a path for this cookie explicitly.
253
+ #
254
+ # Arguments:
255
+ # * <tt>name_value_pair</tt> - name and value of the cookie in a format "name=value"
256
+ # * <tt>options_string</tt> - options for the cookie. Currently supported options
257
+ # include 'path' and 'max_age'. The options_string's format is
258
+ # <tt>"path=/path/, max_age=60"</tt>. The order of options are irrelevant, the
259
+ # unit of the value of 'max_age' is second.
260
+ def create_cookie name_value_pair, options_string
261
+ command 'createCookie', name_value_pair, options_string
262
+ end
263
+
264
+ # Delete a named cookie with specified path.
265
+ def delete_cookie name, path
266
+ command 'deleteCookie', name, path
267
+ end
268
+
269
+ # Double clicks on a link, button, checkbox or radio button. If the double click action
270
+ # causes a new page to load (like a link usually does), call <tt>wait_for_page_to_load</tt>.
271
+ def double_click locator
272
+ command 'doubleClick', locator
273
+ end
274
+
275
+ # Doubleclicks on a link, button, checkbox or radio button. If the action causes a new page
276
+ # to load (like a link usually does), call <tt>wait_for_page_to_load</tt>.
277
+ def double_click_at locator, coord_string
278
+ command 'doubleClickAt', locator, coord_string
279
+ end
280
+
281
+ # Drags an element a certain distance and then drops it.
282
+ def drag_and_drop locator, movements_string
283
+ command 'dragAndDrop', locator, movements_string
284
+ end
285
+
286
+ # Drags an element and drops it on another element.
287
+ def drag_and_drop_to_object locator_of_object_to_be_dragged, locator_of_drag_destination_object
288
+ command 'dragAndDropToObject', locator_of_object_to_be_dragged, locator_of_drag_destination_object
289
+ end
290
+
291
+ # Prints the specified message into the third table cell in your Selenese
292
+ # tables.
293
+ # Useful for debugging.
294
+ def echo message
295
+ command 'echo', message
296
+ end
297
+
298
+ # Briefly changes the backgroundColor of the specified element yellow.
299
+ # Useful for debugging.
300
+ def highlight locator
301
+ command 'highlight', locator
302
+ end
303
+
304
+ # Press the meta key and hold it down until <tt>doMetaUp()</tt> is called or
305
+ # a new page is loaded.
306
+ def meta_key_down
307
+ command 'metaKeyDown'
308
+ end
309
+
310
+ # Release the meta key.
311
+ def meta_key_up
312
+ command 'metaKeyUp'
313
+ end
314
+
315
+ # Simulates a user pressing the mouse button (without releasing it yet) on the specified
316
+ # element.
317
+ def mouse_down_at locator, coord_string
318
+ command 'mouseDownAt', locator, coord_string
319
+ end
320
+
321
+ # Simulates a user moving the mouse.
322
+ def mouse_move locator
323
+ command 'mouseMove', locator
324
+ end
325
+
326
+ # Simulates a user moving the mouse relative to the specified element.
327
+ def mouse_move_at locator, coord_string
328
+ command 'mouseMoveAt', locator, coord_string
329
+ end
330
+
331
+ # Simulates the user moving the mouse off the specified element.
332
+ def mouse_out locator
333
+ command 'mouseOut', locator
334
+ end
335
+
336
+ # Simulates the user releasing the mouse button on the specified element.
337
+ def mouse_up locator
338
+ command 'mouseUp', locator
339
+ end
340
+
341
+ # Simulates a user pressing the mouse button (without releasing it yet) on the
342
+ # specified element.
343
+ def mouse_up_at locator, coord_string
344
+ command 'mouseUpAt', locator, coord_string
345
+ end
346
+
347
+ # Opens a popup window (if a window with that ID isn't already open). After opening the
348
+ # window, you'll need to select it using the <tt>select_window</tt> command.
349
+ #
350
+ # This command can also be a useful workaround for bug SEL-339. In some cases, Selenium
351
+ # will be unable to intercept a call to window.open (if the call occurs during or before
352
+ # the "onLoad" event, for example). In those cases, you can force Selenium to notice the
353
+ # open window's name by using the Selenium openWindow command, using an empty (blank) url,
354
+ # like this: <tt>open_window("", "myFunnyWindow")</tt>.
355
+ def open_window url, window_id
356
+ command 'openWindow', url, window_id
357
+ end
358
+
359
+ # Wait for the specified amount of time (in milliseconds).
360
+ def pause wait_time
361
+ command 'pause', wait_time
362
+ end
363
+
364
+ # Unselects all of the selected options in a multi-select element.
365
+ def remove_all_selections locator
366
+ command 'removeAllSelections', locator
367
+ end
368
+
369
+ # Selects a frame within the current window. (You may invoke this command multiple times
370
+ # to select nested frames.) To select the parent frame, use "relative=parent" as a
371
+ # locator; to select the top frame, use "relative=top".
372
+ #
373
+ # You may also use a DOM expression to identify the frame you want directly, like this:
374
+ # <tt>dom=frames["main"].frames["subframe"]</tt>
375
+ def select_frame locator
376
+ command 'selectFrame', locator
377
+ end
378
+
379
+ # Moves the text cursor to the specified position in the given input element or textarea.
380
+ # This method will fail if the specified element isn't an input element or textarea.
381
+ def set_cursor_position locator, position
382
+ command 'setCursorPosition', locator, position
383
+ end
384
+
385
+ # Configure the number of pixels between "mousemove" events during dragAndDrop commands
386
+ # (default=10).
387
+ # Setting this value to 0 means that we'll send a "mousemove" event to every single pixel
388
+ # in between the start location and the end location; that can be very slow, and may
389
+ # cause some browsers to force the JavaScript to timeout.
390
+ #
391
+ # If the mouse speed is greater than the distance between the two dragged objects, we'll
392
+ # just send one "mousemove" at the start location and then one final one at the end location.
393
+ def set_mouse_speed pixels
394
+ command 'setMouseSpeed', pixels
395
+ end
396
+
397
+ # Press the shift key and hold it down until <tt>doShiftUp()</tt> is called or a new page
398
+ # is loaded.
399
+ def shift_key_down
400
+ command 'shiftKeyDown'
401
+ end
402
+
403
+ # Release the shift key.
404
+ def shift_key_up
405
+ command 'shiftKeyUp'
406
+ end
407
+
408
+ # This command is a synonym for <tt>store_expression</tt>.
409
+ def store expression, variable_name
410
+ command 'store', expression, variable_name
411
+ end
412
+
413
+ # Simulates keystroke events on the specified element, as though you typed the value
414
+ # key-by-key.
415
+ #
416
+ # This is a convenience method for calling <tt>key_down</tt>, <tt>key_up</tt>,
417
+ # <tt>key_press</tt> for every character in the specified string; this is useful for
418
+ # dynamic UI widgets (like auto-completing combo boxes) that require explicit key events.
419
+ #
420
+ # Unlike the simple "type" command, which forces the specified value into the page directly,
421
+ # this command may or may not have any visible effect, even in cases where typing keys would
422
+ # normally have a visible effect. For example, if you use "<tt>type_keys</tt>" on a form
423
+ # element, you may or may not see the results of what you typed in the field.
424
+ #
425
+ # In some cases, you may need to use the simple "type" command to set the value of the field
426
+ # and then the "<tt>type_keys</tt>" command to send the keystroke events corresponding to
427
+ # what you just typed.
428
+ def type_keys locator, value
429
+ command 'typeKeys', locator, value
430
+ end
431
+
432
+ # Gives focus to a window.
433
+ def window_focus window_name
434
+ command 'windowFocus', window_name
435
+ end
436
+
437
+ # Resize window to take up the entire screen.
438
+ def window_maximize window_name
439
+ command 'windowMaximize', window_name
440
+ end
441
+
442
+ # Writes a message to the status bar and adds a note to the browser-side log.
443
+ #
444
+ # +context+ is the message sent to the browser.
445
+ #
446
+ # +log_level_threshold+ can be +nil+, <tt>:debug</tt>, <tt>:info</tt>,
447
+ # <tt>:warn</tt> or <tt>:error</tt>.
448
+ def set_context context, log_level_threshold = nil
449
+ if log_level_threshold
450
+ command 'setContext', context, log_level_threshold.to_s
451
+ else
452
+ command 'setContext', context
453
+ end
454
+ end
455
+
456
+ # Runs the specified JavaScript snippet repeatedly until it evaluates to
457
+ # +true+. The snippet may have multiple lines, but only the result of the last
458
+ # line will be considered.
459
+ #
460
+ # Note that, by default, the snippet will be run in the runner's test window,
461
+ # not in the window of your application. To get the window of your
462
+ # application, you can use the JavaScript snippet
463
+ # <tt>selenium.browserbot.getCurrentWindow()</tt>, and then run your
464
+ # JavaScript in there.
465
+ #
466
+ # +timeout+ is specified in milliseconds.
467
+ def wait_for_condition script, timeout
468
+ command 'waitForCondition', script, timeout
469
+ end
470
+
471
+ # Specifies the amount of time that Selenium will wait for actions to
472
+ # complete.
473
+ #
474
+ # Actions that require waiting include +open+ and the <tt>wait_for*</tt>
475
+ # actions.
476
+ #
477
+ # The default timeout is 30 seconds.
478
+ #
479
+ # +timeout+ is specified in milliseconds.
480
+ def set_timeout timeout
481
+ command 'setTimeout', timeout
482
+ end
483
+
484
+ # Waits for a new page to load.
485
+ #
486
+ # You can use this command instead of the +and_wait+ suffixes,
487
+ # +click_and_wait+, +select_and_wait+, +type_and_wait+ etc. (which are only
488
+ # available in the JS API).
489
+ #
490
+ # Selenium constantly keeps track of new pages loading, and sets a
491
+ # +newPageLoaded+ flag when it first notices a page load. Running any other
492
+ # Selenium command after turns the flag to +false+. Hence, if you want to wait
493
+ # for a page to load, you must wait immediately after a Selenium command that
494
+ # caused a page-load.
495
+ #
496
+ # +timeout+ is specified in milliseconds.
497
+ def wait_for_page_to_load timeout
498
+ command 'waitForPageToLoad', timeout
499
+ end
500
+
501
+ private
502
+ # Generates the corresponding +_and_wait+ for each action.
503
+ def self.generate_and_wait_actions
504
+ public_instance_methods.each do |method|
505
+ define_method method + '_and_wait' do |*args|
506
+ methods_array = method.split("_")
507
+ send 'command_and_wait', methods_array.first.downcase + methods_array[1..-1].collect{|part| part.camelize}.join, *args
508
+ end
509
+ end
510
+ end
511
+
512
+ generate_and_wait_actions
513
+ end
514
+
@@ -0,0 +1,91 @@
1
+ # Mirrors the accessors specified in user-extensions.js from the selenium-core
2
+ module SeleniumOnRails::TestBuilderUserAccessors
3
+
4
+ # Return the length of text of a specified element.
5
+ #
6
+ # Related Assertions, automatically generated:
7
+ # * <tt>assert_text_length(locator, variable)</tt>
8
+ # * <tt>assert_not_text_length(locator, length)</tt>
9
+ # * <tt>verify_text_length(locator, length)</tt>
10
+ # * <tt>verify_not_text_length(locator, length)</tt>
11
+ # * <tt>wait_for_text_length(locator, length)</tt>
12
+ # * <tt>wait_for_not_text_length(locator, length)</tt>
13
+ def store_text_length locator, variable_name
14
+ command 'storeTextLength', locator, variable_name
15
+ end
16
+
17
+ # Checks if value entered more than once in textbox.
18
+ #
19
+ # Related Assertions, automatically generated:
20
+ # * <tt>assert_not_text_length(locator, text)</tt>
21
+ # * <tt>verify_text_length(locator, text)</tt>
22
+ # * <tt>verify_not_text_length(locator, text)</tt>
23
+ # * <tt>wait_for_text_length(locator, text)</tt>
24
+ # * <tt>wait_for_not_text_length(locator, text)</tt>
25
+ def assert_value_repeated locator, text
26
+ command 'assertValueRepeated', locator, text
27
+ end
28
+
29
+ private
30
+
31
+ def self.generate_methods
32
+ public_instance_methods.each do |method|
33
+ case method
34
+ when 'store_text_length'
35
+ each_assertion method do |assertion_method, command_name|
36
+ define_method assertion_method do |arg1, arg2|
37
+ command command_name, arg1, arg2
38
+ end
39
+ end
40
+ when 'assert_value_repeated'
41
+ each_check method do |check_method, command_name|
42
+ define_method check_method do |arg1, arg2|
43
+ command command_name, arg1, arg2
44
+ end
45
+ end
46
+ else
47
+ raise "Internal error: Don't know how to process user accessor: #{method}"
48
+ end
49
+ end
50
+ end
51
+
52
+ # Generates all the assertions needed given a +store_method+.
53
+ def self.each_assertion store_method
54
+ before_negation = nil
55
+ after_negation = store_method.split('_')[1..-1] #throw away 'store'
56
+ if after_negation.last == 'present'
57
+ before_negation, after_negation = after_negation, after_negation.pop
58
+ end
59
+
60
+ ['assert', 'verify', ['wait','for']].each do |action|
61
+ [nil, 'not'].each do |negation|
62
+ name = [action, before_negation, negation, after_negation].flatten.reject{|a|a.nil?}
63
+ method_name = name.join '_'
64
+ command = name.inject(name.shift.clone) {|n, p| n << p.capitalize}
65
+ yield method_name, command
66
+ end
67
+ end
68
+ end
69
+
70
+ def self.each_check assert_method
71
+ before_negation = nil
72
+ after_negation = assert_method.split('_')[1..-1] #throw away 'assert'
73
+ if after_negation.last == 'present'
74
+ before_negation, after_negation = after_negation, after_negation.pop
75
+ end
76
+
77
+ ['assert', 'verify', ['wait', 'for']].each do |action|
78
+ [nil, 'not'].each do |negation|
79
+ unless (action == 'assert' && negation.nil?)
80
+ name = [action, before_negation, negation, after_negation].flatten.reject{|a|a.nil?}
81
+ method_name = name.join '_'
82
+ command = name.inject(name.shift.clone) {|n, p| n << p.capitalize}
83
+ yield method_name, command
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ generate_methods
90
+
91
+ end
@@ -0,0 +1,24 @@
1
+ # Mirrors the actions specified in user-extensions.js from the selenium-core
2
+ module SeleniumOnRails::TestBuilderUserActions
3
+
4
+ # Types the text twice into a text box.
5
+ def type_repeated locator, text
6
+ command 'typeRepeated', locator, text
7
+ end
8
+
9
+ private
10
+
11
+ # Generates the corresponding +_and_wait+ for each action.
12
+ def self.generate_and_wait_actions
13
+ public_instance_methods.each do |method|
14
+ define_method method + '_and_wait' do |*args|
15
+ make_command_waiting do
16
+ send method, *args
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ generate_and_wait_actions
23
+
24
+ end
@@ -0,0 +1,11 @@
1
+ module SeleniumOnRails # :nodoc
2
+ end
3
+
4
+ require 'selenium_on_rails/selenese'
5
+ require 'selenium_on_rails/test_builder'
6
+ require 'selenium_on_rails/rselenese'
7
+ require 'selenium_on_rails/suite_renderer'
8
+ require 'selenium_on_rails/paths'
9
+ require 'selenium_on_rails/fixture_loader'
10
+ require 'selenium_on_rails/partials_support'
11
+ require 'selenium_on_rails/renderer'
@@ -0,0 +1,30 @@
1
+ require 'yaml'
2
+ require 'erb'
3
+
4
+ class SeleniumOnRailsConfig
5
+ @@defaults = {:environments => ['test']}
6
+ def self.get var, default = nil
7
+ value = configs[var.to_s]
8
+ value ||= @@defaults[var]
9
+ value ||= default
10
+ value ||= yield if block_given?
11
+ value
12
+ end
13
+
14
+ private
15
+ def self.configs
16
+ @@configs ||= nil
17
+ unless @@configs
18
+ files = [File.join(RAILS_ROOT, 'config', 'selenium.yml'), File.expand_path(File.dirname(__FILE__) + '/../config.yml')]
19
+ files.each do |file|
20
+ if File.exist?(file)
21
+ @@configs = YAML.load(ERB.new(IO.read(file)).result)
22
+ break
23
+ end
24
+ end
25
+ @@configs ||= {}
26
+ end
27
+ @@configs
28
+ end
29
+
30
+ end
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html>
4
+ <head>
5
+ <title>Selenium on Rails<%= defined?(@page_title) ? ": #{@page_title}" : '' %></title>
6
+ </head>
7
+ <style type="text/css">
8
+ body, html { font-family: Verdana, Arial, sans-serif; }
9
+ table { border-collapse: collapse; margin: 10px 0px; }
10
+ td, th { border: 2px solid black; }
11
+ #notice { text-align: center; color: darkgreen; background-color: lightgreen; padding: 5px 15px; width: 400px; margin-left: auto; margin-right: auto; }
12
+ #notice * { text-align: left; }
13
+ #usagedescription { margin: 15px 30px; }
14
+ </style>
15
+ <body>
16
+ <%= @content_for_layout %>
17
+ </body>
18
+ </html>
@@ -0,0 +1,5 @@
1
+ <table>
2
+ <% @result.each_pair do |key, value| -%>
3
+ <tr><td><%= key %></td><td><%= value %></td></tr>
4
+ <% end -%>
5
+ </table>