From 0cdaa38dd190cae1f13f0f22ab3d1002b6a82081 Mon Sep 17 00:00:00 2001 From: Cliff Pruitt Date: Fri, 19 Jul 2019 15:16:23 -0400 Subject: Add encoding tests for ActiveSupport::Inflector.transliterate --- activesupport/test/transliterate_test.rb | 57 ++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'activesupport') diff --git a/activesupport/test/transliterate_test.rb b/activesupport/test/transliterate_test.rb index 620bb20305..4101e4878a 100644 --- a/activesupport/test/transliterate_test.rb +++ b/activesupport/test/transliterate_test.rb @@ -58,6 +58,63 @@ class TransliterateTest < ActiveSupport::TestCase assert_equal "Can only transliterate strings. Received Object", exception.message end + # Valid UTF-8 Works + def test_transliterate_handles_strings_with_valid_utf8_encodings + string = String.new("A", encoding: Encoding::UTF_8) + assert_equal "A", ActiveSupport::Inflector.transliterate(string) + end + + # Valid US-ASCII Works + def test_transliterate_handles_strings_with_valid_us_ascii_encodings + string = String.new("A", encoding: Encoding::US_ASCII) + assert_equal "A", ActiveSupport::Inflector.transliterate(string) + end + + # Valid GB18030 Works + def test_transliterate_handles_strings_with_valid_gb18030_encodings + string = String.new("A", encoding: Encoding::GB18030) + assert_equal "A", ActiveSupport::Inflector.transliterate(string) + end + + # All other encodings raise exceptions + def test_transliterate_handles_strings_with_incompatible_encodings + incompatible_encodings = Encoding.list - [ + Encoding::UTF_8, + Encoding::US_ASCII, + Encoding::GB18030, + ] + # This Raises an argument error + incompatible_encodings -= [Encoding::ASCII_8BIT] + incompatible_encodings.each do |encoding| + string = String.new("", encoding: encoding) + exception = assert_raises Encoding::CompatibilityError do + ActiveSupport::Inflector.transliterate(string) + end + end + end + + # Invalid UTF-8 Works + def test_transliterate_handles_strings_with_invalid_utf8_bytes + string = String.new("\255", encoding: Encoding::UTF_8) + assert_equal "?", ActiveSupport::Inflector.transliterate(string) + end + + # Invalid raises exception + def test_transliterate_handles_strings_with_invalid_us_ascii_bytes + string = String.new("\255", encoding: Encoding::US_ASCII) + exception = assert_raises Encoding::CompatibilityError do + ActiveSupport::Inflector.transliterate(string) + end + end + + # Invalid GB18030 raises exception + def test_transliterate_handles_strings_with_invalid_gb18030_bytes + string = String.new("\255", encoding: Encoding::GB18030) + exception = assert_raises Encoding::CompatibilityError do + ActiveSupport::Inflector.transliterate(string) + end + end + def test_transliterate_handles_ascci_8bit_strings ascii_8bit_string = "A".b exception = assert_raises ArgumentError do -- cgit v1.2.3