zena 1.2.7 → 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (407) hide show
  1. data/History.txt +80 -25
  2. data/Rakefile +2 -2
  3. data/app/controllers/columns_controller.rb +2 -2
  4. data/app/controllers/nodes_controller.rb +22 -29
  5. data/app/controllers/user_sessions_controller.rb +35 -10
  6. data/app/controllers/users_controller.rb +2 -2
  7. data/app/controllers/versions_controller.rb +2 -2
  8. data/app/models/group.rb +15 -1
  9. data/app/models/node.rb +109 -8
  10. data/app/models/role.rb +4 -0
  11. data/app/models/site.rb +64 -58
  12. data/app/models/template.rb +1 -1
  13. data/app/models/user.rb +135 -29
  14. data/app/models/user_session.rb +0 -1
  15. data/app/models/virtual_class.rb +11 -6
  16. data/app/views/columns/_form.html.erb +3 -1
  17. data/app/views/columns/_li.html.erb +1 -1
  18. data/app/views/columns/create.rjs +1 -1
  19. data/app/views/groups/_form.rhtml +16 -13
  20. data/app/views/relations/_form.erb +18 -6
  21. data/app/views/sites/_form.erb +12 -6
  22. data/app/views/users/_form.rhtml +23 -8
  23. data/app/views/users/_li.rhtml +14 -3
  24. data/app/views/users/index.rhtml +1 -1
  25. data/app/views/virtual_classes/_form.erb +12 -2
  26. data/app/views/zafu/default/Node-+login.zafu +8 -1
  27. data/app/views/zafu/default/Node-+search.zafu +1 -1
  28. data/bricks/acls/lib/bricks/acls.rb +1 -0
  29. data/bricks/acls/zena/migrate/20130903150356_longer_names_for_acl.rb +9 -0
  30. data/bricks/acls/zena/test/integration/acl_integration_test.rb +2 -2
  31. data/bricks/currency/lib/bricks/currency.rb +120 -0
  32. data/bricks/currency/zena/test/unit/currency_test.rb +43 -0
  33. data/bricks/fs_skin/lib/bricks/fs_skin.rb +1 -1
  34. data/bricks/fs_skin/zena/skins/blog/Node-+search.zafu +1 -1
  35. data/bricks/fs_skin/zena/skins/blog/Node.zafu +1 -1
  36. data/bricks/fs_skin/zena/test/unit/fs_skin_view_test.rb +35 -0
  37. data/bricks/pdf/lib/bricks/pdf.rb +1 -1
  38. data/bricks/sphinx/lib/bricks/sphinx.rb +2 -0
  39. data/bricks/sphinx/zena/init.rb +14 -0
  40. data/bricks/tags/zena/test/zafu/tags.yml +5 -1
  41. data/bricks/worker/lib/bricks/worker.rb +3 -2
  42. data/bricks/zena/zena/migrate/20130829093753_add_versioned_flag_to_column.rb +10 -0
  43. data/bricks/zena/zena/migrate/20130903084909_count_login_attempts.rb +11 -0
  44. data/bricks/zena/zena/migrate/20131104153126_index_fullpath.rb +10 -0
  45. data/bricks/zena/zena/migrate/20131104210011_rebuild_fullpath_after_change.rb +10 -0
  46. data/bricks/zena/zena/migrate/20131105160420_add_skin_id_to_sites.rb +9 -0
  47. data/bricks/zena/zena/migrate/20131105175822_add_profile_to_users.rb +11 -0
  48. data/bricks/zena/zena/migrate/20140213120038_fix_idx_scope.rb +13 -0
  49. data/bricks/zena/zena/migrate/20140628140247_add_site_readonly.rb +9 -0
  50. data/config/bricks.yml +8 -4
  51. data/config/gems.yml +5 -3
  52. data/db/init/base/skins/default/Node-+login.zafu +8 -1
  53. data/db/init/base/skins/default/Node-+search.zafu +1 -1
  54. data/lib/bricks/loader.rb +5 -5
  55. data/lib/gettext_strings.rb +3 -0
  56. data/lib/tasks/zena.rake +25 -22
  57. data/lib/zafu/process/context.rb +4 -0
  58. data/lib/zena/acts/secure_node.rb +3 -3
  59. data/lib/zena/app.rb +1 -0
  60. data/lib/zena/deploy.rb +1 -1
  61. data/lib/zena/deploy/template.rb +1 -1
  62. data/lib/zena/foxy_parser.rb +5 -2
  63. data/lib/zena/info.rb +1 -1
  64. data/lib/zena/site_worker.rb +2 -2
  65. data/lib/zena/test_controller.rb +5 -2
  66. data/lib/zena/use/action.rb +9 -2
  67. data/lib/zena/use/ajax.rb +20 -4
  68. data/lib/zena/use/ancestry.rb +89 -15
  69. data/lib/zena/use/authlogic.rb +8 -2
  70. data/lib/zena/use/context.rb +1 -0
  71. data/lib/zena/use/display.rb +1 -97
  72. data/lib/zena/use/forms.rb +28 -8
  73. data/lib/zena/use/html_tags.rb +16 -7
  74. data/lib/zena/use/i18n.rb +1 -1
  75. data/lib/zena/use/prop_eval.rb +6 -1
  76. data/lib/zena/use/query_node.rb +69 -4
  77. data/lib/zena/use/recursion.rb +1 -1
  78. data/lib/zena/use/refactor.rb +5 -2
  79. data/lib/zena/use/relations.rb +1 -0
  80. data/lib/zena/use/rendering.rb +7 -4
  81. data/lib/zena/use/test_helper.rb +8 -4
  82. data/lib/zena/use/upload.rb +14 -0
  83. data/lib/zena/use/urls.rb +39 -23
  84. data/lib/zena/use/version_hash.rb +5 -2
  85. data/lib/zena/use/workflow.rb +116 -70
  86. data/lib/zena/use/zafu_eval.rb +41 -0
  87. data/lib/zena/use/zafu_safe_definitions.rb +1 -0
  88. data/lib/zena/use/zafu_templates.rb +32 -26
  89. data/lib/zena/use/zazen.rb +8 -7
  90. data/locale/app.pot +5 -1
  91. data/locale/de/LC_MESSAGES/zena.mo +0 -0
  92. data/locale/de/zena.po +385 -281
  93. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  94. data/locale/en/zena.po +378 -271
  95. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  96. data/locale/fr/zena.po +387 -272
  97. data/locale/it/LC_MESSAGES/zena.mo +0 -0
  98. data/locale/it/zena.po +433 -404
  99. data/locale/zena.pot +362 -268
  100. data/public/javascripts/grid.js +280 -104
  101. data/public/javascripts/zena.js +43 -15
  102. data/public/stylesheets/admin.css +8 -2
  103. data/public/stylesheets/grid.css +5 -2
  104. data/public/stylesheets/popup.css +1 -1
  105. data/test/fixtures/files/TestNode.zafu +51 -0
  106. data/test/functional/nodes_controller_test.rb +20 -5
  107. data/test/functional/user_sessions_controller_test.rb +41 -6
  108. data/test/functional/users_controller_test.rb +1 -2
  109. data/test/integration/navigation_test.rb +22 -4
  110. data/test/integration/query_node/basic.yml +7 -0
  111. data/test/integration/query_node/complex.yml +1 -1
  112. data/test/integration/query_node/errors.yml +1 -1
  113. data/test/integration/query_node/filters.yml +34 -1
  114. data/test/integration/query_node/relations.yml +6 -13
  115. data/test/integration/query_node_test.rb +22 -3
  116. data/test/integration/zafu_compiler/action.yml +1 -1
  117. data/test/integration/zafu_compiler/alias_site.yml +52 -0
  118. data/test/integration/zafu_compiler/complex.yml +1 -1
  119. data/test/integration/zafu_compiler/complex_ok.yml +5 -5
  120. data/test/integration/zafu_compiler/context.yml +1 -1
  121. data/test/integration/zafu_compiler/display.yml +56 -5
  122. data/test/integration/zafu_compiler/forms.yml +35 -2
  123. data/test/integration/zafu_compiler/meta.yml +4 -0
  124. data/test/integration/zafu_compiler/rubyless.yml +1 -1
  125. data/test/integration/zafu_compiler/safe_definitions.yml +4 -0
  126. data/test/integration/zafu_compiler/security.yml +10 -0
  127. data/test/integration/zafu_compiler/site.yml +5 -1
  128. data/test/integration/zafu_compiler/urls.yml +8 -2
  129. data/test/integration/zafu_compiler/zafu_attributes.yml +2 -1
  130. data/test/integration/zafu_compiler/zazen.yml +4 -0
  131. data/test/integration/zafu_compiler_test.rb +47 -4
  132. data/test/selenium/Grid/grid1.rsel +8 -8
  133. data/test/sites/complex/sites.yml +2 -2
  134. data/test/sites/complex/users.yml +1 -0
  135. data/test/sites/zena/columns.yml +4 -0
  136. data/test/sites/zena/sites.yml +1 -0
  137. data/test/sites/zena/users.yml +1 -0
  138. data/test/unit/node_test.rb +53 -5
  139. data/test/unit/note_test.rb +1 -1
  140. data/test/unit/relation_proxy_test.rb +20 -0
  141. data/test/unit/role_test.rb +2 -0
  142. data/test/unit/site_test.rb +28 -6
  143. data/test/unit/user_test.rb +332 -1
  144. data/test/unit/virtual_class_test.rb +55 -0
  145. data/test/unit/workflow_test.rb +175 -0
  146. data/test/unit/zena/use/ancestry_test.rb +52 -10
  147. data/test/unit/zena/use/prop_eval_test.rb +44 -0
  148. data/test/unit/zena/use/rendering_test.rb +48 -2
  149. data/test/unit/zena/use/upload_test.rb +15 -13
  150. data/test/unit/zena/use/urls_test.rb +1 -0
  151. data/vendor/plugins/ar_mysql_full_text/lib/ar_mysql_full_text.rb +39 -25
  152. data/zena.gemspec +69 -307
  153. metadata +143 -368
  154. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +0 -24
  155. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +0 -58
  156. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +0 -88
  157. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +0 -27
  158. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +0 -23
  159. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +0 -19
  160. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +0 -19
  161. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +0 -16
  162. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +0 -16
  163. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +0 -16
  164. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +0 -18
  165. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +0 -18
  166. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +0 -16
  167. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +0 -18
  168. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +0 -16
  169. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +0 -16
  170. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +0 -16
  171. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +0 -16
  172. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +0 -16
  173. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +0 -16
  174. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +0 -18
  175. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +0 -16
  176. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +0 -17
  177. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +0 -17
  178. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +0 -18
  179. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +0 -22
  180. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +0 -23
  181. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +0 -25
  182. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +0 -18
  183. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +0 -18
  184. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +0 -18
  185. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +0 -16
  186. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +0 -16
  187. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +0 -20
  188. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +0 -20
  189. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +0 -16
  190. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +0 -16
  191. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +0 -16
  192. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +0 -16
  193. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +0 -16
  194. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +0 -16
  195. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +0 -16
  196. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +0 -18
  197. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +0 -16
  198. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +0 -16
  199. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +0 -16
  200. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +0 -16
  201. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +0 -16
  202. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +0 -16
  203. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +0 -16
  204. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +0 -16
  205. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +0 -16
  206. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +0 -16
  207. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +0 -16
  208. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +0 -16
  209. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +0 -16
  210. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +0 -16
  211. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +0 -16
  212. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +0 -16
  213. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +0 -16
  214. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +0 -16
  215. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +0 -16
  216. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +0 -16
  217. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +0 -16
  218. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +0 -16
  219. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +0 -16
  220. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +0 -16
  221. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +0 -16
  222. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +0 -16
  223. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +0 -16
  224. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +0 -16
  225. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +0 -16
  226. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +0 -16
  227. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +0 -16
  228. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +0 -16
  229. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  230. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +0 -104
  231. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  232. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +0 -17
  233. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +0 -13
  234. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +0 -25
  235. data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +0 -166
  236. data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +0 -304
  237. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +0 -37
  238. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +0 -52
  239. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  240. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +0 -118
  241. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  242. data/vendor/TextMate/Zena.tmbundle/info.plist +0 -17
  243. data/vendor/plugins/selenium-on-rails/CHANGELOG +0 -125
  244. data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +0 -202
  245. data/vendor/plugins/selenium-on-rails/README.md +0 -202
  246. data/vendor/plugins/selenium-on-rails/Rakefile +0 -38
  247. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +0 -265
  248. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +0 -148
  249. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +0 -126
  250. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +0 -231
  251. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +0 -195
  252. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +0 -295
  253. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +0 -219
  254. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +0 -156
  255. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +0 -179
  256. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +0 -223
  257. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +0 -441
  258. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +0 -3098
  259. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +0 -2080
  260. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +0 -116
  261. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +0 -116
  262. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +0 -150
  263. data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +0 -422
  264. data/vendor/plugins/selenium-on-rails/doc/files/README.html +0 -321
  265. data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +0 -108
  266. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +0 -101
  267. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +0 -222
  268. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +0 -109
  269. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +0 -111
  270. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +0 -101
  271. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +0 -101
  272. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +0 -118
  273. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +0 -101
  274. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +0 -101
  275. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +0 -114
  276. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +0 -113
  277. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +0 -120
  278. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +0 -108
  279. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +0 -115
  280. data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +0 -42
  281. data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +0 -43
  282. data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +0 -182
  283. data/vendor/plugins/selenium-on-rails/doc/index.html +0 -24
  284. data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +0 -208
  285. data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +0 -19
  286. data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +0 -50
  287. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +0 -16
  288. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +0 -14
  289. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +0 -11
  290. data/vendor/plugins/selenium-on-rails/init.rb +0 -15
  291. data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +0 -122
  292. data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +0 -16
  293. data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +0 -8
  294. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +0 -11
  295. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +0 -215
  296. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +0 -57
  297. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +0 -36
  298. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +0 -61
  299. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +0 -20
  300. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +0 -44
  301. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +0 -87
  302. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +0 -56
  303. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +0 -116
  304. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +0 -1002
  305. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +0 -514
  306. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +0 -91
  307. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +0 -24
  308. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +0 -30
  309. data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +0 -18
  310. data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +0 -5
  311. data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +0 -9
  312. data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +0 -67
  313. data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +0 -26
  314. data/vendor/plugins/selenium-on-rails/routes.rb +0 -24
  315. data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +0 -7
  316. data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +0 -8
  317. data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +0 -110
  318. data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +0 -109
  319. data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +0 -145
  320. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +0 -55
  321. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +0 -177
  322. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +0 -177
  323. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
  324. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
  325. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +0 -298
  326. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +0 -16
  327. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +0 -205
  328. data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
  329. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
  330. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
  331. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
  332. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
  333. data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
  334. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
  335. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
  336. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +0 -1759
  337. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +0 -1800
  338. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
  339. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  340. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  341. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  342. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
  343. data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +0 -2006
  344. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +0 -101
  345. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +0 -815
  346. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
  347. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +0 -958
  348. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
  349. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +0 -283
  350. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +0 -383
  351. data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +0 -91
  352. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +0 -69
  353. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +0 -1616
  354. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +0 -72
  355. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +0 -3184
  356. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +0 -2300
  357. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +0 -153
  358. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +0 -377
  359. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +0 -175
  360. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +0 -148
  361. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +0 -695
  362. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +0 -1362
  363. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +0 -5
  364. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +0 -803
  365. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +0 -1537
  366. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +0 -979
  367. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +0 -3
  368. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +0 -75
  369. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +0 -153
  370. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
  371. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +0 -43
  372. data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +0 -316
  373. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +0 -566
  374. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +0 -2816
  375. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +0 -549
  376. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +0 -149
  377. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +0 -2450
  378. data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +0 -8
  379. data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +0 -37
  380. data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +0 -27
  381. data/vendor/plugins/selenium-on-rails/test/paths_test.rb +0 -72
  382. data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +0 -157
  383. data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +0 -708
  384. data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +0 -242
  385. data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +0 -67
  386. data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +0 -43
  387. data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +0 -35
  388. data/vendor/plugins/selenium-on-rails/test/setup_test.rb +0 -31
  389. data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +0 -109
  390. data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +0 -17
  391. data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +0 -51
  392. data/vendor/plugins/selenium-on-rails/test/test_helper.rb +0 -101
  393. data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +0 -1
  394. data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +0 -12
  395. data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +0 -6
  396. data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +0 -2
  397. data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +0 -6
  398. data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +0 -1
  399. data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +0 -5
  400. data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +0 -5
  401. data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +0 -7
  402. data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +0 -8
  403. data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +0 -7
  404. data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +0 -1
  405. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +0 -1
  406. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +0 -1
  407. data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +0 -1
