actionpack_csi 2.3.5.p6
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/CHANGELOG +5184 -0
- data/MIT-LICENSE +21 -0
- data/README +409 -0
- data/RUNNING_UNIT_TESTS +24 -0
- data/Rakefile +160 -0
- data/install.rb +30 -0
- data/lib/action_controller/assertions/dom_assertions.rb +55 -0
- data/lib/action_controller/assertions/model_assertions.rb +21 -0
- data/lib/action_controller/assertions/response_assertions.rb +160 -0
- data/lib/action_controller/assertions/routing_assertions.rb +146 -0
- data/lib/action_controller/assertions/selector_assertions.rb +638 -0
- data/lib/action_controller/assertions/tag_assertions.rb +127 -0
- data/lib/action_controller/base.rb +1423 -0
- data/lib/action_controller/benchmarking.rb +107 -0
- data/lib/action_controller/caching/actions.rb +177 -0
- data/lib/action_controller/caching/fragments.rb +120 -0
- data/lib/action_controller/caching/pages.rb +152 -0
- data/lib/action_controller/caching/sweeper.rb +45 -0
- data/lib/action_controller/caching/sweeping.rb +55 -0
- data/lib/action_controller/caching.rb +71 -0
- data/lib/action_controller/cgi_ext/cookie.rb +112 -0
- data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
- data/lib/action_controller/cgi_ext/stdinput.rb +24 -0
- data/lib/action_controller/cgi_ext.rb +15 -0
- data/lib/action_controller/cgi_process.rb +77 -0
- data/lib/action_controller/cookies.rb +95 -0
- data/lib/action_controller/dispatcher.rb +133 -0
- data/lib/action_controller/failsafe.rb +86 -0
- data/lib/action_controller/filters.rb +680 -0
- data/lib/action_controller/flash.rb +171 -0
- data/lib/action_controller/headers.rb +33 -0
- data/lib/action_controller/helpers.rb +225 -0
- data/lib/action_controller/http_authentication.rb +309 -0
- data/lib/action_controller/integration.rb +692 -0
- data/lib/action_controller/layout.rb +286 -0
- data/lib/action_controller/middleware_stack.rb +119 -0
- data/lib/action_controller/middlewares.rb +14 -0
- data/lib/action_controller/mime_responds.rb +193 -0
- data/lib/action_controller/mime_type.rb +212 -0
- data/lib/action_controller/mime_types.rb +21 -0
- data/lib/action_controller/params_parser.rb +77 -0
- data/lib/action_controller/performance_test.rb +15 -0
- data/lib/action_controller/polymorphic_routes.rb +189 -0
- data/lib/action_controller/rack_lint_patch.rb +36 -0
- data/lib/action_controller/record_identifier.rb +104 -0
- data/lib/action_controller/reloader.rb +54 -0
- data/lib/action_controller/request.rb +493 -0
- data/lib/action_controller/request_forgery_protection.rb +113 -0
- data/lib/action_controller/rescue.rb +183 -0
- data/lib/action_controller/resources.rb +682 -0
- data/lib/action_controller/response.rb +239 -0
- data/lib/action_controller/routing/builder.rb +197 -0
- data/lib/action_controller/routing/optimisations.rb +130 -0
- data/lib/action_controller/routing/recognition_optimisation.rb +167 -0
- data/lib/action_controller/routing/route.rb +265 -0
- data/lib/action_controller/routing/route_set.rb +502 -0
- data/lib/action_controller/routing/routing_ext.rb +49 -0
- data/lib/action_controller/routing/segments.rb +343 -0
- data/lib/action_controller/routing.rb +388 -0
- data/lib/action_controller/session/abstract_store.rb +181 -0
- data/lib/action_controller/session/cookie_store.rb +221 -0
- data/lib/action_controller/session/mem_cache_store.rb +51 -0
- data/lib/action_controller/session_management.rb +54 -0
- data/lib/action_controller/status_codes.rb +88 -0
- data/lib/action_controller/streaming.rb +181 -0
- data/lib/action_controller/string_coercion.rb +29 -0
- data/lib/action_controller/templates/rescues/_request_and_response.erb +24 -0
- data/lib/action_controller/templates/rescues/_trace.erb +26 -0
- data/lib/action_controller/templates/rescues/diagnostics.erb +11 -0
- data/lib/action_controller/templates/rescues/layout.erb +29 -0
- data/lib/action_controller/templates/rescues/missing_template.erb +2 -0
- data/lib/action_controller/templates/rescues/routing_error.erb +10 -0
- data/lib/action_controller/templates/rescues/template_error.erb +21 -0
- data/lib/action_controller/templates/rescues/unknown_action.erb +2 -0
- data/lib/action_controller/test_case.rb +209 -0
- data/lib/action_controller/test_process.rb +580 -0
- data/lib/action_controller/translation.rb +13 -0
- data/lib/action_controller/uploaded_file.rb +44 -0
- data/lib/action_controller/url_rewriter.rb +216 -0
- data/lib/action_controller/vendor/html-scanner/html/document.rb +68 -0
- data/lib/action_controller/vendor/html-scanner/html/node.rb +537 -0
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +173 -0
- data/lib/action_controller/vendor/html-scanner/html/selector.rb +828 -0
- data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +105 -0
- data/lib/action_controller/vendor/html-scanner/html/version.rb +11 -0
- data/lib/action_controller/vendor/html-scanner.rb +16 -0
- data/lib/action_controller/verification.rb +130 -0
- data/lib/action_controller.rb +113 -0
- data/lib/action_pack/version.rb +9 -0
- data/lib/action_pack.rb +24 -0
- data/lib/action_view/base.rb +362 -0
- data/lib/action_view/erb/util.rb +44 -0
- data/lib/action_view/helpers/active_record_helper.rb +305 -0
- data/lib/action_view/helpers/asset_tag_helper.rb +694 -0
- data/lib/action_view/helpers/atom_feed_helper.rb +198 -0
- data/lib/action_view/helpers/benchmark_helper.rb +54 -0
- data/lib/action_view/helpers/cache_helper.rb +39 -0
- data/lib/action_view/helpers/capture_helper.rb +136 -0
- data/lib/action_view/helpers/date_helper.rb +988 -0
- data/lib/action_view/helpers/debug_helper.rb +38 -0
- data/lib/action_view/helpers/form_helper.rb +1074 -0
- data/lib/action_view/helpers/form_options_helper.rb +600 -0
- data/lib/action_view/helpers/form_tag_helper.rb +487 -0
- data/lib/action_view/helpers/javascript_helper.rb +208 -0
- data/lib/action_view/helpers/number_helper.rb +308 -0
- data/lib/action_view/helpers/prototype_helper.rb +1305 -0
- data/lib/action_view/helpers/raw_output_helper.rb +9 -0
- data/lib/action_view/helpers/record_identification_helper.rb +20 -0
- data/lib/action_view/helpers/record_tag_helper.rb +58 -0
- data/lib/action_view/helpers/sanitize_helper.rb +259 -0
- data/lib/action_view/helpers/scriptaculous_helper.rb +226 -0
- data/lib/action_view/helpers/tag_helper.rb +150 -0
- data/lib/action_view/helpers/text_helper.rb +587 -0
- data/lib/action_view/helpers/translation_helper.rb +39 -0
- data/lib/action_view/helpers/url_helper.rb +639 -0
- data/lib/action_view/helpers.rb +59 -0
- data/lib/action_view/inline_template.rb +19 -0
- data/lib/action_view/locale/en.yml +117 -0
- data/lib/action_view/partials.rb +240 -0
- data/lib/action_view/paths.rb +69 -0
- data/lib/action_view/reloadable_template.rb +117 -0
- data/lib/action_view/renderable.rb +95 -0
- data/lib/action_view/renderable_partial.rb +47 -0
- data/lib/action_view/safe_buffer.rb +28 -0
- data/lib/action_view/template.rb +252 -0
- data/lib/action_view/template_error.rb +99 -0
- data/lib/action_view/template_handler.rb +34 -0
- data/lib/action_view/template_handlers/builder.rb +17 -0
- data/lib/action_view/template_handlers/erb.rb +22 -0
- data/lib/action_view/template_handlers/rjs.rb +13 -0
- data/lib/action_view/template_handlers.rb +48 -0
- data/lib/action_view/test_case.rb +162 -0
- data/lib/action_view.rb +58 -0
- data/lib/actionpack.rb +2 -0
- data/test/abstract_unit.rb +61 -0
- data/test/active_record_unit.rb +104 -0
- data/test/activerecord/active_record_store_test.rb +174 -0
- data/test/activerecord/render_partial_with_record_identification_test.rb +188 -0
- data/test/adv_attr_test.rb +20 -0
- data/test/controller/action_pack_assertions_test.rb +543 -0
- data/test/controller/addresses_render_test.rb +37 -0
- data/test/controller/assert_select_test.rb +734 -0
- data/test/controller/base_test.rb +217 -0
- data/test/controller/benchmark_test.rb +32 -0
- data/test/controller/caching_test.rb +729 -0
- data/test/controller/capture_test.rb +66 -0
- data/test/controller/content_type_test.rb +168 -0
- 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 +134 -0
- data/test/controller/deprecation/deprecated_base_methods_test.rb +32 -0
- data/test/controller/dispatcher_test.rb +144 -0
- data/test/controller/dom_assertions_test.rb +53 -0
- data/test/controller/failsafe_test.rb +60 -0
- data/test/controller/fake_controllers.rb +33 -0
- data/test/controller/fake_models.rb +19 -0
- data/test/controller/filter_params_test.rb +52 -0
- data/test/controller/filters_test.rb +885 -0
- data/test/controller/flash_test.rb +147 -0
- data/test/controller/header_test.rb +14 -0
- data/test/controller/helper_test.rb +224 -0
- data/test/controller/html-scanner/cdata_node_test.rb +15 -0
- data/test/controller/html-scanner/document_test.rb +148 -0
- data/test/controller/html-scanner/node_test.rb +89 -0
- data/test/controller/html-scanner/sanitizer_test.rb +274 -0
- data/test/controller/html-scanner/tag_node_test.rb +238 -0
- data/test/controller/html-scanner/text_node_test.rb +50 -0
- data/test/controller/html-scanner/tokenizer_test.rb +131 -0
- data/test/controller/http_basic_authentication_test.rb +113 -0
- data/test/controller/http_digest_authentication_test.rb +254 -0
- data/test/controller/integration_test.rb +483 -0
- data/test/controller/layout_test.rb +215 -0
- data/test/controller/logging_test.rb +46 -0
- data/test/controller/middleware_stack_test.rb +90 -0
- data/test/controller/mime_responds_test.rb +536 -0
- data/test/controller/mime_type_test.rb +93 -0
- data/test/controller/polymorphic_routes_test.rb +297 -0
- data/test/controller/rack_test.rb +311 -0
- data/test/controller/record_identifier_test.rb +139 -0
- data/test/controller/redirect_test.rb +285 -0
- data/test/controller/reloader_test.rb +124 -0
- data/test/controller/render_test.rb +1762 -0
- data/test/controller/request/json_params_parsing_test.rb +65 -0
- data/test/controller/request/multipart_params_parsing_test.rb +162 -0
- data/test/controller/request/query_string_parsing_test.rb +120 -0
- data/test/controller/request/test_request_test.rb +35 -0
- data/test/controller/request/url_encoded_params_parsing_test.rb +146 -0
- data/test/controller/request/xml_params_parsing_test.rb +103 -0
- data/test/controller/request_forgery_protection_test.rb +265 -0
- data/test/controller/request_test.rb +395 -0
- data/test/controller/rescue_test.rb +536 -0
- data/test/controller/resources_test.rb +1393 -0
- data/test/controller/routing_test.rb +2591 -0
- data/test/controller/selector_test.rb +628 -0
- data/test/controller/send_file_test.rb +171 -0
- data/test/controller/session/cookie_store_test.rb +216 -0
- data/test/controller/session/mem_cache_store_test.rb +127 -0
- data/test/controller/session/test_session_test.rb +58 -0
- data/test/controller/test_test.rb +700 -0
- data/test/controller/translation_test.rb +26 -0
- data/test/controller/url_rewriter_test.rb +385 -0
- data/test/controller/verification_test.rb +270 -0
- data/test/controller/view_paths_test.rb +141 -0
- data/test/controller/webservice_test.rb +273 -0
- data/test/fixtures/_top_level_partial.html.erb +1 -0
- data/test/fixtures/_top_level_partial_only.erb +1 -0
- data/test/fixtures/addresses/list.erb +1 -0
- data/test/fixtures/alternate_helpers/foo_helper.rb +3 -0
- data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
- data/test/fixtures/companies.yml +24 -0
- data/test/fixtures/company.rb +10 -0
- data/test/fixtures/content_type/render_default_content_types_for_respond_to.rhtml +1 -0
- data/test/fixtures/content_type/render_default_for_rhtml.rhtml +1 -0
- data/test/fixtures/content_type/render_default_for_rjs.rjs +1 -0
- data/test/fixtures/content_type/render_default_for_rxml.rxml +1 -0
- data/test/fixtures/customers/_customer.html.erb +1 -0
- data/test/fixtures/db_definitions/sqlite.sql +49 -0
- data/test/fixtures/developer.rb +9 -0
- data/test/fixtures/developers/_developer.erb +1 -0
- data/test/fixtures/developers.yml +21 -0
- data/test/fixtures/developers_projects.yml +13 -0
- data/test/fixtures/failsafe/500.html +1 -0
- data/test/fixtures/fun/games/_game.erb +1 -0
- data/test/fixtures/fun/games/hello_world.erb +1 -0
- data/test/fixtures/fun/serious/games/_game.erb +1 -0
- data/test/fixtures/functional_caching/_partial.erb +3 -0
- data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
- data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
- data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
- data/test/fixtures/functional_caching/fragment_cached.html.erb +2 -0
- data/test/fixtures/functional_caching/html_fragment_cached_with_partial.html.erb +1 -0
- data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
- data/test/fixtures/functional_caching/js_fragment_cached_with_partial.js.rjs +1 -0
- data/test/fixtures/good_customers/_good_customer.html.erb +1 -0
- data/test/fixtures/helpers/abc_helper.rb +5 -0
- data/test/fixtures/helpers/fun/games_helper.rb +3 -0
- data/test/fixtures/helpers/fun/pdf_helper.rb +3 -0
- data/test/fixtures/layout_tests/abs_path_layout.rhtml +1 -0
- data/test/fixtures/layout_tests/alt/hello.rhtml +1 -0
- data/test/fixtures/layout_tests/alt/layouts/alt.rhtml +0 -0
- data/test/fixtures/layout_tests/layouts/controller_name_space/nested.rhtml +1 -0
- data/test/fixtures/layout_tests/layouts/item.rhtml +1 -0
- data/test/fixtures/layout_tests/layouts/layout_test.rhtml +1 -0
- data/test/fixtures/layout_tests/layouts/multiple_extensions.html.erb +1 -0
- data/test/fixtures/layout_tests/layouts/third_party_template_library.mab +1 -0
- data/test/fixtures/layout_tests/views/hello.rhtml +1 -0
- data/test/fixtures/layouts/_column.html.erb +2 -0
- data/test/fixtures/layouts/block_with_layout.erb +3 -0
- data/test/fixtures/layouts/builder.builder +3 -0
- data/test/fixtures/layouts/default_html.html.erb +1 -0
- data/test/fixtures/layouts/partial_with_layout.erb +3 -0
- data/test/fixtures/layouts/standard.erb +1 -0
- data/test/fixtures/layouts/talk_from_action.erb +2 -0
- data/test/fixtures/layouts/xhr.html.erb +2 -0
- data/test/fixtures/layouts/yield.erb +2 -0
- data/test/fixtures/mascot.rb +3 -0
- data/test/fixtures/mascots/_mascot.html.erb +1 -0
- data/test/fixtures/mascots.yml +4 -0
- data/test/fixtures/multipart/binary_file +0 -0
- data/test/fixtures/multipart/boundary_problem_file +10 -0
- data/test/fixtures/multipart/bracketed_param +5 -0
- data/test/fixtures/multipart/empty +10 -0
- data/test/fixtures/multipart/hello.txt +1 -0
- data/test/fixtures/multipart/large_text_file +10 -0
- data/test/fixtures/multipart/mixed_files +0 -0
- data/test/fixtures/multipart/mona_lisa.jpg +0 -0
- data/test/fixtures/multipart/none +9 -0
- data/test/fixtures/multipart/single_parameter +5 -0
- data/test/fixtures/multipart/text_file +10 -0
- data/test/fixtures/override/test/hello_world.erb +1 -0
- data/test/fixtures/override2/layouts/test/sub.erb +1 -0
- data/test/fixtures/post_test/layouts/post.html.erb +1 -0
- data/test/fixtures/post_test/layouts/super_post.iphone.erb +1 -0
- data/test/fixtures/post_test/post/index.html.erb +1 -0
- data/test/fixtures/post_test/post/index.iphone.erb +1 -0
- data/test/fixtures/post_test/super_post/index.html.erb +1 -0
- data/test/fixtures/post_test/super_post/index.iphone.erb +1 -0
- data/test/fixtures/project.rb +3 -0
- data/test/fixtures/projects/_project.erb +1 -0
- data/test/fixtures/projects.yml +7 -0
- data/test/fixtures/public/404.html +1 -0
- data/test/fixtures/public/500.da.html +1 -0
- data/test/fixtures/public/500.html +1 -0
- data/test/fixtures/public/absolute/test.css +23 -0
- data/test/fixtures/public/absolute/test.js +63 -0
- data/test/fixtures/public/images/rails.png +0 -0
- data/test/fixtures/public/javascripts/application.js +1 -0
- data/test/fixtures/public/javascripts/bank.js +1 -0
- data/test/fixtures/public/javascripts/controls.js +1 -0
- data/test/fixtures/public/javascripts/dragdrop.js +1 -0
- data/test/fixtures/public/javascripts/effects.js +1 -0
- data/test/fixtures/public/javascripts/prototype.js +1 -0
- data/test/fixtures/public/javascripts/robber.js +1 -0
- data/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
- data/test/fixtures/public/javascripts/version.1.0.js +1 -0
- data/test/fixtures/public/stylesheets/bank.css +1 -0
- data/test/fixtures/public/stylesheets/robber.css +1 -0
- data/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
- data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
- data/test/fixtures/quiz/questions/_question.html.erb +1 -0
- data/test/fixtures/replies/_reply.erb +1 -0
- data/test/fixtures/replies.yml +15 -0
- data/test/fixtures/reply.rb +7 -0
- data/test/fixtures/respond_to/all_types_with_layout.html.erb +1 -0
- data/test/fixtures/respond_to/all_types_with_layout.js.rjs +1 -0
- data/test/fixtures/respond_to/custom_constant_handling_without_block.mobile.erb +1 -0
- data/test/fixtures/respond_to/iphone_with_html_response_type.html.erb +1 -0
- data/test/fixtures/respond_to/iphone_with_html_response_type.iphone.erb +1 -0
- data/test/fixtures/respond_to/layouts/missing.html.erb +1 -0
- data/test/fixtures/respond_to/layouts/standard.html.erb +1 -0
- data/test/fixtures/respond_to/layouts/standard.iphone.erb +1 -0
- data/test/fixtures/respond_to/using_defaults.html.erb +1 -0
- data/test/fixtures/respond_to/using_defaults.js.rjs +1 -0
- data/test/fixtures/respond_to/using_defaults.xml.builder +1 -0
- data/test/fixtures/respond_to/using_defaults_with_type_list.html.erb +1 -0
- data/test/fixtures/respond_to/using_defaults_with_type_list.js.rjs +1 -0
- data/test/fixtures/respond_to/using_defaults_with_type_list.xml.builder +1 -0
- data/test/fixtures/scope/test/modgreet.erb +1 -0
- data/test/fixtures/shared.html.erb +1 -0
- data/test/fixtures/symlink_parent/symlinked_layout.erb +5 -0
- data/test/fixtures/test/_counter.html.erb +1 -0
- data/test/fixtures/test/_customer.erb +1 -0
- data/test/fixtures/test/_customer_counter.erb +1 -0
- data/test/fixtures/test/_customer_greeting.erb +1 -0
- data/test/fixtures/test/_customer_with_var.erb +1 -0
- data/test/fixtures/test/_form.erb +1 -0
- data/test/fixtures/test/_from_helper.erb +1 -0
- data/test/fixtures/test/_hash_greeting.erb +1 -0
- data/test/fixtures/test/_hash_object.erb +2 -0
- data/test/fixtures/test/_hello.builder +1 -0
- data/test/fixtures/test/_labelling_form.erb +1 -0
- data/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
- data/test/fixtures/test/_layout_for_partial.html.erb +3 -0
- data/test/fixtures/test/_local_inspector.html.erb +1 -0
- data/test/fixtures/test/_one.html.erb +1 -0
- data/test/fixtures/test/_partial.erb +1 -0
- data/test/fixtures/test/_partial.html.erb +1 -0
- data/test/fixtures/test/_partial.js.erb +1 -0
- data/test/fixtures/test/_partial_for_use_in_layout.html.erb +1 -0
- data/test/fixtures/test/_partial_only.erb +1 -0
- data/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
- data/test/fixtures/test/_person.erb +2 -0
- data/test/fixtures/test/_raise.html.erb +1 -0
- data/test/fixtures/test/_two.html.erb +1 -0
- data/test/fixtures/test/action_talk_to_layout.erb +2 -0
- data/test/fixtures/test/calling_partial_with_layout.html.erb +1 -0
- data/test/fixtures/test/capturing.erb +4 -0
- data/test/fixtures/test/content_for.erb +2 -0
- data/test/fixtures/test/content_for_concatenated.erb +3 -0
- data/test/fixtures/test/content_for_with_parameter.erb +2 -0
- data/test/fixtures/test/delete_with_js.rjs +2 -0
- data/test/fixtures/test/dont_pick_me +1 -0
- data/test/fixtures/test/dot.directory/render_file_with_ivar.erb +1 -0
- data/test/fixtures/test/enum_rjs_test.rjs +6 -0
- data/test/fixtures/test/formatted_html_erb.html.erb +1 -0
- data/test/fixtures/test/formatted_xml_erb.builder +1 -0
- data/test/fixtures/test/formatted_xml_erb.html.erb +1 -0
- data/test/fixtures/test/formatted_xml_erb.xml.erb +1 -0
- data/test/fixtures/test/greeting.erb +1 -0
- data/test/fixtures/test/greeting.js.rjs +1 -0
- data/test/fixtures/test/hello.builder +4 -0
- data/test/fixtures/test/hello_world.da.html.erb +1 -0
- data/test/fixtures/test/hello_world.erb +1 -0
- data/test/fixtures/test/hello_world.erb~ +1 -0
- data/test/fixtures/test/hello_world.pt-BR.html.erb +1 -0
- data/test/fixtures/test/hello_world_container.builder +3 -0
- data/test/fixtures/test/hello_world_from_rxml.builder +4 -0
- data/test/fixtures/test/hello_world_with_layout_false.erb +1 -0
- data/test/fixtures/test/hello_xml_world.builder +11 -0
- data/test/fixtures/test/hyphen-ated.erb +1 -0
- data/test/fixtures/test/implicit_content_type.atom.builder +2 -0
- data/test/fixtures/test/list.erb +1 -0
- data/test/fixtures/test/malformed/malformed.en.html.erb~ +1 -0
- data/test/fixtures/test/malformed/malformed.erb~ +1 -0
- data/test/fixtures/test/malformed/malformed.html.erb~ +1 -0
- data/test/fixtures/test/nested_layout.erb +3 -0
- data/test/fixtures/test/non_erb_block_content_for.builder +4 -0
- data/test/fixtures/test/potential_conflicts.erb +4 -0
- data/test/fixtures/test/render_explicit_html_template.js.rjs +1 -0
- data/test/fixtures/test/render_file_from_template.html.erb +1 -0
- data/test/fixtures/test/render_file_with_ivar.erb +1 -0
- data/test/fixtures/test/render_file_with_locals.erb +1 -0
- data/test/fixtures/test/render_implicit_html_template.js.rjs +1 -0
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.da.html.erb +1 -0
- data/test/fixtures/test/render_implicit_html_template_from_xhr_request.html.erb +1 -0
- data/test/fixtures/test/render_implicit_js_template_without_layout.js.erb +1 -0
- data/test/fixtures/test/render_to_string_test.erb +1 -0
- data/test/fixtures/test/sub_template_raise.html.erb +1 -0
- data/test/fixtures/test/template.erb +1 -0
- data/test/fixtures/test/update_element_with_capture.erb +9 -0
- data/test/fixtures/test/using_layout_around_block.html.erb +1 -0
- data/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
- data/test/fixtures/test/utf8.html.erb +2 -0
- data/test/fixtures/topic.rb +3 -0
- data/test/fixtures/topics/_topic.html.erb +1 -0
- data/test/fixtures/topics.yml +22 -0
- data/test/template/active_record_helper_i18n_test.rb +44 -0
- data/test/template/active_record_helper_test.rb +302 -0
- data/test/template/asset_tag_helper_test.rb +771 -0
- data/test/template/atom_feed_helper_test.rb +315 -0
- data/test/template/benchmark_helper_test.rb +86 -0
- data/test/template/compiled_templates_test.rb +204 -0
- data/test/template/date_helper_i18n_test.rb +121 -0
- data/test/template/date_helper_test.rb +2485 -0
- data/test/template/erb_util_test.rb +24 -0
- data/test/template/form_helper_test.rb +1393 -0
- data/test/template/form_options_helper_i18n_test.rb +27 -0
- data/test/template/form_options_helper_test.rb +807 -0
- data/test/template/form_tag_helper_test.rb +344 -0
- data/test/template/javascript_helper_test.rb +106 -0
- data/test/template/number_helper_i18n_test.rb +69 -0
- data/test/template/number_helper_test.rb +132 -0
- data/test/template/prototype_helper_test.rb +639 -0
- data/test/template/raw_output_helper_test.rb +21 -0
- data/test/template/record_tag_helper_test.rb +58 -0
- data/test/template/render_test.rb +290 -0
- data/test/template/sanitize_helper_test.rb +57 -0
- data/test/template/scriptaculous_helper_test.rb +90 -0
- data/test/template/tag_helper_test.rb +98 -0
- data/test/template/template_test.rb +32 -0
- data/test/template/test_test.rb +54 -0
- data/test/template/text_helper_test.rb +543 -0
- data/test/template/translation_helper_test.rb +32 -0
- data/test/template/url_helper_test.rb +622 -0
- data/test/testing_sandbox.rb +15 -0
- data/test/view/safe_buffer_test.rb +36 -0
- data/test/view/test_case_test.rb +176 -0
- metadata +531 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class SessionTest < Test::Unit::TestCase
|
|
4
|
+
StubApp = lambda { |env|
|
|
5
|
+
[200, {"Content-Type" => "text/html", "Content-Length" => "13"}, ["Hello, World!"]]
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
@session = ActionController::Integration::Session.new(StubApp)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_https_bang_works_and_sets_truth_by_default
|
|
13
|
+
assert !@session.https?
|
|
14
|
+
@session.https!
|
|
15
|
+
assert @session.https?
|
|
16
|
+
@session.https! false
|
|
17
|
+
assert !@session.https?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_host!
|
|
21
|
+
assert_not_equal "glu.ttono.us", @session.host
|
|
22
|
+
@session.host! "rubyonrails.com"
|
|
23
|
+
assert_equal "rubyonrails.com", @session.host
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_follow_redirect_raises_when_no_redirect
|
|
27
|
+
@session.stubs(:redirect?).returns(false)
|
|
28
|
+
assert_raise(RuntimeError) { @session.follow_redirect! }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_request_via_redirect_uses_given_method
|
|
32
|
+
path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue"}
|
|
33
|
+
@session.expects(:put).with(path, args, headers)
|
|
34
|
+
@session.stubs(:redirect?).returns(false)
|
|
35
|
+
@session.request_via_redirect(:put, path, args, headers)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_request_via_redirect_follows_redirects
|
|
39
|
+
path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue"}
|
|
40
|
+
@session.stubs(:redirect?).returns(true, true, false)
|
|
41
|
+
@session.expects(:follow_redirect!).times(2)
|
|
42
|
+
@session.request_via_redirect(:get, path, args, headers)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_request_via_redirect_returns_status
|
|
46
|
+
path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue"}
|
|
47
|
+
@session.stubs(:redirect?).returns(false)
|
|
48
|
+
@session.stubs(:status).returns(200)
|
|
49
|
+
assert_equal 200, @session.request_via_redirect(:get, path, args, headers)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_get_via_redirect
|
|
53
|
+
path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue" }
|
|
54
|
+
@session.expects(:request_via_redirect).with(:get, path, args, headers)
|
|
55
|
+
@session.get_via_redirect(path, args, headers)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_post_via_redirect
|
|
59
|
+
path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue" }
|
|
60
|
+
@session.expects(:request_via_redirect).with(:post, path, args, headers)
|
|
61
|
+
@session.post_via_redirect(path, args, headers)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_put_via_redirect
|
|
65
|
+
path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue" }
|
|
66
|
+
@session.expects(:request_via_redirect).with(:put, path, args, headers)
|
|
67
|
+
@session.put_via_redirect(path, args, headers)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_delete_via_redirect
|
|
71
|
+
path = "/somepath"; args = {:id => '1'}; headers = {"X-Test-Header" => "testvalue" }
|
|
72
|
+
@session.expects(:request_via_redirect).with(:delete, path, args, headers)
|
|
73
|
+
@session.delete_via_redirect(path, args, headers)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def test_url_for_with_controller
|
|
77
|
+
options = {:action => 'show'}
|
|
78
|
+
mock_controller = mock()
|
|
79
|
+
mock_controller.expects(:url_for).with(options).returns('/show')
|
|
80
|
+
@session.stubs(:controller).returns(mock_controller)
|
|
81
|
+
assert_equal '/show', @session.url_for(options)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_url_for_without_controller
|
|
85
|
+
options = {:action => 'show'}
|
|
86
|
+
mock_rewriter = mock()
|
|
87
|
+
mock_rewriter.expects(:rewrite).with(options).returns('/show')
|
|
88
|
+
@session.stubs(:generic_url_rewriter).returns(mock_rewriter)
|
|
89
|
+
@session.stubs(:controller).returns(nil)
|
|
90
|
+
assert_equal '/show', @session.url_for(options)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def test_redirect_bool_with_status_in_300s
|
|
94
|
+
@session.stubs(:status).returns 301
|
|
95
|
+
assert @session.redirect?
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_redirect_bool_with_status_in_200s
|
|
99
|
+
@session.stubs(:status).returns 200
|
|
100
|
+
assert !@session.redirect?
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_get
|
|
104
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
105
|
+
@session.expects(:process).with(:get,path,params,headers)
|
|
106
|
+
@session.get(path,params,headers)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def test_post
|
|
110
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
111
|
+
@session.expects(:process).with(:post,path,params,headers)
|
|
112
|
+
@session.post(path,params,headers)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def test_put
|
|
116
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
117
|
+
@session.expects(:process).with(:put,path,params,headers)
|
|
118
|
+
@session.put(path,params,headers)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_delete
|
|
122
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
123
|
+
@session.expects(:process).with(:delete,path,params,headers)
|
|
124
|
+
@session.delete(path,params,headers)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_head
|
|
128
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
129
|
+
@session.expects(:process).with(:head,path,params,headers)
|
|
130
|
+
@session.head(path,params,headers)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def test_xml_http_request_get
|
|
134
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
135
|
+
headers_after_xhr = headers.merge(
|
|
136
|
+
"X-Requested-With" => "XMLHttpRequest",
|
|
137
|
+
"Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
|
|
138
|
+
)
|
|
139
|
+
@session.expects(:process).with(:get,path,params,headers_after_xhr)
|
|
140
|
+
@session.xml_http_request(:get,path,params,headers)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def test_xml_http_request_post
|
|
144
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
145
|
+
headers_after_xhr = headers.merge(
|
|
146
|
+
"X-Requested-With" => "XMLHttpRequest",
|
|
147
|
+
"Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
|
|
148
|
+
)
|
|
149
|
+
@session.expects(:process).with(:post,path,params,headers_after_xhr)
|
|
150
|
+
@session.xml_http_request(:post,path,params,headers)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def test_xml_http_request_put
|
|
154
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
155
|
+
headers_after_xhr = headers.merge(
|
|
156
|
+
"X-Requested-With" => "XMLHttpRequest",
|
|
157
|
+
"Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
|
|
158
|
+
)
|
|
159
|
+
@session.expects(:process).with(:put,path,params,headers_after_xhr)
|
|
160
|
+
@session.xml_http_request(:put,path,params,headers)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def test_xml_http_request_delete
|
|
164
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
165
|
+
headers_after_xhr = headers.merge(
|
|
166
|
+
"X-Requested-With" => "XMLHttpRequest",
|
|
167
|
+
"Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
|
|
168
|
+
)
|
|
169
|
+
@session.expects(:process).with(:delete,path,params,headers_after_xhr)
|
|
170
|
+
@session.xml_http_request(:delete,path,params,headers)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def test_xml_http_request_head
|
|
174
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah'}
|
|
175
|
+
headers_after_xhr = headers.merge(
|
|
176
|
+
"X-Requested-With" => "XMLHttpRequest",
|
|
177
|
+
"Accept" => "text/javascript, text/html, application/xml, text/xml, */*"
|
|
178
|
+
)
|
|
179
|
+
@session.expects(:process).with(:head,path,params,headers_after_xhr)
|
|
180
|
+
@session.xml_http_request(:head,path,params,headers)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def test_xml_http_request_override_accept
|
|
184
|
+
path = "/index"; params = "blah"; headers = {:location => 'blah', "Accept" => "application/xml"}
|
|
185
|
+
headers_after_xhr = headers.merge(
|
|
186
|
+
"X-Requested-With" => "XMLHttpRequest"
|
|
187
|
+
)
|
|
188
|
+
@session.expects(:process).with(:post,path,params,headers_after_xhr)
|
|
189
|
+
@session.xml_http_request(:post,path,params,headers)
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
class IntegrationTestTest < Test::Unit::TestCase
|
|
194
|
+
def setup
|
|
195
|
+
@test = ::ActionController::IntegrationTest.new(:default_test)
|
|
196
|
+
@test.class.stubs(:fixture_table_names).returns([])
|
|
197
|
+
@session = @test.open_session
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def test_opens_new_session
|
|
201
|
+
@test.class.expects(:fixture_table_names).times(2).returns(['foo'])
|
|
202
|
+
|
|
203
|
+
session1 = @test.open_session { |sess| }
|
|
204
|
+
session2 = @test.open_session # implicit session
|
|
205
|
+
|
|
206
|
+
assert_equal ::ActionController::Integration::Session, session1.class
|
|
207
|
+
assert_equal ::ActionController::Integration::Session, session2.class
|
|
208
|
+
assert_not_equal session1, session2
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# RSpec mixes Matchers (which has a #method_missing) into
|
|
212
|
+
# IntegrationTest's superclass. Make sure IntegrationTest does not
|
|
213
|
+
# try to delegate these methods to the session object.
|
|
214
|
+
def test_does_not_prevent_method_missing_passing_up_to_ancestors
|
|
215
|
+
mixin = Module.new do
|
|
216
|
+
def method_missing(name, *args)
|
|
217
|
+
name.to_s == 'foo' ? 'pass' : super
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
@test.class.superclass.__send__(:include, mixin)
|
|
221
|
+
begin
|
|
222
|
+
assert_equal 'pass', @test.foo
|
|
223
|
+
ensure
|
|
224
|
+
# leave other tests as unaffected as possible
|
|
225
|
+
mixin.__send__(:remove_method, :method_missing)
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# Tests that integration tests don't call Controller test methods for processing.
|
|
231
|
+
# Integration tests have their own setup and teardown.
|
|
232
|
+
class IntegrationTestUsesCorrectClass < ActionController::IntegrationTest
|
|
233
|
+
def self.fixture_table_names
|
|
234
|
+
[]
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def test_integration_methods_called
|
|
238
|
+
reset!
|
|
239
|
+
@integration_session.stubs(:generic_url_rewriter)
|
|
240
|
+
@integration_session.stubs(:process)
|
|
241
|
+
|
|
242
|
+
%w( get post head put delete ).each do |verb|
|
|
243
|
+
assert_nothing_raised("'#{verb}' should use integration test methods") { __send__(verb, '/') }
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
class IntegrationProcessTest < ActionController::IntegrationTest
|
|
249
|
+
class IntegrationController < ActionController::Base
|
|
250
|
+
def get
|
|
251
|
+
respond_to do |format|
|
|
252
|
+
format.html { render :text => "OK", :status => 200 }
|
|
253
|
+
format.js { render :text => "JS OK", :status => 200 }
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def get_with_params
|
|
258
|
+
render :text => "foo: #{params[:foo]}", :status => 200
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def post_with_multiparameter_params
|
|
262
|
+
render :text => "foo(1i): #{params[:"foo(1i)"]}, foo(2i): #{params[:"foo(2i)"]}", :status => 200
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def multipart_post_with_multiparameter_params
|
|
266
|
+
render :text => "foo(1i): #{params[:"foo(1i)"]}, foo(2i): #{params[:"foo(2i)"]}, filesize: #{params[:file].size}", :status => 200
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def post
|
|
270
|
+
render :text => "Created", :status => 201
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def cookie_monster
|
|
274
|
+
cookies["cookie_1"] = nil
|
|
275
|
+
cookies["cookie_3"] = "chocolate"
|
|
276
|
+
render :text => "Gone", :status => 410
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def redirect
|
|
280
|
+
redirect_to :action => "get"
|
|
281
|
+
end
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
FILES_DIR = File.dirname(__FILE__) + '/../fixtures/multipart'
|
|
285
|
+
|
|
286
|
+
def test_get
|
|
287
|
+
with_test_route_set do
|
|
288
|
+
get '/get'
|
|
289
|
+
assert_equal 200, status
|
|
290
|
+
assert_equal "OK", status_message
|
|
291
|
+
assert_response 200
|
|
292
|
+
assert_response :success
|
|
293
|
+
assert_response :ok
|
|
294
|
+
assert_equal({}, cookies)
|
|
295
|
+
assert_equal "OK", body
|
|
296
|
+
assert_equal "OK", response.body
|
|
297
|
+
assert_kind_of HTML::Document, html_document
|
|
298
|
+
assert_equal 1, request_count
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
def test_post
|
|
303
|
+
with_test_route_set do
|
|
304
|
+
post '/post'
|
|
305
|
+
assert_equal 201, status
|
|
306
|
+
assert_equal "Created", status_message
|
|
307
|
+
assert_response 201
|
|
308
|
+
assert_response :success
|
|
309
|
+
assert_response :created
|
|
310
|
+
assert_equal({}, cookies)
|
|
311
|
+
assert_equal "Created", body
|
|
312
|
+
assert_equal "Created", response.body
|
|
313
|
+
assert_kind_of HTML::Document, html_document
|
|
314
|
+
assert_equal 1, request_count
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
def test_cookie_monster
|
|
319
|
+
with_test_route_set do
|
|
320
|
+
self.cookies['cookie_1'] = "sugar"
|
|
321
|
+
self.cookies['cookie_2'] = "oatmeal"
|
|
322
|
+
get '/cookie_monster'
|
|
323
|
+
assert_equal 410, status
|
|
324
|
+
assert_equal "Gone", status_message
|
|
325
|
+
assert_response 410
|
|
326
|
+
assert_response :gone
|
|
327
|
+
assert_equal "cookie_1=; path=/\ncookie_3=chocolate; path=/", headers["Set-Cookie"]
|
|
328
|
+
assert_equal({"cookie_1"=>"", "cookie_2"=>"oatmeal", "cookie_3"=>"chocolate"}, cookies)
|
|
329
|
+
assert_equal "Gone", response.body
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
def test_redirect
|
|
334
|
+
with_test_route_set do
|
|
335
|
+
get '/redirect'
|
|
336
|
+
assert_equal 302, status
|
|
337
|
+
assert_equal "Found", status_message
|
|
338
|
+
assert_response 302
|
|
339
|
+
assert_response :redirect
|
|
340
|
+
assert_response :found
|
|
341
|
+
assert_equal "<html><body>You are being <a href=\"http://www.example.com/get\">redirected</a>.</body></html>", response.body
|
|
342
|
+
assert_kind_of HTML::Document, html_document
|
|
343
|
+
assert_equal 1, request_count
|
|
344
|
+
|
|
345
|
+
follow_redirect!
|
|
346
|
+
assert_response :success
|
|
347
|
+
assert_equal "/get", path
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
def test_xml_http_request_get
|
|
352
|
+
with_test_route_set do
|
|
353
|
+
xhr :get, '/get'
|
|
354
|
+
assert_equal 200, status
|
|
355
|
+
assert_equal "OK", status_message
|
|
356
|
+
assert_response 200
|
|
357
|
+
assert_response :success
|
|
358
|
+
assert_response :ok
|
|
359
|
+
assert_equal "JS OK", response.body
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
def test_get_with_query_string
|
|
364
|
+
with_test_route_set do
|
|
365
|
+
get '/get_with_params?foo=bar'
|
|
366
|
+
assert_equal '/get_with_params?foo=bar', request.env["REQUEST_URI"]
|
|
367
|
+
assert_equal '/get_with_params?foo=bar', request.request_uri
|
|
368
|
+
assert_equal "", request.env["QUERY_STRING"]
|
|
369
|
+
assert_equal 'foo=bar', request.query_string
|
|
370
|
+
assert_equal 'bar', request.parameters['foo']
|
|
371
|
+
|
|
372
|
+
assert_equal 200, status
|
|
373
|
+
assert_equal "foo: bar", response.body
|
|
374
|
+
end
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
def test_get_with_parameters
|
|
378
|
+
with_test_route_set do
|
|
379
|
+
get '/get_with_params', :foo => "bar"
|
|
380
|
+
assert_equal '/get_with_params', request.env["REQUEST_URI"]
|
|
381
|
+
assert_equal '/get_with_params', request.request_uri
|
|
382
|
+
assert_equal 'foo=bar', request.env["QUERY_STRING"]
|
|
383
|
+
assert_equal 'foo=bar', request.query_string
|
|
384
|
+
assert_equal 'bar', request.parameters['foo']
|
|
385
|
+
|
|
386
|
+
assert_equal 200, status
|
|
387
|
+
assert_equal "foo: bar", response.body
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
def test_post_with_multiparameter_attribute_parameters
|
|
392
|
+
with_test_route_set do
|
|
393
|
+
post '/post_with_multiparameter_params', :"foo(1i)" => "bar", :"foo(2i)" => "baz"
|
|
394
|
+
|
|
395
|
+
assert_equal 200, status
|
|
396
|
+
assert_equal "foo(1i): bar, foo(2i): baz", response.body
|
|
397
|
+
end
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
def test_multipart_post_with_multiparameter_attribute_parameters
|
|
401
|
+
with_test_route_set do
|
|
402
|
+
post '/multipart_post_with_multiparameter_params', :"foo(1i)" => "bar", :"foo(2i)" => "baz", :file => fixture_file_upload(FILES_DIR + "/mona_lisa.jpg", "image/jpg")
|
|
403
|
+
|
|
404
|
+
assert_equal 200, status
|
|
405
|
+
assert_equal "foo(1i): bar, foo(2i): baz, filesize: 159528", response.body
|
|
406
|
+
end
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
def test_head
|
|
410
|
+
with_test_route_set do
|
|
411
|
+
head '/get'
|
|
412
|
+
assert_equal 200, status
|
|
413
|
+
assert_equal "", body
|
|
414
|
+
|
|
415
|
+
head '/post'
|
|
416
|
+
assert_equal 201, status
|
|
417
|
+
assert_equal "", body
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
private
|
|
422
|
+
def with_test_route_set
|
|
423
|
+
with_routing do |set|
|
|
424
|
+
set.draw do |map|
|
|
425
|
+
map.with_options :controller => "IntegrationProcessTest::Integration" do |c|
|
|
426
|
+
c.connect "/:action"
|
|
427
|
+
end
|
|
428
|
+
end
|
|
429
|
+
yield
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
class MetalTest < ActionController::IntegrationTest
|
|
435
|
+
class Poller
|
|
436
|
+
def self.call(env)
|
|
437
|
+
if env["PATH_INFO"] =~ /^\/success/
|
|
438
|
+
[200, {"Content-Type" => "text/plain", "Content-Length" => "12"}, ["Hello World!"]]
|
|
439
|
+
else
|
|
440
|
+
[404, {"Content-Type" => "text/plain", "Content-Length" => "0"}, []]
|
|
441
|
+
end
|
|
442
|
+
end
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
def setup
|
|
446
|
+
@integration_session = ActionController::Integration::Session.new(Poller)
|
|
447
|
+
end
|
|
448
|
+
|
|
449
|
+
def test_successful_get
|
|
450
|
+
get "/success"
|
|
451
|
+
assert_response 200
|
|
452
|
+
assert_response :success
|
|
453
|
+
assert_response :ok
|
|
454
|
+
assert_equal "Hello World!", response.body
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
def test_failed_get
|
|
458
|
+
get "/failure"
|
|
459
|
+
assert_response 404
|
|
460
|
+
assert_response :not_found
|
|
461
|
+
assert_equal '', response.body
|
|
462
|
+
end
|
|
463
|
+
end
|
|
464
|
+
|
|
465
|
+
class StringSubclassBodyTest < ActionController::IntegrationTest
|
|
466
|
+
class SafeString < String
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
class SafeStringMiddleware
|
|
470
|
+
def self.call(env)
|
|
471
|
+
[200, {"Content-Type" => "text/plain", "Content-Length" => "12"}, [SafeString.new("Hello World!")]]
|
|
472
|
+
end
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
def setup
|
|
476
|
+
@integration_session = ActionController::Integration::Session.new(SafeStringMiddleware)
|
|
477
|
+
end
|
|
478
|
+
|
|
479
|
+
def test_string_subclass_body
|
|
480
|
+
get '/'
|
|
481
|
+
assert_equal 'Hello World!', response.body
|
|
482
|
+
end
|
|
483
|
+
end
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
# The view_paths array must be set on Base and not LayoutTest so that LayoutTest's inherited
|
|
4
|
+
# method has access to the view_paths array when looking for a layout to automatically assign.
|
|
5
|
+
old_load_paths = ActionController::Base.view_paths
|
|
6
|
+
|
|
7
|
+
ActionView::Template::register_template_handler :mab,
|
|
8
|
+
lambda { |template| template.source.inspect }
|
|
9
|
+
|
|
10
|
+
ActionController::Base.view_paths = [ File.dirname(__FILE__) + '/../fixtures/layout_tests/' ]
|
|
11
|
+
|
|
12
|
+
class LayoutTest < ActionController::Base
|
|
13
|
+
def self.controller_path; 'views' end
|
|
14
|
+
self.view_paths = ActionController::Base.view_paths.dup
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Restore view_paths to previous value
|
|
18
|
+
ActionController::Base.view_paths = old_load_paths
|
|
19
|
+
|
|
20
|
+
class ProductController < LayoutTest
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class ItemController < LayoutTest
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class ThirdPartyTemplateLibraryController < LayoutTest
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
module ControllerNameSpace
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class ControllerNameSpace::NestedController < LayoutTest
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class MultipleExtensions < LayoutTest
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
class LayoutAutoDiscoveryTest < ActionController::TestCase
|
|
39
|
+
def setup
|
|
40
|
+
@request.host = "www.nextangle.com"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_application_layout_is_default_when_no_controller_match
|
|
44
|
+
@controller = ProductController.new
|
|
45
|
+
get :hello
|
|
46
|
+
assert_equal 'layout_test.rhtml hello.rhtml', @response.body
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_controller_name_layout_name_match
|
|
50
|
+
@controller = ItemController.new
|
|
51
|
+
get :hello
|
|
52
|
+
assert_equal 'item.rhtml hello.rhtml', @response.body
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_third_party_template_library_auto_discovers_layout
|
|
56
|
+
@controller = ThirdPartyTemplateLibraryController.new
|
|
57
|
+
get :hello
|
|
58
|
+
assert_equal 'layouts/third_party_template_library.mab', @controller.active_layout.to_s
|
|
59
|
+
assert_equal 'layouts/third_party_template_library', @response.layout
|
|
60
|
+
assert_response :success
|
|
61
|
+
assert_equal 'Mab', @response.body
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_namespaced_controllers_auto_detect_layouts
|
|
65
|
+
@controller = ControllerNameSpace::NestedController.new
|
|
66
|
+
get :hello
|
|
67
|
+
assert_equal 'layouts/controller_name_space/nested', @controller.active_layout.to_s
|
|
68
|
+
assert_equal 'controller_name_space/nested.rhtml hello.rhtml', @response.body
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_namespaced_controllers_auto_detect_layouts
|
|
72
|
+
@controller = MultipleExtensions.new
|
|
73
|
+
get :hello
|
|
74
|
+
assert_equal 'layouts/multiple_extensions.html.erb', @controller.active_layout.to_s
|
|
75
|
+
assert_equal 'multiple_extensions.html.erb hello.rhtml', @response.body.strip
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
class DefaultLayoutController < LayoutTest
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
class AbsolutePathLayoutController < LayoutTest
|
|
83
|
+
layout File.expand_path(File.expand_path(__FILE__) + '/../../fixtures/layout_tests/layouts/layout_test.rhtml')
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
class AbsolutePathWithoutLayoutsController < LayoutTest
|
|
87
|
+
# Absolute layout path without 'layouts' in it.
|
|
88
|
+
layout File.expand_path(File.expand_path(__FILE__) + '/../../fixtures/layout_tests/abs_path_layout.rhtml')
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
class HasOwnLayoutController < LayoutTest
|
|
92
|
+
layout 'item'
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
class PrependsViewPathController < LayoutTest
|
|
96
|
+
def hello
|
|
97
|
+
prepend_view_path File.dirname(__FILE__) + '/../fixtures/layout_tests/alt/'
|
|
98
|
+
render :layout => 'alt'
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
class SetsLayoutInRenderController < LayoutTest
|
|
103
|
+
def hello
|
|
104
|
+
render :layout => 'third_party_template_library'
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
class RendersNoLayoutController < LayoutTest
|
|
109
|
+
def hello
|
|
110
|
+
render :layout => false
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
class LayoutSetInResponseTest < ActionController::TestCase
|
|
115
|
+
def test_layout_set_when_using_default_layout
|
|
116
|
+
@controller = DefaultLayoutController.new
|
|
117
|
+
get :hello
|
|
118
|
+
assert_equal 'layouts/layout_test', @response.layout
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_layout_set_when_set_in_controller
|
|
122
|
+
@controller = HasOwnLayoutController.new
|
|
123
|
+
get :hello
|
|
124
|
+
assert_equal 'layouts/item', @response.layout
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_layout_set_when_using_render
|
|
128
|
+
@controller = SetsLayoutInRenderController.new
|
|
129
|
+
get :hello
|
|
130
|
+
assert_equal 'layouts/third_party_template_library', @response.layout
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def test_layout_is_not_set_when_none_rendered
|
|
134
|
+
@controller = RendersNoLayoutController.new
|
|
135
|
+
get :hello
|
|
136
|
+
assert_nil @response.layout
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def test_exempt_from_layout_honored_by_render_template
|
|
140
|
+
ActionController::Base.exempt_from_layout :rhtml
|
|
141
|
+
@controller = RenderWithTemplateOptionController.new
|
|
142
|
+
|
|
143
|
+
get :hello
|
|
144
|
+
assert_equal "alt/hello.rhtml", @response.body.strip
|
|
145
|
+
|
|
146
|
+
ensure
|
|
147
|
+
ActionController::Base.exempt_from_layout.delete(/\.rhtml$/)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def test_layout_is_picked_from_the_controller_instances_view_path
|
|
151
|
+
@controller = PrependsViewPathController.new
|
|
152
|
+
get :hello
|
|
153
|
+
assert_equal 'layouts/alt', @response.layout
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def test_absolute_pathed_layout
|
|
157
|
+
@controller = AbsolutePathLayoutController.new
|
|
158
|
+
get :hello
|
|
159
|
+
assert_equal "layout_test.rhtml hello.rhtml", @response.body.strip
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def test_absolute_pathed_layout_without_layouts_in_path
|
|
163
|
+
@controller = AbsolutePathWithoutLayoutsController.new
|
|
164
|
+
get :hello
|
|
165
|
+
assert_equal "abs_path_layout.rhtml hello.rhtml", @response.body.strip
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
class RenderWithTemplateOptionController < LayoutTest
|
|
170
|
+
def hello
|
|
171
|
+
render :template => 'alt/hello'
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
class SetsNonExistentLayoutFile < LayoutTest
|
|
176
|
+
layout "nofile.rhtml"
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
class LayoutExceptionRaised < ActionController::TestCase
|
|
180
|
+
def test_exception_raised_when_layout_file_not_found
|
|
181
|
+
@controller = SetsNonExistentLayoutFile.new
|
|
182
|
+
get :hello
|
|
183
|
+
assert_kind_of ActionView::MissingTemplate, @response.template.instance_eval { @exception }
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
class LayoutStatusIsRendered < LayoutTest
|
|
188
|
+
def hello
|
|
189
|
+
render :status => 401
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
class LayoutStatusIsRenderedTest < ActionController::TestCase
|
|
194
|
+
def test_layout_status_is_rendered
|
|
195
|
+
@controller = LayoutStatusIsRendered.new
|
|
196
|
+
get :hello
|
|
197
|
+
assert_response 401
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
unless RUBY_PLATFORM =~ /(:?mswin|mingw|bccwin)/
|
|
202
|
+
class LayoutSymlinkedTest < LayoutTest
|
|
203
|
+
layout "symlinked/symlinked_layout"
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
class LayoutSymlinkedIsRenderedTest < ActionController::TestCase
|
|
207
|
+
def test_symlinked_layout_is_rendered
|
|
208
|
+
@controller = LayoutSymlinkedTest.new
|
|
209
|
+
get :hello
|
|
210
|
+
assert_response 200
|
|
211
|
+
assert_equal "layouts/symlinked/symlinked_layout", @response.layout
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|