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,58 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class Post
|
|
4
|
+
def id
|
|
5
|
+
45
|
|
6
|
+
end
|
|
7
|
+
def body
|
|
8
|
+
"What a wonderful world!"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class RecordTagHelperTest < ActionView::TestCase
|
|
13
|
+
tests ActionView::Helpers::RecordTagHelper
|
|
14
|
+
|
|
15
|
+
def setup
|
|
16
|
+
@post = Post.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_content_tag_for
|
|
20
|
+
expected = %(<li class="post bar" id="post_45"></li>)
|
|
21
|
+
actual = content_tag_for(:li, @post, :class => 'bar') { }
|
|
22
|
+
assert_dom_equal expected, actual
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_content_tag_for_prefix
|
|
26
|
+
expected = %(<ul class="post" id="archived_post_45"></ul>)
|
|
27
|
+
actual = content_tag_for(:ul, @post, :archived) { }
|
|
28
|
+
assert_dom_equal expected, actual
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_content_tag_for_with_extra_html_tags
|
|
32
|
+
expected = %(<tr class="post bar" id="post_45" style='background-color: #f0f0f0'></tr>)
|
|
33
|
+
actual = content_tag_for(:tr, @post, {:class => "bar", :style => "background-color: #f0f0f0"}) { }
|
|
34
|
+
assert_dom_equal expected, actual
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_block_not_in_erb_multiple_calls
|
|
38
|
+
expected = %(<div class="post bar" id="post_45">#{@post.body}</div>)
|
|
39
|
+
actual = div_for(@post, :class => "bar") { @post.body }
|
|
40
|
+
assert_dom_equal expected, actual
|
|
41
|
+
actual = div_for(@post, :class => "bar") { @post.body }
|
|
42
|
+
assert_dom_equal expected, actual
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_block_works_with_content_tag_for_in_erb
|
|
46
|
+
__in_erb_template = ''
|
|
47
|
+
expected = %(<tr class="post" id="post_45">#{@post.body}</tr>)
|
|
48
|
+
actual = content_tag_for(:tr, @post) { concat @post.body }
|
|
49
|
+
assert_dom_equal expected, actual
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_div_for_in_erb
|
|
53
|
+
__in_erb_template = ''
|
|
54
|
+
expected = %(<div class="post bar" id="post_45">#{@post.body}</div>)
|
|
55
|
+
actual = div_for(@post, :class => "bar") { concat @post.body }
|
|
56
|
+
assert_dom_equal expected, actual
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'abstract_unit'
|
|
3
|
+
require 'controller/fake_models'
|
|
4
|
+
|
|
5
|
+
module RenderTestCases
|
|
6
|
+
def setup_view(paths)
|
|
7
|
+
@assigns = { :secret => 'in the sauce' }
|
|
8
|
+
@view = ActionView::Base.new(paths, @assigns)
|
|
9
|
+
|
|
10
|
+
# Reload and register danish language for testing
|
|
11
|
+
I18n.reload!
|
|
12
|
+
I18n.backend.store_translations 'da', {}
|
|
13
|
+
I18n.backend.store_translations 'pt-BR', {}
|
|
14
|
+
|
|
15
|
+
# Ensure original are still the same since we are reindexing view paths
|
|
16
|
+
assert_equal ORIGINAL_LOCALES, I18n.available_locales.map(&:to_s).sort
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_render_file
|
|
20
|
+
assert_equal "Hello world!", @view.render(:file => "test/hello_world.erb")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_render_file_not_using_full_path
|
|
24
|
+
assert_equal "Hello world!", @view.render(:file => "test/hello_world.erb")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_render_file_without_specific_extension
|
|
28
|
+
assert_equal "Hello world!", @view.render(:file => "test/hello_world")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_render_file_with_localization
|
|
32
|
+
old_locale = I18n.locale
|
|
33
|
+
I18n.locale = :da
|
|
34
|
+
assert_equal "Hey verden", @view.render(:file => "test/hello_world")
|
|
35
|
+
ensure
|
|
36
|
+
I18n.locale = old_locale
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_render_file_with_dashed_locale
|
|
40
|
+
old_locale = I18n.locale
|
|
41
|
+
I18n.locale = :"pt-BR"
|
|
42
|
+
assert_equal "Ola mundo", @view.render(:file => "test/hello_world")
|
|
43
|
+
ensure
|
|
44
|
+
I18n.locale = old_locale
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_render_implicit_html_template_from_xhr_request
|
|
48
|
+
old_format = @view.template_format
|
|
49
|
+
@view.template_format = :js
|
|
50
|
+
assert_equal "Hello HTML!", @view.render(:file => "test/render_implicit_html_template_from_xhr_request")
|
|
51
|
+
ensure
|
|
52
|
+
@view.template_format = old_format
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_render_implicit_html_template_from_xhr_request_with_localization
|
|
56
|
+
old_locale = I18n.locale
|
|
57
|
+
old_format = @view.template_format
|
|
58
|
+
I18n.locale = :da
|
|
59
|
+
@view.template_format = :js
|
|
60
|
+
assert_equal "Hey HTML!\n", @view.render(:file => "test/render_implicit_html_template_from_xhr_request")
|
|
61
|
+
ensure
|
|
62
|
+
I18n.locale = old_locale
|
|
63
|
+
@view.template_format = old_format
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_render_file_at_top_level
|
|
67
|
+
assert_equal 'Elastica', @view.render(:file => '/shared')
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_render_file_with_full_path
|
|
71
|
+
template_path = File.join(File.dirname(__FILE__), '../fixtures/test/hello_world.erb')
|
|
72
|
+
assert_equal "Hello world!", @view.render(:file => template_path)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_render_file_with_instance_variables
|
|
76
|
+
assert_equal "The secret is in the sauce\n", @view.render(:file => "test/render_file_with_ivar.erb")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_render_file_with_locals
|
|
80
|
+
locals = { :secret => 'in the sauce' }
|
|
81
|
+
assert_equal "The secret is in the sauce\n", @view.render(:file => "test/render_file_with_locals.erb", :locals => locals)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_render_file_not_using_full_path_with_dot_in_path
|
|
85
|
+
assert_equal "The secret is in the sauce\n", @view.render(:file => "test/dot.directory/render_file_with_ivar")
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_render_has_access_current_template
|
|
89
|
+
assert_equal "test/template.erb", @view.render(:file => "test/template.erb")
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_render_update
|
|
93
|
+
# TODO: You should not have to stub out template because template is self!
|
|
94
|
+
@view.instance_variable_set(:@template, @view)
|
|
95
|
+
assert_equal 'alert("Hello, World!");', @view.render(:update) { |page| page.alert('Hello, World!') }
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_render_partial_from_default
|
|
99
|
+
assert_equal "only partial", @view.render("test/partial_only")
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_render_partial
|
|
103
|
+
assert_equal "only partial", @view.render(:partial => "test/partial_only")
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def test_render_partial_with_format
|
|
107
|
+
assert_equal 'partial html', @view.render(:partial => 'test/partial')
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def test_render_partial_at_top_level
|
|
111
|
+
# file fixtures/_top_level_partial_only.erb (not fixtures/test)
|
|
112
|
+
assert_equal 'top level partial', @view.render(:partial => '/top_level_partial_only')
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def test_render_partial_with_format_at_top_level
|
|
116
|
+
# file fixtures/_top_level_partial.html.erb (not fixtures/test, with format extension)
|
|
117
|
+
assert_equal 'top level partial html', @view.render(:partial => '/top_level_partial')
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_render_partial_with_locals
|
|
121
|
+
assert_equal "5", @view.render(:partial => "test/counter", :locals => { :counter_counter => 5 })
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_render_partial_with_locals_from_default
|
|
125
|
+
assert_equal "only partial", @view.render("test/partial_only", :counter_counter => 5)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def test_render_partial_with_errors
|
|
129
|
+
@view.render(:partial => "test/raise")
|
|
130
|
+
flunk "Render did not raise TemplateError"
|
|
131
|
+
rescue ActionView::TemplateError => e
|
|
132
|
+
assert_match "undefined local variable or method `doesnt_exist'", e.message
|
|
133
|
+
assert_equal "", e.sub_template_message
|
|
134
|
+
assert_equal "1", e.line_number
|
|
135
|
+
assert_equal File.expand_path("#{FIXTURE_LOAD_PATH}/test/_raise.html.erb"), e.file_name
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def test_render_sub_template_with_errors
|
|
139
|
+
@view.render(:file => "test/sub_template_raise")
|
|
140
|
+
flunk "Render did not raise TemplateError"
|
|
141
|
+
rescue ActionView::TemplateError => e
|
|
142
|
+
assert_match "undefined local variable or method `doesnt_exist'", e.message
|
|
143
|
+
assert_equal "Trace of template inclusion: #{File.expand_path("#{FIXTURE_LOAD_PATH}/test/sub_template_raise.html.erb")}", e.sub_template_message
|
|
144
|
+
assert_equal "1", e.line_number
|
|
145
|
+
assert_equal File.expand_path("#{FIXTURE_LOAD_PATH}/test/_raise.html.erb"), e.file_name
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_render_object
|
|
149
|
+
assert_equal "Hello: david", @view.render(:partial => "test/customer", :object => Customer.new("david"))
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def test_render_partial_collection
|
|
153
|
+
assert_equal "Hello: davidHello: mary", @view.render(:partial => "test/customer", :collection => [ Customer.new("david"), Customer.new("mary") ])
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def test_render_partial_collection_as
|
|
157
|
+
assert_equal "david david davidmary mary mary",
|
|
158
|
+
@view.render(:partial => "test/customer_with_var", :collection => [ Customer.new("david"), Customer.new("mary") ], :as => :customer)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def test_render_partial_collection_without_as
|
|
162
|
+
assert_equal "local_inspector,local_inspector_counter,object",
|
|
163
|
+
@view.render(:partial => "test/local_inspector", :collection => [ Customer.new("mary") ])
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def test_render_partial_with_empty_collection_should_return_nil
|
|
167
|
+
assert_nil @view.render(:partial => "test/customer", :collection => [])
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def test_render_partial_with_nil_collection_should_return_nil
|
|
171
|
+
assert_nil @view.render(:partial => "test/customer", :collection => nil)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def test_render_partial_with_nil_values_in_collection
|
|
175
|
+
assert_equal "Hello: davidHello: Anonymous", @view.render(:partial => "test/customer", :collection => [ Customer.new("david"), nil ])
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def test_render_partial_with_empty_array_should_return_nil
|
|
179
|
+
assert_nil @view.render(:partial => [])
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# TODO: The reason for this test is unclear, improve documentation
|
|
183
|
+
def test_render_partial_and_fallback_to_layout
|
|
184
|
+
assert_equal "Before (Josh)\n\nAfter", @view.render(:partial => "test/layout_for_partial", :locals => { :name => "Josh" })
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# TODO: The reason for this test is unclear, improve documentation
|
|
188
|
+
def test_render_missing_xml_partial_and_raise_missing_template
|
|
189
|
+
@view.template_format = :xml
|
|
190
|
+
assert_raise(ActionView::MissingTemplate) { @view.render(:partial => "test/layout_for_partial") }
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_render_inline
|
|
194
|
+
assert_equal "Hello, World!", @view.render(:inline => "Hello, World!")
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def test_render_inline_with_locals
|
|
198
|
+
assert_equal "Hello, Josh!", @view.render(:inline => "Hello, <%= name %>!", :locals => { :name => "Josh" })
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def test_render_fallbacks_to_erb_for_unknown_types
|
|
202
|
+
assert_equal "Hello, World!", @view.render(:inline => "Hello, World!", :type => :bar)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
CustomHandler = lambda do |template|
|
|
206
|
+
"@output_buffer = ''\n" +
|
|
207
|
+
"@output_buffer << 'source: #{template.source.inspect}'\n"
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def test_render_inline_with_compilable_custom_type
|
|
211
|
+
ActionView::Template.register_template_handler :foo, CustomHandler
|
|
212
|
+
assert_equal 'source: "Hello, World!"', @view.render(:inline => "Hello, World!", :type => :foo)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def test_render_inline_with_locals_and_compilable_custom_type
|
|
216
|
+
ActionView::Template.register_template_handler :foo, CustomHandler
|
|
217
|
+
assert_equal 'source: "Hello, <%= name %>!"', @view.render(:inline => "Hello, <%= name %>!", :locals => { :name => "Josh" }, :type => :foo)
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
class LegacyHandler < ActionView::TemplateHandler
|
|
221
|
+
def render(template, local_assigns)
|
|
222
|
+
"source: #{template.source}; locals: #{local_assigns.inspect}"
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def test_render_legacy_handler_with_custom_type
|
|
227
|
+
ActionView::Template.register_template_handler :foo, LegacyHandler
|
|
228
|
+
assert_equal 'source: Hello, <%= name %>!; locals: {:name=>"Josh"}', @view.render(:inline => "Hello, <%= name %>!", :locals => { :name => "Josh" }, :type => :foo)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def test_render_ignores_templates_with_malformed_template_handlers
|
|
232
|
+
%w(malformed malformed.erb malformed.html.erb malformed.en.html.erb).each do |name|
|
|
233
|
+
assert_raise(ActionView::MissingTemplate) { @view.render(:file => "test/malformed/#{name}") }
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def test_template_with_malformed_template_handler_is_reachable_through_its_exact_filename
|
|
238
|
+
assert_equal "Don't render me!", @view.render(:file => 'test/malformed/malformed.html.erb~')
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def test_render_with_layout
|
|
242
|
+
assert_equal %(<title></title>\nHello world!\n),
|
|
243
|
+
@view.render(:file => "test/hello_world.erb", :layout => "layouts/yield")
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def test_render_with_nested_layout
|
|
247
|
+
assert_equal %(<title>title</title>\n<div id="column">column</div>\n<div id="content">content</div>\n),
|
|
248
|
+
@view.render(:file => "test/nested_layout.erb", :layout => "layouts/yield")
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
if '1.9'.respond_to?(:force_encoding)
|
|
252
|
+
def test_render_utf8_template
|
|
253
|
+
result = @view.render(:file => "test/utf8.html.erb", :layouts => "layouts/yield")
|
|
254
|
+
assert_equal "Русский текст\n日本語のテキスト", result
|
|
255
|
+
assert_equal Encoding::UTF_8, result.encoding
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
module TemplatesSetupTeardown
|
|
261
|
+
def setup_view_paths_for(new_cache_template_loading)
|
|
262
|
+
@previous_cache_template_loading, ActionView::Base.cache_template_loading = ActionView::Base.cache_template_loading, new_cache_template_loading
|
|
263
|
+
view_paths = new_cache_template_loading ? CACHED_VIEW_PATHS : ActionView::Base.process_view_paths(CACHED_VIEW_PATHS.map(&:to_s))
|
|
264
|
+
assert_equal(new_cache_template_loading ? ActionView::Template::EagerPath : ActionView::ReloadableTemplate::ReloadablePath, view_paths.first.class)
|
|
265
|
+
setup_view(view_paths)
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def teardown
|
|
269
|
+
ActionView::Base.cache_template_loading = @previous_cache_template_loading
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
class CachedRenderTest < Test::Unit::TestCase
|
|
274
|
+
include TemplatesSetupTeardown
|
|
275
|
+
include RenderTestCases
|
|
276
|
+
|
|
277
|
+
def setup
|
|
278
|
+
setup_view_paths_for(cache_templates = true)
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
class ReloadableRenderTest < Test::Unit::TestCase
|
|
283
|
+
include TemplatesSetupTeardown
|
|
284
|
+
include RenderTestCases
|
|
285
|
+
|
|
286
|
+
def setup
|
|
287
|
+
setup_view_paths_for(cache_templates = false)
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
require 'testing_sandbox'
|
|
3
|
+
|
|
4
|
+
# The exhaustive tests are in test/controller/html/sanitizer_test.rb.
|
|
5
|
+
# This tests the that the helpers hook up correctly to the sanitizer classes.
|
|
6
|
+
class SanitizeHelperTest < ActionView::TestCase
|
|
7
|
+
tests ActionView::Helpers::SanitizeHelper
|
|
8
|
+
include TestingSandbox
|
|
9
|
+
|
|
10
|
+
def test_strip_links
|
|
11
|
+
assert_equal "Dont touch me", strip_links("Dont touch me")
|
|
12
|
+
assert_equal "<a<a", strip_links("<a<a")
|
|
13
|
+
assert_equal "on my mind\nall day long", strip_links("<a href='almost'>on my mind</a>\n<A href='almost'>all day long</A>")
|
|
14
|
+
assert_equal "0wn3d", strip_links("<a href='http://www.rubyonrails.com/'><a href='http://www.rubyonrails.com/' onlclick='steal()'>0wn3d</a></a>")
|
|
15
|
+
assert_equal "Magic", strip_links("<a href='http://www.rubyonrails.com/'>Mag<a href='http://www.ruby-lang.org/'>ic")
|
|
16
|
+
assert_equal "FrrFox", strip_links("<href onlclick='steal()'>FrrFox</a></href>")
|
|
17
|
+
assert_equal "My mind\nall <b>day</b> long", strip_links("<a href='almost'>My mind</a>\n<A href='almost'>all <b>day</b> long</A>")
|
|
18
|
+
assert_equal "all <b>day</b> long", strip_links("<<a>a href='hello'>all <b>day</b> long<</A>/a>")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_sanitize_form
|
|
22
|
+
assert_sanitized "<form action=\"/foo/bar\" method=\"post\"><input></form>", ''
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_should_sanitize_illegal_style_properties
|
|
26
|
+
raw = %(display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;)
|
|
27
|
+
expected = %(display: block; width: 100%; height: 100%; background-color: black; background-image: ; background-x: center; background-y: center;)
|
|
28
|
+
assert_equal expected, sanitize_css(raw)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_strip_tags
|
|
32
|
+
assert_equal("<<<bad html", strip_tags("<<<bad html"))
|
|
33
|
+
assert_equal("<<", strip_tags("<<<bad html>"))
|
|
34
|
+
assert_equal("Dont touch me", strip_tags("Dont touch me"))
|
|
35
|
+
assert_equal("This is a test.", strip_tags("<p>This <u>is<u> a <a href='test.html'><strong>test</strong></a>.</p>"))
|
|
36
|
+
assert_equal("Weirdos", strip_tags("Wei<<a>a onclick='alert(document.cookie);'</a>/>rdos"))
|
|
37
|
+
assert_equal("This is a test.", strip_tags("This is a test."))
|
|
38
|
+
assert_equal(
|
|
39
|
+
%{This is a test.\n\n\nIt no longer contains any HTML.\n}, strip_tags(
|
|
40
|
+
%{<title>This is <b>a <a href="" target="_blank">test</a></b>.</title>\n\n<!-- it has a comment -->\n\n<p>It no <b>longer <strong>contains <em>any <strike>HTML</strike></em>.</strong></b></p>\n}))
|
|
41
|
+
assert_equal "This has a here.", strip_tags("This has a <!-- comment --> here.")
|
|
42
|
+
[nil, '', ' '].each do |blank|
|
|
43
|
+
stripped = strip_tags(blank)
|
|
44
|
+
assert_equal blank, stripped
|
|
45
|
+
assert stripped.html_safe? unless blank.nil?
|
|
46
|
+
end
|
|
47
|
+
assert strip_tags("<script>").html_safe?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_sanitize_is_marked_safe
|
|
51
|
+
assert sanitize("<html><script></script></html>").html_safe?
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def assert_sanitized(text, expected = nil)
|
|
55
|
+
assert_equal((expected || text), sanitize(text))
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class ScriptaculousHelperTest < ActionView::TestCase
|
|
4
|
+
tests ActionView::Helpers::ScriptaculousHelper
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@controller = Class.new do
|
|
8
|
+
def url_for(options)
|
|
9
|
+
url = "http://www.example.com/"
|
|
10
|
+
url << options[:action].to_s if options and options[:action]
|
|
11
|
+
url
|
|
12
|
+
end
|
|
13
|
+
end.new
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_effect
|
|
17
|
+
assert_equal "new Effect.Highlight(\"posts\",{});", visual_effect(:highlight, "posts")
|
|
18
|
+
assert_equal "new Effect.Highlight(\"posts\",{});", visual_effect("highlight", :posts)
|
|
19
|
+
assert_equal "new Effect.Highlight(\"posts\",{});", visual_effect(:highlight, :posts)
|
|
20
|
+
assert_equal "new Effect.Fade(\"fademe\",{duration:4.0});", visual_effect(:fade, "fademe", :duration => 4.0)
|
|
21
|
+
assert_equal "new Effect.Shake(element,{});", visual_effect(:shake)
|
|
22
|
+
assert_equal "new Effect.DropOut(\"dropme\",{queue:'end'});", visual_effect(:drop_out, 'dropme', :queue => :end)
|
|
23
|
+
assert_equal "new Effect.Highlight(\"status\",{endcolor:'#EEEEEE'});", visual_effect(:highlight, 'status', :endcolor => '#EEEEEE')
|
|
24
|
+
assert_equal "new Effect.Highlight(\"status\",{restorecolor:'#500000', startcolor:'#FEFEFE'});", visual_effect(:highlight, 'status', :restorecolor => '#500000', :startcolor => '#FEFEFE')
|
|
25
|
+
|
|
26
|
+
# chop the queue params into a comma separated list
|
|
27
|
+
beginning, ending = 'new Effect.DropOut("dropme",{queue:{', '}});'
|
|
28
|
+
ve = [
|
|
29
|
+
visual_effect(:drop_out, 'dropme', :queue => {:position => "end", :scope => "test", :limit => 2}),
|
|
30
|
+
visual_effect(:drop_out, 'dropme', :queue => {:scope => :list, :limit => 2}),
|
|
31
|
+
visual_effect(:drop_out, 'dropme', :queue => {:position => :end, :scope => :test, :limit => 2})
|
|
32
|
+
].collect { |v| v[beginning.length..-ending.length-1].split(',') }
|
|
33
|
+
|
|
34
|
+
assert ve[0].include?("limit:2")
|
|
35
|
+
assert ve[0].include?("scope:'test'")
|
|
36
|
+
assert ve[0].include?("position:'end'")
|
|
37
|
+
|
|
38
|
+
assert ve[1].include?("limit:2")
|
|
39
|
+
assert ve[1].include?("scope:'list'")
|
|
40
|
+
|
|
41
|
+
assert ve[2].include?("limit:2")
|
|
42
|
+
assert ve[2].include?("scope:'test'")
|
|
43
|
+
assert ve[2].include?("position:'end'")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_toggle_effects
|
|
47
|
+
assert_equal "Effect.toggle(\"posts\",'appear',{});", visual_effect(:toggle_appear, "posts")
|
|
48
|
+
assert_equal "Effect.toggle(\"posts\",'slide',{});", visual_effect(:toggle_slide, "posts")
|
|
49
|
+
assert_equal "Effect.toggle(\"posts\",'blind',{});", visual_effect(:toggle_blind, "posts")
|
|
50
|
+
assert_equal "Effect.toggle(\"posts\",'appear',{});", visual_effect("toggle_appear", "posts")
|
|
51
|
+
assert_equal "Effect.toggle(\"posts\",'slide',{});", visual_effect("toggle_slide", "posts")
|
|
52
|
+
assert_equal "Effect.toggle(\"posts\",'blind',{});", visual_effect("toggle_blind", "posts")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def test_sortable_element
|
|
57
|
+
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>),
|
|
58
|
+
sortable_element("mylist", :url => { :action => "order" })
|
|
59
|
+
assert_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}, tag:'div'})\n//]]>\n</script>),
|
|
60
|
+
sortable_element("mylist", :tag => "div", :constraint => "horizontal", :url => { :action => "order" })
|
|
61
|
+
assert_dom_equal %|<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', containment:['list1','list2'], onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>|,
|
|
62
|
+
sortable_element("mylist", :containment => ['list1','list2'], :constraint => "horizontal", :url => { :action => "order" })
|
|
63
|
+
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nSortable.create(\"mylist\", {constraint:'horizontal', containment:'list1', onUpdate:function(){new Ajax.Request('http://www.example.com/order', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize(\"mylist\")})}})\n//]]>\n</script>),
|
|
64
|
+
sortable_element("mylist", :containment => 'list1', :constraint => "horizontal", :url => { :action => "order" })
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_draggable_element
|
|
68
|
+
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Draggable(\"product_13\", {})\n//]]>\n</script>),
|
|
69
|
+
draggable_element("product_13")
|
|
70
|
+
assert_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Draggable(\"product_13\", {revert:true})\n//]]>\n</script>),
|
|
71
|
+
draggable_element("product_13", :revert => true)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_drop_receiving_element
|
|
75
|
+
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add(\"droptarget1\", {onDrop:function(element){new Ajax.Request('http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}})\n//]]>\n</script>),
|
|
76
|
+
drop_receiving_element("droptarget1")
|
|
77
|
+
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add(\"droptarget1\", {accept:'products', onDrop:function(element){new Ajax.Request('http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}})\n//]]>\n</script>),
|
|
78
|
+
drop_receiving_element("droptarget1", :accept => 'products')
|
|
79
|
+
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add(\"droptarget1\", {accept:'products', onDrop:function(element){new Ajax.Updater('infobox', 'http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}})\n//]]>\n</script>),
|
|
80
|
+
drop_receiving_element("droptarget1", :accept => 'products', :update => 'infobox')
|
|
81
|
+
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add(\"droptarget1\", {accept:['tshirts','mugs'], onDrop:function(element){new Ajax.Updater('infobox', 'http://www.example.com/', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)})}})\n//]]>\n</script>),
|
|
82
|
+
drop_receiving_element("droptarget1", :accept => ['tshirts','mugs'], :update => 'infobox')
|
|
83
|
+
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nDroppables.add("droptarget1", {hoverclass:'dropready', onDrop:function(element){if (confirm('Are you sure?')) { new Ajax.Request('http://www.example.com/update_drop', {asynchronous:true, evalScripts:true, parameters:'id=' + encodeURIComponent(element.id)}); }}})\n//]]>\n</script>),
|
|
84
|
+
drop_receiving_element('droptarget1', :hoverclass=>'dropready', :url=>{:action=>'update_drop'}, :confirm => 'Are you sure?')
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
def protect_against_forgery?
|
|
88
|
+
false
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class TagHelperTest < ActionView::TestCase
|
|
4
|
+
tests ActionView::Helpers::TagHelper
|
|
5
|
+
|
|
6
|
+
def test_tag
|
|
7
|
+
assert_equal "<br />", tag("br")
|
|
8
|
+
assert_equal "<br clear=\"left\" />", tag(:br, :clear => "left")
|
|
9
|
+
assert_equal "<br>", tag("br", nil, true)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_tag_options
|
|
13
|
+
str = tag("p", "class" => "show", :class => "elsewhere")
|
|
14
|
+
assert_match /class="show"/, str
|
|
15
|
+
assert_match /class="elsewhere"/, str
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_tag_options_rejects_nil_option
|
|
19
|
+
assert_equal "<p />", tag("p", :ignored => nil)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_tag_options_accepts_false_option
|
|
23
|
+
assert_equal "<p value=\"false\" />", tag("p", :value => false)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_tag_options_accepts_blank_option
|
|
27
|
+
assert_equal "<p included=\"\" />", tag("p", :included => '')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_tag_options_converts_boolean_option
|
|
31
|
+
assert_equal '<p disabled="disabled" multiple="multiple" readonly="readonly" />',
|
|
32
|
+
tag("p", :disabled => true, :multiple => true, :readonly => true)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_content_tag
|
|
36
|
+
assert_equal "<a href=\"create\">Create</a>", content_tag("a", "Create", "href" => "create")
|
|
37
|
+
assert content_tag("a", "Create", "href" => "create").html_safe?
|
|
38
|
+
assert_equal content_tag("a", "Create", "href" => "create"),
|
|
39
|
+
content_tag("a", "Create", :href => "create")
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_content_tag_with_block_in_erb
|
|
43
|
+
__in_erb_template = ''
|
|
44
|
+
content_tag(:div) { concat "Hello world!" }
|
|
45
|
+
assert_dom_equal "<div>Hello world!</div>", output_buffer
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_content_tag_with_block_and_options_in_erb
|
|
49
|
+
__in_erb_template = ''
|
|
50
|
+
content_tag(:div, :class => "green") { concat "Hello world!" }
|
|
51
|
+
assert_dom_equal %(<div class="green">Hello world!</div>), output_buffer
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_content_tag_with_block_and_options_out_of_erb
|
|
55
|
+
assert_dom_equal %(<div class="green">Hello world!</div>), content_tag(:div, :class => "green") { "Hello world!" }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_content_tag_with_block_and_options_outside_out_of_erb
|
|
59
|
+
assert_equal content_tag("a", "Create", :href => "create"),
|
|
60
|
+
content_tag("a", "href" => "create") { "Create" }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_content_tag_nested_in_content_tag_out_of_erb
|
|
64
|
+
assert_equal content_tag("p", content_tag("b", "Hello")),
|
|
65
|
+
content_tag("p") { content_tag("b", "Hello") },
|
|
66
|
+
output_buffer
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_content_tag_nested_in_content_tag_in_erb
|
|
70
|
+
__in_erb_template = true
|
|
71
|
+
content_tag("p") { concat content_tag("b", "Hello") }
|
|
72
|
+
assert_equal '<p><b>Hello</b></p>', output_buffer
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_cdata_section
|
|
76
|
+
assert_equal "<![CDATA[<hello world>]]>", cdata_section("<hello world>")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_escape_once
|
|
80
|
+
assert_equal '1 < 2 & 3', escape_once('1 < 2 & 3')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_double_escaping_attributes
|
|
84
|
+
['1&2', '1 < 2', '“test“'].each do |escaped|
|
|
85
|
+
assert_equal %(<a href="#{escaped}" />), tag('a', :href => escaped)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_skip_invalid_escaped_attributes
|
|
90
|
+
['&1;', 'dfa3;', '& #123;'].each do |escaped|
|
|
91
|
+
assert_equal %(<a href="#{escaped.gsub /&/, '&'}" />), tag('a', :href => escaped)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_disable_escaping
|
|
96
|
+
assert_equal '<a href="&" />', tag('a', { :href => '&' }, false, false)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
class TemplateTest < Test::Unit::TestCase
|
|
4
|
+
def test_template_path_parsing
|
|
5
|
+
with_options :base_path => nil, :name => 'abc', :locale => nil, :format => 'html', :extension => 'erb' do |t|
|
|
6
|
+
t.assert_parses_template_path 'abc.en.html.erb', :locale => 'en'
|
|
7
|
+
t.assert_parses_template_path 'abc.en.plain.html.erb', :locale => 'en', :format => 'plain.html'
|
|
8
|
+
t.assert_parses_template_path 'abc.html.erb'
|
|
9
|
+
t.assert_parses_template_path 'abc.plain.html.erb', :format => 'plain.html'
|
|
10
|
+
t.assert_parses_template_path 'abc.erb', :format => nil
|
|
11
|
+
t.assert_parses_template_path 'abc.html', :extension => nil
|
|
12
|
+
|
|
13
|
+
t.assert_parses_template_path '_abc.html.erb', :name => '_abc'
|
|
14
|
+
|
|
15
|
+
t.assert_parses_template_path 'test/abc.html.erb', :base_path => 'test'
|
|
16
|
+
t.assert_parses_template_path './test/abc.html.erb', :base_path => './test'
|
|
17
|
+
t.assert_parses_template_path '../test/abc.html.erb', :base_path => '../test'
|
|
18
|
+
|
|
19
|
+
t.assert_parses_template_path 'abc', :extension => nil, :format => nil, :name => nil
|
|
20
|
+
t.assert_parses_template_path 'abc.xxx', :extension => nil, :format => 'xxx', :name => 'abc'
|
|
21
|
+
t.assert_parses_template_path 'abc.html.xxx', :extension => nil, :format => 'xxx', :name => 'abc'
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
def assert_parses_template_path(path, parse_results)
|
|
27
|
+
template = ActionView::Template.new(path, '')
|
|
28
|
+
parse_results.each_pair do |k, v|
|
|
29
|
+
assert_block(%Q{Expected template to parse #{k.inspect} from "#{path}" as #{v.inspect}, but got #{template.send(k).inspect}}) { v == template.send(k) }
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|