aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2010-04-08 19:27:22 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2010-04-08 19:27:39 -0700
commitbd2bf5390d892a1c11bcaa2143f557b82611015e (patch)
tree4300e2b76a33e0d35b2d1784829127e39be5a4c8 /actionpack/test
parentfd7202a75653570693c6fe423faad96019fe0ea1 (diff)
downloadrails-bd2bf5390d892a1c11bcaa2143f557b82611015e.tar.gz
rails-bd2bf5390d892a1c11bcaa2143f557b82611015e.tar.bz2
rails-bd2bf5390d892a1c11bcaa2143f557b82611015e.zip
Expect an incompatible encoding exception when a template doesn't have a magic comment and its source encoding doesn't match the default external encoding
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/fixtures/test/utf8.html.erb2
-rw-r--r--actionpack/test/fixtures/test/utf8_magic.html.erb2
-rw-r--r--actionpack/test/template/render_test.rb61
3 files changed, 38 insertions, 27 deletions
diff --git a/actionpack/test/fixtures/test/utf8.html.erb b/actionpack/test/fixtures/test/utf8.html.erb
index 14fe12debc..551c24e354 100644
--- a/actionpack/test/fixtures/test/utf8.html.erb
+++ b/actionpack/test/fixtures/test/utf8.html.erb
@@ -1,4 +1,4 @@
-Русский текст
+Русский <%= "текст" %>
<%= "日".encoding %>
<%= @output_buffer.encoding %>
<%= __ENCODING__ %>
diff --git a/actionpack/test/fixtures/test/utf8_magic.html.erb b/actionpack/test/fixtures/test/utf8_magic.html.erb
index 58cd03b439..e2aa85e66a 100644
--- a/actionpack/test/fixtures/test/utf8_magic.html.erb
+++ b/actionpack/test/fixtures/test/utf8_magic.html.erb
@@ -1,5 +1,5 @@
<%# encoding: utf-8 -%>
-Русский текст
+Русский <%= "текст" %>
<%= "日".encoding %>
<%= @output_buffer.encoding %>
<%= __ENCODING__ %>
diff --git a/actionpack/test/template/render_test.rb b/actionpack/test/template/render_test.rb
index 5f33c933db..647c673902 100644
--- a/actionpack/test/template/render_test.rb
+++ b/actionpack/test/template/render_test.rb
@@ -245,31 +245,6 @@ module RenderTestCases
assert_equal %(\n<title>title</title>\n\n),
@view.render(:file => "test/layout_render_file.erb")
end
-
- if '1.9'.respond_to?(:force_encoding)
- def test_render_utf8_template_with_magic_comment
- with_external_encoding Encoding::ASCII_8BIT do
- result = @view.render(:file => "test/utf8_magic.html.erb", :layouts => "layouts/yield")
- assert_equal "Русский текст\nUTF-8\nUTF-8\nUTF-8\n", result
- assert_equal Encoding::UTF_8, result.encoding
- end
- end
-
- def test_render_utf8_template_with_default_external_encoding
- with_external_encoding Encoding::UTF_8 do
- result = @view.render(:file => "test/utf8.html.erb", :layouts => "layouts/yield")
- assert_equal "Русский текст\nUTF-8\nUTF-8\nUTF-8\n", result
- assert_equal Encoding::UTF_8, result.encoding
- end
- end
-
- def with_external_encoding(encoding)
- old, Encoding.default_external = Encoding.default_external, encoding
- yield
- ensure
- Encoding.default_external = old
- end
- end
end
class CachedViewRenderTest < ActiveSupport::TestCase
@@ -302,4 +277,40 @@ class LazyViewRenderTest < ActiveSupport::TestCase
def teardown
GC.start
end
+
+ if '1.9'.respond_to?(:force_encoding)
+ def test_render_utf8_template_with_magic_comment
+ 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 "Русский текст\nUTF-8\nUTF-8\nUTF-8\n", result
+ end
+ end
+
+ def test_render_utf8_template_with_default_external_encoding
+ with_external_encoding Encoding::UTF_8 do
+ result = @view.render(:file => "test/utf8.html.erb", :layouts => "layouts/yield")
+ assert_equal Encoding::UTF_8, result.encoding
+ assert_equal "Русский текст\nUTF-8\nUTF-8\nUTF-8\n", result
+ end
+ end
+
+ def test_render_utf8_template_with_incompatible_external_encoding
+ with_external_encoding Encoding::SJIS do
+ begin
+ 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
+ end
+ end
+ end
+
+ def with_external_encoding(encoding)
+ old, Encoding.default_external = Encoding.default_external, encoding
+ yield
+ ensure
+ Encoding.default_external = old
+ end
+ end
end