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,66 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class CaptureController < ActionController::Base
|
|
4
|
+
def self.controller_name; "test"; end
|
|
5
|
+
def self.controller_path; "test"; end
|
|
6
|
+
|
|
7
|
+
def content_for
|
|
8
|
+
render :layout => "talk_from_action"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def content_for_with_parameter
|
|
12
|
+
render :layout => "talk_from_action"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def content_for_concatenated
|
|
16
|
+
render :layout => "talk_from_action"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def non_erb_block_content_for
|
|
20
|
+
render :layout => "talk_from_action"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def rescue_action(e) raise end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class CaptureTest < ActionController::TestCase
|
|
27
|
+
tests CaptureController
|
|
28
|
+
|
|
29
|
+
def setup
|
|
30
|
+
# enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
|
|
31
|
+
# a more accurate simulation of what happens in "real life".
|
|
32
|
+
@controller.logger = Logger.new(nil)
|
|
33
|
+
|
|
34
|
+
@request.host = "www.nextangle.com"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_simple_capture
|
|
38
|
+
get :capturing
|
|
39
|
+
assert_equal "Dreamy days", @response.body.strip
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_content_for
|
|
43
|
+
get :content_for
|
|
44
|
+
assert_equal expected_content_for_output, @response.body
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_should_concatentate_content_for
|
|
48
|
+
get :content_for_concatenated
|
|
49
|
+
assert_equal expected_content_for_output, @response.body
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_should_set_content_for_with_parameter
|
|
53
|
+
get :content_for_with_parameter
|
|
54
|
+
assert_equal expected_content_for_output, @response.body
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_non_erb_block_content_for
|
|
58
|
+
get :non_erb_block_content_for
|
|
59
|
+
assert_equal expected_content_for_output, @response.body
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
def expected_content_for_output
|
|
64
|
+
"<title>Putting stuff in the title!</title>\n\nGreat stuff!"
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class ContentTypeController < ActionController::Base
|
|
4
|
+
def render_content_type_from_body
|
|
5
|
+
response.content_type = Mime::RSS
|
|
6
|
+
render :text => "hello world!"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def render_defaults
|
|
10
|
+
render :text => "hello world!"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def render_content_type_from_render
|
|
14
|
+
render :text => "hello world!", :content_type => Mime::RSS
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def render_charset_from_body
|
|
18
|
+
response.charset = "utf-16"
|
|
19
|
+
render :text => "hello world!"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def render_nil_charset_from_body
|
|
23
|
+
response.charset = nil
|
|
24
|
+
render :text => "hello world!"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def render_default_for_rhtml
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def render_default_for_rxml
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def render_default_for_rjs
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def render_change_for_rxml
|
|
37
|
+
response.content_type = Mime::HTML
|
|
38
|
+
render :action => "render_default_for_rxml"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def render_default_content_types_for_respond_to
|
|
42
|
+
respond_to do |format|
|
|
43
|
+
format.html { render :text => "hello world!" }
|
|
44
|
+
format.xml { render :action => "render_default_content_types_for_respond_to.rhtml" }
|
|
45
|
+
format.js { render :text => "hello world!" }
|
|
46
|
+
format.rss { render :text => "hello world!", :content_type => Mime::XML }
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def rescue_action(e) raise end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
class ContentTypeTest < ActionController::TestCase
|
|
54
|
+
tests ContentTypeController
|
|
55
|
+
|
|
56
|
+
def setup
|
|
57
|
+
# enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
|
|
58
|
+
# a more accurate simulation of what happens in "real life".
|
|
59
|
+
@controller.logger = Logger.new(nil)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_render_defaults
|
|
63
|
+
get :render_defaults
|
|
64
|
+
assert_equal "utf-8", @response.charset
|
|
65
|
+
assert_equal Mime::HTML, @response.content_type
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_render_changed_charset_default
|
|
69
|
+
ContentTypeController.default_charset = "utf-16"
|
|
70
|
+
get :render_defaults
|
|
71
|
+
assert_equal "utf-16", @response.charset
|
|
72
|
+
assert_equal Mime::HTML, @response.content_type
|
|
73
|
+
ContentTypeController.default_charset = "utf-8"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def test_content_type_from_body
|
|
77
|
+
get :render_content_type_from_body
|
|
78
|
+
assert_equal "application/rss+xml", @response.content_type
|
|
79
|
+
assert_equal "utf-8", @response.charset
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_content_type_from_render
|
|
83
|
+
get :render_content_type_from_render
|
|
84
|
+
assert_equal "application/rss+xml", @response.content_type
|
|
85
|
+
assert_equal "utf-8", @response.charset
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_charset_from_body
|
|
89
|
+
get :render_charset_from_body
|
|
90
|
+
assert_equal Mime::HTML, @response.content_type
|
|
91
|
+
assert_equal "utf-16", @response.charset
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_nil_charset_from_body
|
|
95
|
+
get :render_nil_charset_from_body
|
|
96
|
+
assert_equal Mime::HTML, @response.content_type
|
|
97
|
+
assert_equal "utf-8", @response.charset, @response.headers.inspect
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_nil_default_for_rhtml
|
|
101
|
+
ContentTypeController.default_charset = nil
|
|
102
|
+
get :render_default_for_rhtml
|
|
103
|
+
assert_equal Mime::HTML, @response.content_type
|
|
104
|
+
assert_nil @response.charset, @response.headers.inspect
|
|
105
|
+
ensure
|
|
106
|
+
ContentTypeController.default_charset = "utf-8"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def test_default_for_rhtml
|
|
110
|
+
get :render_default_for_rhtml
|
|
111
|
+
assert_equal Mime::HTML, @response.content_type
|
|
112
|
+
assert_equal "utf-8", @response.charset
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def test_default_for_rxml
|
|
116
|
+
get :render_default_for_rxml
|
|
117
|
+
assert_equal Mime::XML, @response.content_type
|
|
118
|
+
assert_equal "utf-8", @response.charset
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_default_for_rjs
|
|
122
|
+
xhr :post, :render_default_for_rjs
|
|
123
|
+
assert_equal Mime::JS, @response.content_type
|
|
124
|
+
assert_equal "utf-8", @response.charset
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_change_for_rxml
|
|
128
|
+
get :render_change_for_rxml
|
|
129
|
+
assert_equal Mime::HTML, @response.content_type
|
|
130
|
+
assert_equal "utf-8", @response.charset
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
class AcceptBasedContentTypeTest < ActionController::TestCase
|
|
135
|
+
|
|
136
|
+
tests ContentTypeController
|
|
137
|
+
|
|
138
|
+
def setup
|
|
139
|
+
ActionController::Base.use_accept_header = true
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def teardown
|
|
143
|
+
ActionController::Base.use_accept_header = false
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def test_render_default_content_types_for_respond_to
|
|
148
|
+
@request.accept = Mime::HTML.to_s
|
|
149
|
+
get :render_default_content_types_for_respond_to
|
|
150
|
+
assert_equal Mime::HTML, @response.content_type
|
|
151
|
+
|
|
152
|
+
@request.accept = Mime::JS.to_s
|
|
153
|
+
get :render_default_content_types_for_respond_to
|
|
154
|
+
assert_equal Mime::JS, @response.content_type
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def test_render_default_content_types_for_respond_to_with_template
|
|
158
|
+
@request.accept = Mime::XML.to_s
|
|
159
|
+
get :render_default_content_types_for_respond_to
|
|
160
|
+
assert_equal Mime::XML, @response.content_type
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def test_render_default_content_types_for_respond_to_with_overwrite
|
|
164
|
+
@request.accept = Mime::RSS.to_s
|
|
165
|
+
get :render_default_content_types_for_respond_to
|
|
166
|
+
assert_equal Mime::XML, @response.content_type
|
|
167
|
+
end
|
|
168
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class CookieTest < ActionController::TestCase
|
|
4
|
+
class TestController < ActionController::Base
|
|
5
|
+
def authenticate
|
|
6
|
+
cookies["user_name"] = "david"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def set_with_with_escapable_characters
|
|
10
|
+
cookies["that & guy"] = "foo & bar => baz"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def authenticate_for_fourteen_days
|
|
14
|
+
cookies["user_name"] = { "value" => "david", "expires" => Time.utc(2005, 10, 10,5) }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def authenticate_for_fourteen_days_with_symbols
|
|
18
|
+
cookies[:user_name] = { :value => "david", :expires => Time.utc(2005, 10, 10,5) }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def set_multiple_cookies
|
|
22
|
+
cookies["user_name"] = { "value" => "david", "expires" => Time.utc(2005, 10, 10,5) }
|
|
23
|
+
cookies["login"] = "XJ-122"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def access_frozen_cookies
|
|
27
|
+
cookies["will"] = "work"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def logout
|
|
31
|
+
cookies.delete("user_name")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def delete_cookie_with_path
|
|
35
|
+
cookies.delete("user_name", :path => '/beaten')
|
|
36
|
+
render :text => "hello world"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def authenticate_with_http_only
|
|
40
|
+
cookies["user_name"] = { :value => "david", :httponly => true }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def rescue_action(e)
|
|
44
|
+
raise unless ActionView::MissingTemplate # No templates here, and we don't care about the output
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
tests TestController
|
|
49
|
+
|
|
50
|
+
def setup
|
|
51
|
+
@request.host = "www.nextangle.com"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_setting_cookie
|
|
55
|
+
get :authenticate
|
|
56
|
+
assert_equal ["user_name=david; path=/"], @response.headers["Set-Cookie"]
|
|
57
|
+
assert_equal({"user_name" => "david"}, @response.cookies)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_setting_with_escapable_characters
|
|
61
|
+
get :set_with_with_escapable_characters
|
|
62
|
+
assert_equal ["that+%26+guy=foo+%26+bar+%3D%3E+baz; path=/"], @response.headers["Set-Cookie"]
|
|
63
|
+
assert_equal({"that & guy" => "foo & bar => baz"}, @response.cookies)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_setting_cookie_for_fourteen_days
|
|
67
|
+
get :authenticate_for_fourteen_days
|
|
68
|
+
assert_equal ["user_name=david; path=/; expires=Mon, 10-Oct-2005 05:00:00 GMT"], @response.headers["Set-Cookie"]
|
|
69
|
+
assert_equal({"user_name" => "david"}, @response.cookies)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_setting_cookie_for_fourteen_days_with_symbols
|
|
73
|
+
get :authenticate_for_fourteen_days_with_symbols
|
|
74
|
+
assert_equal ["user_name=david; path=/; expires=Mon, 10-Oct-2005 05:00:00 GMT"], @response.headers["Set-Cookie"]
|
|
75
|
+
assert_equal({"user_name" => "david"}, @response.cookies)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_setting_cookie_with_http_only
|
|
79
|
+
get :authenticate_with_http_only
|
|
80
|
+
assert_equal ["user_name=david; path=/; HttpOnly"], @response.headers["Set-Cookie"]
|
|
81
|
+
assert_equal({"user_name" => "david"}, @response.cookies)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_multiple_cookies
|
|
85
|
+
get :set_multiple_cookies
|
|
86
|
+
assert_equal 2, @response.cookies.size
|
|
87
|
+
assert_equal "user_name=david; path=/; expires=Mon, 10-Oct-2005 05:00:00 GMT", @response.headers["Set-Cookie"][0]
|
|
88
|
+
assert_equal "login=XJ-122; path=/", @response.headers["Set-Cookie"][1]
|
|
89
|
+
assert_equal({"login" => "XJ-122", "user_name" => "david"}, @response.cookies)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_setting_test_cookie
|
|
93
|
+
assert_nothing_raised { get :access_frozen_cookies }
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_expiring_cookie
|
|
97
|
+
get :logout
|
|
98
|
+
assert_equal ["user_name=; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT"], @response.headers["Set-Cookie"]
|
|
99
|
+
assert_equal({"user_name" => nil}, @response.cookies)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_cookiejar_accessor
|
|
103
|
+
@request.cookies["user_name"] = "david"
|
|
104
|
+
@controller.request = @request
|
|
105
|
+
jar = ActionController::CookieJar.new(@controller)
|
|
106
|
+
assert_equal "david", jar["user_name"]
|
|
107
|
+
assert_equal nil, jar["something_else"]
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def test_cookiejar_accessor_with_array_value
|
|
111
|
+
@request.cookies["pages"] = %w{1 2 3}
|
|
112
|
+
@controller.request = @request
|
|
113
|
+
jar = ActionController::CookieJar.new(@controller)
|
|
114
|
+
assert_equal %w{1 2 3}, jar["pages"]
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def test_cookiejar_delete_removes_item_and_returns_its_value
|
|
118
|
+
@request.cookies["user_name"] = "david"
|
|
119
|
+
@controller.response = @response
|
|
120
|
+
jar = ActionController::CookieJar.new(@controller)
|
|
121
|
+
assert_equal "david", jar.delete("user_name")
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_delete_cookie_with_path
|
|
125
|
+
get :delete_cookie_with_path
|
|
126
|
+
assert_equal ["user_name=; path=/beaten; expires=Thu, 01-Jan-1970 00:00:00 GMT"], @response.headers["Set-Cookie"]
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def test_cookies_persist_throughout_request
|
|
130
|
+
get :authenticate
|
|
131
|
+
cookies = @controller.send(:cookies)
|
|
132
|
+
assert_equal 'david', cookies['user_name']
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class DeprecatedBaseMethodsTest < ActionController::TestCase
|
|
4
|
+
class Target < ActionController::Base
|
|
5
|
+
def home_url(greeting)
|
|
6
|
+
"http://example.com/#{greeting}"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def raises_name_error
|
|
10
|
+
this_method_doesnt_exist
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def rescue_action(e) raise e end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
tests Target
|
|
17
|
+
|
|
18
|
+
def test_log_error_silences_deprecation_warnings
|
|
19
|
+
get :raises_name_error
|
|
20
|
+
rescue => e
|
|
21
|
+
assert_not_deprecated { @controller.send :log_error, e }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
if defined? Test::Unit::Error
|
|
25
|
+
def test_assertion_failed_error_silences_deprecation_warnings
|
|
26
|
+
get :raises_name_error
|
|
27
|
+
rescue => e
|
|
28
|
+
error = Test::Unit::Error.new('testing ur doodz', e)
|
|
29
|
+
assert_not_deprecated { error.message }
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class DispatcherTest < Test::Unit::TestCase
|
|
4
|
+
Dispatcher = ActionController::Dispatcher
|
|
5
|
+
Reloader = ActionController::Reloader
|
|
6
|
+
|
|
7
|
+
def setup
|
|
8
|
+
ENV['REQUEST_METHOD'] = 'GET'
|
|
9
|
+
reset_dispatcher
|
|
10
|
+
Dispatcher.stubs(:require_dependency)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def teardown
|
|
14
|
+
ENV.delete 'REQUEST_METHOD'
|
|
15
|
+
reset_dispatcher
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_clears_dependencies_after_dispatch_if_in_loading_mode
|
|
19
|
+
ActiveSupport::Dependencies.expects(:clear).once
|
|
20
|
+
# Close the response so dependencies kicks in
|
|
21
|
+
dispatch(false).last.close
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_reloads_routes_before_dispatch_if_in_loading_mode
|
|
25
|
+
ActionController::Routing::Routes.expects(:reload).once
|
|
26
|
+
dispatch(false)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_leaves_dependencies_after_dispatch_if_not_in_loading_mode
|
|
30
|
+
ActionController::Routing::Routes.expects(:reload).never
|
|
31
|
+
ActiveSupport::Dependencies.expects(:clear).never
|
|
32
|
+
|
|
33
|
+
dispatch
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_builds_middleware_stack_only_during_initialization_if_not_in_loading_mode
|
|
37
|
+
dispatcher = create_dispatcher
|
|
38
|
+
assert_not_nil dispatcher.instance_variable_get(:"@app")
|
|
39
|
+
dispatcher.instance_variable_set(:"@app", lambda { |env| })
|
|
40
|
+
dispatcher.expects(:build_middleware_stack).never
|
|
41
|
+
dispatcher.call(nil)
|
|
42
|
+
dispatcher.call(nil)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_rebuilds_middleware_stack_on_every_request_if_in_loading_mode
|
|
46
|
+
dispatcher = create_dispatcher(false)
|
|
47
|
+
dispatcher.instance_variable_set(:"@app", lambda { |env| })
|
|
48
|
+
dispatcher.expects(:build_middleware_stack).twice
|
|
49
|
+
dispatcher.call(nil)
|
|
50
|
+
Reloader.default_lock.unlock
|
|
51
|
+
dispatcher.call(nil)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_doesnt_wrap_call_in_reloader_if_not_in_loading_mode
|
|
55
|
+
Reloader.expects(:run).never
|
|
56
|
+
dispatch
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_wraps_call_in_reloader_if_in_loading_mode
|
|
60
|
+
Reloader.expects(:run).once
|
|
61
|
+
dispatch(false)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Stub out dispatch error logger
|
|
65
|
+
class << Dispatcher
|
|
66
|
+
def log_failsafe_exception(status, exception); end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_failsafe_response
|
|
70
|
+
Dispatcher.any_instance.expects(:dispatch).raises('b00m')
|
|
71
|
+
ActionController::Failsafe.any_instance.expects(:log_failsafe_exception)
|
|
72
|
+
|
|
73
|
+
response = nil
|
|
74
|
+
assert_nothing_raised do
|
|
75
|
+
response = dispatch
|
|
76
|
+
end
|
|
77
|
+
assert_equal 3, response.size
|
|
78
|
+
assert_equal 500, response[0]
|
|
79
|
+
assert_equal({"Content-Type" => "text/html"}, response[1])
|
|
80
|
+
assert_match /500 Internal Server Error/, response[2].join
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_prepare_callbacks
|
|
84
|
+
a = b = c = nil
|
|
85
|
+
Dispatcher.to_prepare { |*args| a = b = c = 1 }
|
|
86
|
+
Dispatcher.to_prepare { |*args| b = c = 2 }
|
|
87
|
+
Dispatcher.to_prepare { |*args| c = 3 }
|
|
88
|
+
|
|
89
|
+
# Ensure to_prepare callbacks are not run when defined
|
|
90
|
+
assert_nil a || b || c
|
|
91
|
+
|
|
92
|
+
# Run callbacks
|
|
93
|
+
Dispatcher.run_prepare_callbacks
|
|
94
|
+
|
|
95
|
+
assert_equal 1, a
|
|
96
|
+
assert_equal 2, b
|
|
97
|
+
assert_equal 3, c
|
|
98
|
+
|
|
99
|
+
# Make sure they are only run once
|
|
100
|
+
a = b = c = nil
|
|
101
|
+
dispatch
|
|
102
|
+
assert_nil a || b || c
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def test_to_prepare_with_identifier_replaces
|
|
106
|
+
a = b = nil
|
|
107
|
+
Dispatcher.to_prepare(:unique_id) { |*args| a = b = 1 }
|
|
108
|
+
Dispatcher.to_prepare(:unique_id) { |*args| a = 2 }
|
|
109
|
+
|
|
110
|
+
Dispatcher.run_prepare_callbacks
|
|
111
|
+
assert_equal 2, a
|
|
112
|
+
assert_equal nil, b
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
private
|
|
116
|
+
def dispatch(cache_classes = true)
|
|
117
|
+
ActionController::Routing::RouteSet.any_instance.stubs(:call).returns([200, {}, 'response'])
|
|
118
|
+
Dispatcher.define_dispatcher_callbacks(cache_classes)
|
|
119
|
+
Dispatcher.new.call({'rack.input' => StringIO.new('')})
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def create_dispatcher(cache_classes = true)
|
|
123
|
+
Dispatcher.define_dispatcher_callbacks(cache_classes)
|
|
124
|
+
Dispatcher.new
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def reset_dispatcher
|
|
128
|
+
Dispatcher.middleware = ActionController::MiddlewareStack.new do |middleware|
|
|
129
|
+
middlewares = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/action_controller/middlewares.rb"))
|
|
130
|
+
middleware.instance_eval(File.read(middlewares))
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Clear callbacks as they are redefined by Dispatcher#define_dispatcher_callbacks
|
|
134
|
+
Dispatcher.instance_variable_set("@prepare_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
|
135
|
+
Dispatcher.instance_variable_set("@before_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
|
136
|
+
Dispatcher.instance_variable_set("@after_dispatch_callbacks", ActiveSupport::Callbacks::CallbackChain.new)
|
|
137
|
+
|
|
138
|
+
Dispatcher.define_dispatcher_callbacks(true)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def assert_subclasses(howmany, klass, message = klass.subclasses.inspect)
|
|
142
|
+
assert_equal howmany, klass.subclasses.size, message
|
|
143
|
+
end
|
|
144
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class DomAssertionsTest < ActionView::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
super
|
|
6
|
+
@html_only = '<ul><li>foo</li><li>bar</li></ul>'
|
|
7
|
+
@html_with_meaningless_whitespace = %{
|
|
8
|
+
<ul>
|
|
9
|
+
<li>\tfoo </li>
|
|
10
|
+
<li>
|
|
11
|
+
bar
|
|
12
|
+
</li>
|
|
13
|
+
</ul>
|
|
14
|
+
}
|
|
15
|
+
@more_html_with_meaningless_whitespace = %{<ul>
|
|
16
|
+
|
|
17
|
+
<li>foo</li>
|
|
18
|
+
|
|
19
|
+
<li>bar</li></ul>}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
test "assert_dom_equal strips meaningless whitespace from expected string" do
|
|
23
|
+
assert_dom_equal @html_with_meaningless_whitespace, @html_only
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test "assert_dom_equal strips meaningless whitespace from actual string" do
|
|
27
|
+
assert_dom_equal @html_only, @html_with_meaningless_whitespace
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test "assert_dom_equal strips meaningless whitespace from both expected and actual strings" do
|
|
31
|
+
assert_dom_equal @more_html_with_meaningless_whitespace, @html_with_meaningless_whitespace
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test "assert_dom_not_equal strips meaningless whitespace from expected string" do
|
|
35
|
+
assert_assertion_fails { assert_dom_not_equal @html_with_meaningless_whitespace, @html_only }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
test "assert_dom_not_equal strips meaningless whitespace from actual string" do
|
|
39
|
+
assert_assertion_fails { assert_dom_not_equal @html_only, @html_with_meaningless_whitespace }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "assert_dom_not_equal strips meaningless whitespace from both expected and actual strings" do
|
|
43
|
+
assert_assertion_fails do
|
|
44
|
+
assert_dom_not_equal @more_html_with_meaningless_whitespace, @html_with_meaningless_whitespace
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def assert_assertion_fails
|
|
51
|
+
assert_raise(ActiveSupport::TestCase::Assertion) { yield }
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
require 'stringio'
|
|
3
|
+
require 'logger'
|
|
4
|
+
|
|
5
|
+
class FailsafeTest < ActionController::TestCase
|
|
6
|
+
FIXTURE_PUBLIC = "#{File.dirname(__FILE__)}/../fixtures/failsafe".freeze
|
|
7
|
+
|
|
8
|
+
def setup
|
|
9
|
+
@old_error_file_path = ActionController::Failsafe.error_file_path
|
|
10
|
+
ActionController::Failsafe.error_file_path = FIXTURE_PUBLIC
|
|
11
|
+
@app = mock
|
|
12
|
+
@log_io = StringIO.new
|
|
13
|
+
@logger = Logger.new(@log_io)
|
|
14
|
+
@failsafe = ActionController::Failsafe.new(@app)
|
|
15
|
+
@failsafe.stubs(:failsafe_logger).returns(@logger)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def teardown
|
|
19
|
+
ActionController::Failsafe.error_file_path = @old_error_file_path
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def app_will_raise_error!
|
|
23
|
+
@app.expects(:call).then.raises(RuntimeError.new("Printer on fire"))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_calls_app_and_returns_its_return_value
|
|
27
|
+
@app.expects(:call).returns([200, { "Content-Type" => "text/html" }, "ok"])
|
|
28
|
+
assert_equal [200, { "Content-Type" => "text/html" }, "ok"], @failsafe.call({})
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_writes_to_log_file_on_exception
|
|
32
|
+
app_will_raise_error!
|
|
33
|
+
@failsafe.call({})
|
|
34
|
+
assert_match /Printer on fire/, @log_io.string # Logs exception message.
|
|
35
|
+
assert_match /failsafe_test\.rb/, @log_io.string # Logs backtrace.
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_returns_500_internal_server_error_on_exception
|
|
39
|
+
app_will_raise_error!
|
|
40
|
+
response = @failsafe.call({})
|
|
41
|
+
assert_equal 3, response.size # It is a valid Rack response.
|
|
42
|
+
assert_equal 500, response[0] # Status is 500.
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_renders_error_page_file_with_erb
|
|
46
|
+
app_will_raise_error!
|
|
47
|
+
response = @failsafe.call({})
|
|
48
|
+
assert_equal 500, response[0]
|
|
49
|
+
assert_equal "hello my world", response[2].join
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_returns_a_default_message_if_erb_rendering_failed
|
|
53
|
+
app_will_raise_error!
|
|
54
|
+
@failsafe.expects(:render_template).raises(RuntimeError.new("Harddisk is crashing"))
|
|
55
|
+
response = @failsafe.call({})
|
|
56
|
+
assert_equal 500, response[0]
|
|
57
|
+
assert_match /500 Internal Server Error/, response[2].join
|
|
58
|
+
assert_match %r(please read this web application's log file), response[2].join
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class << Object; alias_method :const_available?, :const_defined?; end
|
|
2
|
+
|
|
3
|
+
class ContentController < Class.new(ActionController::Base)
|
|
4
|
+
end
|
|
5
|
+
class NotAController
|
|
6
|
+
end
|
|
7
|
+
module Admin
|
|
8
|
+
class << self; alias_method :const_available?, :const_defined?; end
|
|
9
|
+
class UserController < Class.new(ActionController::Base); end
|
|
10
|
+
class NewsFeedController < Class.new(ActionController::Base); end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# For speed test
|
|
14
|
+
class SpeedController < ActionController::Base; end
|
|
15
|
+
class SearchController < SpeedController; end
|
|
16
|
+
class VideosController < SpeedController; end
|
|
17
|
+
class VideoFileController < SpeedController; end
|
|
18
|
+
class VideoSharesController < SpeedController; end
|
|
19
|
+
class VideoAbusesController < SpeedController; end
|
|
20
|
+
class VideoUploadsController < SpeedController; end
|
|
21
|
+
class VideoVisitsController < SpeedController; end
|
|
22
|
+
class UsersController < SpeedController; end
|
|
23
|
+
class SettingsController < SpeedController; end
|
|
24
|
+
class ChannelsController < SpeedController; end
|
|
25
|
+
class ChannelVideosController < SpeedController; end
|
|
26
|
+
class SessionsController < SpeedController; end
|
|
27
|
+
class LostPasswordsController < SpeedController; end
|
|
28
|
+
class PagesController < SpeedController; end
|
|
29
|
+
|
|
30
|
+
ActionController::Routing::Routes.draw do |map|
|
|
31
|
+
map.route_one 'route_one', :controller => 'elsewhere', :action => 'flash_me'
|
|
32
|
+
map.connect ':controller/:action/:id'
|
|
33
|
+
end
|