@@ -1,175 +0,0 @@
1
- /*
2
- * Copyright 2004 ThoughtWorks, Inc
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- function TestLoop(commandFactory) {
18
- this.commandFactory = commandFactory;
19
- }
20
-
21
- TestLoop.prototype = {
22
-
23
- start : function() {
24
- selenium.reset();
25
- LOG.debug("currentTest.start()");
26
- this.continueTest();
27
- },
28
-
29
- continueTest : function() {
30
- /**
31
- * Select the next command and continue the test.
32
- */
33
- LOG.debug("currentTest.continueTest() - acquire the next command");
34
- if (! this.aborted) {
35
- this.currentCommand = this.nextCommand();
36
- }
37
- if (! this.requiresCallBack) {
38
- this.continueTestAtCurrentCommand();
39
- } // otherwise, just finish and let the callback invoke continueTestAtCurrentCommand()
40
- },
41
-
42
- continueTestAtCurrentCommand : function() {
43
- LOG.debug("currentTest.continueTestAtCurrentCommand()");
44
- if (this.currentCommand) {
45
- // TODO: rename commandStarted to commandSelected, OR roll it into nextCommand
46
- this.commandStarted(this.currentCommand);
47
- this._resumeAfterDelay();
48
- } else {
49
- this._testComplete();
50
- }
51
- },
52
-
53
- _resumeAfterDelay : function() {
54
- /**
55
- * Pause, then execute the current command.
56
- */
57
-
58
- // Get the command delay. If a pauseInterval is set, use it once
59
- // and reset it. Otherwise, use the defined command-interval.
60
- var delay = this.pauseInterval || this.getCommandInterval();
61
- this.pauseInterval = undefined;
62
-
63
- if (this.currentCommand.isBreakpoint || delay < 0) {
64
- // Pause: enable the "next/continue" button
65
- this.pause();
66
- } else {
67
- window.setTimeout(fnBind(this.resume, this), delay);
68
- }
69
- },
70
-
71
- resume: function() {
72
- /**
73
- * Select the next command and continue the test.
74
- */
75
- LOG.debug("currentTest.resume() - actually execute");
76
- try {
77
- selenium.browserbot.runScheduledPollers();
78
- this._executeCurrentCommand();
79
- this.continueTestWhenConditionIsTrue();
80
- } catch (e) {
81
- if (!this._handleCommandError(e)) {
82
- this.testComplete();
83
- } else {
84
- this.continueTest();
85
- }
86
- }
87
- },
88
-
89
- _testComplete : function() {
90
- selenium.ensureNoUnhandledPopups();
91
- this.testComplete();
92
- },
93
-
94
- _executeCurrentCommand : function() {
95
- /**
96
- * Execute the current command.
97
- *
98
- * @return a function which will be used to determine when
99
- * execution can continue, or null if we can continue immediately
100
- */
101
- var command = this.currentCommand;
102
- LOG.info("Executing: |" + command.command + " | " + command.target + " | " + command.value + " |");
103
-
104
- var handler = this.commandFactory.getCommandHandler(command.command);
105
- if (handler == null) {
106
- throw new SeleniumError("Unknown command: '" + command.command + "'");
107
- }
108
-
109
- command.target = selenium.preprocessParameter(command.target);
110
- command.value = selenium.preprocessParameter(command.value);
111
- LOG.debug("Command found, going to execute " + command.command);
112
- this.result = handler.execute(selenium, command);
113
-
114
-
115
- this.waitForCondition = this.result.terminationCondition;
116
-
117
- },
118
-
119
- _handleCommandError : function(e) {
120
- if (!e.isSeleniumError) {
121
- LOG.exception(e);
122
- var msg = "Command execution failure. Please search the forum at http://clearspace.openqa.org for error details from the log window.";
123
- msg += " The error message is: " + extractExceptionMessage(e);
124
- return this.commandError(msg);
125
- } else {
126
- LOG.error(e.message);
127
- return this.commandError(e.message);
128
- }
129
- },
130
-
131
- continueTestWhenConditionIsTrue: function () {
132
- /**
133
- * Busy wait for waitForCondition() to become true, and then carry
134
- * on with test. Fail the current test if there's a timeout or an
135
- * exception.
136
- */
137
- //LOG.debug("currentTest.continueTestWhenConditionIsTrue()");
138
- selenium.browserbot.runScheduledPollers();
139
- try {
140
- if (this.waitForCondition == null) {
141
- LOG.debug("null condition; let's continueTest()");
142
- LOG.debug("Command complete");
143
- this.commandComplete(this.result);
144
- this.continueTest();
145
- } else if (this.waitForCondition()) {
146
- LOG.debug("condition satisfied; let's continueTest()");
147
- this.waitForCondition = null;
148
- LOG.debug("Command complete");
149
- this.commandComplete(this.result);
150
- this.continueTest();
151
- } else {
152
- //LOG.debug("waitForCondition was false; keep waiting!");
153
- window.setTimeout(fnBind(this.continueTestWhenConditionIsTrue, this), 10);
154
- }
155
- } catch (e) {
156
- this.result = {};
157
- this.result.failed = true;
158
- this.result.failureMessage = extractExceptionMessage(e);
159
- this.commandComplete(this.result);
160
- this.continueTest();
161
- }
162
- },
163
-
164
- pause : function() {},
165
- nextCommand : function() {},
166
- commandStarted : function() {},
167
- commandComplete : function() {},
168
- commandError : function() {},
169
- testComplete : function() {},
170
-
171
- getCommandInterval : function() {
172
- return 0;
173
- }
174
-
175
- }
@@ -1,148 +0,0 @@
1
- /*
2
- * Copyright 2004 ThoughtWorks, Inc
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- var Logger = function() {
18
- this.logWindow = null;
19
- }
20
- Logger.prototype = {
21
-
22
- logLevels: {
23
- debug: 0,
24
- info: 1,
25
- warn: 2,
26
- error: 3,
27
- off: 999
28
- },
29
-
30
- pendingMessages: new Array(),
31
-
32
- threshold: "info",
33
-
34
- setLogLevelThreshold: function(logLevel) {
35
- this.threshold = logLevel;
36
- var logWindow = this.getLogWindow()
37
- if (logWindow && logWindow.setThresholdLevel) {
38
- logWindow.setThresholdLevel(logLevel);
39
- }
40
- // NOTE: log messages will be discarded until the log window is
41
- // fully loaded.
42
- },
43
-
44
- getLogWindow: function() {
45
- if (this.logWindow && this.logWindow.closed) {
46
- this.logWindow = null;
47
- }
48
- return this.logWindow;
49
- },
50
-
51
- openLogWindow: function() {
52
- this.logWindow = window.open(
53
- getDocumentBase(document) + "SeleniumLog.html?startingThreshold="+this.threshold, "SeleniumLog",
54
- "width=600,height=1000,bottom=0,right=0,status,scrollbars,resizable"
55
- );
56
- this.logWindow.moveTo(window.screenX + 1210, window.screenY + window.outerHeight - 1400);
57
- if (browserVersion.appearsToBeBrokenInitialIE6) {
58
- // I would really prefer for the message to immediately appear in the log window, the instant the user requests that the log window be
59
- // visible. But when I initially coded it this way, thou message simply didn't appear unless I stepped through the code with a debugger.
60
- // So obviously there is some timing issue here which I don't have the patience to figure out.
61
- var pendingMessage = new LogMessage("warn", "You appear to be running an unpatched IE 6, which is not stable and can crash due to memory problems. We recommend you run Windows update to install a more stable version of IE.");
62
- this.pendingMessages.push(pendingMessage);
63
- }
64
- return this.logWindow;
65
- },
66
-
67
- show: function() {
68
- if (! this.getLogWindow()) {
69
- this.openLogWindow();
70
- }
71
- setTimeout(function(){LOG.error("Log window displayed. Logging events will now be recorded to this window.");}, 500);
72
- },
73
-
74
- logHook: function(logLevel, message) {
75
- },
76
-
77
- log: function(logLevel, message) {
78
- if (this.logLevels[logLevel] < this.logLevels[this.threshold]) {
79
- return;
80
- }
81
- this.logHook(logLevel, message);
82
- var logWindow = this.getLogWindow();
83
- if (logWindow) {
84
- if (logWindow.append) {
85
- if (logWindow.disabled) {
86
- logWindow.callBack = fnBind(this.setLogLevelThreshold, this);
87
- logWindow.enableButtons();
88
- }
89
- if (this.pendingMessages.length > 0) {
90
- logWindow.append("info("+(new Date().getTime())+"): Appending missed logging messages", "info");
91
- while (this.pendingMessages.length > 0) {
92
- var msg = this.pendingMessages.shift();
93
- logWindow.append(msg.type + "("+msg.timestamp+"): " + msg.msg, msg.type);
94
- }
95
- logWindow.append("info("+(new Date().getTime())+"): Done appending missed logging messages", "info");
96
- }
97
- logWindow.append(logLevel + "("+(new Date().getTime())+"): " + message, logLevel);
98
- }
99
- } else {
100
- // TODO these logging messages are never flushed, which creates
101
- // an enormous array of strings that never stops growing.
102
- // there should at least be a way to clear the messages!
103
- this.pendingMessages.push(new LogMessage(logLevel, message));
104
- }
105
- },
106
-
107
- close: function(message) {
108
- if (this.logWindow != null) {
109
- try {
110
- this.logWindow.close();
111
- } catch (e) {
112
- // swallow exception
113
- // the window is probably closed if we get an exception here
114
- }
115
- this.logWindow = null;
116
- }
117
- },
118
-
119
- debug: function(message) {
120
- this.log("debug", message);
121
- },
122
-
123
- info: function(message) {
124
- this.log("info", message);
125
- },
126
-
127
- warn: function(message) {
128
- this.log("warn", message);
129
- },
130
-
131
- error: function(message) {
132
- this.log("error", message);
133
- },
134
-
135
- exception: function(exception) {
136
- this.error("Unexpected Exception: " + extractExceptionMessage(exception));
137
- this.error("Exception details: " + describe(exception, ', '));
138
- }
139
-
140
- };
141
-
142
- var LOG = new Logger();
143
-
144
- var LogMessage = function(type, msg) {
145
- this.type = type;
146
- this.msg = msg;
147
- this.timestamp = (new Date().getTime());
148
- }
@@ -1,695 +0,0 @@
1
- /*
2
- * Copyright 2005 ThoughtWorks, Inc
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- *
16
- */
17
-
18
- passColor = "#cfffcf";
19
- failColor = "#ffcfcf";
20
- errorColor = "#ffffff";
21
- workingColor = "#DEE7EC";
22
- doneColor = "#FFFFCC";
23
-
24
- var injectedSessionId;
25
-
26
- var postResult = "START";
27
- var debugMode = false;
28
- var relayToRC = null;
29
- var proxyInjectionMode = false;
30
- var uniqueId = 'sel_' + Math.round(100000 * Math.random());
31
- var seleniumSequenceNumber = 0;
32
- var cmd8 = "";
33
- var cmd7 = "";
34
- var cmd6 = "";
35
- var cmd5 = "";
36
- var cmd4 = "";
37
- var cmd3 = "";
38
- var cmd2 = "";
39
- var cmd1 = "";
40
- var lastCmd = "";
41
- var lastCmdTime = new Date();
42
-
43
- var RemoteRunnerOptions = classCreate();
44
- objectExtend(RemoteRunnerOptions.prototype, URLConfiguration.prototype);
45
- objectExtend(RemoteRunnerOptions.prototype, {
46
- initialize: function() {
47
- this._acquireQueryString();
48
- },
49
- isDebugMode: function() {
50
- return this._isQueryParameterTrue("debugMode");
51
- },
52
-
53
- getContinue: function() {
54
- return this._getQueryParameter("continue");
55
- },
56
-
57
- getDriverUrl: function() {
58
- return this._getQueryParameter("driverUrl");
59
- },
60
-
61
- // requires per-session extension Javascript as soon as this Selenium
62
- // instance becomes aware of the session identifier
63
- getSessionId: function() {
64
- var sessionId = this._getQueryParameter("sessionId");
65
- requireExtensionJs(sessionId);
66
- return sessionId;
67
- },
68
-
69
- _acquireQueryString: function () {
70
- if (this.queryString) return;
71
- if (browserVersion.isHTA) {
72
- var args = this._extractArgs();
73
- if (args.length < 2) return null;
74
- this.queryString = args[1];
75
- } else if (proxyInjectionMode) {
76
- this.queryString = window.location.search.substr(1);
77
- } else {
78
- this.queryString = top.location.search.substr(1);
79
- }
80
- }
81
-
82
- });
83
- var runOptions;
84
-
85
- function runSeleniumTest() {
86
- runOptions = new RemoteRunnerOptions();
87
- var testAppWindow;
88
-
89
- if (runOptions.isMultiWindowMode()) {
90
- testAppWindow = openSeparateApplicationWindow('Blank.html', true);
91
- } else if (sel$('selenium_myiframe') != null) {
92
- var myiframe = sel$('selenium_myiframe');
93
- if (myiframe) {
94
- testAppWindow = myiframe.contentWindow;
95
- }
96
- }
97
- else {
98
- proxyInjectionMode = true;
99
- testAppWindow = window;
100
- }
101
- selenium = Selenium.createForWindow(testAppWindow, proxyInjectionMode);
102
- if (runOptions.getBaseUrl()) {
103
- selenium.browserbot.baseUrl = runOptions.getBaseUrl();
104
- }
105
- if (!debugMode) {
106
- debugMode = runOptions.isDebugMode();
107
- }
108
- if (proxyInjectionMode) {
109
- LOG.logHook = logToRc;
110
- selenium.browserbot._modifyWindow(testAppWindow);
111
- }
112
- else if (debugMode) {
113
- LOG.logHook = logToRc;
114
- }
115
- window.selenium = selenium;
116
-
117
- commandFactory = new CommandHandlerFactory();
118
- commandFactory.registerAll(selenium);
119
-
120
- currentTest = new RemoteRunner(commandFactory);
121
-
122
- var doContinue = runOptions.getContinue();
123
- if (doContinue != null) postResult = "OK";
124
-
125
- currentTest.start();
126
- }
127
-
128
- function buildDriverUrl() {
129
- var driverUrl = runOptions.getDriverUrl();
130
- if (driverUrl != null) {
131
- return driverUrl;
132
- }
133
- var s = window.location.href
134
- var slashPairOffset = s.indexOf("//") + "//".length
135
- var pathSlashOffset = s.substring(slashPairOffset).indexOf("/")
136
- return s.substring(0, slashPairOffset + pathSlashOffset) + "/selenium-server/driver/";
137
- //return "http://localhost" + uniqueId + "/selenium-server/driver/";
138
- }
139
-
140
- function logToRc(logLevel, message) {
141
- if (debugMode) {
142
- if (logLevel == null) {
143
- logLevel = "debug";
144
- }
145
- sendToRCAndForget("logLevel=" + logLevel + ":" + message.replace(/[\n\r\015]/g, " ") + "\n", "logging=true");
146
- }
147
- }
148
-
149
- function serializeString(name, s) {
150
- return name + "=unescape(\"" + escape(s) + "\");";
151
- }
152
-
153
- function serializeObject(name, x)
154
- {
155
- var s = '';
156
-
157
- if (isArray(x))
158
- {
159
- s = name + "=new Array(); ";
160
- var len = x["length"];
161
- for (var j = 0; j < len; j++)
162
- {
163
- s += serializeString(name + "[" + j + "]", x[j]);
164
- }
165
- }
166
- else if (typeof x == "string")
167
- {
168
- s = serializeString(name, x);
169
- }
170
- else
171
- {
172
- throw "unrecognized object not encoded: " + name + "(" + x + ")";
173
- }
174
- return s;
175
- }
176
-
177
- function relayBotToRC(s) {
178
- }
179
-
180
- // seems like no one uses this, but in fact it is called using eval from server-side PI mode code; however,
181
- // because multiple names can map to the same popup, assigning a single name confuses matters sometimes;
182
- // thus, I'm disabling this for now. -Nelson 10/21/06
183
- function setSeleniumWindowName(seleniumWindowName) {
184
- //selenium.browserbot.getCurrentWindow()['seleniumWindowName'] = seleniumWindowName;
185
- }
186
-
187
- RemoteRunner = classCreate();
188
- objectExtend(RemoteRunner.prototype, new TestLoop());
189
- objectExtend(RemoteRunner.prototype, {
190
- initialize : function(commandFactory) {
191
- this.commandFactory = commandFactory;
192
- this.requiresCallBack = true;
193
- this.commandNode = null;
194
- this.xmlHttpForCommandsAndResults = null;
195
- },
196
-
197
- nextCommand : function() {
198
- var urlParms = "";
199
- if (postResult == "START") {
200
- urlParms += "seleniumStart=true";
201
- }
202
- this.xmlHttpForCommandsAndResults = XmlHttp.create();
203
- sendToRC(postResult, urlParms, fnBind(this._HandleHttpResponse, this), this.xmlHttpForCommandsAndResults);
204
- },
205
-
206
- commandStarted : function(command) {
207
- this.commandNode = document.createElement("div");
208
- var cmdText = command.command + '(';
209
- if (command.target != null && command.target != "") {
210
- cmdText += command.target;
211
- if (command.value != null && command.value != "") {
212
- cmdText += ', ' + command.value;
213
- }
214
- }
215
- if (cmdText.length > 70) {
216
- cmdText = cmdText.substring(0, 70) + "...\n";
217
- } else {
218
- cmdText += ")\n";
219
- }
220
-
221
- if (cmdText == lastCmd) {
222
- var rightNow = new Date();
223
- var msSinceStart = rightNow.getTime() - lastCmdTime.getTime();
224
- var sinceStart = msSinceStart + "ms";
225
- if (msSinceStart > 1000) {
226
- sinceStart = Math.round(msSinceStart / 1000) + "s";
227
- }
228
- cmd1 = "Same command (" + sinceStart + "): " + lastCmd;
229
- } else {
230
- lastCmdTime = new Date();
231
- cmd8 = cmd7;
232
- cmd7 = cmd6;
233
- cmd6 = cmd5;
234
- cmd5 = cmd4;
235
- cmd4 = cmd3;
236
- cmd3 = cmd2;
237
- cmd2 = cmd1;
238
- cmd1 = cmdText;
239
- }
240
- lastCmd = cmdText;
241
-
242
- if (! proxyInjectionMode) {
243
- var commandList = document.commands.commandList;
244
- commandList.value = cmd8 + cmd7 + cmd6 + cmd5 + cmd4 + cmd3 + cmd2 + cmd1;
245
- commandList.scrollTop = commandList.scrollHeight;
246
- }
247
- },
248
-
249
- commandComplete : function(result) {
250
-
251
- if (result.failed) {
252
- if (postResult == "CONTINUATION") {
253
- currentTest.aborted = true;
254
- }
255
- postResult = result.failureMessage;
256
- this.commandNode.title = result.failureMessage;
257
- this.commandNode.style.backgroundColor = failColor;
258
- } else if (result.passed) {
259
- postResult = "OK";
260
- this.commandNode.style.backgroundColor = passColor;
261
- } else {
262
- if (result.result == null) {
263
- postResult = "OK";
264
- } else {
265
- var actualResult = result.result;
266
- actualResult = selArrayToString(actualResult);
267
- postResult = "OK," + actualResult;
268
- }
269
- this.commandNode.style.backgroundColor = doneColor;
270
- }
271
- },
272
-
273
- commandError : function(message) {
274
- postResult = "ERROR: " + message;
275
- this.commandNode.style.backgroundColor = errorColor;
276
- this.commandNode.titcle = message;
277
- },
278
-
279
- testComplete : function() {
280
- window.status = "Selenium Tests Complete, for this Test"
281
- // Continue checking for new results
282
- this.continueTest();
283
- postResult = "START";
284
- },
285
-
286
- _HandleHttpResponse : function() {
287
- // When request is completed
288
- if (this.xmlHttpForCommandsAndResults.readyState == 4) {
289
- // OK
290
- if (this.xmlHttpForCommandsAndResults.status == 200) {
291
- if (this.xmlHttpForCommandsAndResults.responseText=="") {
292
- LOG.error("saw blank string xmlHttpForCommandsAndResults.responseText");
293
- return;
294
- }
295
- var command = this._extractCommand(this.xmlHttpForCommandsAndResults);
296
- if (command.command == 'retryLast') {
297
- setTimeout(fnBind(function() {
298
- sendToRC("RETRY", "retry=true", fnBind(this._HandleHttpResponse, this), this.xmlHttpForCommandsAndResults, true);
299
- }, this), 1000);
300
- } else {
301
- this.currentCommand = command;
302
- this.continueTestAtCurrentCommand();
303
- }
304
- }
305
- // Not OK
306
- else {
307
- var s = 'xmlHttp returned: ' + this.xmlHttpForCommandsAndResults.status + ": " + this.xmlHttpForCommandsAndResults.statusText;
308
- LOG.error(s);
309
- this.currentCommand = null;
310
- setTimeout(fnBind(this.continueTestAtCurrentCommand, this), 2000);
311
- }
312
-
313
- }
314
- },
315
-
316
- _extractCommand : function(xmlHttp) {
317
- var command, text, json;
318
- text = command = xmlHttp.responseText;
319
- if (/^json=/.test(text)) {
320
- eval(text);
321
- if (json.rest) {
322
- eval(json.rest);
323
- }
324
- return json;
325
- }
326
- try {
327
- var re = new RegExp("^(.*?)\n((.|[\r\n])*)");
328
- if (re.exec(xmlHttp.responseText)) {
329
- command = RegExp.$1;
330
- var rest = RegExp.$2;
331
- rest = rest.trim();
332
- if (rest) {
333
- eval(rest);
334
- }
335
- }
336
- else {
337
- command = xmlHttp.responseText;
338
- }
339
- } catch (e) {
340
- alert('could not get responseText: ' + e.message);
341
- }
342
- if (command.substr(0, '|testComplete'.length) == '|testComplete') {
343
- return null;
344
- }
345
-
346
- return this._createCommandFromRequest(command);
347
- },
348
-
349
-
350
- _delay : function(millis) {
351
- var startMillis = new Date();
352
- while (true) {
353
- milli = new Date();
354
- if (milli - startMillis > millis) {
355
- break;
356
- }
357
- }
358
- },
359
-
360
- // Parses a URI query string into a SeleniumCommand object
361
- _createCommandFromRequest : function(commandRequest) {
362
- //decodeURIComponent doesn't strip plus signs
363
- var processed = commandRequest.replace(/\+/g, "%20");
364
- // strip trailing spaces
365
- var processed = processed.replace(/\s+$/, "");
366
- var vars = processed.split("&");
367
- var cmdArgs = new Object();
368
- for (var i = 0; i < vars.length; i++) {
369
- var pair = vars[i].split("=");
370
- cmdArgs[pair[0]] = pair[1];
371
- }
372
- var cmd = cmdArgs['cmd'];
373
- var arg1 = cmdArgs['1'];
374
- if (null == arg1) arg1 = "";
375
- arg1 = decodeURIComponent(arg1);
376
- var arg2 = cmdArgs['2'];
377
- if (null == arg2) arg2 = "";
378
- arg2 = decodeURIComponent(arg2);
379
- if (cmd == null) {
380
- throw new Error("Bad command request: " + commandRequest);
381
- }
382
- return new SeleniumCommand(cmd, arg1, arg2);
383
- }
384
-
385
- })
386
-
387
-
388
- function sendToRC(dataToBePosted, urlParms, callback, xmlHttpObject, async) {
389
- if (async == null) {
390
- async = true;
391
- }
392
- if (xmlHttpObject == null) {
393
- xmlHttpObject = XmlHttp.create();
394
- }
395
- var url = buildDriverUrl() + "?"
396
- if (urlParms) {
397
- url += urlParms;
398
- }
399
- url = addUrlParams(url);
400
- url += "&sequenceNumber=" + seleniumSequenceNumber++;
401
-
402
- var postedData = "postedData=" + encodeURIComponent(dataToBePosted);
403
-
404
- //xmlHttpObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
405
- xmlHttpObject.open("POST", url, async);
406
- if (callback) xmlHttpObject.onreadystatechange = callback;
407
- xmlHttpObject.send(postedData);
408
- return null;
409
- }
410
-
411
- function addUrlParams(url) {
412
- return url + "&localFrameAddress=" + (proxyInjectionMode ? makeAddressToAUTFrame() : "top")
413
- + getSeleniumWindowNameURLparameters()
414
- + "&uniqueId=" + uniqueId
415
- + buildDriverParams() + preventBrowserCaching()
416
- }
417
-
418
- function sendToRCAndForget(dataToBePosted, urlParams) {
419
- var url;
420
- if (!(browserVersion.isChrome || browserVersion.isHTA)) {
421
- // DGF we're behind a proxy, so we can send our logging message to literally any host, to avoid 2-connection limit
422
- var protocol = "http:";
423
- if (window.location.protocol == "https:") {
424
- // DGF if we're in HTTPS, use another HTTPS url to avoid security warning
425
- protocol = "https:";
426
- }
427
- // we don't choose a super large random value, but rather 1 - 16, because this matches with the pre-computed
428
- // tunnels waiting on the Selenium Server side. This gives us higher throughput than the two-connection-per-host
429
- // limitation, but doesn't require we generate an extremely large ammount of fake SSL certs either.
430
- url = protocol + "//" + Math.floor(Math.random()* 16 + 1) + ".selenium.doesnotexist/selenium-server/driver/?" + urlParams;
431
- } else {
432
- url = buildDriverUrl() + "?" + urlParams;
433
- }
434
- url = addUrlParams(url);
435
-
436
- var method = "GET";
437
- if (method == "POST") {
438
- // DGF submit a request using an iframe; we can't see the response, but we don't need to
439
- // TODO not using this mechanism because it screws up back-button
440
- var loggingForm = document.createElement("form");
441
- loggingForm.method = "POST";
442
- loggingForm.action = url;
443
- loggingForm.target = "seleniumLoggingFrame";
444
- var postedDataInput = document.createElement("input");
445
- postedDataInput.type = "hidden";
446
- postedDataInput.name = "postedData";
447
- postedDataInput.value = dataToBePosted;
448
- loggingForm.appendChild(postedDataInput);
449
- document.body.appendChild(loggingForm);
450
- loggingForm.submit();
451
- document.body.removeChild(loggingForm);
452
- } else {
453
- var postedData = "&postedData=" + encodeURIComponent(dataToBePosted);
454
- var scriptTag = document.createElement("script");
455
- scriptTag.src = url + postedData;
456
- document.body.appendChild(scriptTag);
457
- document.body.removeChild(scriptTag);
458
- }
459
- }
460
-
461
- function buildDriverParams() {
462
- var params = "";
463
-
464
- var sessionId = runOptions.getSessionId();
465
- if (sessionId == undefined) {
466
- sessionId = injectedSessionId;
467
- }
468
- if (sessionId != undefined) {
469
- params = params + "&sessionId=" + sessionId;
470
- }
471
- return params;
472
- }
473
-
474
- function preventBrowserCaching() {
475
- var t = (new Date()).getTime();
476
- return "&counterToMakeURsUniqueAndSoStopPageCachingInTheBrowser=" + t;
477
- }
478
-
479
- //
480
- // Return URL parameters pertaining to the name(s?) of the current window
481
- //
482
- // In selenium, the main (i.e., first) window's name is a blank string.
483
- //
484
- // Additional pop-ups are associated with either 1.) the name given by the 2nd parameter to window.open, or 2.) the name of a
485
- // property on the opening window which points at the window.
486
- //
487
- // An example of #2: if window X contains JavaScript as follows:
488
- //
489
- // var windowABC = window.open(...)
490
- //
491
- // Note that the example JavaScript above is equivalent to
492
- //
493
- // window["windowABC"] = window.open(...)
494
- //
495
- function getSeleniumWindowNameURLparameters() {
496
- var w = (proxyInjectionMode ? selenium.browserbot.getCurrentWindow() : window).top;
497
- var s = "&seleniumWindowName=";
498
- if (w.opener == null) {
499
- return s;
500
- }
501
- if (w["seleniumWindowName"] == null) {
502
- if (w.name) {
503
- w["seleniumWindowName"] = w.name;
504
- } else {
505
- w["seleniumWindowName"] = 'generatedSeleniumWindowName_' + Math.round(100000 * Math.random());
506
- }
507
- }
508
- s += w["seleniumWindowName"];
509
- var windowOpener = w.opener;
510
- for (key in windowOpener) {
511
- var val = null;
512
- try {
513
- val = windowOpener[key];
514
- }
515
- catch(e) {
516
- }
517
- if (val==w) {
518
- s += "&jsWindowNameVar=" + key; // found a js variable in the opener referring to this window
519
- }
520
- }
521
- return s;
522
- }
523
-
524
- // construct a JavaScript expression which leads to my frame (i.e., the frame containing the window
525
- // in which this code is operating)
526
- function makeAddressToAUTFrame(w, frameNavigationalJSexpression)
527
- {
528
- if (w == null)
529
- {
530
- w = top;
531
- frameNavigationalJSexpression = "top";
532
- }
533
-
534
- if (w == selenium.browserbot.getCurrentWindow())
535
- {
536
- return frameNavigationalJSexpression;
537
- }
538
- for (var j = 0; j < w.frames.length; j++)
539
- {
540
- var t = makeAddressToAUTFrame(w.frames[j], frameNavigationalJSexpression + ".frames[" + j + "]");
541
- if (t != null)
542
- {
543
- return t;
544
- }
545
- }
546
- return null;
547
- }
548
-
549
- Selenium.prototype.doSetContext = function(context) {
550
- /**
551
- * Writes a message to the status bar and adds a note to the browser-side
552
- * log.
553
- *
554
- * @param context
555
- * the message to be sent to the browser
556
- */
557
- //set the current test title
558
- var ctx = document.getElementById("context");
559
- if (ctx != null) {
560
- ctx.innerHTML = context;
561
- }
562
- };
563
-
564
- /**
565
- * Adds a script tag referencing a specially-named user extensions "file". The
566
- * resource handler for this special file (which won't actually exist) will use
567
- * the session ID embedded in its name to retrieve per-session specified user
568
- * extension javascript.
569
- *
570
- * @param sessionId
571
- */
572
- function requireExtensionJs(sessionId) {
573
- var src = 'scripts/user-extensions.js[' + sessionId + ']';
574
- if (document.getElementById(src) == null) {
575
- var scriptTag = document.createElement('script');
576
- scriptTag.language = 'JavaScript';
577
- scriptTag.type = 'text/javascript';
578
- scriptTag.src = src;
579
- scriptTag.id = src;
580
- var headTag = document.getElementsByTagName('head')[0];
581
- headTag.appendChild(scriptTag);
582
- }
583
- }
584
-
585
- Selenium.prototype.doAttachFile = function(fieldLocator,fileLocator) {
586
- /**
587
- * Sets a file input (upload) field to the file listed in fileLocator
588
- *
589
- * @param fieldLocator an <a href="#locators">element locator</a>
590
- * @param fileLocator a URL pointing to the specified file. Before the file
591
- * can be set in the input field (fieldLocator), Selenium RC may need to transfer the file
592
- * to the local machine before attaching the file in a web page form. This is common in selenium
593
- * grid configurations where the RC server driving the browser is not the same
594
- * machine that started the test.
595
- *
596
- * Supported Browsers: Firefox ("*chrome") only.
597
- *
598
- */
599
- // This doesn't really do anything on the JS side; we let the Selenium Server take care of this for us!
600
- };
601
-
602
- Selenium.prototype.doCaptureScreenshot = function(filename) {
603
- /**
604
- * Captures a PNG screenshot to the specified file.
605
- *
606
- * @param filename the absolute path to the file to be written, e.g. "c:\blah\screenshot.png"
607
- */
608
- // This doesn't really do anything on the JS side; we let the Selenium Server take care of this for us!
609
- };
610
-
611
- Selenium.prototype.doCaptureScreenshotToString = function() {
612
- /**
613
- * Capture a PNG screenshot. It then returns the file as a base 64 encoded string.
614
- *
615
- * @return string The base 64 encoded string of the screen shot (PNG file)
616
- */
617
- // This doesn't really do anything on the JS side; we let the Selenium Server take care of this for us!
618
- };
619
-
620
- Selenium.prototype.doCaptureEntirePageScreenshotToString = function(kwargs) {
621
- /**
622
- * Downloads a screenshot of the browser current window canvas to a
623
- * based 64 encoded PNG file. The <em>entire</em> windows canvas is captured,
624
- * including parts rendered outside of the current view port.
625
- *
626
- * Currently this only works in Mozilla and when running in chrome mode.
627
- *
628
- * @param kwargs A kwargs string that modifies the way the screenshot is captured. Example: "background=#CCFFDD". This may be useful to set for capturing screenshots of less-than-ideal layouts, for example where absolute positioning causes the calculation of the canvas dimension to fail and a black background is exposed (possibly obscuring black text).
629
- *
630
- * @return string The base 64 encoded string of the page screenshot (PNG file)
631
- */
632
- // This doesn't really do anything on the JS side; we let the Selenium Server take care of this for us!
633
- };
634
-
635
- Selenium.prototype.doShutDownSeleniumServer = function(keycode) {
636
- /**
637
- * Kills the running Selenium Server and all browser sessions. After you run this command, you will no longer be able to send
638
- * commands to the server; you can't remotely start the server once it has been stopped. Normally
639
- * you should prefer to run the "stop" command, which terminates the current browser session, rather than
640
- * shutting down the entire server.
641
- *
642
- */
643
- // This doesn't really do anything on the JS side; we let the Selenium Server take care of this for us!
644
- };
645
-
646
- Selenium.prototype.doRetrieveLastRemoteControlLogs = function() {
647
- /**
648
- * Retrieve the last messages logged on a specific remote control. Useful for error reports, especially
649
- * when running multiple remote controls in a distributed environment. The maximum number of log messages
650
- * that can be retrieve is configured on remote control startup.
651
- *
652
- * @return string The last N log messages as a multi-line string.
653
- */
654
- // This doesn't really do anything on the JS side; we let the Selenium Server take care of this for us!
655
- };
656
-
657
- Selenium.prototype.doKeyDownNative = function(keycode) {
658
- /**
659
- * Simulates a user pressing a key (without releasing it yet) by sending a native operating system keystroke.
660
- * This function uses the java.awt.Robot class to send a keystroke; this more accurately simulates typing
661
- * a key on the keyboard. It does not honor settings from the shiftKeyDown, controlKeyDown, altKeyDown and
662
- * metaKeyDown commands, and does not target any particular HTML element. To send a keystroke to a particular
663
- * element, focus on the element first before running this command.
664
- *
665
- * @param keycode an integer keycode number corresponding to a java.awt.event.KeyEvent; note that Java keycodes are NOT the same thing as JavaScript keycodes!
666
- */
667
- // This doesn't really do anything on the JS side; we let the Selenium Server take care of this for us!
668
- };
669
-
670
- Selenium.prototype.doKeyUpNative = function(keycode) {
671
- /**
672
- * Simulates a user releasing a key by sending a native operating system keystroke.
673
- * This function uses the java.awt.Robot class to send a keystroke; this more accurately simulates typing
674
- * a key on the keyboard. It does not honor settings from the shiftKeyDown, controlKeyDown, altKeyDown and
675
- * metaKeyDown commands, and does not target any particular HTML element. To send a keystroke to a particular
676
- * element, focus on the element first before running this command.
677
- *
678
- * @param keycode an integer keycode number corresponding to a java.awt.event.KeyEvent; note that Java keycodes are NOT the same thing as JavaScript keycodes!
679
- */
680
- // This doesn't really do anything on the JS side; we let the Selenium Server take care of this for us!
681
- };
682
-
683
- Selenium.prototype.doKeyPressNative = function(keycode) {
684
- /**
685
- * Simulates a user pressing and releasing a key by sending a native operating system keystroke.
686
- * This function uses the java.awt.Robot class to send a keystroke; this more accurately simulates typing
687
- * a key on the keyboard. It does not honor settings from the shiftKeyDown, controlKeyDown, altKeyDown and
688
- * metaKeyDown commands, and does not target any particular HTML element. To send a keystroke to a particular
689
- * element, focus on the element first before running this command.
690
- *
691
- * @param keycode an integer keycode number corresponding to a java.awt.event.KeyEvent; note that Java keycodes are NOT the same thing as JavaScript keycodes!
692
- */
693
- // This doesn't really do anything on the JS side; we let the Selenium Server take care of this for us!
694
- };
695
-