aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorCliff Pruitt <cliff.pruitt@cliffpruitt.com>2019-07-19 15:16:23 -0400
committerCliff Pruitt <cliff.pruitt@cliffpruitt.com>2019-07-26 12:18:01 -0400
commit0cdaa38dd190cae1f13f0f22ab3d1002b6a82081 (patch)
tree88c14339dc0bf7824c68d9625f2beaa12bfcbfd6 /activesupport
parent5b0a805c6a9f22818c17ddd5641b9480ea1d668d (diff)
downloadrails-0cdaa38dd190cae1f13f0f22ab3d1002b6a82081.tar.gz
rails-0cdaa38dd190cae1f13f0f22ab3d1002b6a82081.tar.bz2
rails-0cdaa38dd190cae1f13f0f22ab3d1002b6a82081.zip
Add encoding tests for ActiveSupport::Inflector.transliterate
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/test/transliterate_test.rb57
1 files changed, 57 insertions, 0 deletions
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