actionpack 2.0.5 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- data/CHANGELOG +149 -7
- data/MIT-LICENSE +1 -1
- data/README +1 -1
- data/Rakefile +5 -6
- data/lib/action_controller.rb +2 -2
- data/lib/action_controller/assertions/model_assertions.rb +2 -1
- data/lib/action_controller/assertions/response_assertions.rb +4 -2
- data/lib/action_controller/assertions/routing_assertions.rb +3 -3
- data/lib/action_controller/assertions/selector_assertions.rb +30 -27
- data/lib/action_controller/assertions/tag_assertions.rb +3 -3
- data/lib/action_controller/base.rb +103 -129
- data/lib/action_controller/benchmarking.rb +3 -3
- data/lib/action_controller/caching.rb +41 -652
- 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/cookie.rb +27 -23
- data/lib/action_controller/cgi_ext/stdinput.rb +1 -0
- data/lib/action_controller/cgi_process.rb +6 -4
- data/lib/action_controller/components.rb +7 -6
- data/lib/action_controller/cookies.rb +31 -19
- data/lib/action_controller/dispatcher.rb +51 -84
- data/lib/action_controller/filters.rb +295 -421
- data/lib/action_controller/flash.rb +1 -6
- data/lib/action_controller/headers.rb +31 -0
- data/lib/action_controller/helpers.rb +26 -9
- data/lib/action_controller/http_authentication.rb +1 -1
- data/lib/action_controller/integration.rb +65 -13
- data/lib/action_controller/layout.rb +24 -39
- data/lib/action_controller/mime_responds.rb +7 -3
- data/lib/action_controller/mime_type.rb +25 -9
- data/lib/action_controller/mime_types.rb +1 -1
- data/lib/action_controller/polymorphic_routes.rb +32 -17
- data/lib/action_controller/record_identifier.rb +10 -4
- data/lib/action_controller/request.rb +46 -30
- data/lib/action_controller/request_forgery_protection.rb +10 -9
- data/lib/action_controller/request_profiler.rb +29 -8
- data/lib/action_controller/rescue.rb +24 -24
- data/lib/action_controller/resources.rb +66 -23
- data/lib/action_controller/response.rb +2 -2
- data/lib/action_controller/routing.rb +113 -1229
- data/lib/action_controller/routing/builder.rb +204 -0
- data/lib/action_controller/{routing_optimisation.rb → routing/optimisations.rb} +13 -12
- data/lib/action_controller/routing/recognition_optimisation.rb +158 -0
- data/lib/action_controller/routing/route.rb +240 -0
- data/lib/action_controller/routing/route_set.rb +435 -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 +13 -8
- data/lib/action_controller/session/cookie_store.rb +20 -17
- data/lib/action_controller/session_management.rb +10 -3
- data/lib/action_controller/streaming.rb +45 -31
- data/lib/action_controller/test_case.rb +33 -23
- data/lib/action_controller/test_process.rb +39 -35
- data/lib/action_controller/url_rewriter.rb +18 -12
- data/lib/action_controller/vendor/html-scanner/html/tokenizer.rb +1 -1
- data/lib/action_pack.rb +1 -1
- data/lib/action_pack/version.rb +2 -2
- data/lib/action_view.rb +11 -3
- data/lib/action_view/base.rb +73 -390
- data/lib/action_view/helpers/active_record_helper.rb +83 -62
- data/lib/action_view/helpers/asset_tag_helper.rb +101 -44
- data/lib/action_view/helpers/atom_feed_helper.rb +35 -7
- data/lib/action_view/helpers/benchmark_helper.rb +5 -3
- data/lib/action_view/helpers/cache_helper.rb +3 -2
- data/lib/action_view/helpers/capture_helper.rb +1 -2
- data/lib/action_view/helpers/date_helper.rb +104 -82
- data/lib/action_view/helpers/form_helper.rb +148 -75
- data/lib/action_view/helpers/form_options_helper.rb +44 -23
- data/lib/action_view/helpers/form_tag_helper.rb +22 -13
- data/lib/action_view/helpers/javascripts/controls.js +1 -1
- data/lib/action_view/helpers/javascripts/dragdrop.js +1 -1
- data/lib/action_view/helpers/javascripts/effects.js +1 -1
- data/lib/action_view/helpers/number_helper.rb +10 -3
- data/lib/action_view/helpers/prototype_helper.rb +61 -29
- data/lib/action_view/helpers/record_tag_helper.rb +3 -3
- data/lib/action_view/helpers/sanitize_helper.rb +23 -17
- data/lib/action_view/helpers/scriptaculous_helper.rb +86 -60
- data/lib/action_view/helpers/text_helper.rb +153 -125
- data/lib/action_view/helpers/url_helper.rb +83 -28
- data/lib/action_view/inline_template.rb +20 -0
- data/lib/action_view/partial_template.rb +70 -0
- data/lib/action_view/partials.rb +31 -73
- data/lib/action_view/template.rb +127 -0
- data/lib/action_view/template_error.rb +8 -7
- data/lib/action_view/template_finder.rb +177 -0
- data/lib/action_view/template_handler.rb +18 -1
- data/lib/action_view/template_handlers/builder.rb +10 -2
- data/lib/action_view/template_handlers/compilable.rb +128 -0
- data/lib/action_view/template_handlers/erb.rb +37 -2
- data/lib/action_view/template_handlers/rjs.rb +14 -1
- data/lib/action_view/test_case.rb +58 -0
- data/test/abstract_unit.rb +1 -1
- data/test/active_record_unit.rb +3 -6
- data/test/activerecord/active_record_store_test.rb +1 -2
- data/test/activerecord/render_partial_with_record_identification_test.rb +158 -41
- data/test/adv_attr_test.rb +20 -0
- data/test/controller/action_pack_assertions_test.rb +16 -19
- data/test/controller/addresses_render_test.rb +1 -1
- data/test/controller/assert_select_test.rb +13 -6
- data/test/controller/base_test.rb +48 -2
- data/test/controller/benchmark_test.rb +1 -2
- data/test/controller/caching_test.rb +282 -21
- data/test/controller/capture_test.rb +1 -1
- data/test/controller/cgi_test.rb +1 -1
- data/test/controller/components_test.rb +1 -1
- data/test/controller/content_type_test.rb +2 -2
- data/test/controller/cookie_test.rb +13 -2
- data/test/controller/custom_handler_test.rb +14 -10
- data/test/controller/deprecation/deprecated_base_methods_test.rb +1 -1
- data/test/controller/dispatcher_test.rb +31 -49
- data/test/controller/fake_controllers.rb +17 -0
- data/test/controller/fake_models.rb +6 -0
- data/test/controller/filter_params_test.rb +14 -8
- data/test/controller/filters_test.rb +44 -16
- data/test/controller/flash_test.rb +2 -2
- data/test/controller/header_test.rb +14 -0
- data/test/controller/helper_test.rb +19 -15
- data/test/controller/html-scanner/document_test.rb +1 -2
- data/test/controller/html-scanner/node_test.rb +1 -2
- data/test/controller/html-scanner/sanitizer_test.rb +8 -5
- data/test/controller/html-scanner/tag_node_test.rb +1 -2
- data/test/controller/html-scanner/text_node_test.rb +2 -3
- data/test/controller/html-scanner/tokenizer_test.rb +8 -2
- data/test/controller/http_authentication_test.rb +1 -1
- data/test/controller/integration_test.rb +14 -16
- data/test/controller/integration_upload_test.rb +43 -0
- data/test/controller/layout_test.rb +26 -6
- data/test/controller/mime_responds_test.rb +39 -7
- data/test/controller/mime_type_test.rb +29 -5
- data/test/controller/new_render_test.rb +105 -34
- data/test/controller/polymorphic_routes_test.rb +32 -20
- data/test/controller/record_identifier_test.rb +38 -2
- data/test/controller/redirect_test.rb +21 -1
- data/test/controller/render_test.rb +59 -15
- data/test/controller/request_forgery_protection_test.rb +92 -5
- data/test/controller/request_test.rb +64 -6
- data/test/controller/rescue_test.rb +22 -6
- data/test/controller/resources_test.rb +102 -14
- data/test/controller/routing_test.rb +231 -19
- data/test/controller/selector_test.rb +2 -2
- data/test/controller/send_file_test.rb +14 -3
- data/test/controller/session/cookie_store_test.rb +16 -4
- data/test/controller/session/mem_cache_store_test.rb +3 -4
- data/test/controller/session_fixation_test.rb +1 -1
- data/test/controller/session_management_test.rb +23 -1
- data/test/controller/test_test.rb +39 -18
- data/test/controller/url_rewriter_test.rb +35 -1
- data/test/controller/verification_test.rb +1 -1
- data/test/controller/view_paths_test.rb +15 -12
- data/test/controller/webservice_test.rb +48 -3
- data/test/fixtures/bad_customers/_bad_customer.html.erb +1 -0
- data/test/fixtures/company.rb +1 -0
- data/test/fixtures/customers/_customer.html.erb +1 -0
- data/test/fixtures/db_definitions/sqlite.sql +6 -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/mascot.rb +3 -0
- data/test/fixtures/mascots.yml +4 -0
- data/test/fixtures/mascots/_mascot.html.erb +1 -0
- data/test/fixtures/multipart/boundary_problem_file +10 -0
- data/test/fixtures/public/javascripts/application.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/version.1.0.js +1 -0
- data/test/fixtures/public/stylesheets/version.1.0.css +1 -0
- data/test/fixtures/reply.rb +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_counter.erb +1 -0
- data/test/fixtures/test/_form.erb +1 -0
- data/test/fixtures/test/_labelling_form.erb +1 -0
- data/test/fixtures/test/_raise.html.erb +1 -0
- data/test/fixtures/test/greeting.js.rjs +1 -0
- data/test/fixtures/topics/_topic.html.erb +1 -0
- data/test/template/active_record_helper_test.rb +25 -8
- data/test/template/asset_tag_helper_test.rb +100 -17
- data/test/template/atom_feed_helper_test.rb +29 -1
- data/test/template/benchmark_helper_test.rb +10 -22
- data/test/template/date_helper_test.rb +455 -153
- data/test/template/erb_util_test.rb +10 -42
- data/test/template/form_helper_test.rb +192 -66
- data/test/template/form_options_helper_test.rb +19 -8
- data/test/template/form_tag_helper_test.rb +11 -8
- data/test/template/javascript_helper_test.rb +3 -9
- data/test/template/number_helper_test.rb +6 -3
- data/test/template/prototype_helper_test.rb +27 -40
- data/test/template/record_tag_helper_test.rb +54 -0
- data/test/template/sanitize_helper_test.rb +5 -6
- data/test/template/scriptaculous_helper_test.rb +7 -13
- data/test/template/tag_helper_test.rb +3 -6
- 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 +46 -33
- data/test/template/url_helper_test.rb +8 -10
- metadata +65 -12
- data/lib/action_view/compiled_templates.rb +0 -69
- data/test/action_view_test.rb +0 -44
- data/test/activerecord/fixtures_test.rb +0 -24
- data/test/controller/fragment_store_setting_test.rb +0 -47
- data/test/template/compiled_templates_test.rb +0 -197
- data/test/template/deprecate_ivars_test.rb +0 -51
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'abstract_unit'
|
2
2
|
|
3
3
|
class SessionManagementTest < Test::Unit::TestCase
|
4
4
|
class SessionOffController < ActionController::Base
|
@@ -13,6 +13,19 @@ class SessionManagementTest < Test::Unit::TestCase
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
+
class SessionOffOnController < ActionController::Base
|
17
|
+
session :off
|
18
|
+
session :on, :only => :tell
|
19
|
+
|
20
|
+
def show
|
21
|
+
render :text => "done"
|
22
|
+
end
|
23
|
+
|
24
|
+
def tell
|
25
|
+
render :text => "done"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
16
29
|
class TestController < ActionController::Base
|
17
30
|
session :off, :only => :show
|
18
31
|
session :session_secure => true, :except => :show
|
@@ -100,6 +113,15 @@ class SessionManagementTest < Test::Unit::TestCase
|
|
100
113
|
assert_equal false, @request.session_options
|
101
114
|
end
|
102
115
|
|
116
|
+
def test_session_off_then_on_globally
|
117
|
+
@controller = SessionOffOnController.new
|
118
|
+
get :show
|
119
|
+
assert_equal false, @request.session_options
|
120
|
+
get :tell
|
121
|
+
assert_instance_of Hash, @request.session_options
|
122
|
+
assert_equal false, @request.session_options[:disabled]
|
123
|
+
end
|
124
|
+
|
103
125
|
def test_session_off_conditionally
|
104
126
|
@controller = TestController.new
|
105
127
|
get :show
|
@@ -1,6 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require "action_controller/test_case"
|
1
|
+
require 'abstract_unit'
|
2
|
+
require 'controller/fake_controllers'
|
4
3
|
|
5
4
|
class TestTest < Test::Unit::TestCase
|
6
5
|
class TestController < ActionController::Base
|
@@ -13,6 +12,11 @@ class TestTest < Test::Unit::TestCase
|
|
13
12
|
render :text => 'ignore me'
|
14
13
|
end
|
15
14
|
|
15
|
+
def set_flash_now
|
16
|
+
flash.now["test_now"] = ">#{flash["test_now"]}<"
|
17
|
+
render :text => 'ignore me'
|
18
|
+
end
|
19
|
+
|
16
20
|
def set_session
|
17
21
|
session['string'] = 'A wonder'
|
18
22
|
session[:symbol] = 'it works'
|
@@ -146,6 +150,11 @@ XML
|
|
146
150
|
assert_equal '>value<', flash['test']
|
147
151
|
end
|
148
152
|
|
153
|
+
def test_process_with_flash_now
|
154
|
+
process :set_flash_now, nil, nil, { "test_now" => "value_now" }
|
155
|
+
assert_equal '>value_now<', flash['test_now']
|
156
|
+
end
|
157
|
+
|
149
158
|
def test_process_with_session
|
150
159
|
process :set_session
|
151
160
|
assert_equal 'A wonder', session['string'], "A value stored in the session should be available by string key"
|
@@ -403,7 +412,7 @@ XML
|
|
403
412
|
|
404
413
|
def test_assert_routing_with_method
|
405
414
|
with_routing do |set|
|
406
|
-
|
415
|
+
set.draw { |map| map.resources(:content) }
|
407
416
|
assert_routing({ :method => 'post', :path => 'content' }, { :controller => 'content', :action => 'create' })
|
408
417
|
end
|
409
418
|
end
|
@@ -502,16 +511,26 @@ XML
|
|
502
511
|
|
503
512
|
FILES_DIR = File.dirname(__FILE__) + '/../fixtures/multipart'
|
504
513
|
|
514
|
+
if RUBY_VERSION < '1.9'
|
515
|
+
READ_BINARY = 'rb'
|
516
|
+
READ_PLAIN = 'r'
|
517
|
+
else
|
518
|
+
READ_BINARY = 'rb:binary'
|
519
|
+
READ_PLAIN = 'r:binary'
|
520
|
+
end
|
521
|
+
|
505
522
|
def test_test_uploaded_file
|
506
523
|
filename = 'mona_lisa.jpg'
|
507
524
|
path = "#{FILES_DIR}/#{filename}"
|
508
525
|
content_type = 'image/png'
|
526
|
+
expected = File.read(path)
|
527
|
+
expected.force_encoding(Encoding::BINARY) if expected.respond_to?(:force_encoding)
|
509
528
|
|
510
529
|
file = ActionController::TestUploadedFile.new(path, content_type)
|
511
530
|
assert_equal filename, file.original_filename
|
512
531
|
assert_equal content_type, file.content_type
|
513
532
|
assert_equal file.path, file.local_path
|
514
|
-
assert_equal
|
533
|
+
assert_equal expected, file.read
|
515
534
|
end
|
516
535
|
|
517
536
|
def test_test_uploaded_file_with_binary
|
@@ -520,10 +539,10 @@ XML
|
|
520
539
|
content_type = 'image/png'
|
521
540
|
|
522
541
|
binary_uploaded_file = ActionController::TestUploadedFile.new(path, content_type, :binary)
|
523
|
-
assert_equal File.open(path,
|
542
|
+
assert_equal File.open(path, READ_BINARY).read, binary_uploaded_file.read
|
524
543
|
|
525
544
|
plain_uploaded_file = ActionController::TestUploadedFile.new(path, content_type)
|
526
|
-
assert_equal File.open(path,
|
545
|
+
assert_equal File.open(path, READ_PLAIN).read, plain_uploaded_file.read
|
527
546
|
end
|
528
547
|
|
529
548
|
def test_fixture_file_upload_with_binary
|
@@ -532,10 +551,10 @@ XML
|
|
532
551
|
content_type = 'image/jpg'
|
533
552
|
|
534
553
|
binary_file_upload = fixture_file_upload(path, content_type, :binary)
|
535
|
-
assert_equal File.open(path,
|
554
|
+
assert_equal File.open(path, READ_BINARY).read, binary_file_upload.read
|
536
555
|
|
537
556
|
plain_file_upload = fixture_file_upload(path, content_type)
|
538
|
-
assert_equal File.open(path,
|
557
|
+
assert_equal File.open(path, READ_PLAIN).read, plain_file_upload.read
|
539
558
|
end
|
540
559
|
|
541
560
|
def test_fixture_file_upload
|
@@ -647,19 +666,21 @@ class InferringClassNameTest < Test::Unit::TestCase
|
|
647
666
|
end
|
648
667
|
end
|
649
668
|
|
650
|
-
class
|
651
|
-
|
652
|
-
# Should not override ActionController setup methods
|
653
|
-
end
|
669
|
+
class CrazyNameTest < ActionController::TestCase
|
670
|
+
tests ContentController
|
654
671
|
|
655
|
-
def
|
656
|
-
|
672
|
+
def test_controller_class_can_be_set_manually_not_just_inferred
|
673
|
+
assert_equal ContentController, self.class.controller_class
|
657
674
|
end
|
658
675
|
end
|
659
676
|
|
660
|
-
class
|
677
|
+
class NamedRoutesControllerTest < ActionController::TestCase
|
661
678
|
tests ContentController
|
662
|
-
|
663
|
-
|
679
|
+
|
680
|
+
def test_should_be_able_to_use_named_routes_before_a_request_is_done
|
681
|
+
with_routing do |set|
|
682
|
+
set.draw { |map| map.resources :contents }
|
683
|
+
assert_equal 'http://test.host/contents/new', new_content_url
|
684
|
+
end
|
664
685
|
end
|
665
686
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'abstract_unit'
|
2
2
|
|
3
3
|
ActionController::UrlRewriter
|
4
4
|
|
@@ -149,6 +149,40 @@ class UrlWriterTests < Test::Unit::TestCase
|
|
149
149
|
)
|
150
150
|
end
|
151
151
|
|
152
|
+
def test_trailing_slash
|
153
|
+
add_host!
|
154
|
+
options = {:controller => 'foo', :trailing_slash => true, :action => 'bar', :id => '33'}
|
155
|
+
assert_equal('http://www.basecamphq.com/foo/bar/33/', W.new.url_for(options) )
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_trailing_slash_with_protocol
|
159
|
+
add_host!
|
160
|
+
options = { :trailing_slash => true,:protocol => 'https', :controller => 'foo', :action => 'bar', :id => '33'}
|
161
|
+
assert_equal('https://www.basecamphq.com/foo/bar/33/', W.new.url_for(options) )
|
162
|
+
assert_equal 'https://www.basecamphq.com/foo/bar/33/?query=string', W.new.url_for(options.merge({:query => 'string'}))
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_trailing_slash_with_only_path
|
166
|
+
options = {:controller => 'foo', :trailing_slash => true}
|
167
|
+
assert_equal '/foo/', W.new.url_for(options.merge({:only_path => true}))
|
168
|
+
options.update({:action => 'bar', :id => '33'})
|
169
|
+
assert_equal '/foo/bar/33/', W.new.url_for(options.merge({:only_path => true}))
|
170
|
+
assert_equal '/foo/bar/33/?query=string', W.new.url_for(options.merge({:query => 'string',:only_path => true}))
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_trailing_slash_with_anchor
|
174
|
+
options = {:trailing_slash => true, :controller => 'foo', :action => 'bar', :id => '33', :only_path => true, :anchor=> 'chapter7'}
|
175
|
+
assert_equal '/foo/bar/33/#chapter7', W.new.url_for(options)
|
176
|
+
assert_equal '/foo/bar/33/?query=string#chapter7', W.new.url_for(options.merge({:query => 'string'}))
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_trailing_slash_with_params
|
180
|
+
url = W.new.url_for(:trailing_slash => true, :only_path => true, :controller => 'cont', :action => 'act', :p1 => 'cafe', :p2 => 'link')
|
181
|
+
params = extract_params(url)
|
182
|
+
assert_equal params[0], { :p1 => 'cafe' }.to_query
|
183
|
+
assert_equal params[1], { :p2 => 'link' }.to_query
|
184
|
+
end
|
185
|
+
|
152
186
|
def test_relative_url_root_is_respected
|
153
187
|
orig_relative_url_root = ActionController::AbstractRequest.relative_url_root
|
154
188
|
ActionController::AbstractRequest.relative_url_root = '/subdir'
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'abstract_unit'
|
2
2
|
|
3
3
|
class ViewLoadPathsTest < Test::Unit::TestCase
|
4
4
|
|
@@ -16,7 +16,7 @@ class ViewLoadPathsTest < Test::Unit::TestCase
|
|
16
16
|
def hello_world_at_request_time() render(:action => 'hello_world') end
|
17
17
|
private
|
18
18
|
def add_view_path
|
19
|
-
|
19
|
+
prepend_view_path "#{LOAD_PATH_ROOT}/override"
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -27,11 +27,15 @@ class ViewLoadPathsTest < Test::Unit::TestCase
|
|
27
27
|
|
28
28
|
def setup
|
29
29
|
TestController.view_paths = nil
|
30
|
-
|
31
|
-
@controller = TestController.new
|
30
|
+
|
32
31
|
@request = ActionController::TestRequest.new
|
33
32
|
@response = ActionController::TestResponse.new
|
34
|
-
|
33
|
+
|
34
|
+
@controller = TestController.new
|
35
|
+
# Following is needed in order to setup @controller.template object properly
|
36
|
+
@controller.send :initialize_template_class, @response
|
37
|
+
@controller.send :assign_shortcuts, @request, @response
|
38
|
+
|
35
39
|
# Track the last warning.
|
36
40
|
@old_behavior = ActiveSupport::Deprecation.behavior
|
37
41
|
@last_message = nil
|
@@ -40,7 +44,6 @@ class ViewLoadPathsTest < Test::Unit::TestCase
|
|
40
44
|
|
41
45
|
def teardown
|
42
46
|
ActiveSupport::Deprecation.behavior = @old_behavior
|
43
|
-
ActionView::Base.cache_template_extensions = true
|
44
47
|
end
|
45
48
|
|
46
49
|
def test_template_load_path_was_set_correctly
|
@@ -48,18 +51,18 @@ class ViewLoadPathsTest < Test::Unit::TestCase
|
|
48
51
|
end
|
49
52
|
|
50
53
|
def test_controller_appends_view_path_correctly
|
51
|
-
|
54
|
+
@controller.append_view_path 'foo'
|
52
55
|
assert_equal [LOAD_PATH_ROOT, 'foo'], @controller.view_paths
|
53
56
|
|
54
|
-
|
57
|
+
@controller.append_view_path(%w(bar baz))
|
55
58
|
assert_equal [LOAD_PATH_ROOT, 'foo', 'bar', 'baz'], @controller.view_paths
|
56
59
|
end
|
57
60
|
|
58
61
|
def test_controller_prepends_view_path_correctly
|
59
|
-
|
62
|
+
@controller.prepend_view_path 'baz'
|
60
63
|
assert_equal ['baz', LOAD_PATH_ROOT], @controller.view_paths
|
61
64
|
|
62
|
-
|
65
|
+
@controller.prepend_view_path(%w(foo bar))
|
63
66
|
assert_equal ['foo', 'bar', 'baz', LOAD_PATH_ROOT], @controller.view_paths
|
64
67
|
end
|
65
68
|
|
@@ -94,7 +97,7 @@ class ViewLoadPathsTest < Test::Unit::TestCase
|
|
94
97
|
end
|
95
98
|
|
96
99
|
def test_view_paths_override
|
97
|
-
TestController.
|
100
|
+
TestController.prepend_view_path "#{LOAD_PATH_ROOT}/override"
|
98
101
|
get :hello_world
|
99
102
|
assert_response :success
|
100
103
|
assert_equal "Hello overridden world!", @response.body
|
@@ -134,4 +137,4 @@ class ViewLoadPathsTest < Test::Unit::TestCase
|
|
134
137
|
assert_equal ['c/path'], C.view_paths
|
135
138
|
end
|
136
139
|
|
137
|
-
end
|
140
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'abstract_unit'
|
2
2
|
|
3
3
|
class WebServiceTest < Test::Unit::TestCase
|
4
4
|
class MockCGI < CGI #:nodoc:
|
@@ -56,16 +56,61 @@ class WebServiceTest < Test::Unit::TestCase
|
|
56
56
|
assert_equal 'content...', @controller.params["entry"]['summary']
|
57
57
|
assert_equal 'true', @controller.params["entry"]['attributed']
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def test_put_xml
|
61
61
|
process('PUT', 'application/xml', '<entry attributed="true"><summary>content...</summary></entry>')
|
62
|
-
|
62
|
+
|
63
63
|
assert_equal 'entry', @controller.response.body
|
64
64
|
assert @controller.params.has_key?(:entry)
|
65
65
|
assert_equal 'content...', @controller.params["entry"]['summary']
|
66
66
|
assert_equal 'true', @controller.params["entry"]['attributed']
|
67
67
|
end
|
68
68
|
|
69
|
+
def test_put_xml_using_a_type_node
|
70
|
+
process('PUT', 'application/xml', '<type attributed="true"><summary>content...</summary></type>')
|
71
|
+
|
72
|
+
assert_equal 'type', @controller.response.body
|
73
|
+
assert @controller.params.has_key?(:type)
|
74
|
+
assert_equal 'content...', @controller.params["type"]['summary']
|
75
|
+
assert_equal 'true', @controller.params["type"]['attributed']
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_put_xml_using_a_type_node_and_attribute
|
79
|
+
process('PUT', 'application/xml', '<type attributed="true"><summary type="boolean">false</summary></type>')
|
80
|
+
|
81
|
+
assert_equal 'type', @controller.response.body
|
82
|
+
assert @controller.params.has_key?(:type)
|
83
|
+
assert_equal false, @controller.params["type"]['summary']
|
84
|
+
assert_equal 'true', @controller.params["type"]['attributed']
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_post_xml_using_a_type_node
|
88
|
+
process('POST', 'application/xml', '<font attributed="true"><type>arial</type></font>')
|
89
|
+
|
90
|
+
assert_equal 'font', @controller.response.body
|
91
|
+
assert @controller.params.has_key?(:font)
|
92
|
+
assert_equal 'arial', @controller.params['font']['type']
|
93
|
+
assert_equal 'true', @controller.params["font"]['attributed']
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_post_xml_using_a_root_node_named_type
|
97
|
+
process('POST', 'application/xml', '<type type="integer">33</type>')
|
98
|
+
|
99
|
+
assert @controller.params.has_key?(:type)
|
100
|
+
assert_equal 33, @controller.params['type']
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_post_xml_using_an_attributted_node_named_type
|
104
|
+
ActionController::Base.param_parsers[Mime::XML] = Proc.new { |data| XmlSimple.xml_in(data, 'ForceArray' => false) }
|
105
|
+
process('POST', 'application/xml', '<request><type type="string">Arial,12</type><z>3</z></request>')
|
106
|
+
|
107
|
+
assert_equal 'type, z', @controller.response.body
|
108
|
+
assert @controller.params.has_key?(:type)
|
109
|
+
assert_equal 'string', @controller.params['type']['type']
|
110
|
+
assert_equal 'Arial,12', @controller.params['type']['content']
|
111
|
+
assert_equal '3', @controller.params['z']
|
112
|
+
end
|
113
|
+
|
69
114
|
def test_register_and_use_yaml
|
70
115
|
ActionController::Base.param_parsers[Mime::YAML] = Proc.new { |d| YAML.load(d) }
|
71
116
|
process('POST', 'application/x-yaml', {"entry" => "loaded from yaml"}.to_yaml)
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= greeting %> bad customer: <%= bad_customer.name %><%= bad_customer_counter %>
|
data/test/fixtures/company.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
<%= greeting %>: <%= customer.name %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'partial' %>
|
@@ -0,0 +1 @@
|
|
1
|
+
page.replace_html 'notices', :partial => 'partial'
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= greeting %> good customer: <%= good_customer.name %><%= good_customer_counter %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= mascot.name %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
--AaB03x
|
2
|
+
Content-Disposition: form-data; name="file"; filename="file.txt"
|
3
|
+
Content-Type: text/plain
|
4
|
+
|
5
|
+
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
6
|
+
--AaB03x
|
7
|
+
Content-Disposition: form-data; name="foo"
|
8
|
+
|
9
|
+
bar
|
10
|
+
--AaB03x--
|
@@ -0,0 +1 @@
|
|
1
|
+
// application js
|
@@ -0,0 +1 @@
|
|
1
|
+
// controls js
|
@@ -0,0 +1 @@
|
|
1
|
+
// dragdrop js
|