eactionpack 2.1.2
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 +7 -0
- data/MIT-LICENSE +21 -0
- data/README +469 -0
- data/RUNNING_UNIT_TESTS +24 -0
- data/Rakefile +146 -0
- data/install.rb +30 -0
- data/lib/action_controller.rb +79 -0
- data/lib/action_controller/assertions.rb +69 -0
- data/lib/action_controller/assertions/dom_assertions.rb +39 -0
- data/lib/action_controller/assertions/model_assertions.rb +20 -0
- data/lib/action_controller/assertions/response_assertions.rb +172 -0
- data/lib/action_controller/assertions/routing_assertions.rb +146 -0
- data/lib/action_controller/assertions/selector_assertions.rb +491 -0
- data/lib/action_controller/assertions/tag_assertions.rb +130 -0
- data/lib/action_controller/base.rb +1288 -0
- data/lib/action_controller/benchmarking.rb +94 -0
- data/lib/action_controller/caching.rb +72 -0
- data/lib/action_controller/caching/actions.rb +144 -0
- data/lib/action_controller/caching/fragments.rb +138 -0
- data/lib/action_controller/caching/pages.rb +154 -0
- data/lib/action_controller/caching/sql_cache.rb +18 -0
- data/lib/action_controller/caching/sweeping.rb +97 -0
- data/lib/action_controller/cgi_ext.rb +16 -0
- data/lib/action_controller/cgi_ext/cookie.rb +110 -0
- data/lib/action_controller/cgi_ext/query_extension.rb +22 -0
- data/lib/action_controller/cgi_ext/session.rb +73 -0
- data/lib/action_controller/cgi_ext/stdinput.rb +24 -0
- data/lib/action_controller/cgi_process.rb +223 -0
- data/lib/action_controller/components.rb +166 -0
- data/lib/action_controller/cookies.rb +96 -0
- data/lib/action_controller/dispatcher.rb +162 -0
- data/lib/action_controller/filters.rb +642 -0
- data/lib/action_controller/flash.rb +172 -0
- data/lib/action_controller/headers.rb +31 -0
- data/lib/action_controller/helpers.rb +221 -0
- data/lib/action_controller/http_authentication.rb +124 -0
- data/lib/action_controller/integration.rb +634 -0
- data/lib/action_controller/layout.rb +309 -0
- data/lib/action_controller/mime_responds.rb +173 -0
- data/lib/action_controller/mime_type.rb +186 -0
- data/lib/action_controller/mime_types.rb +20 -0
- data/lib/action_controller/polymorphic_routes.rb +191 -0
- data/lib/action_controller/record_identifier.rb +102 -0
- data/lib/action_controller/request.rb +764 -0
- data/lib/action_controller/request_forgery_protection.rb +140 -0
- data/lib/action_controller/request_profiler.rb +169 -0
- data/lib/action_controller/rescue.rb +258 -0
- data/lib/action_controller/resources.rb +572 -0
- data/lib/action_controller/response.rb +76 -0
- data/lib/action_controller/routing.rb +387 -0
- data/lib/action_controller/routing/builder.rb +203 -0
- data/lib/action_controller/routing/optimisations.rb +120 -0
- data/lib/action_controller/routing/recognition_optimisation.rb +162 -0
- data/lib/action_controller/routing/route.rb +240 -0
- data/lib/action_controller/routing/route_set.rb +436 -0
- data/lib/action_controller/routing/routing_ext.rb +46 -0
- data/lib/action_controller/routing/segments.rb +283 -0
- data/lib/action_controller/session/active_record_store.rb +340 -0
- data/lib/action_controller/session/cookie_store.rb +166 -0
- data/lib/action_controller/session/drb_server.rb +32 -0
- data/lib/action_controller/session/drb_store.rb +35 -0
- data/lib/action_controller/session/mem_cache_store.rb +98 -0
- data/lib/action_controller/session_management.rb +158 -0
- data/lib/action_controller/status_codes.rb +88 -0
- data/lib/action_controller/streaming.rb +155 -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 +83 -0
- data/lib/action_controller/test_process.rb +526 -0
- data/lib/action_controller/url_rewriter.rb +142 -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/verification.rb +130 -0
- data/lib/action_pack.rb +24 -0
- data/lib/action_pack/version.rb +9 -0
- data/lib/action_view.rb +44 -0
- data/lib/action_view/base.rb +335 -0
- data/lib/action_view/helpers/active_record_helper.rb +276 -0
- data/lib/action_view/helpers/asset_tag_helper.rb +599 -0
- data/lib/action_view/helpers/atom_feed_helper.rb +143 -0
- data/lib/action_view/helpers/benchmark_helper.rb +33 -0
- data/lib/action_view/helpers/cache_helper.rb +40 -0
- data/lib/action_view/helpers/capture_helper.rb +161 -0
- data/lib/action_view/helpers/date_helper.rb +711 -0
- data/lib/action_view/helpers/debug_helper.rb +31 -0
- data/lib/action_view/helpers/form_helper.rb +767 -0
- data/lib/action_view/helpers/form_options_helper.rb +458 -0
- data/lib/action_view/helpers/form_tag_helper.rb +458 -0
- data/lib/action_view/helpers/javascript_helper.rb +148 -0
- data/lib/action_view/helpers/number_helper.rb +186 -0
- data/lib/action_view/helpers/record_identification_helper.rb +20 -0
- data/lib/action_view/helpers/record_tag_helper.rb +59 -0
- data/lib/action_view/helpers/sanitize_helper.rb +229 -0
- data/lib/action_view/helpers/tag_helper.rb +134 -0
- data/lib/action_view/helpers/text_helper.rb +507 -0
- data/lib/action_view/helpers/url_helper.rb +573 -0
- data/lib/action_view/inline_template.rb +20 -0
- data/lib/action_view/partial_template.rb +70 -0
- data/lib/action_view/partials.rb +158 -0
- data/lib/action_view/template.rb +125 -0
- data/lib/action_view/template_error.rb +110 -0
- data/lib/action_view/template_finder.rb +176 -0
- data/lib/action_view/template_handler.rb +34 -0
- data/lib/action_view/template_handlers/builder.rb +27 -0
- data/lib/action_view/template_handlers/compilable.rb +128 -0
- data/lib/action_view/template_handlers/erb.rb +56 -0
- data/lib/action_view/test_case.rb +58 -0
- data/lib/actionpack.rb +1 -0
- data/test/abstract_unit.rb +36 -0
- data/test/active_record_unit.rb +105 -0
- data/test/activerecord/active_record_store_test.rb +141 -0
- data/test/activerecord/render_partial_with_record_identification_test.rb +191 -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 +43 -0
- data/test/controller/assert_select_test.rb +331 -0
- data/test/controller/base_test.rb +219 -0
- data/test/controller/benchmark_test.rb +32 -0
- data/test/controller/caching_test.rb +581 -0
- data/test/controller/capture_test.rb +89 -0
- data/test/controller/cgi_test.rb +116 -0
- data/test/controller/components_test.rb +140 -0
- data/test/controller/content_type_test.rb +139 -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 +146 -0
- data/test/controller/custom_handler_test.rb +45 -0
- data/test/controller/deprecation/deprecated_base_methods_test.rb +37 -0
- data/test/controller/dispatcher_test.rb +105 -0
- data/test/controller/fake_controllers.rb +33 -0
- data/test/controller/fake_models.rb +11 -0
- data/test/controller/filter_params_test.rb +49 -0
- data/test/controller/filters_test.rb +881 -0
- data/test/controller/flash_test.rb +146 -0
- data/test/controller/header_test.rb +14 -0
- data/test/controller/helper_test.rb +210 -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 +269 -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_authentication_test.rb +54 -0
- data/test/controller/integration_test.rb +252 -0
- data/test/controller/integration_upload_test.rb +43 -0
- data/test/controller/layout_test.rb +255 -0
- data/test/controller/mime_responds_test.rb +514 -0
- data/test/controller/mime_type_test.rb +84 -0
- data/test/controller/new_render_test.rb +843 -0
- data/test/controller/polymorphic_routes_test.rb +174 -0
- data/test/controller/record_identifier_test.rb +139 -0
- data/test/controller/redirect_test.rb +289 -0
- data/test/controller/render_test.rb +484 -0
- data/test/controller/request_forgery_protection_test.rb +305 -0
- data/test/controller/request_test.rb +928 -0
- data/test/controller/rescue_test.rb +517 -0
- data/test/controller/resources_test.rb +873 -0
- data/test/controller/routing_test.rb +2464 -0
- data/test/controller/selector_test.rb +628 -0
- data/test/controller/send_file_test.rb +138 -0
- data/test/controller/session/cookie_store_test.rb +258 -0
- data/test/controller/session/mem_cache_store_test.rb +181 -0
- data/test/controller/session_fixation_test.rb +89 -0
- data/test/controller/session_management_test.rb +178 -0
- data/test/controller/test_test.rb +695 -0
- data/test/controller/url_rewriter_test.rb +310 -0
- data/test/controller/verification_test.rb +270 -0
- data/test/controller/view_paths_test.rb +140 -0
- data/test/controller/webservice_test.rb +229 -0
- data/test/fixtures/addresses/list.erb +1 -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_js.js.erb +1 -0
- data/test/fixtures/content_type/render_default_for_rhtml.rhtml +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.yml +21 -0
- data/test/fixtures/developers_projects.yml +13 -0
- data/test/fixtures/fun/games/hello_world.erb +1 -0
- data/test/fixtures/functional_caching/_partial.erb +3 -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/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/alt/hello.rhtml +1 -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/block_with_layout.erb +3 -0
- data/test/fixtures/layouts/builder.builder +3 -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/yield.erb +2 -0
- data/test/fixtures/mascot.rb +3 -0
- data/test/fixtures/mascots.yml +4 -0
- data/test/fixtures/mascots/_mascot.html.erb +1 -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/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/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.yml +7 -0
- data/test/fixtures/public/404.html +1 -0
- data/test/fixtures/public/500.html +1 -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/robber.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/version.1.0.css +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/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/_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/_form.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_partial.html.erb +3 -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/_person.erb +2 -0
- data/test/fixtures/test/_raise.html.erb +1 -0
- data/test/fixtures/test/action_talk_to_layout.erb +2 -0
- data/test/fixtures/test/block_content_for.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/dot.directory/render_file_with_ivar.erb +1 -0
- data/test/fixtures/test/enum_rjs_test.rjs +6 -0
- data/test/fixtures/test/erb_content_for.erb +2 -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.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/list.erb +1 -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_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_to_string_test.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/topic.rb +3 -0
- data/test/fixtures/topics.yml +22 -0
- data/test/fixtures/topics/_topic.html.erb +1 -0
- data/test/template/active_record_helper_test.rb +268 -0
- data/test/template/asset_tag_helper_test.rb +514 -0
- data/test/template/atom_feed_helper_test.rb +179 -0
- data/test/template/benchmark_helper_test.rb +60 -0
- data/test/template/date_helper_test.rb +1791 -0
- data/test/template/deprecated_erb_variable_test.rb +9 -0
- data/test/template/erb_util_test.rb +24 -0
- data/test/template/form_helper_test.rb +885 -0
- data/test/template/form_options_helper_test.rb +1333 -0
- data/test/template/form_tag_helper_test.rb +272 -0
- data/test/template/javascript_helper_test.rb +73 -0
- data/test/template/number_helper_test.rb +97 -0
- data/test/template/record_tag_helper_test.rb +54 -0
- data/test/template/sanitize_helper_test.rb +48 -0
- data/test/template/tag_helper_test.rb +77 -0
- data/test/template/template_finder_test.rb +73 -0
- data/test/template/template_object_test.rb +95 -0
- data/test/template/test_test.rb +56 -0
- data/test/template/text_helper_test.rb +367 -0
- data/test/template/url_helper_test.rb +544 -0
- data/test/testing_sandbox.rb +15 -0
- metadata +469 -0
data/lib/actionpack.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'action_pack'
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
|
2
|
+
$:.unshift(File.dirname(__FILE__) + '/../../activesupport/lib/active_support')
|
|
3
|
+
$:.unshift(File.dirname(__FILE__) + '/fixtures/helpers')
|
|
4
|
+
|
|
5
|
+
require 'yaml'
|
|
6
|
+
require 'stringio'
|
|
7
|
+
require 'test/unit'
|
|
8
|
+
require 'action_controller'
|
|
9
|
+
require 'action_controller/cgi_ext'
|
|
10
|
+
require 'action_controller/test_process'
|
|
11
|
+
require 'action_view/test_case'
|
|
12
|
+
|
|
13
|
+
begin
|
|
14
|
+
require 'ruby-debug'
|
|
15
|
+
rescue LoadError
|
|
16
|
+
# Debugging disabled. `gem install ruby-debug` to enable.
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Show backtraces for deprecated behavior for quicker cleanup.
|
|
20
|
+
ActiveSupport::Deprecation.debug = true
|
|
21
|
+
|
|
22
|
+
ActionController::Base.logger = nil
|
|
23
|
+
ActionController::Routing::Routes.reload rescue nil
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# Wrap tests that use Mocha and skip if unavailable.
|
|
27
|
+
def uses_mocha(test_name)
|
|
28
|
+
unless Object.const_defined?(:Mocha)
|
|
29
|
+
require 'mocha'
|
|
30
|
+
require 'stubba'
|
|
31
|
+
end
|
|
32
|
+
yield
|
|
33
|
+
rescue LoadError => load_error
|
|
34
|
+
raise unless load_error.message =~ /mocha/i
|
|
35
|
+
$stderr.puts "Skipping #{test_name} tests. `gem install mocha` and try again."
|
|
36
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
require 'abstract_unit'
|
|
2
|
+
|
|
3
|
+
# Define the essentials
|
|
4
|
+
class ActiveRecordTestConnector
|
|
5
|
+
cattr_accessor :able_to_connect
|
|
6
|
+
cattr_accessor :connected
|
|
7
|
+
|
|
8
|
+
# Set our defaults
|
|
9
|
+
self.connected = false
|
|
10
|
+
self.able_to_connect = true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Try to grab AR
|
|
14
|
+
if defined?(ActiveRecord) && defined?(Fixtures)
|
|
15
|
+
$stderr.puts 'Active Record is already loaded, running tests'
|
|
16
|
+
else
|
|
17
|
+
$stderr.print 'Attempting to load Active Record... '
|
|
18
|
+
begin
|
|
19
|
+
PATH_TO_AR = "#{File.dirname(__FILE__)}/../../activerecord/lib"
|
|
20
|
+
raise LoadError, "#{PATH_TO_AR} doesn't exist" unless File.directory?(PATH_TO_AR)
|
|
21
|
+
$LOAD_PATH.unshift PATH_TO_AR
|
|
22
|
+
require 'active_record'
|
|
23
|
+
require 'active_record/fixtures'
|
|
24
|
+
$stderr.puts 'success'
|
|
25
|
+
rescue LoadError => e
|
|
26
|
+
$stderr.print "failed. Skipping Active Record assertion tests: #{e}"
|
|
27
|
+
ActiveRecordTestConnector.able_to_connect = false
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
$stderr.flush
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# Define the rest of the connector
|
|
35
|
+
class ActiveRecordTestConnector
|
|
36
|
+
class << self
|
|
37
|
+
def setup
|
|
38
|
+
unless self.connected || !self.able_to_connect
|
|
39
|
+
setup_connection
|
|
40
|
+
load_schema
|
|
41
|
+
require_fixture_models
|
|
42
|
+
self.connected = true
|
|
43
|
+
end
|
|
44
|
+
rescue Exception => e # errors from ActiveRecord setup
|
|
45
|
+
$stderr.puts "\nSkipping ActiveRecord assertion tests: #{e}"
|
|
46
|
+
#$stderr.puts " #{e.backtrace.join("\n ")}\n"
|
|
47
|
+
self.able_to_connect = false
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
def setup_connection
|
|
53
|
+
if Object.const_defined?(:ActiveRecord)
|
|
54
|
+
defaults = { :database => ':memory:' }
|
|
55
|
+
begin
|
|
56
|
+
options = defaults.merge :adapter => 'sqlite3', :timeout => 500
|
|
57
|
+
ActiveRecord::Base.establish_connection(options)
|
|
58
|
+
ActiveRecord::Base.configurations = { 'sqlite3_ar_integration' => options }
|
|
59
|
+
ActiveRecord::Base.connection
|
|
60
|
+
rescue Exception # errors from establishing a connection
|
|
61
|
+
$stderr.puts 'SQLite 3 unavailable; trying SQLite 2.'
|
|
62
|
+
options = defaults.merge :adapter => 'sqlite'
|
|
63
|
+
ActiveRecord::Base.establish_connection(options)
|
|
64
|
+
ActiveRecord::Base.configurations = { 'sqlite2_ar_integration' => options }
|
|
65
|
+
ActiveRecord::Base.connection
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
Object.send(:const_set, :QUOTED_TYPE, ActiveRecord::Base.connection.quote_column_name('type')) unless Object.const_defined?(:QUOTED_TYPE)
|
|
69
|
+
else
|
|
70
|
+
raise "Can't setup connection since ActiveRecord isn't loaded."
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Load actionpack sqlite tables
|
|
75
|
+
def load_schema
|
|
76
|
+
File.read(File.dirname(__FILE__) + "/fixtures/db_definitions/sqlite.sql").split(';').each do |sql|
|
|
77
|
+
ActiveRecord::Base.connection.execute(sql) unless sql.blank?
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def require_fixture_models
|
|
82
|
+
Dir.glob(File.dirname(__FILE__) + "/fixtures/*.rb").each {|f| require f}
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
class ActiveRecordTestCase < ActiveSupport::TestCase
|
|
88
|
+
# Set our fixture path
|
|
89
|
+
if ActiveRecordTestConnector.able_to_connect
|
|
90
|
+
self.fixture_path = "#{File.dirname(__FILE__)}/fixtures/"
|
|
91
|
+
self.use_transactional_fixtures = false
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def self.fixtures(*args)
|
|
95
|
+
super if ActiveRecordTestConnector.connected
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def run(*args)
|
|
99
|
+
super if ActiveRecordTestConnector.connected
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def default_test; end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
ActiveRecordTestConnector.setup
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# These tests exercise CGI::Session::ActiveRecordStore, so you're going to
|
|
2
|
+
# need AR in a sibling directory to AP and have SQLite installed.
|
|
3
|
+
require 'active_record_unit'
|
|
4
|
+
require 'action_controller/session/active_record_store'
|
|
5
|
+
|
|
6
|
+
module CommonActiveRecordStoreTests
|
|
7
|
+
def test_basics
|
|
8
|
+
s = session_class.new(:session_id => '1234', :data => { 'foo' => 'bar' })
|
|
9
|
+
assert_equal 'bar', s.data['foo']
|
|
10
|
+
assert s.save
|
|
11
|
+
assert_equal 'bar', s.data['foo']
|
|
12
|
+
|
|
13
|
+
assert_not_nil t = session_class.find_by_session_id('1234')
|
|
14
|
+
assert_not_nil t.data
|
|
15
|
+
assert_equal 'bar', t.data['foo']
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_reload_same_session
|
|
19
|
+
@new_session.update
|
|
20
|
+
reloaded = CGI::Session.new(CGI.new, 'session_id' => @new_session.session_id, 'database_manager' => CGI::Session::ActiveRecordStore)
|
|
21
|
+
assert_equal 'bar', reloaded['foo']
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_tolerates_close_close
|
|
25
|
+
assert_nothing_raised do
|
|
26
|
+
@new_session.close
|
|
27
|
+
@new_session.close
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class ActiveRecordStoreTest < ActiveRecordTestCase
|
|
33
|
+
include CommonActiveRecordStoreTests
|
|
34
|
+
|
|
35
|
+
def session_class
|
|
36
|
+
CGI::Session::ActiveRecordStore::Session
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def session_id_column
|
|
40
|
+
"session_id"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def setup
|
|
44
|
+
session_class.create_table!
|
|
45
|
+
|
|
46
|
+
ENV['REQUEST_METHOD'] = 'GET'
|
|
47
|
+
ENV['REQUEST_URI'] = '/'
|
|
48
|
+
CGI::Session::ActiveRecordStore.session_class = session_class
|
|
49
|
+
|
|
50
|
+
@cgi = CGI.new
|
|
51
|
+
@new_session = CGI::Session.new(@cgi, 'database_manager' => CGI::Session::ActiveRecordStore, 'new_session' => true)
|
|
52
|
+
@new_session['foo'] = 'bar'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# this test only applies for eager session saving
|
|
56
|
+
# def test_another_instance
|
|
57
|
+
# @another = CGI::Session.new(@cgi, 'session_id' => @new_session.session_id, 'database_manager' => CGI::Session::ActiveRecordStore)
|
|
58
|
+
# assert_equal @new_session.session_id, @another.session_id
|
|
59
|
+
# end
|
|
60
|
+
|
|
61
|
+
def test_model_attribute
|
|
62
|
+
assert_kind_of CGI::Session::ActiveRecordStore::Session, @new_session.model
|
|
63
|
+
assert_equal({ 'foo' => 'bar' }, @new_session.model.data)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_save_unloaded_session
|
|
67
|
+
c = session_class.connection
|
|
68
|
+
bogus_class = c.quote(ActiveSupport::Base64.encode64("\004\010o:\vBlammo\000"))
|
|
69
|
+
c.insert("INSERT INTO #{session_class.table_name} ('#{session_id_column}', 'data') VALUES ('abcdefghijklmnop', #{bogus_class})")
|
|
70
|
+
|
|
71
|
+
sess = session_class.find_by_session_id('abcdefghijklmnop')
|
|
72
|
+
assert_not_nil sess
|
|
73
|
+
assert !sess.loaded?
|
|
74
|
+
|
|
75
|
+
# because the session is not loaded, the save should be a no-op. If it
|
|
76
|
+
# isn't, this'll try and unmarshall the bogus class, and should get an error.
|
|
77
|
+
assert_nothing_raised { sess.save }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def teardown
|
|
81
|
+
session_class.drop_table!
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
class ColumnLimitTest < ActiveRecordTestCase
|
|
86
|
+
def setup
|
|
87
|
+
@session_class = CGI::Session::ActiveRecordStore::Session
|
|
88
|
+
@session_class.create_table!
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def teardown
|
|
92
|
+
@session_class.drop_table!
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_protection_from_data_larger_than_column
|
|
96
|
+
# Can't test this unless there is a limit
|
|
97
|
+
return unless limit = @session_class.data_column_size_limit
|
|
98
|
+
too_big = ':(' * limit
|
|
99
|
+
s = @session_class.new(:session_id => '666', :data => {'foo' => too_big})
|
|
100
|
+
s.data
|
|
101
|
+
assert_raise(ActionController::SessionOverflowError) { s.save }
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
class DeprecatedActiveRecordStoreTest < ActiveRecordStoreTest
|
|
106
|
+
def session_id_column
|
|
107
|
+
"sessid"
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def setup
|
|
111
|
+
session_class.connection.execute 'create table old_sessions (id integer primary key, sessid text unique, data text)'
|
|
112
|
+
session_class.table_name = 'old_sessions'
|
|
113
|
+
session_class.send :setup_sessid_compatibility!
|
|
114
|
+
|
|
115
|
+
ENV['REQUEST_METHOD'] = 'GET'
|
|
116
|
+
CGI::Session::ActiveRecordStore.session_class = session_class
|
|
117
|
+
|
|
118
|
+
@new_session = CGI::Session.new(CGI.new, 'database_manager' => CGI::Session::ActiveRecordStore, 'new_session' => true)
|
|
119
|
+
@new_session['foo'] = 'bar'
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def teardown
|
|
123
|
+
session_class.connection.execute 'drop table old_sessions'
|
|
124
|
+
session_class.table_name = 'sessions'
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
class SqlBypassActiveRecordStoreTest < ActiveRecordStoreTest
|
|
129
|
+
def session_class
|
|
130
|
+
unless defined? @session_class
|
|
131
|
+
@session_class = CGI::Session::ActiveRecordStore::SqlBypass
|
|
132
|
+
@session_class.connection = CGI::Session::ActiveRecordStore::Session.connection
|
|
133
|
+
end
|
|
134
|
+
@session_class
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_model_attribute
|
|
138
|
+
assert_kind_of CGI::Session::ActiveRecordStore::SqlBypass, @new_session.model
|
|
139
|
+
assert_equal({ 'foo' => 'bar' }, @new_session.model.data)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
require 'active_record_unit'
|
|
2
|
+
|
|
3
|
+
class RenderPartialWithRecordIdentificationController < ActionController::Base
|
|
4
|
+
def render_with_has_many_and_belongs_to_association
|
|
5
|
+
@developer = Developer.find(1)
|
|
6
|
+
render :partial => @developer.projects
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def render_with_has_many_association
|
|
10
|
+
@topic = Topic.find(1)
|
|
11
|
+
render :partial => @topic.replies
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def render_with_named_scope
|
|
15
|
+
render :partial => Reply.base
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def render_with_has_many_through_association
|
|
19
|
+
@developer = Developer.find(:first)
|
|
20
|
+
render :partial => @developer.topics
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def render_with_has_one_association
|
|
24
|
+
@company = Company.find(1)
|
|
25
|
+
render :partial => @company.mascot
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def render_with_belongs_to_association
|
|
29
|
+
@reply = Reply.find(1)
|
|
30
|
+
render :partial => @reply.topic
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def render_with_record
|
|
34
|
+
@developer = Developer.find(:first)
|
|
35
|
+
render :partial => @developer
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def render_with_record_collection
|
|
39
|
+
@developers = Developer.find(:all)
|
|
40
|
+
render :partial => @developers
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
RenderPartialWithRecordIdentificationController.view_paths = [ File.dirname(__FILE__) + "/../fixtures/" ]
|
|
44
|
+
|
|
45
|
+
class RenderPartialWithRecordIdentificationTest < ActiveRecordTestCase
|
|
46
|
+
fixtures :developers, :projects, :developers_projects, :topics, :replies, :companies, :mascots
|
|
47
|
+
|
|
48
|
+
def setup
|
|
49
|
+
@controller = RenderPartialWithRecordIdentificationController.new
|
|
50
|
+
@request = ActionController::TestRequest.new
|
|
51
|
+
@response = ActionController::TestResponse.new
|
|
52
|
+
super
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_rendering_partial_with_has_many_and_belongs_to_association
|
|
56
|
+
get :render_with_has_many_and_belongs_to_association
|
|
57
|
+
assert_template 'projects/_project'
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_rendering_partial_with_has_many_association
|
|
61
|
+
get :render_with_has_many_association
|
|
62
|
+
assert_template 'replies/_reply'
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def test_rendering_partial_with_named_scope
|
|
66
|
+
get :render_with_named_scope
|
|
67
|
+
assert_template 'replies/_reply'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_render_with_record
|
|
71
|
+
get :render_with_record
|
|
72
|
+
assert_template 'developers/_developer'
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_render_with_record_collection
|
|
76
|
+
get :render_with_record_collection
|
|
77
|
+
assert_template 'developers/_developer'
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_rendering_partial_with_has_one_association
|
|
81
|
+
mascot = Company.find(1).mascot
|
|
82
|
+
get :render_with_has_one_association
|
|
83
|
+
assert_template 'mascots/_mascot'
|
|
84
|
+
assert_equal mascot.name, @response.body
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class RenderPartialWithRecordIdentificationController < ActionController::Base
|
|
89
|
+
def render_with_has_many_and_belongs_to_association
|
|
90
|
+
@developer = Developer.find(1)
|
|
91
|
+
render :partial => @developer.projects
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def render_with_has_many_association
|
|
95
|
+
@topic = Topic.find(1)
|
|
96
|
+
render :partial => @topic.replies
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def render_with_has_many_through_association
|
|
100
|
+
@developer = Developer.find(:first)
|
|
101
|
+
render :partial => @developer.topics
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def render_with_belongs_to_association
|
|
105
|
+
@reply = Reply.find(1)
|
|
106
|
+
render :partial => @reply.topic
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def render_with_record
|
|
110
|
+
@developer = Developer.find(:first)
|
|
111
|
+
render :partial => @developer
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def render_with_record_collection
|
|
115
|
+
@developers = Developer.find(:all)
|
|
116
|
+
render :partial => @developers
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
RenderPartialWithRecordIdentificationController.view_paths = [ File.dirname(__FILE__) + "/../fixtures/" ]
|
|
120
|
+
|
|
121
|
+
class Game < Struct.new(:name, :id)
|
|
122
|
+
def to_param
|
|
123
|
+
id.to_s
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
module Fun
|
|
128
|
+
class NestedController < ActionController::Base
|
|
129
|
+
def render_with_record_in_nested_controller
|
|
130
|
+
render :partial => Game.new("Pong")
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def render_with_record_collection_in_nested_controller
|
|
134
|
+
render :partial => [ Game.new("Pong"), Game.new("Tank") ]
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
NestedController.view_paths = [ File.dirname(__FILE__) + "/../fixtures/" ]
|
|
138
|
+
|
|
139
|
+
module Serious
|
|
140
|
+
class NestedDeeperController < ActionController::Base
|
|
141
|
+
def render_with_record_in_deeper_nested_controller
|
|
142
|
+
render :partial => Game.new("Chess")
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def render_with_record_collection_in_deeper_nested_controller
|
|
146
|
+
render :partial => [ Game.new("Chess"), Game.new("Sudoku"), Game.new("Solitaire") ]
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
NestedDeeperController.view_paths = [ File.dirname(__FILE__) + "/../fixtures/" ]
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
class RenderPartialWithRecordIdentificationAndNestedControllersTest < ActiveRecordTestCase
|
|
154
|
+
def setup
|
|
155
|
+
@controller = Fun::NestedController.new
|
|
156
|
+
@request = ActionController::TestRequest.new
|
|
157
|
+
@response = ActionController::TestResponse.new
|
|
158
|
+
super
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def test_render_with_record_in_nested_controller
|
|
162
|
+
get :render_with_record_in_nested_controller
|
|
163
|
+
assert_template 'fun/games/_game'
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def test_render_with_record_collection_in_nested_controller
|
|
167
|
+
get :render_with_record_collection_in_nested_controller
|
|
168
|
+
assert_template 'fun/games/_game'
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
class RenderPartialWithRecordIdentificationAndNestedDeeperControllersTest < ActiveRecordTestCase
|
|
174
|
+
def setup
|
|
175
|
+
@controller = Fun::Serious::NestedDeeperController.new
|
|
176
|
+
@request = ActionController::TestRequest.new
|
|
177
|
+
@response = ActionController::TestResponse.new
|
|
178
|
+
super
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def test_render_with_record_in_deeper_nested_controller
|
|
182
|
+
get :render_with_record_in_deeper_nested_controller
|
|
183
|
+
assert_template 'fun/serious/games/_game'
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def test_render_with_record_collection_in_deeper_nested_controller
|
|
187
|
+
get :render_with_record_collection_in_deeper_nested_controller
|
|
188
|
+
assert_template 'fun/serious/games/_game'
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
end
|