aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/abstract/translation_test.rb8
-rw-r--r--actionpack/test/abstract_unit.rb5
-rw-r--r--actionpack/test/activerecord/active_record_store_test.rb8
-rw-r--r--actionpack/test/controller/assert_select_test.rb4
-rw-r--r--actionpack/test/controller/capture_test.rb2
-rw-r--r--actionpack/test/controller/cookie_test.rb55
-rw-r--r--actionpack/test/controller/filters_test.rb14
-rw-r--r--actionpack/test/controller/flash_test.rb11
-rw-r--r--actionpack/test/controller/integration_test.rb4
-rw-r--r--actionpack/test/controller/new_base/bare_metal_test.rb4
-rw-r--r--actionpack/test/controller/render_test.rb4
-rw-r--r--actionpack/test/controller/send_file_test.rb4
-rw-r--r--actionpack/test/dispatch/response_test.rb4
-rw-r--r--actionpack/test/dispatch/routing_test.rb12
-rw-r--r--actionpack/test/dispatch/session/cookie_store_test.rb66
-rw-r--r--actionpack/test/dispatch/session/mem_cache_store_test.rb7
-rw-r--r--actionpack/test/dispatch/session/test_session_test.rb12
-rw-r--r--actionpack/test/fixtures/test/content_for.erb3
-rw-r--r--actionpack/test/fixtures/test/content_for_concatenated.erb2
-rw-r--r--actionpack/test/fixtures/test/content_for_with_parameter.erb2
-rw-r--r--actionpack/test/fixtures/test/non_erb_block_content_for.builder2
-rw-r--r--actionpack/test/template/number_helper_i18n_test.rb17
-rw-r--r--actionpack/test/template/render_test.rb10
-rw-r--r--actionpack/test/template/template_test.rb130
24 files changed, 295 insertions, 95 deletions
diff --git a/actionpack/test/abstract/translation_test.rb b/actionpack/test/abstract/translation_test.rb
index 0bf61a6556..09ebfab85e 100644
--- a/actionpack/test/abstract/translation_test.rb
+++ b/actionpack/test/abstract/translation_test.rb
@@ -9,18 +9,18 @@ class TranslationControllerTest < Test::Unit::TestCase
end
def test_action_controller_base_responds_to_translate
- assert @controller.respond_to?(:translate)
+ assert_respond_to @controller, :translate
end
def test_action_controller_base_responds_to_t
- assert @controller.respond_to?(:t)
+ assert_respond_to @controller, :t
end
def test_action_controller_base_responds_to_localize
- assert @controller.respond_to?(:localize)
+ assert_respond_to @controller, :localize
end
def test_action_controller_base_responds_to_l
- assert @controller.respond_to?(:l)
+ assert_respond_to @controller, :l
end
end \ No newline at end of file
diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb
index 89ba0990f1..d2e5d2e965 100644
--- a/actionpack/test/abstract_unit.rb
+++ b/actionpack/test/abstract_unit.rb
@@ -12,6 +12,10 @@ $:.unshift(File.dirname(__FILE__) + '/fixtures/alternate_helpers')
ENV['TMPDIR'] = File.join(File.dirname(__FILE__), 'tmp')
+if defined?(Encoding.default_internal)
+ Encoding.default_internal = "UTF-8"
+end
+
require 'test/unit'
require 'abstract_controller'
require 'action_controller'
@@ -158,6 +162,7 @@ class ActionController::IntegrationTest < ActiveSupport::TestCase
middleware.use "ActionDispatch::Cookies"
middleware.use "ActionDispatch::Flash"
middleware.use "ActionDispatch::Head"
+ yield(middleware) if block_given?
end
end
diff --git a/actionpack/test/activerecord/active_record_store_test.rb b/actionpack/test/activerecord/active_record_store_test.rb
index 61bee1b66c..6d4b8e1e40 100644
--- a/actionpack/test/activerecord/active_record_store_test.rb
+++ b/actionpack/test/activerecord/active_record_store_test.rb
@@ -152,12 +152,18 @@ class ActiveRecordStoreTest < ActionController::IntegrationTest
end
private
+
def with_test_route_set(options = {})
with_routing do |set|
set.draw do |map|
match ':action', :to => 'active_record_store_test/test'
end
- @app = ActiveRecord::SessionStore.new(set, options.reverse_merge(:key => '_session_id'))
+
+ @app = self.class.build_app(set) do |middleware|
+ middleware.use ActiveRecord::SessionStore, options.reverse_merge(:key => '_session_id')
+ middleware.delete "ActionDispatch::ShowExceptions"
+ end
+
yield
end
end
diff --git a/actionpack/test/controller/assert_select_test.rb b/actionpack/test/controller/assert_select_test.rb
index 7012c4c9b0..4f8ad23174 100644
--- a/actionpack/test/controller/assert_select_test.rb
+++ b/actionpack/test/controller/assert_select_test.rb
@@ -212,12 +212,12 @@ class AssertSelectTest < ActionController::TestCase
assert_nothing_raised { assert_select "div", "bar" }
assert_nothing_raised { assert_select "div", /\w*/ }
assert_nothing_raised { assert_select "div", :text => /\w*/, :count=>2 }
- assert_raise(Assertion) { assert_select "div", :text=>"foo", :count=>2 }
+ assert_raise(Assertion) { assert_select "div", :text=>"foo", :count=>2 }
assert_nothing_raised { assert_select "div", :html=>"<span>bar</span>" }
assert_nothing_raised { assert_select "div", :html=>"<span>bar</span>" }
assert_nothing_raised { assert_select "div", :html=>/\w*/ }
assert_nothing_raised { assert_select "div", :html=>/\w*/, :count=>2 }
- assert_raise(Assertion) { assert_select "div", :html=>"<span>foo</span>", :count=>2 }
+ assert_raise(Assertion) { assert_select "div", :html=>"<span>foo</span>", :count=>2 }
end
end
diff --git a/actionpack/test/controller/capture_test.rb b/actionpack/test/controller/capture_test.rb
index d1dbd535c4..47253f22b8 100644
--- a/actionpack/test/controller/capture_test.rb
+++ b/actionpack/test/controller/capture_test.rb
@@ -68,6 +68,6 @@ class CaptureTest < ActionController::TestCase
private
def expected_content_for_output
- "<title>Putting stuff in the title!</title>\n\nGreat stuff!"
+ "<title>Putting stuff in the title!</title>\nGreat stuff!"
end
end
diff --git a/actionpack/test/controller/cookie_test.rb b/actionpack/test/controller/cookie_test.rb
index 4971866e7c..f65eda5c69 100644
--- a/actionpack/test/controller/cookie_test.rb
+++ b/actionpack/test/controller/cookie_test.rb
@@ -58,6 +58,17 @@ class CookieTest < ActionController::TestCase
head :ok
end
+ def raise_data_overflow
+ cookies.signed[:foo] = 'bye!' * 1024
+ head :ok
+ end
+
+ def tampered_cookies
+ cookies[:tampered] = "BAh7BjoIZm9vIghiYXI%3D--123456780"
+ cookies.signed[:tampered]
+ head :ok
+ end
+
def set_permanent_signed_cookie
cookies.permanent.signed[:remember_me] = 100
head :ok
@@ -74,7 +85,7 @@ class CookieTest < ActionController::TestCase
def setup
super
- @request.env["action_dispatch.secret_token"] = "thisISverySECRET123"
+ @request.env["action_dispatch.secret_token"] = "b3c631c314c0bbca50c1b2843150fe33"
@request.host = "www.nextangle.com"
end
@@ -163,6 +174,48 @@ class CookieTest < ActionController::TestCase
assert_equal({"user_name" => "david"}, @response.cookies)
end
+ def test_raise_data_overflow
+ assert_raise(ActionDispatch::Cookies::CookieOverflow) do
+ get :raise_data_overflow
+ end
+ end
+
+ def test_tampered_cookies
+ assert_nothing_raised do
+ get :tampered_cookies
+ assert_response :success
+ end
+ end
+
+ def test_raises_argument_error_if_missing_secret
+ assert_raise(ArgumentError, nil.inspect) {
+ @request.env["action_dispatch.secret_token"] = nil
+ get :set_signed_cookie
+ }
+
+ assert_raise(ArgumentError, ''.inspect) {
+ @request.env["action_dispatch.secret_token"] = ""
+ get :set_signed_cookie
+ }
+ end
+
+ def test_raises_argument_error_if_secret_is_probably_insecure
+ assert_raise(ArgumentError, "password".inspect) {
+ @request.env["action_dispatch.secret_token"] = "password"
+ get :set_signed_cookie
+ }
+
+ assert_raise(ArgumentError, "secret".inspect) {
+ @request.env["action_dispatch.secret_token"] = "secret"
+ get :set_signed_cookie
+ }
+
+ assert_raise(ArgumentError, "12345678901234567890123456789".inspect) {
+ @request.env["action_dispatch.secret_token"] = "12345678901234567890123456789"
+ get :set_signed_cookie
+ }
+ end
+
private
def assert_cookie_header(expected)
header = @response.headers["Set-Cookie"]
diff --git a/actionpack/test/controller/filters_test.rb b/actionpack/test/controller/filters_test.rb
index ea740f7233..d5704eba78 100644
--- a/actionpack/test/controller/filters_test.rb
+++ b/actionpack/test/controller/filters_test.rb
@@ -515,7 +515,7 @@ class FilterTest < ActionController::TestCase
assert assigns["ran_proc_filter2"]
test_process(AnomolousYetValidConditionController, "show_without_filter")
- assert_equal nil, assigns["ran_filter"]
+ assert_nil assigns["ran_filter"]
assert !assigns["ran_class_filter"]
assert !assigns["ran_proc_filter1"]
assert !assigns["ran_proc_filter2"]
@@ -530,16 +530,16 @@ class FilterTest < ActionController::TestCase
test_process(ConditionalCollectionFilterController)
assert_equal %w( ensure_login ), assigns["ran_filter"]
test_process(ConditionalCollectionFilterController, "show_without_filter")
- assert_equal nil, assigns["ran_filter"]
+ assert_nil assigns["ran_filter"]
test_process(ConditionalCollectionFilterController, "another_action")
- assert_equal nil, assigns["ran_filter"]
+ assert_nil assigns["ran_filter"]
end
def test_running_only_condition_filters
test_process(OnlyConditionSymController)
assert_equal %w( ensure_login ), assigns["ran_filter"]
test_process(OnlyConditionSymController, "show_without_filter")
- assert_equal nil, assigns["ran_filter"]
+ assert_nil assigns["ran_filter"]
test_process(OnlyConditionProcController)
assert assigns["ran_proc_filter"]
@@ -556,7 +556,7 @@ class FilterTest < ActionController::TestCase
test_process(ExceptConditionSymController)
assert_equal %w( ensure_login ), assigns["ran_filter"]
test_process(ExceptConditionSymController, "show_without_filter")
- assert_equal nil, assigns["ran_filter"]
+ assert_nil assigns["ran_filter"]
test_process(ExceptConditionProcController)
assert assigns["ran_proc_filter"]
@@ -573,7 +573,7 @@ class FilterTest < ActionController::TestCase
test_process(BeforeAndAfterConditionController)
assert_equal %w( ensure_login clean_up_tmp), assigns["ran_filter"]
test_process(BeforeAndAfterConditionController, "show_without_filter")
- assert_equal nil, assigns["ran_filter"]
+ assert_nil assigns["ran_filter"]
end
def test_around_filter
@@ -674,7 +674,7 @@ class FilterTest < ActionController::TestCase
def test_changing_the_requirements
test_process(ChangingTheRequirementsController, "go_wild")
- assert_equal nil, assigns['ran_filter']
+ assert_nil assigns['ran_filter']
end
def test_a_rescuing_around_filter
diff --git a/actionpack/test/controller/flash_test.rb b/actionpack/test/controller/flash_test.rb
index c662ce264b..01c8fd90a5 100644
--- a/actionpack/test/controller/flash_test.rb
+++ b/actionpack/test/controller/flash_test.rb
@@ -237,10 +237,19 @@ class FlashIntegrationTest < ActionController::IntegrationTest
end
private
+
+ # Overwrite get to send SessionSecret in env hash
+ def get(path, parameters = nil, env = {})
+ env["action_dispatch.secret_token"] ||= SessionSecret
+ super
+ end
+
def with_test_route_set
with_routing do |set|
set.draw do |map|
- match ':action', :to => ActionDispatch::Session::CookieStore.new(FlashIntegrationTest::TestController, :key => FlashIntegrationTest::SessionKey, :secret => FlashIntegrationTest::SessionSecret)
+ match ':action', :to => ActionDispatch::Session::CookieStore.new(
+ FlashIntegrationTest::TestController, :key => SessionKey, :secret => SessionSecret
+ )
end
yield
end
diff --git a/actionpack/test/controller/integration_test.rb b/actionpack/test/controller/integration_test.rb
index 20dc96d38d..5ee8e2b6ae 100644
--- a/actionpack/test/controller/integration_test.rb
+++ b/actionpack/test/controller/integration_test.rb
@@ -176,8 +176,8 @@ class IntegrationTestTest < Test::Unit::TestCase
session1 = @test.open_session { |sess| }
session2 = @test.open_session # implicit session
- assert session1.respond_to?(:assert_template), "open_session makes assert_template available"
- assert session2.respond_to?(:assert_template), "open_session makes assert_template available"
+ assert_respond_to session1, :assert_template, "open_session makes assert_template available"
+ assert_respond_to session2, :assert_template, "open_session makes assert_template available"
assert !session1.equal?(session2)
end
diff --git a/actionpack/test/controller/new_base/bare_metal_test.rb b/actionpack/test/controller/new_base/bare_metal_test.rb
index df4b39a103..8a06e8d2a0 100644
--- a/actionpack/test/controller/new_base/bare_metal_test.rb
+++ b/actionpack/test/controller/new_base/bare_metal_test.rb
@@ -18,10 +18,10 @@ module BareMetalTest
string << part
end
- assert headers.is_a?(Hash), "Headers must be a Hash"
+ assert_kind_of Hash, headers, "Headers must be a Hash"
assert headers["Content-Type"], "Content-Type must exist"
assert_equal "Hello world", string
end
end
-end \ No newline at end of file
+end
diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb
index 52049f2a8a..2b1f2a27df 100644
--- a/actionpack/test/controller/render_test.rb
+++ b/actionpack/test/controller/render_test.rb
@@ -1079,7 +1079,7 @@ class RenderTest < ActionController::TestCase
def test_action_talk_to_layout
get :action_talk_to_layout
- assert_equal "<title>Talking to the layout</title>\n\nAction was here!", @response.body
+ assert_equal "<title>Talking to the layout</title>\nAction was here!", @response.body
end
# :addressed:
@@ -1096,7 +1096,7 @@ class RenderTest < ActionController::TestCase
def test_yield_content_for
assert_not_deprecated { get :yield_content_for }
- assert_equal "<title>Putting stuff in the title!</title>\n\nGreat stuff!\n", @response.body
+ assert_equal "<title>Putting stuff in the title!</title>\nGreat stuff!\n", @response.body
end
def test_overwritting_rendering_relative_file_with_extension
diff --git a/actionpack/test/controller/send_file_test.rb b/actionpack/test/controller/send_file_test.rb
index 36b8055810..c7c8360ae6 100644
--- a/actionpack/test/controller/send_file_test.rb
+++ b/actionpack/test/controller/send_file_test.rb
@@ -55,8 +55,8 @@ class SendFileTest < ActionController::TestCase
response = nil
assert_nothing_raised { response = process('file') }
assert_not_nil response
- assert response.body_parts.respond_to?(:each)
- assert response.body_parts.respond_to?(:to_path)
+ assert_respond_to response.body_parts, :each
+ assert_respond_to response.body_parts, :to_path
require 'stringio'
output = StringIO.new
diff --git a/actionpack/test/dispatch/response_test.rb b/actionpack/test/dispatch/response_test.rb
index c7f7f3102d..c20fa10f63 100644
--- a/actionpack/test/dispatch/response_test.rb
+++ b/actionpack/test/dispatch/response_test.rb
@@ -113,6 +113,10 @@ class ResponseTest < ActiveSupport::TestCase
status, headers, body = @response.to_a
assert_equal "user_name=david; path=/\nlogin=foo%26bar; path=/; expires=Mon, 10-Oct-2005 05:00:00 GMT", headers["Set-Cookie"]
assert_equal({"login" => "foo&bar", "user_name" => "david"}, @response.cookies)
+
+ @response.delete_cookie("login")
+ status, headers, body = @response.to_a
+ assert_equal({"user_name" => "david", "login" => nil}, @response.cookies)
end
test "read cache control" do
diff --git a/actionpack/test/dispatch/routing_test.rb b/actionpack/test/dispatch/routing_test.rb
index 651a7a6be0..180889ddf2 100644
--- a/actionpack/test/dispatch/routing_test.rb
+++ b/actionpack/test/dispatch/routing_test.rb
@@ -186,6 +186,8 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
end
resources :products, :constraints => { :id => /\d{4}/ } do
+ root :to => "products#root"
+ get :favorite, :on => :collection
resources :images
end
@@ -963,7 +965,9 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
get '/products/1'
assert_equal 'pass', @response.headers['X-Cascade']
get '/products'
- assert_equal 'products#index', @response.body
+ assert_equal 'products#root', @response.body
+ get '/products/favorite'
+ assert_equal 'products#favorite', @response.body
get '/products/0001'
assert_equal 'products#show', @response.body
@@ -981,6 +985,12 @@ class TestRoutingMapper < ActionDispatch::IntegrationTest
end
end
+ def test_root_works_in_the_resources_scope
+ get '/products'
+ assert_equal 'products#root', @response.body
+ assert_equal '/products', products_root_path
+ end
+
def test_module_scope
with_test_routes do
get '/token'
diff --git a/actionpack/test/dispatch/session/cookie_store_test.rb b/actionpack/test/dispatch/session/cookie_store_test.rb
index d2c1758af1..21d11ff31c 100644
--- a/actionpack/test/dispatch/session/cookie_store_test.rb
+++ b/actionpack/test/dispatch/session/cookie_store_test.rb
@@ -55,42 +55,13 @@ class CookieStoreTest < ActionController::IntegrationTest
}
end
- def test_raises_argument_error_if_missing_secret
- assert_raise(ArgumentError, nil.inspect) {
- ActionDispatch::Session::CookieStore.new(nil,
- :key => SessionKey, :secret => nil)
- }
-
- assert_raise(ArgumentError, ''.inspect) {
- ActionDispatch::Session::CookieStore.new(nil,
- :key => SessionKey, :secret => '')
- }
- end
-
- def test_raises_argument_error_if_secret_is_probably_insecure
- assert_raise(ArgumentError, "password".inspect) {
- ActionDispatch::Session::CookieStore.new(nil,
- :key => SessionKey, :secret => "password")
- }
-
- assert_raise(ArgumentError, "secret".inspect) {
- ActionDispatch::Session::CookieStore.new(nil,
- :key => SessionKey, :secret => "secret")
- }
-
- assert_raise(ArgumentError, "12345678901234567890123456789".inspect) {
- ActionDispatch::Session::CookieStore.new(nil,
- :key => SessionKey, :secret => "12345678901234567890123456789")
- }
- end
-
def test_setting_session_value
with_test_route_set do
get '/set_session_value'
assert_response :success
assert_equal "_myapp_session=#{response.body}; path=/; HttpOnly",
headers['Set-Cookie']
- end
+ end
end
def test_getting_session_value
@@ -99,7 +70,7 @@ class CookieStoreTest < ActionController::IntegrationTest
get '/get_session_value'
assert_response :success
assert_equal 'foo: "bar"', response.body
- end
+ end
end
def test_getting_session_id
@@ -127,7 +98,7 @@ class CookieStoreTest < ActionController::IntegrationTest
def test_close_raises_when_data_overflows
with_test_route_set do
- assert_raise(ActionDispatch::Session::CookieStore::CookieOverflow) {
+ assert_raise(ActionDispatch::Cookies::CookieOverflow) {
get '/raise_data_overflow'
}
end
@@ -209,30 +180,33 @@ class CookieStoreTest < ActionController::IntegrationTest
get '/no_session_access'
assert_response :success
- # Mystery bug that came up in 2.3 as well. What is this trying to test?!
- # assert_equal "_myapp_session=#{cookie_body}; path=/; expires=#{expected_expiry}; HttpOnly",
- # headers['Set-Cookie']
+ assert_equal "_myapp_session=#{cookie_body}; path=/; expires=#{expected_expiry}; HttpOnly",
+ headers['Set-Cookie']
end
end
private
+
+ # Overwrite get to send SessionSecret in env hash
+ def get(path, parameters = nil, env = {})
+ env["action_dispatch.secret_token"] ||= SessionSecret
+ super
+ end
+
def with_test_route_set(options = {})
with_routing do |set|
set.draw do |map|
match ':action', :to => ::CookieStoreTest::TestController
end
- options = {:key => SessionKey, :secret => SessionSecret}.merge(options)
- @app = ActionDispatch::Session::CookieStore.new(set, options)
+
+ options = { :key => SessionKey }.merge!(options)
+
+ @app = self.class.build_app(set) do |middleware|
+ middleware.use ActionDispatch::Session::CookieStore, options
+ middleware.delete "ActionDispatch::ShowExceptions"
+ end
+
yield
end
end
-
- def unmarshal_session(cookie_string)
- session = Rack::Utils.parse_query(cookie_string, ';,').inject({}) {|h,(k,v)|
- h[k] = Array === v ? v.first : v
- h
- }[SessionKey]
- verifier = ActiveSupport::MessageVerifier.new(SessionSecret, 'SHA1')
- verifier.verify(session)
- end
end
diff --git a/actionpack/test/dispatch/session/mem_cache_store_test.rb b/actionpack/test/dispatch/session/mem_cache_store_test.rb
index 5a1dcb4dab..8858a398e0 100644
--- a/actionpack/test/dispatch/session/mem_cache_store_test.rb
+++ b/actionpack/test/dispatch/session/mem_cache_store_test.rb
@@ -114,7 +114,12 @@ class MemCacheStoreTest < ActionController::IntegrationTest
set.draw do |map|
match ':action', :to => ::MemCacheStoreTest::TestController
end
- @app = ActionDispatch::Session::MemCacheStore.new(set, :key => '_session_id')
+
+ @app = self.class.build_app(set) do |middleware|
+ middleware.use ActionDispatch::Session::MemCacheStore, :key => '_session_id'
+ middleware.delete "ActionDispatch::ShowExceptions"
+ end
+
yield
end
end
diff --git a/actionpack/test/dispatch/session/test_session_test.rb b/actionpack/test/dispatch/session/test_session_test.rb
index c8dc4ab461..31ce97a25b 100644
--- a/actionpack/test/dispatch/session/test_session_test.rb
+++ b/actionpack/test/dispatch/session/test_session_test.rb
@@ -2,18 +2,6 @@ require 'abstract_unit'
require 'stringio'
class ActionController::TestSessionTest < ActiveSupport::TestCase
- def test_calling_delete_without_parameters_raises_deprecation_warning_and_calls_to_clear_test_session
- assert_deprecated(/use clear instead/){ ActionController::TestSession.new.delete }
- end
-
- def test_calling_update_without_parameters_raises_deprecation_warning_and_calls_to_clear_test_session
- assert_deprecated(/use replace instead/){ ActionController::TestSession.new.update }
- end
-
- def test_calling_close_raises_deprecation_warning
- assert_deprecated(/sessions should no longer be closed/){ ActionController::TestSession.new.close }
- end
-
def test_ctor_allows_setting
session = ActionController::TestSession.new({:one => 'one', :two => 'two'})
assert_equal('one', session[:one])
diff --git a/actionpack/test/fixtures/test/content_for.erb b/actionpack/test/fixtures/test/content_for.erb
index 0e47ca8c3d..1fb829f54c 100644
--- a/actionpack/test/fixtures/test/content_for.erb
+++ b/actionpack/test/fixtures/test/content_for.erb
@@ -1,2 +1 @@
-<% content_for :title do %>Putting stuff in the title!<% end %>
-Great stuff! \ No newline at end of file
+<% content_for :title do -%>Putting stuff in the title!<% end -%>Great stuff! \ No newline at end of file
diff --git a/actionpack/test/fixtures/test/content_for_concatenated.erb b/actionpack/test/fixtures/test/content_for_concatenated.erb
index fb6b4b05d7..e65f629574 100644
--- a/actionpack/test/fixtures/test/content_for_concatenated.erb
+++ b/actionpack/test/fixtures/test/content_for_concatenated.erb
@@ -1,3 +1,3 @@
<% content_for :title, "Putting stuff "
- content_for :title, "in the title!" %>
+ content_for :title, "in the title!" -%>
Great stuff! \ No newline at end of file
diff --git a/actionpack/test/fixtures/test/content_for_with_parameter.erb b/actionpack/test/fixtures/test/content_for_with_parameter.erb
index 57aecbac05..aeb6f73ce0 100644
--- a/actionpack/test/fixtures/test/content_for_with_parameter.erb
+++ b/actionpack/test/fixtures/test/content_for_with_parameter.erb
@@ -1,2 +1,2 @@
-<% content_for :title, "Putting stuff in the title!" %>
+<% content_for :title, "Putting stuff in the title!" -%>
Great stuff! \ No newline at end of file
diff --git a/actionpack/test/fixtures/test/non_erb_block_content_for.builder b/actionpack/test/fixtures/test/non_erb_block_content_for.builder
index a94643561c..d539a425a4 100644
--- a/actionpack/test/fixtures/test/non_erb_block_content_for.builder
+++ b/actionpack/test/fixtures/test/non_erb_block_content_for.builder
@@ -1,4 +1,4 @@
content_for :title do
'Putting stuff in the title!'
end
-xml << "\nGreat stuff!"
+xml << "Great stuff!"
diff --git a/actionpack/test/template/number_helper_i18n_test.rb b/actionpack/test/template/number_helper_i18n_test.rb
index f730a0d7f5..8561019461 100644
--- a/actionpack/test/template/number_helper_i18n_test.rb
+++ b/actionpack/test/template/number_helper_i18n_test.rb
@@ -45,6 +45,12 @@ class NumberHelperTest < ActionView::TestCase
assert_equal("&$ - 10.00", number_to_currency(10, :locale => 'ts'))
end
+ def test_number_to_currency_with_clean_i18n_settings
+ clean_i18n do
+ assert_equal("$10.00", number_to_currency(10))
+ end
+ end
+
def test_number_with_precision
#Delimiter was set to ""
assert_equal("10000", number_with_precision(10000, :locale => 'ts'))
@@ -92,4 +98,15 @@ class NumberHelperTest < ActionView::TestCase
#Significant was set to true with precision 2, with custom translated units
assert_equal "4.3 cm", number_to_human(0.0432, :locale => 'ts', :units => :custom_units_for_number_to_human)
end
+
+ private
+ def clean_i18n
+ load_path = I18n.load_path.dup
+ I18n.load_path.clear
+ I18n.reload!
+ yield
+ ensure
+ I18n.load_path = load_path
+ I18n.reload!
+ end
end
diff --git a/actionpack/test/template/render_test.rb b/actionpack/test/template/render_test.rb
index d0212024ae..aca96e0a24 100644
--- a/actionpack/test/template/render_test.rb
+++ b/actionpack/test/template/render_test.rb
@@ -232,13 +232,13 @@ module RenderTestCases
# TODO: Move to deprecated_tests.rb
def test_render_with_nested_layout_deprecated
assert_deprecated do
- assert_equal %(<title>title</title>\n\n\n<div id="column">column</div>\n<div id="content">content</div>\n),
+ assert_equal %(<title>title</title>\n\n<div id="column">column</div>\n<div id="content">content</div>\n),
@view.render(:file => "test/deprecated_nested_layout.erb", :layout => "layouts/yield")
end
end
def test_render_with_nested_layout
- assert_equal %(<title>title</title>\n\n\n<div id="column">column</div>\n<div id="content">content</div>\n),
+ assert_equal %(<title>title</title>\n\n<div id="column">column</div>\n<div id="content">content</div>\n),
@view.render(:file => "test/nested_layout.erb", :layout => "layouts/yield")
end
@@ -284,7 +284,7 @@ class LazyViewRenderTest < ActiveSupport::TestCase
with_external_encoding Encoding::ASCII_8BIT do
result = @view.render(:file => "test/utf8_magic.html.erb", :layouts => "layouts/yield")
assert_equal Encoding::UTF_8, result.encoding
- assert_equal "Русский текст\n\nUTF-8\nUTF-8\nUTF-8\n", result
+ assert_equal "\nРусский \nтекст\n\nUTF-8\nUTF-8\nUTF-8\n", result
end
end
@@ -302,7 +302,7 @@ class LazyViewRenderTest < ActiveSupport::TestCase
result = @view.render(:file => "test/utf8.html.erb", :layouts => "layouts/yield")
flunk 'Should have raised incompatible encoding error'
rescue ActionView::Template::Error => error
- assert_match 'invalid byte sequence in Shift_JIS', error.original_exception.message
+ assert_match 'Your template was not saved as valid Shift_JIS', error.original_exception.message
end
end
end
@@ -313,7 +313,7 @@ class LazyViewRenderTest < ActiveSupport::TestCase
result = @view.render(:file => "test/utf8_magic_with_bare_partial.html.erb", :layouts => "layouts/yield")
flunk 'Should have raised incompatible encoding error'
rescue ActionView::Template::Error => error
- assert_match 'invalid byte sequence in Shift_JIS', error.original_exception.message
+ assert_match 'Your template was not saved as valid Shift_JIS', error.original_exception.message
end
end
end
diff --git a/actionpack/test/template/template_test.rb b/actionpack/test/template/template_test.rb
new file mode 100644
index 0000000000..995d728d50
--- /dev/null
+++ b/actionpack/test/template/template_test.rb
@@ -0,0 +1,130 @@
+require "abstract_unit"
+
+if "ruby".encoding_aware?
+ # These are the normal settings that will be set up by Railties
+ # TODO: Have these tests support other combinations of these values
+ Encoding.default_internal = "UTF-8"
+ Encoding.default_external = "UTF-8"
+end
+
+class TestERBTemplate < ActiveSupport::TestCase
+ ERBHandler = ActionView::Template::Handlers::ERB
+
+ class Context
+ def initialize
+ @output_buffer = "original"
+ end
+
+ def hello
+ "Hello"
+ end
+
+ def partial
+ ActionView::Template.new(
+ "<%= @_virtual_path %>",
+ "partial",
+ ERBHandler,
+ :virtual_path => "partial"
+ )
+ end
+
+ def logger
+ require "logger"
+ Logger.new(STDERR)
+ end
+
+ def my_buffer
+ @output_buffer
+ end
+ end
+
+ def new_template(body = "<%= hello %>", handler = ERBHandler, details = {})
+ ActionView::Template.new(body, "hello template", ERBHandler, {:virtual_path => "hello"})
+ end
+
+ def render(locals = {})
+ @template.render(@obj, locals)
+ end
+
+ def setup
+ @obj = Context.new
+ end
+
+ def test_basic_template
+ @template = new_template
+ assert_equal "Hello", render
+ end
+
+ def test_locals
+ @template = new_template("<%= my_local %>")
+ assert_equal "I'm a local", render(:my_local => "I'm a local")
+ end
+
+ def test_restores_buffer
+ @template = new_template
+ assert_equal "Hello", render
+ assert_equal "original", @obj.my_buffer
+ end
+
+ def test_virtual_path
+ @template = new_template("<%= @_virtual_path %>" \
+ "<%= partial.render(self, {}) %>" \
+ "<%= @_virtual_path %>")
+ assert_equal "hellopartialhello", render
+ end
+
+ if "ruby".encoding_aware?
+ def test_resulting_string_is_utf8
+ @template = new_template
+ assert_equal Encoding::UTF_8, render.encoding
+ end
+
+ def test_no_magic_comment_word_with_utf_8
+ @template = new_template("hello \u{fc}mlat")
+ assert_equal Encoding::UTF_8, render.encoding
+ assert_equal "hello \u{fc}mlat", render
+ end
+
+ # This test ensures that if the default_external
+ # is set to something other than UTF-8, we don't
+ # get any errors and get back a UTF-8 String.
+ def test_default_external_works
+ Encoding.default_external = "ISO-8859-1"
+ @template = new_template("hello \xFCmlat")
+ assert_equal Encoding::UTF_8, render.encoding
+ assert_equal "hello \u{fc}mlat", render
+ ensure
+ Encoding.default_external = "UTF-8"
+ end
+
+ def test_encoding_can_be_specified_with_magic_comment
+ @template = new_template("# encoding: ISO-8859-1\nhello \xFCmlat")
+ assert_equal Encoding::UTF_8, render.encoding
+ assert_equal "\nhello \u{fc}mlat", render
+ end
+
+ # TODO: This is currently handled inside ERB. The case of explicitly
+ # lying about encodings via the normal Rails API should be handled
+ # inside Rails.
+ def test_lying_with_magic_comment
+ assert_raises(ActionView::Template::Error) do
+ @template = new_template("# encoding: UTF-8\nhello \xFCmlat")
+ render
+ end
+ end
+
+ def test_encoding_can_be_specified_with_magic_comment_in_erb
+ @template = new_template("<%# encoding: ISO-8859-1 %>hello \xFCmlat")
+ result = render
+ assert_equal Encoding::UTF_8, render.encoding
+ assert_equal "hello \u{fc}mlat", render
+ end
+
+ def test_error_when_template_isnt_valid_utf8
+ assert_raises(ActionView::Template::Error, /\xFC/) do
+ @template = new_template("hello \xFCmlat")
+ render
+ end
+ end
+ end
+end \ No newline at end of file