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