actionpack 2.3.18 → 3.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- data/CHANGELOG +15 -64
- data/README +39 -48
- data/lib/abstract_controller.rb +22 -0
- data/lib/abstract_controller/base.rb +191 -0
- data/lib/abstract_controller/callbacks.rb +113 -0
- data/lib/abstract_controller/collector.rb +30 -0
- data/lib/abstract_controller/compatibility.rb +18 -0
- data/lib/abstract_controller/helpers.rb +163 -0
- data/lib/abstract_controller/layouts.rb +413 -0
- data/lib/abstract_controller/localized_cache.rb +49 -0
- data/lib/abstract_controller/logger.rb +13 -0
- data/lib/abstract_controller/rendering.rb +238 -0
- data/lib/{action_controller → abstract_controller}/translation.rb +1 -1
- data/lib/action_controller.rb +68 -102
- data/lib/action_controller/base.rb +77 -1409
- data/lib/action_controller/caching.rb +58 -45
- data/lib/action_controller/caching/actions.rb +100 -114
- data/lib/action_controller/caching/fragments.rb +17 -19
- data/lib/action_controller/caching/pages.rb +12 -6
- data/lib/action_controller/caching/sweeping.rb +42 -0
- data/lib/action_controller/deprecated.rb +5 -0
- data/lib/action_controller/deprecated/dispatcher.rb +28 -0
- data/lib/action_controller/deprecated/integration_test.rb +2 -0
- data/lib/action_controller/deprecated/performance_test.rb +1 -0
- data/lib/action_controller/metal.rb +125 -0
- data/lib/action_controller/metal/compatibility.rb +141 -0
- data/lib/action_controller/metal/conditional_get.rb +86 -0
- data/lib/action_controller/metal/configuration.rb +28 -0
- data/lib/action_controller/metal/cookies.rb +17 -0
- data/lib/action_controller/metal/exceptions.rb +46 -0
- data/lib/action_controller/metal/flash.rb +28 -0
- data/lib/action_controller/metal/head.rb +33 -0
- data/lib/action_controller/metal/helpers.rb +116 -0
- data/lib/action_controller/metal/hide_actions.rb +50 -0
- data/lib/action_controller/{http_authentication.rb → metal/http_authentication.rb} +18 -15
- data/lib/action_controller/metal/instrumentation.rb +99 -0
- data/lib/action_controller/metal/mime_responds.rb +300 -0
- data/lib/action_controller/metal/rack_delegation.rb +35 -0
- data/lib/action_controller/metal/redirecting.rb +90 -0
- data/lib/action_controller/metal/renderers.rb +95 -0
- data/lib/action_controller/metal/rendering.rb +69 -0
- data/lib/action_controller/metal/request_forgery_protection.rb +115 -0
- data/lib/action_controller/metal/rescue.rb +13 -0
- data/lib/action_controller/metal/responder.rb +220 -0
- data/lib/action_controller/{session_management.rb → metal/session_management.rb} +5 -14
- data/lib/action_controller/{streaming.rb → metal/streaming.rb} +13 -12
- data/lib/action_controller/metal/testing.rb +42 -0
- data/lib/action_controller/metal/url_for.rb +157 -0
- data/lib/action_controller/{verification.rb → metal/verification.rb} +41 -41
- data/lib/action_controller/middleware.rb +38 -0
- data/lib/action_controller/polymorphic_routes.rb +20 -26
- data/lib/action_controller/railtie.rb +30 -0
- data/lib/action_controller/railties/subscriber.rb +63 -0
- data/lib/action_controller/record_identifier.rb +3 -16
- data/lib/action_controller/test_case.rb +156 -18
- data/lib/action_controller/url_rewriter.rb +47 -200
- data/lib/action_controller/vendor/html-scanner.rb +16 -12
- data/lib/action_controller/vendor/html-scanner/html/node.rb +1 -1
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +12 -9
- data/lib/action_dispatch.rb +88 -0
- data/lib/action_dispatch/http/cache.rb +123 -0
- data/lib/action_dispatch/http/filter_parameters.rb +98 -0
- data/lib/{action_controller → action_dispatch/http}/headers.rb +8 -8
- data/lib/action_dispatch/http/mime_negotiation.rb +101 -0
- data/lib/{action_controller → action_dispatch/http}/mime_type.rb +30 -11
- data/lib/{action_controller → action_dispatch/http}/mime_types.rb +5 -3
- data/lib/action_dispatch/http/parameters.rb +49 -0
- data/lib/action_dispatch/http/request.rb +223 -0
- data/lib/action_dispatch/http/response.rb +209 -0
- data/lib/action_dispatch/http/upload.rb +48 -0
- data/lib/action_dispatch/http/url.rb +129 -0
- data/lib/action_dispatch/middleware/callbacks.rb +50 -0
- data/lib/action_dispatch/middleware/cascade.rb +29 -0
- data/lib/action_dispatch/middleware/cookies.rb +216 -0
- data/lib/{action_controller → action_dispatch/middleware}/flash.rb +51 -90
- data/lib/action_dispatch/middleware/head.rb +18 -0
- data/lib/action_dispatch/middleware/params_parser.rb +78 -0
- data/lib/action_dispatch/middleware/rescue.rb +26 -0
- data/lib/action_dispatch/middleware/session/abstract_store.rb +209 -0
- data/lib/{action_controller → action_dispatch/middleware}/session/cookie_store.rb +56 -60
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +47 -0
- data/lib/action_dispatch/middleware/show_exceptions.rb +173 -0
- data/lib/{action_controller/middleware_stack.rb → action_dispatch/middleware/stack.rb} +23 -13
- data/lib/action_dispatch/middleware/static.rb +44 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_request_and_response.erb +10 -3
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/_trace.erb +4 -4
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb +10 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/layout.erb +2 -2
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/missing_template.erb +0 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/routing_error.erb +0 -0
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/template_error.erb +3 -3
- data/lib/{action_controller → action_dispatch/middleware}/templates/rescues/unknown_action.erb +0 -0
- data/lib/action_dispatch/railtie.rb +15 -0
- data/lib/action_dispatch/routing.rb +217 -0
- data/lib/action_dispatch/routing/deprecated_mapper.rb +877 -0
- data/lib/action_dispatch/routing/mapper.rb +649 -0
- data/lib/action_dispatch/routing/route.rb +55 -0
- data/lib/action_dispatch/routing/route_set.rb +445 -0
- data/lib/action_dispatch/testing/assertions.rb +21 -0
- data/lib/action_dispatch/testing/assertions/dom.rb +37 -0
- data/lib/{action_controller/assertions/model_assertions.rb → action_dispatch/testing/assertions/model.rb} +2 -4
- data/lib/action_dispatch/testing/assertions/response.rb +154 -0
- data/lib/{action_controller/assertions/routing_assertions.rb → action_dispatch/testing/assertions/routing.rb} +72 -34
- data/lib/{action_controller/assertions/selector_assertions.rb → action_dispatch/testing/assertions/selector.rb} +14 -11
- data/lib/{action_controller/assertions/tag_assertions.rb → action_dispatch/testing/assertions/tag.rb} +25 -14
- data/lib/{action_controller → action_dispatch/testing}/integration.rb +173 -406
- data/lib/action_dispatch/testing/performance_test.rb +17 -0
- data/lib/action_dispatch/testing/test_process.rb +42 -0
- data/lib/action_dispatch/testing/test_request.rb +83 -0
- data/lib/action_dispatch/testing/test_response.rb +136 -0
- data/lib/action_pack/version.rb +3 -3
- data/lib/action_view.rb +29 -26
- data/lib/action_view/base.rb +101 -148
- data/lib/action_view/context.rb +44 -0
- data/lib/action_view/helpers.rb +6 -4
- data/lib/action_view/helpers/{active_record_helper.rb → active_model_helper.rb} +63 -63
- data/lib/action_view/helpers/asset_tag_helper.rb +166 -31
- data/lib/action_view/helpers/cache_helper.rb +1 -1
- data/lib/action_view/helpers/capture_helper.rb +40 -8
- data/lib/action_view/helpers/csrf_helper.rb +2 -4
- data/lib/action_view/helpers/date_helper.rb +14 -15
- data/lib/action_view/helpers/form_helper.rb +121 -24
- data/lib/action_view/helpers/form_options_helper.rb +26 -25
- data/lib/action_view/helpers/form_tag_helper.rb +42 -33
- data/lib/action_view/helpers/javascript_helper.rb +1 -109
- data/lib/action_view/helpers/number_helper.rb +4 -1
- data/lib/action_view/helpers/prototype_helper.rb +75 -499
- data/lib/action_view/helpers/raw_output_helper.rb +1 -1
- data/lib/action_view/helpers/record_tag_helper.rb +3 -3
- data/lib/action_view/helpers/sanitize_helper.rb +3 -2
- data/lib/action_view/helpers/scriptaculous_helper.rb +89 -53
- data/lib/action_view/helpers/tag_helper.rb +12 -13
- data/lib/action_view/helpers/text_helper.rb +33 -38
- data/lib/action_view/helpers/translation_helper.rb +11 -35
- data/lib/action_view/helpers/url_helper.rb +140 -134
- data/lib/action_view/locale/en.yml +34 -28
- data/lib/action_view/paths.rb +27 -24
- data/lib/action_view/railtie.rb +17 -0
- data/lib/action_view/railties/subscriber.rb +24 -0
- data/lib/action_view/{partials.rb → render/partials.rb} +161 -51
- data/lib/action_view/render/rendering.rb +117 -0
- data/lib/action_view/template.rb +88 -217
- data/lib/action_view/template/error.rb +105 -0
- data/lib/action_view/template/handler.rb +41 -0
- data/lib/action_view/template/handlers.rb +54 -0
- data/lib/action_view/{template_handlers → template/handlers}/builder.rb +6 -6
- data/lib/action_view/template/handlers/erb.rb +58 -0
- data/lib/action_view/{template_handlers → template/handlers}/rjs.rb +8 -3
- data/lib/action_view/template/resolver.rb +164 -0
- data/lib/action_view/template/text.rb +40 -0
- data/lib/action_view/test_case.rb +18 -18
- metadata +165 -420
- data/RUNNING_UNIT_TESTS +0 -24
- data/Rakefile +0 -158
- data/install.rb +0 -30
- data/lib/action_controller/assertions/dom_assertions.rb +0 -55
- data/lib/action_controller/assertions/response_assertions.rb +0 -169
- data/lib/action_controller/benchmarking.rb +0 -107
- data/lib/action_controller/caching/sweeper.rb +0 -45
- data/lib/action_controller/cgi_ext.rb +0 -15
- data/lib/action_controller/cgi_ext/cookie.rb +0 -112
- data/lib/action_controller/cgi_ext/query_extension.rb +0 -22
- data/lib/action_controller/cgi_ext/stdinput.rb +0 -24
- data/lib/action_controller/cgi_process.rb +0 -77
- data/lib/action_controller/cookies.rb +0 -197
- data/lib/action_controller/dispatcher.rb +0 -133
- data/lib/action_controller/failsafe.rb +0 -87
- data/lib/action_controller/filters.rb +0 -680
- data/lib/action_controller/helpers.rb +0 -225
- data/lib/action_controller/layout.rb +0 -286
- data/lib/action_controller/middlewares.rb +0 -14
- data/lib/action_controller/mime_responds.rb +0 -193
- data/lib/action_controller/params_parser.rb +0 -77
- data/lib/action_controller/performance_test.rb +0 -15
- data/lib/action_controller/rack_lint_patch.rb +0 -36
- data/lib/action_controller/reloader.rb +0 -54
- data/lib/action_controller/request.rb +0 -518
- data/lib/action_controller/request_forgery_protection.rb +0 -116
- data/lib/action_controller/rescue.rb +0 -183
- data/lib/action_controller/resources.rb +0 -682
- data/lib/action_controller/response.rb +0 -237
- data/lib/action_controller/routing.rb +0 -388
- data/lib/action_controller/routing/builder.rb +0 -197
- data/lib/action_controller/routing/optimisations.rb +0 -130
- data/lib/action_controller/routing/recognition_optimisation.rb +0 -167
- data/lib/action_controller/routing/route.rb +0 -265
- data/lib/action_controller/routing/route_set.rb +0 -503
- data/lib/action_controller/routing/routing_ext.rb +0 -49
- data/lib/action_controller/routing/segments.rb +0 -343
- data/lib/action_controller/session/abstract_store.rb +0 -276
- data/lib/action_controller/session/mem_cache_store.rb +0 -60
- data/lib/action_controller/status_codes.rb +0 -88
- data/lib/action_controller/string_coercion.rb +0 -29
- data/lib/action_controller/templates/rescues/diagnostics.erb +0 -11
- data/lib/action_controller/test_process.rb +0 -580
- data/lib/action_controller/uploaded_file.rb +0 -44
- data/lib/action_view/helpers/benchmark_helper.rb +0 -54
- data/lib/action_view/inline_template.rb +0 -19
- data/lib/action_view/reloadable_template.rb +0 -117
- data/lib/action_view/renderable.rb +0 -109
- data/lib/action_view/renderable_partial.rb +0 -53
- data/lib/action_view/template_error.rb +0 -99
- data/lib/action_view/template_handler.rb +0 -34
- data/lib/action_view/template_handlers.rb +0 -48
- data/lib/action_view/template_handlers/erb.rb +0 -25
- data/lib/actionpack.rb +0 -2
- data/test/abstract_unit.rb +0 -78
- data/test/active_record_unit.rb +0 -104
- data/test/activerecord/active_record_store_test.rb +0 -221
- data/test/activerecord/render_partial_with_record_identification_test.rb +0 -188
- data/test/adv_attr_test.rb +0 -20
- data/test/controller/action_pack_assertions_test.rb +0 -545
- data/test/controller/addresses_render_test.rb +0 -37
- data/test/controller/assert_select_test.rb +0 -735
- data/test/controller/base_test.rb +0 -217
- data/test/controller/benchmark_test.rb +0 -32
- data/test/controller/caching_test.rb +0 -743
- data/test/controller/capture_test.rb +0 -66
- data/test/controller/content_type_test.rb +0 -178
- data/test/controller/controller_fixtures/app/controllers/admin/user_controller.rb +0 -0
- data/test/controller/controller_fixtures/app/controllers/user_controller.rb +0 -0
- data/test/controller/controller_fixtures/vendor/plugins/bad_plugin/lib/plugin_controller.rb +0 -0
- data/test/controller/cookie_test.rb +0 -208
- data/test/controller/deprecation/deprecated_base_methods_test.rb +0 -32
- data/test/controller/dispatcher_test.rb +0 -144
- data/test/controller/dom_assertions_test.rb +0 -53
- data/test/controller/failsafe_test.rb +0 -60
- data/test/controller/fake_controllers.rb +0 -33
- data/test/controller/fake_models.rb +0 -19
- data/test/controller/filter_params_test.rb +0 -52
- data/test/controller/filters_test.rb +0 -885
- data/test/controller/flash_test.rb +0 -174
- data/test/controller/header_test.rb +0 -14
- data/test/controller/helper_test.rb +0 -224
- data/test/controller/html-scanner/cdata_node_test.rb +0 -15
- data/test/controller/html-scanner/document_test.rb +0 -148
- data/test/controller/html-scanner/node_test.rb +0 -89
- data/test/controller/html-scanner/sanitizer_test.rb +0 -300
- data/test/controller/html-scanner/tag_node_test.rb +0 -238
- data/test/controller/html-scanner/text_node_test.rb +0 -50
- data/test/controller/html-scanner/tokenizer_test.rb +0 -131
- data/test/controller/http_basic_authentication_test.rb +0 -113
- data/test/controller/http_digest_authentication_test.rb +0 -254
- data/test/controller/integration_test.rb +0 -526
- data/test/controller/layout_test.rb +0 -215
- data/test/controller/localized_templates_test.rb +0 -24
- data/test/controller/logging_test.rb +0 -46
- data/test/controller/middleware_stack_test.rb +0 -90
- data/test/controller/mime_responds_test.rb +0 -536
- data/test/controller/mime_type_test.rb +0 -93
- data/test/controller/output_escaping_test.rb +0 -19
- data/test/controller/polymorphic_routes_test.rb +0 -297
- data/test/controller/rack_test.rb +0 -308
- data/test/controller/record_identifier_test.rb +0 -139
- data/test/controller/redirect_test.rb +0 -285
- data/test/controller/reloader_test.rb +0 -125
- data/test/controller/render_test.rb +0 -1783
- data/test/controller/request/json_params_parsing_test.rb +0 -65
- data/test/controller/request/multipart_params_parsing_test.rb +0 -177
- data/test/controller/request/query_string_parsing_test.rb +0 -129
- data/test/controller/request/test_request_test.rb +0 -35
- data/test/controller/request/url_encoded_params_parsing_test.rb +0 -146
- data/test/controller/request/xml_params_parsing_test.rb +0 -103
- data/test/controller/request_forgery_protection_test.rb +0 -233
- data/test/controller/request_test.rb +0 -398
- data/test/controller/rescue_test.rb +0 -541
- data/test/controller/resources_test.rb +0 -1393
- data/test/controller/routing_test.rb +0 -2592
- data/test/controller/selector_test.rb +0 -628
- data/test/controller/send_file_test.rb +0 -171
- data/test/controller/session/abstract_store_test.rb +0 -64
- data/test/controller/session/cookie_store_test.rb +0 -354
- data/test/controller/session/mem_cache_store_test.rb +0 -187
- data/test/controller/session/test_session_test.rb +0 -58
- data/test/controller/test_test.rb +0 -700
- data/test/controller/translation_test.rb +0 -26
- data/test/controller/url_rewriter_test.rb +0 -395
- data/test/controller/verification_test.rb +0 -270
- data/test/controller/view_paths_test.rb +0 -141
- data/test/controller/webservice_test.rb +0 -273
- data/test/fixtures/_top_level_partial.html.erb +0 -1
- data/test/fixtures/_top_level_partial_only.erb +0 -1
- data/test/fixtures/addresses/list.erb +0 -1
- data/test/fixtures/alternate_helpers/foo_helper.rb +0 -3
- data/test/fixtures/bad_customers/_bad_customer.html.erb +0 -1
- data/test/fixtures/companies.yml +0 -24
- data/test/fixtures/company.rb +0 -10
- data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +0 -1
- data/test/fixtures/content_type/render_default_for_rhtml.rhtml +0 -1
- data/test/fixtures/content_type/render_default_for_rjs.rjs +0 -1
- data/test/fixtures/content_type/render_default_for_rxml.rxml +0 -1
- data/test/fixtures/customers/_customer.html.erb +0 -1
- data/test/fixtures/db_definitions/sqlite.sql +0 -49
- data/test/fixtures/developer.rb +0 -9
- data/test/fixtures/developers.yml +0 -21
- data/test/fixtures/developers/_developer.erb +0 -1
- data/test/fixtures/developers_projects.yml +0 -13
- data/test/fixtures/failsafe/500.html +0 -1
- data/test/fixtures/fun/games/_game.erb +0 -1
- data/test/fixtures/fun/games/hello_world.erb +0 -1
- data/test/fixtures/fun/serious/games/_game.erb +0 -1
- data/test/fixtures/functional_caching/_partial.erb +0 -3
- data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +0 -3
- data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +0 -6
- data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +0 -5
- data/test/fixtures/functional_caching/fragment_cached.html.erb +0 -2
- data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +0 -1
- data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +0 -2
- data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +0 -1
- data/test/fixtures/good_customers/_good_customer.html.erb +0 -1
- data/test/fixtures/helpers/abc_helper.rb +0 -5
- data/test/fixtures/helpers/fun/games_helper.rb +0 -3
- data/test/fixtures/helpers/fun/pdf_helper.rb +0 -3
- data/test/fixtures/layout_tests/abs_path_layout.rhtml +0 -1
- data/test/fixtures/layout_tests/alt/hello.rhtml +0 -1
- data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
- data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +0 -1
- data/test/fixtures/layout_tests/layouts/item.rhtml +0 -1
- data/test/fixtures/layout_tests/layouts/layout_test.rhtml +0 -1
- data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +0 -1
- data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +0 -1
- data/test/fixtures/layout_tests/views/hello.rhtml +0 -1
- data/test/fixtures/layouts/_column.html.erb +0 -2
- data/test/fixtures/layouts/block_with_layout.erb +0 -3
- data/test/fixtures/layouts/builder.builder +0 -3
- data/test/fixtures/layouts/default_html.html.erb +0 -1
- data/test/fixtures/layouts/partial_with_layout.erb +0 -3
- data/test/fixtures/layouts/standard.erb +0 -1
- data/test/fixtures/layouts/talk_from_action.erb +0 -2
- data/test/fixtures/layouts/xhr.html.erb +0 -2
- data/test/fixtures/layouts/yield.erb +0 -2
- data/test/fixtures/localized/hello_world.de.html +0 -1
- data/test/fixtures/localized/hello_world.en.html +0 -1
- data/test/fixtures/mascot.rb +0 -3
- data/test/fixtures/mascots.yml +0 -4
- data/test/fixtures/mascots/_mascot.html.erb +0 -1
- data/test/fixtures/multipart/binary_file +0 -0
- data/test/fixtures/multipart/boundary_problem_file +0 -10
- data/test/fixtures/multipart/bracketed_param +0 -5
- data/test/fixtures/multipart/empty +0 -10
- data/test/fixtures/multipart/hello.txt +0 -1
- data/test/fixtures/multipart/large_text_file +0 -10
- data/test/fixtures/multipart/mixed_files +0 -0
- data/test/fixtures/multipart/mona_lisa.jpg +0 -0
- data/test/fixtures/multipart/none +0 -9
- data/test/fixtures/multipart/single_parameter +0 -5
- data/test/fixtures/multipart/text_file +0 -10
- data/test/fixtures/override/test/hello_world.erb +0 -1
- data/test/fixtures/override2/layouts/test/sub.erb +0 -1
- data/test/fixtures/post_test/layouts/post.html.erb +0 -1
- data/test/fixtures/post_test/layouts/super_post.iphone.erb +0 -1
- data/test/fixtures/post_test/post/index.html.erb +0 -1
- data/test/fixtures/post_test/post/index.iphone.erb +0 -1
- data/test/fixtures/post_test/super_post/index.html.erb +0 -1
- data/test/fixtures/post_test/super_post/index.iphone.erb +0 -1
- data/test/fixtures/project.rb +0 -3
- data/test/fixtures/projects.yml +0 -7
- data/test/fixtures/projects/_project.erb +0 -1
- data/test/fixtures/public/404.html +0 -1
- data/test/fixtures/public/500.da.html +0 -1
- data/test/fixtures/public/500.html +0 -1
- data/test/fixtures/public/absolute/test.css +0 -23
- data/test/fixtures/public/absolute/test.js +0 -63
- data/test/fixtures/public/images/rails.png +0 -0
- data/test/fixtures/public/javascripts/application.js +0 -1
- data/test/fixtures/public/javascripts/bank.js +0 -1
- data/test/fixtures/public/javascripts/controls.js +0 -1
- data/test/fixtures/public/javascripts/dragdrop.js +0 -1
- data/test/fixtures/public/javascripts/effects.js +0 -1
- data/test/fixtures/public/javascripts/prototype.js +0 -1
- data/test/fixtures/public/javascripts/robber.js +0 -1
- data/test/fixtures/public/javascripts/subdir/subdir.js +0 -1
- data/test/fixtures/public/javascripts/version.1.0.js +0 -1
- data/test/fixtures/public/stylesheets/bank.css +0 -1
- data/test/fixtures/public/stylesheets/robber.css +0 -1
- data/test/fixtures/public/stylesheets/subdir/subdir.css +0 -1
- data/test/fixtures/public/stylesheets/version.1.0.css +0 -1
- data/test/fixtures/quiz/questions/_question.html.erb +0 -1
- data/test/fixtures/replies.yml +0 -15
- data/test/fixtures/replies/_reply.erb +0 -1
- data/test/fixtures/reply.rb +0 -7
- data/test/fixtures/respond_to/all_types_with_layout.html.erb +0 -1
- data/test/fixtures/respond_to/all_types_with_layout.js.rjs +0 -1
- data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +0 -1
- data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +0 -1
- data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +0 -1
- data/test/fixtures/respond_to/layouts/missing.html.erb +0 -1
- data/test/fixtures/respond_to/layouts/standard.html.erb +0 -1
- data/test/fixtures/respond_to/layouts/standard.iphone.erb +0 -1
- data/test/fixtures/respond_to/using_defaults.html.erb +0 -1
- data/test/fixtures/respond_to/using_defaults.js.rjs +0 -1
- data/test/fixtures/respond_to/using_defaults.xml.builder +0 -1
- data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +0 -1
- data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +0 -1
- data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +0 -1
- data/test/fixtures/scope/test/modgreet.erb +0 -1
- data/test/fixtures/session_autoload_test/session_autoload_test/foo.rb +0 -10
- data/test/fixtures/shared.html.erb +0 -1
- data/test/fixtures/symlink_parent/symlinked_layout.erb +0 -5
- data/test/fixtures/test/_counter.html.erb +0 -1
- data/test/fixtures/test/_customer.erb +0 -1
- data/test/fixtures/test/_customer_counter.erb +0 -1
- data/test/fixtures/test/_customer_counter_with_as.erb +0 -1
- data/test/fixtures/test/_customer_greeting.erb +0 -1
- data/test/fixtures/test/_customer_with_var.erb +0 -1
- data/test/fixtures/test/_form.erb +0 -1
- data/test/fixtures/test/_from_helper.erb +0 -1
- data/test/fixtures/test/_hash_greeting.erb +0 -1
- data/test/fixtures/test/_hash_object.erb +0 -2
- data/test/fixtures/test/_hello.builder +0 -1
- data/test/fixtures/test/_labelling_form.erb +0 -1
- data/test/fixtures/test/_layout_for_block_with_args.html.erb +0 -3
- data/test/fixtures/test/_layout_for_partial.html.erb +0 -3
- data/test/fixtures/test/_local_inspector.html.erb +0 -1
- data/test/fixtures/test/_one.html.erb +0 -1
- data/test/fixtures/test/_partial.erb +0 -1
- data/test/fixtures/test/_partial.html.erb +0 -1
- data/test/fixtures/test/_partial.js.erb +0 -1
- data/test/fixtures/test/_partial_for_use_in_layout.html.erb +0 -1
- data/test/fixtures/test/_partial_only.erb +0 -1
- data/test/fixtures/test/_partial_with_only_html_version.html.erb +0 -1
- data/test/fixtures/test/_person.erb +0 -2
- data/test/fixtures/test/_raise.html.erb +0 -1
- data/test/fixtures/test/_two.html.erb +0 -1
- data/test/fixtures/test/_utf8_partial.html.erb +0 -1
- data/test/fixtures/test/_utf8_partial_magic.html.erb +0 -2
- data/test/fixtures/test/action_talk_to_layout.erb +0 -2
- data/test/fixtures/test/array_translation.erb +0 -1
- data/test/fixtures/test/calling_partial_with_layout.html.erb +0 -1
- data/test/fixtures/test/capturing.erb +0 -4
- data/test/fixtures/test/content_for.erb +0 -2
- data/test/fixtures/test/content_for_concatenated.erb +0 -3
- data/test/fixtures/test/content_for_with_parameter.erb +0 -2
- data/test/fixtures/test/delete_with_js.rjs +0 -2
- data/test/fixtures/test/dont_pick_me +0 -1
- data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +0 -1
- data/test/fixtures/test/enum_rjs_test.rjs +0 -6
- data/test/fixtures/test/formatted_html_erb.html.erb +0 -1
- data/test/fixtures/test/formatted_xml_erb.builder +0 -1
- data/test/fixtures/test/formatted_xml_erb.html.erb +0 -1
- data/test/fixtures/test/formatted_xml_erb.xml.erb +0 -1
- data/test/fixtures/test/greeting.erb +0 -1
- data/test/fixtures/test/greeting.js.rjs +0 -1
- data/test/fixtures/test/hello.builder +0 -4
- data/test/fixtures/test/hello_world.da.html.erb +0 -1
- data/test/fixtures/test/hello_world.erb +0 -1
- data/test/fixtures/test/hello_world.erb~ +0 -1
- data/test/fixtures/test/hello_world.pt-BR.html.erb +0 -1
- data/test/fixtures/test/hello_world_container.builder +0 -3
- data/test/fixtures/test/hello_world_from_rxml.builder +0 -4
- data/test/fixtures/test/hello_world_with_layout_false.erb +0 -1
- data/test/fixtures/test/hello_xml_world.builder +0 -11
- data/test/fixtures/test/hyphen-ated.erb +0 -1
- data/test/fixtures/test/implicit_content_type.atom.builder +0 -2
- data/test/fixtures/test/list.erb +0 -1
- data/test/fixtures/test/malformed/malformed.en.html.erb~ +0 -1
- data/test/fixtures/test/malformed/malformed.erb~ +0 -1
- data/test/fixtures/test/malformed/malformed.html.erb~ +0 -1
- data/test/fixtures/test/nested_layout.erb +0 -3
- data/test/fixtures/test/non_erb_block_content_for.builder +0 -4
- data/test/fixtures/test/potential_conflicts.erb +0 -4
- data/test/fixtures/test/render_explicit_html_template.js.rjs +0 -1
- data/test/fixtures/test/render_file_from_template.html.erb +0 -1
- data/test/fixtures/test/render_file_with_ivar.erb +0 -1
- data/test/fixtures/test/render_file_with_locals.erb +0 -1
- data/test/fixtures/test/render_implicit_html_template.js.rjs +0 -1
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +0 -1
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +0 -1
- data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +0 -1
- data/test/fixtures/test/render_to_string_test.erb +0 -1
- data/test/fixtures/test/scoped_array_translation.erb +0 -1
- data/test/fixtures/test/sub_template_raise.html.erb +0 -1
- data/test/fixtures/test/template.erb +0 -1
- data/test/fixtures/test/translation.erb +0 -1
- data/test/fixtures/test/update_element_with_capture.erb +0 -9
- data/test/fixtures/test/using_layout_around_block.html.erb +0 -1
- data/test/fixtures/test/using_layout_around_block_with_args.html.erb +0 -1
- data/test/fixtures/test/utf8.html.erb +0 -4
- data/test/fixtures/test/utf8_magic.html.erb +0 -5
- data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +0 -5
- data/test/fixtures/topic.rb +0 -3
- data/test/fixtures/topics.yml +0 -22
- data/test/fixtures/topics/_topic.html.erb +0 -1
- data/test/template/active_record_helper_i18n_test.rb +0 -51
- data/test/template/active_record_helper_test.rb +0 -302
- data/test/template/asset_tag_helper_test.rb +0 -770
- data/test/template/atom_feed_helper_test.rb +0 -315
- data/test/template/benchmark_helper_test.rb +0 -86
- data/test/template/compiled_templates_test.rb +0 -204
- data/test/template/date_helper_i18n_test.rb +0 -121
- data/test/template/date_helper_test.rb +0 -2603
- data/test/template/erb_util_test.rb +0 -36
- data/test/template/form_helper_test.rb +0 -1447
- data/test/template/form_options_helper_i18n_test.rb +0 -27
- data/test/template/form_options_helper_test.rb +0 -811
- data/test/template/form_tag_helper_test.rb +0 -356
- data/test/template/javascript_helper_test.rb +0 -106
- data/test/template/number_helper_i18n_test.rb +0 -69
- data/test/template/number_helper_test.rb +0 -132
- data/test/template/prototype_helper_test.rb +0 -639
- data/test/template/raw_output_helper_test.rb +0 -21
- data/test/template/record_tag_helper_test.rb +0 -58
- data/test/template/render_test.rb +0 -329
- data/test/template/sanitize_helper_test.rb +0 -57
- data/test/template/scriptaculous_helper_test.rb +0 -90
- data/test/template/tag_helper_test.rb +0 -98
- data/test/template/template_test.rb +0 -32
- data/test/template/test_test.rb +0 -54
- data/test/template/text_helper_test.rb +0 -601
- data/test/template/translation_helper_test.rb +0 -95
- data/test/template/url_helper_test.rb +0 -641
- data/test/testing_sandbox.rb +0 -15
- data/test/view/test_case_test.rb +0 -176
@@ -0,0 +1,21 @@
|
|
1
|
+
module ActionDispatch
|
2
|
+
module Assertions
|
3
|
+
autoload :DomAssertions, 'action_dispatch/testing/assertions/dom'
|
4
|
+
autoload :ModelAssertions, 'action_dispatch/testing/assertions/model'
|
5
|
+
autoload :ResponseAssertions, 'action_dispatch/testing/assertions/response'
|
6
|
+
autoload :RoutingAssertions, 'action_dispatch/testing/assertions/routing'
|
7
|
+
autoload :SelectorAssertions, 'action_dispatch/testing/assertions/selector'
|
8
|
+
autoload :TagAssertions, 'action_dispatch/testing/assertions/tag'
|
9
|
+
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
|
12
|
+
included do
|
13
|
+
include DomAssertions
|
14
|
+
include ModelAssertions
|
15
|
+
include ResponseAssertions
|
16
|
+
include RoutingAssertions
|
17
|
+
include SelectorAssertions
|
18
|
+
include TagAssertions
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'action_controller/vendor/html-scanner'
|
2
|
+
|
3
|
+
module ActionDispatch
|
4
|
+
module Assertions
|
5
|
+
module DomAssertions
|
6
|
+
# Test two HTML strings for equivalency (e.g., identical up to reordering of attributes)
|
7
|
+
#
|
8
|
+
# ==== Examples
|
9
|
+
#
|
10
|
+
# # assert that the referenced method generates the appropriate HTML string
|
11
|
+
# assert_dom_equal '<a href="http://www.example.com">Apples</a>', link_to("Apples", "http://www.example.com")
|
12
|
+
#
|
13
|
+
def assert_dom_equal(expected, actual, message = "")
|
14
|
+
expected_dom = HTML::Document.new(expected).root
|
15
|
+
actual_dom = HTML::Document.new(actual).root
|
16
|
+
full_message = build_message(message, "<?> expected to be == to\n<?>.", expected_dom.to_s, actual_dom.to_s)
|
17
|
+
|
18
|
+
assert_block(full_message) { expected_dom == actual_dom }
|
19
|
+
end
|
20
|
+
|
21
|
+
# The negated form of +assert_dom_equivalent+.
|
22
|
+
#
|
23
|
+
# ==== Examples
|
24
|
+
#
|
25
|
+
# # assert that the referenced method does not generate the specified HTML string
|
26
|
+
# assert_dom_not_equal '<a href="http://www.example.com">Apples</a>', link_to("Oranges", "http://www.example.com")
|
27
|
+
#
|
28
|
+
def assert_dom_not_equal(expected, actual, message = "")
|
29
|
+
expected_dom = HTML::Document.new(expected).root
|
30
|
+
actual_dom = HTML::Document.new(actual).root
|
31
|
+
full_message = build_message(message, "<?> expected to be != to\n<?>.", expected_dom.to_s, actual_dom.to_s)
|
32
|
+
|
33
|
+
assert_block(full_message) { expected_dom != actual_dom }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module ActionDispatch
|
2
2
|
module Assertions
|
3
3
|
module ModelAssertions
|
4
4
|
# Ensures that the passed record is valid by Active Record standards and
|
@@ -12,9 +12,7 @@ module ActionController
|
|
12
12
|
#
|
13
13
|
def assert_valid(record)
|
14
14
|
::ActiveSupport::Deprecation.warn("assert_valid is deprecated. Use assert record.valid? instead", caller)
|
15
|
-
|
16
|
-
assert record.valid?, record.errors.full_messages.join("\n")
|
17
|
-
end
|
15
|
+
assert record.valid?, record.errors.full_messages.join("\n")
|
18
16
|
end
|
19
17
|
end
|
20
18
|
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
module ActionDispatch
|
2
|
+
module Assertions
|
3
|
+
# A small suite of assertions that test responses from Rails applications.
|
4
|
+
module ResponseAssertions
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
# TODO: Need to pull in AV::Template monkey patches that track which
|
9
|
+
# templates are rendered. assert_template should probably be part
|
10
|
+
# of AV instead of AD.
|
11
|
+
require 'action_view/test_case'
|
12
|
+
end
|
13
|
+
|
14
|
+
# Asserts that the response is one of the following types:
|
15
|
+
#
|
16
|
+
# * <tt>:success</tt> - Status code was 200
|
17
|
+
# * <tt>:redirect</tt> - Status code was in the 300-399 range
|
18
|
+
# * <tt>:missing</tt> - Status code was 404
|
19
|
+
# * <tt>:error</tt> - Status code was in the 500-599 range
|
20
|
+
#
|
21
|
+
# You can also pass an explicit status number like assert_response(501)
|
22
|
+
# or its symbolic equivalent assert_response(:not_implemented).
|
23
|
+
# See ActionDispatch::StatusCodes for a full list.
|
24
|
+
#
|
25
|
+
# ==== Examples
|
26
|
+
#
|
27
|
+
# # assert that the response was a redirection
|
28
|
+
# assert_response :redirect
|
29
|
+
#
|
30
|
+
# # assert that the response code was status code 401 (unauthorized)
|
31
|
+
# assert_response 401
|
32
|
+
#
|
33
|
+
def assert_response(type, message = nil)
|
34
|
+
validate_request!
|
35
|
+
|
36
|
+
if [ :success, :missing, :redirect, :error ].include?(type) && @response.send("#{type}?")
|
37
|
+
assert_block("") { true } # to count the assertion
|
38
|
+
elsif type.is_a?(Fixnum) && @response.response_code == type
|
39
|
+
assert_block("") { true } # to count the assertion
|
40
|
+
elsif type.is_a?(Symbol) && @response.response_code == Rack::Utils::SYMBOL_TO_STATUS_CODE[type]
|
41
|
+
assert_block("") { true } # to count the assertion
|
42
|
+
else
|
43
|
+
assert_block(build_message(message, "Expected response to be a <?>, but was <?>", type, @response.response_code)) { false }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Assert that the redirection options passed in match those of the redirect called in the latest action.
|
48
|
+
# This match can be partial, such that assert_redirected_to(:controller => "weblog") will also
|
49
|
+
# match the redirection of redirect_to(:controller => "weblog", :action => "show") and so on.
|
50
|
+
#
|
51
|
+
# ==== Examples
|
52
|
+
#
|
53
|
+
# # assert that the redirection was to the "index" action on the WeblogController
|
54
|
+
# assert_redirected_to :controller => "weblog", :action => "index"
|
55
|
+
#
|
56
|
+
# # assert that the redirection was to the named route login_url
|
57
|
+
# assert_redirected_to login_url
|
58
|
+
#
|
59
|
+
# # assert that the redirection was to the url for @customer
|
60
|
+
# assert_redirected_to @customer
|
61
|
+
#
|
62
|
+
def assert_redirected_to(options = {}, message=nil)
|
63
|
+
validate_request!
|
64
|
+
|
65
|
+
assert_response(:redirect, message)
|
66
|
+
return true if options == @response.location
|
67
|
+
|
68
|
+
redirected_to_after_normalisation = normalize_argument_to_redirection(@response.location)
|
69
|
+
options_after_normalisation = normalize_argument_to_redirection(options)
|
70
|
+
|
71
|
+
if redirected_to_after_normalisation != options_after_normalisation
|
72
|
+
flunk "Expected response to be a redirect to <#{options_after_normalisation}> but was a redirect to <#{redirected_to_after_normalisation}>"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Asserts that the request was rendered with the appropriate template file or partials
|
77
|
+
#
|
78
|
+
# ==== Examples
|
79
|
+
#
|
80
|
+
# # assert that the "new" view template was rendered
|
81
|
+
# assert_template "new"
|
82
|
+
#
|
83
|
+
# # assert that the "_customer" partial was rendered twice
|
84
|
+
# assert_template :partial => '_customer', :count => 2
|
85
|
+
#
|
86
|
+
# # assert that no partials were rendered
|
87
|
+
# assert_template :partial => false
|
88
|
+
#
|
89
|
+
def assert_template(options = {}, message = nil)
|
90
|
+
validate_request!
|
91
|
+
|
92
|
+
case options
|
93
|
+
when NilClass, String
|
94
|
+
rendered = (@controller.template.rendered[:template] || []).map { |t| t.identifier }
|
95
|
+
msg = build_message(message,
|
96
|
+
"expecting <?> but rendering with <?>",
|
97
|
+
options, rendered.join(', '))
|
98
|
+
assert_block(msg) do
|
99
|
+
if options.nil?
|
100
|
+
@controller.template.rendered[:template].blank?
|
101
|
+
else
|
102
|
+
rendered.any? { |t| t.match(options) }
|
103
|
+
end
|
104
|
+
end
|
105
|
+
when Hash
|
106
|
+
if expected_partial = options[:partial]
|
107
|
+
partials = @controller.template.rendered[:partials]
|
108
|
+
if expected_count = options[:count]
|
109
|
+
found = partials.detect { |p, _| p.identifier.match(expected_partial) }
|
110
|
+
actual_count = found.nil? ? 0 : found.second
|
111
|
+
msg = build_message(message,
|
112
|
+
"expecting ? to be rendered ? time(s) but rendered ? time(s)",
|
113
|
+
expected_partial, expected_count, actual_count)
|
114
|
+
assert(actual_count == expected_count.to_i, msg)
|
115
|
+
else
|
116
|
+
msg = build_message(message,
|
117
|
+
"expecting partial <?> but action rendered <?>",
|
118
|
+
options[:partial], partials.keys)
|
119
|
+
assert(partials.keys.any? { |p| p.identifier.match(expected_partial) }, msg)
|
120
|
+
end
|
121
|
+
else
|
122
|
+
assert @controller.template.rendered[:partials].empty?,
|
123
|
+
"Expected no partials to be rendered"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
# Proxy to to_param if the object will respond to it.
|
130
|
+
def parameterize(value)
|
131
|
+
value.respond_to?(:to_param) ? value.to_param : value
|
132
|
+
end
|
133
|
+
|
134
|
+
def normalize_argument_to_redirection(fragment)
|
135
|
+
after_routing = @controller.url_for(fragment)
|
136
|
+
if after_routing =~ %r{^\w+://.*}
|
137
|
+
after_routing
|
138
|
+
else
|
139
|
+
# FIXME - this should probably get removed.
|
140
|
+
if after_routing.first != '/'
|
141
|
+
after_routing = '/' + after_routing
|
142
|
+
end
|
143
|
+
@request.protocol + @request.host_with_port + after_routing
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
def validate_request!
|
148
|
+
unless @request.is_a?(ActionDispatch::Request)
|
149
|
+
raise ArgumentError, "@request must be an ActionDispatch::Request"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
require 'active_support/core_ext/hash/diff'
|
2
|
+
|
3
|
+
module ActionDispatch
|
2
4
|
module Assertions
|
3
5
|
# Suite of assertions to test routes generated by Rails and the handling of requests made to them.
|
4
6
|
module RoutingAssertions
|
@@ -10,29 +12,29 @@ module ActionController
|
|
10
12
|
# and a :method containing the required HTTP verb.
|
11
13
|
#
|
12
14
|
# # assert that POSTing to /items will call the create action on ItemsController
|
13
|
-
# assert_recognizes
|
15
|
+
# assert_recognizes({:controller => 'items', :action => 'create'}, {:path => 'items', :method => :post})
|
14
16
|
#
|
15
17
|
# You can also pass in +extras+ with a hash containing URL parameters that would normally be in the query string. This can be used
|
16
18
|
# to assert that values in the query string string will end up in the params hash correctly. To test query strings you must use the
|
17
19
|
# extras argument, appending the query string on the path directly will not work. For example:
|
18
20
|
#
|
19
21
|
# # assert that a path of '/items/list/1?view=print' returns the correct options
|
20
|
-
# assert_recognizes
|
22
|
+
# assert_recognizes({:controller => 'items', :action => 'list', :id => '1', :view => 'print'}, 'items/list/1', { :view => "print" })
|
21
23
|
#
|
22
24
|
# The +message+ parameter allows you to pass in an error message that is displayed upon failure.
|
23
25
|
#
|
24
26
|
# ==== Examples
|
25
27
|
# # Check the default route (i.e., the index action)
|
26
|
-
# assert_recognizes
|
28
|
+
# assert_recognizes({:controller => 'items', :action => 'index'}, 'items')
|
27
29
|
#
|
28
30
|
# # Test a specific action
|
29
|
-
# assert_recognizes
|
31
|
+
# assert_recognizes({:controller => 'items', :action => 'list'}, 'items/list')
|
30
32
|
#
|
31
33
|
# # Test an action with a parameter
|
32
|
-
# assert_recognizes
|
34
|
+
# assert_recognizes({:controller => 'items', :action => 'destroy', :id => '1'}, 'items/destroy/1')
|
33
35
|
#
|
34
36
|
# # Test a custom route
|
35
|
-
# assert_recognizes
|
37
|
+
# assert_recognizes({:controller => 'items', :action => 'show', :id => '1'}, 'view/item1')
|
36
38
|
#
|
37
39
|
# # Check a Simply RESTful generated route
|
38
40
|
# assert_recognizes list_items_url, 'items/list'
|
@@ -44,19 +46,16 @@ module ActionController
|
|
44
46
|
request_method = nil
|
45
47
|
end
|
46
48
|
|
47
|
-
|
48
|
-
ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty?
|
49
|
-
request = recognized_request_for(path, request_method)
|
49
|
+
request = recognized_request_for(path, request_method)
|
50
50
|
|
51
|
-
|
52
|
-
|
51
|
+
expected_options = expected_options.clone
|
52
|
+
extras.each_key { |key| expected_options.delete key } unless extras.nil?
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
54
|
+
expected_options.stringify_keys!
|
55
|
+
routing_diff = expected_options.diff(request.path_parameters)
|
56
|
+
msg = build_message(message, "The recognized options <?> did not match <?>, difference: <?>",
|
57
|
+
request.path_parameters, expected_options, expected_options.diff(request.path_parameters))
|
58
|
+
assert_block(msg) { request.path_parameters == expected_options }
|
60
59
|
end
|
61
60
|
|
62
61
|
# Asserts that the provided options can be used to generate the provided path. This is the inverse of +assert_recognizes+.
|
@@ -78,21 +77,18 @@ module ActionController
|
|
78
77
|
# # Asserts that the generated route gives us our custom route
|
79
78
|
# assert_generates "changesets/12", { :controller => 'scm', :action => 'show_diff', :revision => "12" }
|
80
79
|
def assert_generates(expected_path, options, defaults={}, extras = {}, message=nil)
|
81
|
-
|
82
|
-
|
83
|
-
# Load routes.rb if it hasn't been loaded.
|
84
|
-
ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty?
|
80
|
+
expected_path = "/#{expected_path}" unless expected_path[0] == ?/
|
81
|
+
# Load routes.rb if it hasn't been loaded.
|
85
82
|
|
86
|
-
|
87
|
-
|
83
|
+
generated_path, extra_keys = ActionController::Routing::Routes.generate_extras(options, defaults)
|
84
|
+
found_extras = options.reject {|k, v| ! extra_keys.include? k}
|
88
85
|
|
89
|
-
|
90
|
-
|
86
|
+
msg = build_message(message, "found extras <?>, not <?>", found_extras, extras)
|
87
|
+
assert_block(msg) { found_extras == extras }
|
91
88
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
end
|
89
|
+
msg = build_message(message, "The generated path <?> did not match <?>", generated_path,
|
90
|
+
expected_path)
|
91
|
+
assert_block(msg) { expected_path == generated_path }
|
96
92
|
end
|
97
93
|
|
98
94
|
# Asserts that path and options match both ways; in other words, it verifies that <tt>path</tt> generates
|
@@ -107,7 +103,7 @@ module ActionController
|
|
107
103
|
# assert_routing '/home', :controller => 'home', :action => 'index'
|
108
104
|
#
|
109
105
|
# # Test a route generated with a specific controller, action, and parameter (id)
|
110
|
-
# assert_routing '/entries/show/23', :controller => 'entries', :action => 'show', id => 23
|
106
|
+
# assert_routing '/entries/show/23', :controller => 'entries', :action => 'show', :id => 23
|
111
107
|
#
|
112
108
|
# # Assert a basic route (controller + default action), with an error message if it fails
|
113
109
|
# assert_routing '/store', { :controller => 'store', :action => 'index' }, {}, {}, 'Route for store index not generated properly'
|
@@ -116,7 +112,7 @@ module ActionController
|
|
116
112
|
# assert_routing 'controller/action/9', {:id => "9", :item => "square"}, {:controller => "controller", :action => "action"}, {}, {:item => "square"}
|
117
113
|
#
|
118
114
|
# # Tests a route with a HTTP method
|
119
|
-
# assert_routing
|
115
|
+
# assert_routing({ :method => 'put', :path => '/product/321' }, { :controller => "product", :action => "update", :id => "321" })
|
120
116
|
def assert_routing(path, options, defaults={}, extras={}, message=nil)
|
121
117
|
assert_recognizes(options, path, extras, message)
|
122
118
|
|
@@ -128,6 +124,46 @@ module ActionController
|
|
128
124
|
assert_generates(path.is_a?(Hash) ? path[:path] : path, options, defaults, extras, message)
|
129
125
|
end
|
130
126
|
|
127
|
+
# A helper to make it easier to test different route configurations.
|
128
|
+
# This method temporarily replaces ActionController::Routing::Routes
|
129
|
+
# with a new RouteSet instance.
|
130
|
+
#
|
131
|
+
# The new instance is yielded to the passed block. Typically the block
|
132
|
+
# will create some routes using <tt>map.draw { map.connect ... }</tt>:
|
133
|
+
#
|
134
|
+
# with_routing do |set|
|
135
|
+
# set.draw do |map|
|
136
|
+
# map.connect ':controller/:action/:id'
|
137
|
+
# assert_equal(
|
138
|
+
# ['/content/10/show', {}],
|
139
|
+
# map.generate(:controller => 'content', :id => 10, :action => 'show')
|
140
|
+
# end
|
141
|
+
# end
|
142
|
+
# end
|
143
|
+
#
|
144
|
+
def with_routing
|
145
|
+
real_routes = ActionController::Routing::Routes
|
146
|
+
ActionController::Routing.module_eval { remove_const :Routes }
|
147
|
+
|
148
|
+
temporary_routes = ActionController::Routing::RouteSet.new
|
149
|
+
ActionController::Routing.module_eval { const_set :Routes, temporary_routes }
|
150
|
+
|
151
|
+
yield temporary_routes
|
152
|
+
ensure
|
153
|
+
if ActionController::Routing.const_defined? :Routes
|
154
|
+
ActionController::Routing.module_eval { remove_const :Routes }
|
155
|
+
end
|
156
|
+
ActionController::Routing.const_set(:Routes, real_routes) if real_routes
|
157
|
+
end
|
158
|
+
|
159
|
+
def method_missing(selector, *args, &block)
|
160
|
+
if @controller && ActionController::Routing::Routes.named_routes.helpers.include?(selector)
|
161
|
+
@controller.send(selector, *args, &block)
|
162
|
+
else
|
163
|
+
super
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
131
167
|
private
|
132
168
|
# Recognizes the route for a given path.
|
133
169
|
def recognized_request_for(path, request_method = nil)
|
@@ -136,9 +172,11 @@ module ActionController
|
|
136
172
|
# Assume given controller
|
137
173
|
request = ActionController::TestRequest.new
|
138
174
|
request.env["REQUEST_METHOD"] = request_method.to_s.upcase if request_method
|
139
|
-
request.path
|
175
|
+
request.path = path
|
176
|
+
|
177
|
+
params = ActionController::Routing::Routes.recognize_path(path, { :method => request.method })
|
178
|
+
request.path_parameters = params.with_indifferent_access
|
140
179
|
|
141
|
-
ActionController::Routing::Routes.recognize(request)
|
142
180
|
request
|
143
181
|
end
|
144
182
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
require 'action_controller/vendor/html-scanner'
|
2
|
+
|
1
3
|
#--
|
2
4
|
# Copyright (c) 2006 Assaf Arkin (http://labnotes.org)
|
3
5
|
# Under MIT and/or CC By license.
|
4
6
|
#++
|
5
7
|
|
6
|
-
module
|
8
|
+
module ActionDispatch
|
7
9
|
module Assertions
|
8
10
|
unless const_defined?(:NO_STRIP)
|
9
11
|
NO_STRIP = %w{pre script style textarea}
|
@@ -24,12 +26,6 @@ module ActionController
|
|
24
26
|
#
|
25
27
|
# Also see HTML::Selector to learn how to use selectors.
|
26
28
|
module SelectorAssertions
|
27
|
-
|
28
|
-
def initialize(*args)
|
29
|
-
super
|
30
|
-
@selected = nil
|
31
|
-
end
|
32
|
-
|
33
29
|
# :call-seq:
|
34
30
|
# css_select(selector) => array
|
35
31
|
# css_select(element, selector) => array
|
@@ -351,14 +347,17 @@ module ActionController
|
|
351
347
|
#
|
352
348
|
# Use the first argument to narrow down assertions to only statements
|
353
349
|
# of that type. Possible values are <tt>:replace</tt>, <tt>:replace_html</tt>,
|
354
|
-
# <tt>:show</tt>, <tt>:hide</tt>, <tt>:toggle</tt>, <tt>:remove</
|
355
|
-
# <tt>:insert_html</tt>.
|
350
|
+
# <tt>:show</tt>, <tt>:hide</tt>, <tt>:toggle</tt>, <tt>:remove</tta>,
|
351
|
+
# <tt>:insert_html</tt> and <tt>:redirect</tt>.
|
356
352
|
#
|
357
353
|
# Use the argument <tt>:insert</tt> followed by an insertion position to narrow
|
358
354
|
# down the assertion to only statements that insert elements in that
|
359
355
|
# position. Possible values are <tt>:top</tt>, <tt>:bottom</tt>, <tt>:before</tt>
|
360
356
|
# and <tt>:after</tt>.
|
361
357
|
#
|
358
|
+
# Use the argument <tt>:redirect</tt> follwed by a path to check that an statement
|
359
|
+
# which redirects to the specified path is generated.
|
360
|
+
#
|
362
361
|
# Using the <tt>:remove</tt> statement, you will be able to pass a block, but it will
|
363
362
|
# be ignored as there is no HTML passed for this statement.
|
364
363
|
#
|
@@ -405,6 +404,9 @@ module ActionController
|
|
405
404
|
#
|
406
405
|
# # The same, but shorter.
|
407
406
|
# assert_select "ol>li", 4
|
407
|
+
#
|
408
|
+
# # Checking for a redirect.
|
409
|
+
# assert_select_rjs :redirect, root_path
|
408
410
|
def assert_select_rjs(*args, &block)
|
409
411
|
rjs_type = args.first.is_a?(Symbol) ? args.shift : nil
|
410
412
|
id = args.first.is_a?(String) ? args.shift : nil
|
@@ -522,7 +524,7 @@ module ActionController
|
|
522
524
|
|
523
525
|
fix_content = lambda do |node|
|
524
526
|
# Gets around a bug in the Rails 1.1 HTML parser.
|
525
|
-
node.content.gsub(/<!\[CDATA\[(.*)(\]\]>)?/m) {
|
527
|
+
node.content.gsub(/<!\[CDATA\[(.*)(\]\]>)?/m) { Rack::Utils.escapeHTML($1) }
|
526
528
|
end
|
527
529
|
|
528
530
|
selected = elements.map do |element|
|
@@ -582,7 +584,8 @@ module ActionController
|
|
582
584
|
:chained_replace => "\\$\\(#{RJS_ANY_ID}\\)\\.replace\\(#{RJS_PATTERN_HTML}\\)",
|
583
585
|
:chained_replace_html => "\\$\\(#{RJS_ANY_ID}\\)\\.update\\(#{RJS_PATTERN_HTML}\\)",
|
584
586
|
:replace_html => "Element\\.update\\(#{RJS_ANY_ID}, #{RJS_PATTERN_HTML}\\)",
|
585
|
-
:replace => "Element\\.replace\\(#{RJS_ANY_ID}, #{RJS_PATTERN_HTML}\\)"
|
587
|
+
:replace => "Element\\.replace\\(#{RJS_ANY_ID}, #{RJS_PATTERN_HTML}\\)",
|
588
|
+
:redirect => "window.location.href = #{RJS_ANY_ID}"
|
586
589
|
}
|
587
590
|
[:remove, :show, :hide, :toggle].each do |action|
|
588
591
|
RJS_STATEMENTS[action] = "Element\\.#{action}\\(#{RJS_ANY_ID}\\)"
|