summaryrefslogtreecommitdiff
path: root/spec/ruby/core/encoding
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/encoding')
-rw-r--r--spec/ruby/core/encoding/compatible_spec.rb379
1 files changed, 379 insertions, 0 deletions
diff --git a/spec/ruby/core/encoding/compatible_spec.rb b/spec/ruby/core/encoding/compatible_spec.rb
index f18d8680a9..d5b958ea0b 100644
--- a/spec/ruby/core/encoding/compatible_spec.rb
+++ b/spec/ruby/core/encoding/compatible_spec.rb
@@ -161,6 +161,379 @@ describe "Encoding.compatible? String, String" do
Encoding.compatible?(@str, "").should == Encoding::UTF_7
end
end
+
+ # Encoding negotiation depends on whether encodings are ASCII-compatible, empty
+ # and contain only ASCII characters (that take 7 bits). Check US-ASCII, UTF-8 and
+ # BINARY encodings (as most common) as well as an ASCII-compatible, a non-ASCII-compatible and a dummy
+ # encodings in all possible combinations.
+ describe "compatibility matrix" do
+
+# Use the following script to regenerate the matrix:
+#
+# ```
+# # -*- encoding: binary -*-
+#
+# ENCODINGS = [
+# "US-ASCII",
+# "UTF-8",
+# "ASCII-8BIT",
+# "ISO-8859-1", # ASCII-compatible
+# "UTF-16BE", # non-ASCII-compatible
+# "ISO-2022-JP" # dummy
+# ]
+#
+# TYPES = [:empty, :"7bits", :non7bits]
+#
+# VALUES = {
+# empty: "",
+# :"7bits" => "\x01",
+# non7bits: "\x81"
+# }
+#
+# ENCODINGS.product(TYPES, ENCODINGS, TYPES).each do |encoding1, type1, encoding2, type2|
+# value1 = VALUES[type1].dup.force_encoding(encoding1)
+# value2 = VALUES[type2].dup.force_encoding(encoding2)
+#
+# result_encoding = Encoding.compatible?(value1, value2)
+#
+# puts "[#{encoding1.inspect}, #{value1.inspect}, #{encoding2.inspect}, #{value2.inspect}, #{result_encoding&.name.inspect}],"
+# end
+# ```
+
+ matrix = [
+ ["US-ASCII", "", "US-ASCII", "", "US-ASCII"],
+ ["US-ASCII", "", "US-ASCII", "\x01", "US-ASCII"],
+ ["US-ASCII", "", "US-ASCII", "\x81", "US-ASCII"],
+ ["US-ASCII", "", "UTF-8", "", "US-ASCII"],
+ ["US-ASCII", "", "UTF-8", "\u0001", "US-ASCII"],
+ ["US-ASCII", "", "UTF-8", "\x81", "UTF-8"],
+ ["US-ASCII", "", "ASCII-8BIT", "", "US-ASCII"],
+ ["US-ASCII", "", "ASCII-8BIT", "\x01", "US-ASCII"],
+ ["US-ASCII", "", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["US-ASCII", "", "ISO-8859-1", "", "US-ASCII"],
+ ["US-ASCII", "", "ISO-8859-1", "\x01", "US-ASCII"],
+ ["US-ASCII", "", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["US-ASCII", "", "UTF-16BE", "", "US-ASCII"],
+ ["US-ASCII", "", "UTF-16BE", "\x01", "UTF-16BE"],
+ ["US-ASCII", "", "UTF-16BE", "\x81", "UTF-16BE"],
+ ["US-ASCII", "", "ISO-2022-JP", "", "US-ASCII"],
+ ["US-ASCII", "", "ISO-2022-JP", "\x01", "ISO-2022-JP"],
+ ["US-ASCII", "", "ISO-2022-JP", "\x81", "ISO-2022-JP"],
+ ["US-ASCII", "\x01", "US-ASCII", "", "US-ASCII"],
+ ["US-ASCII", "\x01", "US-ASCII", "\x01", "US-ASCII"],
+ ["US-ASCII", "\x01", "US-ASCII", "\x81", "US-ASCII"],
+ ["US-ASCII", "\x01", "UTF-8", "", "US-ASCII"],
+ ["US-ASCII", "\x01", "UTF-8", "\u0001", "US-ASCII"],
+ ["US-ASCII", "\x01", "UTF-8", "\x81", "UTF-8"],
+ ["US-ASCII", "\x01", "ASCII-8BIT", "", "US-ASCII"],
+ ["US-ASCII", "\x01", "ASCII-8BIT", "\x01", "US-ASCII"],
+ ["US-ASCII", "\x01", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["US-ASCII", "\x01", "ISO-8859-1", "", "US-ASCII"],
+ ["US-ASCII", "\x01", "ISO-8859-1", "\x01", "US-ASCII"],
+ ["US-ASCII", "\x01", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["US-ASCII", "\x01", "UTF-16BE", "", "US-ASCII"],
+ ["US-ASCII", "\x01", "UTF-16BE", "\x01", nil],
+ ["US-ASCII", "\x01", "UTF-16BE", "\x81", nil],
+ ["US-ASCII", "\x01", "ISO-2022-JP", "", "US-ASCII"],
+ ["US-ASCII", "\x01", "ISO-2022-JP", "\x01", nil],
+ ["US-ASCII", "\x01", "ISO-2022-JP", "\x81", nil],
+ ["US-ASCII", "\x81", "US-ASCII", "", "US-ASCII"],
+ ["US-ASCII", "\x81", "US-ASCII", "\x01", "US-ASCII"],
+ ["US-ASCII", "\x81", "US-ASCII", "\x81", "US-ASCII"],
+ ["US-ASCII", "\x81", "UTF-8", "", "US-ASCII"],
+ ["US-ASCII", "\x81", "UTF-8", "\u0001", "US-ASCII"],
+ ["US-ASCII", "\x81", "UTF-8", "\x81", nil],
+ ["US-ASCII", "\x81", "ASCII-8BIT", "", "US-ASCII"],
+ ["US-ASCII", "\x81", "ASCII-8BIT", "\x01", "US-ASCII"],
+ ["US-ASCII", "\x81", "ASCII-8BIT", "\x81", nil],
+ ["US-ASCII", "\x81", "ISO-8859-1", "", "US-ASCII"],
+ ["US-ASCII", "\x81", "ISO-8859-1", "\x01", "US-ASCII"],
+ ["US-ASCII", "\x81", "ISO-8859-1", "\x81", nil],
+ ["US-ASCII", "\x81", "UTF-16BE", "", "US-ASCII"],
+ ["US-ASCII", "\x81", "UTF-16BE", "\x01", nil],
+ ["US-ASCII", "\x81", "UTF-16BE", "\x81", nil],
+ ["US-ASCII", "\x81", "ISO-2022-JP", "", "US-ASCII"],
+ ["US-ASCII", "\x81", "ISO-2022-JP", "\x01", nil],
+ ["US-ASCII", "\x81", "ISO-2022-JP", "\x81", nil],
+ ["UTF-8", "", "US-ASCII", "", "UTF-8"],
+ ["UTF-8", "", "US-ASCII", "\x01", "UTF-8"],
+ ["UTF-8", "", "US-ASCII", "\x81", "US-ASCII"],
+ ["UTF-8", "", "UTF-8", "", "UTF-8"],
+ ["UTF-8", "", "UTF-8", "\u0001", "UTF-8"],
+ ["UTF-8", "", "UTF-8", "\x81", "UTF-8"],
+ ["UTF-8", "", "ASCII-8BIT", "", "UTF-8"],
+ ["UTF-8", "", "ASCII-8BIT", "\x01", "UTF-8"],
+ ["UTF-8", "", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["UTF-8", "", "ISO-8859-1", "", "UTF-8"],
+ ["UTF-8", "", "ISO-8859-1", "\x01", "UTF-8"],
+ ["UTF-8", "", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["UTF-8", "", "UTF-16BE", "", "UTF-8"],
+ ["UTF-8", "", "UTF-16BE", "\x01", "UTF-16BE"],
+ ["UTF-8", "", "UTF-16BE", "\x81", "UTF-16BE"],
+ ["UTF-8", "", "ISO-2022-JP", "", "UTF-8"],
+ ["UTF-8", "", "ISO-2022-JP", "\x01", "ISO-2022-JP"],
+ ["UTF-8", "", "ISO-2022-JP", "\x81", "ISO-2022-JP"],
+ ["UTF-8", "\u0001", "US-ASCII", "", "UTF-8"],
+ ["UTF-8", "\u0001", "US-ASCII", "\x01", "UTF-8"],
+ ["UTF-8", "\u0001", "US-ASCII", "\x81", "US-ASCII"],
+ ["UTF-8", "\u0001", "UTF-8", "", "UTF-8"],
+ ["UTF-8", "\u0001", "UTF-8", "\u0001", "UTF-8"],
+ ["UTF-8", "\u0001", "UTF-8", "\x81", "UTF-8"],
+ ["UTF-8", "\u0001", "ASCII-8BIT", "", "UTF-8"],
+ ["UTF-8", "\u0001", "ASCII-8BIT", "\x01", "UTF-8"],
+ ["UTF-8", "\u0001", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["UTF-8", "\u0001", "ISO-8859-1", "", "UTF-8"],
+ ["UTF-8", "\u0001", "ISO-8859-1", "\x01", "UTF-8"],
+ ["UTF-8", "\u0001", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["UTF-8", "\u0001", "UTF-16BE", "", "UTF-8"],
+ ["UTF-8", "\u0001", "UTF-16BE", "\x01", nil],
+ ["UTF-8", "\u0001", "UTF-16BE", "\x81", nil],
+ ["UTF-8", "\u0001", "ISO-2022-JP", "", "UTF-8"],
+ ["UTF-8", "\u0001", "ISO-2022-JP", "\x01", nil],
+ ["UTF-8", "\u0001", "ISO-2022-JP", "\x81", nil],
+ ["UTF-8", "\x81", "US-ASCII", "", "UTF-8"],
+ ["UTF-8", "\x81", "US-ASCII", "\x01", "UTF-8"],
+ ["UTF-8", "\x81", "US-ASCII", "\x81", nil],
+ ["UTF-8", "\x81", "UTF-8", "", "UTF-8"],
+ ["UTF-8", "\x81", "UTF-8", "\u0001", "UTF-8"],
+ ["UTF-8", "\x81", "UTF-8", "\x81", "UTF-8"],
+ ["UTF-8", "\x81", "ASCII-8BIT", "", "UTF-8"],
+ ["UTF-8", "\x81", "ASCII-8BIT", "\x01", "UTF-8"],
+ ["UTF-8", "\x81", "ASCII-8BIT", "\x81", nil],
+ ["UTF-8", "\x81", "ISO-8859-1", "", "UTF-8"],
+ ["UTF-8", "\x81", "ISO-8859-1", "\x01", "UTF-8"],
+ ["UTF-8", "\x81", "ISO-8859-1", "\x81", nil],
+ ["UTF-8", "\x81", "UTF-16BE", "", "UTF-8"],
+ ["UTF-8", "\x81", "UTF-16BE", "\x01", nil],
+ ["UTF-8", "\x81", "UTF-16BE", "\x81", nil],
+ ["UTF-8", "\x81", "ISO-2022-JP", "", "UTF-8"],
+ ["UTF-8", "\x81", "ISO-2022-JP", "\x01", nil],
+ ["UTF-8", "\x81", "ISO-2022-JP", "\x81", nil],
+ ["ASCII-8BIT", "", "US-ASCII", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "US-ASCII", "\x01", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "US-ASCII", "\x81", "US-ASCII"],
+ ["ASCII-8BIT", "", "UTF-8", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "UTF-8", "\u0001", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "UTF-8", "\x81", "UTF-8"],
+ ["ASCII-8BIT", "", "ASCII-8BIT", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "ASCII-8BIT", "\x01", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "ISO-8859-1", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "ISO-8859-1", "\x01", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["ASCII-8BIT", "", "UTF-16BE", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "UTF-16BE", "\x01", "UTF-16BE"],
+ ["ASCII-8BIT", "", "UTF-16BE", "\x81", "UTF-16BE"],
+ ["ASCII-8BIT", "", "ISO-2022-JP", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "", "ISO-2022-JP", "\x01", "ISO-2022-JP"],
+ ["ASCII-8BIT", "", "ISO-2022-JP", "\x81", "ISO-2022-JP"],
+ ["ASCII-8BIT", "\x01", "US-ASCII", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "US-ASCII", "\x01", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "US-ASCII", "\x81", "US-ASCII"],
+ ["ASCII-8BIT", "\x01", "UTF-8", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "UTF-8", "\u0001", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "UTF-8", "\x81", "UTF-8"],
+ ["ASCII-8BIT", "\x01", "ASCII-8BIT", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "ASCII-8BIT", "\x01", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "ISO-8859-1", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "ISO-8859-1", "\x01", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["ASCII-8BIT", "\x01", "UTF-16BE", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "UTF-16BE", "\x01", nil],
+ ["ASCII-8BIT", "\x01", "UTF-16BE", "\x81", nil],
+ ["ASCII-8BIT", "\x01", "ISO-2022-JP", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x01", "ISO-2022-JP", "\x01", nil],
+ ["ASCII-8BIT", "\x01", "ISO-2022-JP", "\x81", nil],
+ ["ASCII-8BIT", "\x81", "US-ASCII", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "US-ASCII", "\x01", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "US-ASCII", "\x81", nil],
+ ["ASCII-8BIT", "\x81", "UTF-8", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "UTF-8", "\u0001", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "UTF-8", "\x81", nil],
+ ["ASCII-8BIT", "\x81", "ASCII-8BIT", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "ASCII-8BIT", "\x01", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "ISO-8859-1", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "ISO-8859-1", "\x01", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "ISO-8859-1", "\x81", nil],
+ ["ASCII-8BIT", "\x81", "UTF-16BE", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "UTF-16BE", "\x01", nil],
+ ["ASCII-8BIT", "\x81", "UTF-16BE", "\x81", nil],
+ ["ASCII-8BIT", "\x81", "ISO-2022-JP", "", "ASCII-8BIT"],
+ ["ASCII-8BIT", "\x81", "ISO-2022-JP", "\x01", nil],
+ ["ASCII-8BIT", "\x81", "ISO-2022-JP", "\x81", nil],
+ ["ISO-8859-1", "", "US-ASCII", "", "ISO-8859-1"],
+ ["ISO-8859-1", "", "US-ASCII", "\x01", "ISO-8859-1"],
+ ["ISO-8859-1", "", "US-ASCII", "\x81", "US-ASCII"],
+ ["ISO-8859-1", "", "UTF-8", "", "ISO-8859-1"],
+ ["ISO-8859-1", "", "UTF-8", "\u0001", "ISO-8859-1"],
+ ["ISO-8859-1", "", "UTF-8", "\x81", "UTF-8"],
+ ["ISO-8859-1", "", "ASCII-8BIT", "", "ISO-8859-1"],
+ ["ISO-8859-1", "", "ASCII-8BIT", "\x01", "ISO-8859-1"],
+ ["ISO-8859-1", "", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["ISO-8859-1", "", "ISO-8859-1", "", "ISO-8859-1"],
+ ["ISO-8859-1", "", "ISO-8859-1", "\x01", "ISO-8859-1"],
+ ["ISO-8859-1", "", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["ISO-8859-1", "", "UTF-16BE", "", "ISO-8859-1"],
+ ["ISO-8859-1", "", "UTF-16BE", "\x01", "UTF-16BE"],
+ ["ISO-8859-1", "", "UTF-16BE", "\x81", "UTF-16BE"],
+ ["ISO-8859-1", "", "ISO-2022-JP", "", "ISO-8859-1"],
+ ["ISO-8859-1", "", "ISO-2022-JP", "\x01", "ISO-2022-JP"],
+ ["ISO-8859-1", "", "ISO-2022-JP", "\x81", "ISO-2022-JP"],
+ ["ISO-8859-1", "\x01", "US-ASCII", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "US-ASCII", "\x01", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "US-ASCII", "\x81", "US-ASCII"],
+ ["ISO-8859-1", "\x01", "UTF-8", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "UTF-8", "\u0001", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "UTF-8", "\x81", "UTF-8"],
+ ["ISO-8859-1", "\x01", "ASCII-8BIT", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "ASCII-8BIT", "\x01", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["ISO-8859-1", "\x01", "ISO-8859-1", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "ISO-8859-1", "\x01", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "UTF-16BE", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "UTF-16BE", "\x01", nil],
+ ["ISO-8859-1", "\x01", "UTF-16BE", "\x81", nil],
+ ["ISO-8859-1", "\x01", "ISO-2022-JP", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x01", "ISO-2022-JP", "\x01", nil],
+ ["ISO-8859-1", "\x01", "ISO-2022-JP", "\x81", nil],
+ ["ISO-8859-1", "\x81", "US-ASCII", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "US-ASCII", "\x01", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "US-ASCII", "\x81", nil],
+ ["ISO-8859-1", "\x81", "UTF-8", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "UTF-8", "\u0001", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "UTF-8", "\x81", nil],
+ ["ISO-8859-1", "\x81", "ASCII-8BIT", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "ASCII-8BIT", "\x01", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "ASCII-8BIT", "\x81", nil],
+ ["ISO-8859-1", "\x81", "ISO-8859-1", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "ISO-8859-1", "\x01", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "UTF-16BE", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "UTF-16BE", "\x01", nil],
+ ["ISO-8859-1", "\x81", "UTF-16BE", "\x81", nil],
+ ["ISO-8859-1", "\x81", "ISO-2022-JP", "", "ISO-8859-1"],
+ ["ISO-8859-1", "\x81", "ISO-2022-JP", "\x01", nil],
+ ["ISO-8859-1", "\x81", "ISO-2022-JP", "\x81", nil],
+ ["UTF-16BE", "", "US-ASCII", "", "UTF-16BE"],
+ ["UTF-16BE", "", "US-ASCII", "\x01", "US-ASCII"],
+ ["UTF-16BE", "", "US-ASCII", "\x81", "US-ASCII"],
+ ["UTF-16BE", "", "UTF-8", "", "UTF-16BE"],
+ ["UTF-16BE", "", "UTF-8", "\u0001", "UTF-8"],
+ ["UTF-16BE", "", "UTF-8", "\x81", "UTF-8"],
+ ["UTF-16BE", "", "ASCII-8BIT", "", "UTF-16BE"],
+ ["UTF-16BE", "", "ASCII-8BIT", "\x01", "ASCII-8BIT"],
+ ["UTF-16BE", "", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["UTF-16BE", "", "ISO-8859-1", "", "UTF-16BE"],
+ ["UTF-16BE", "", "ISO-8859-1", "\x01", "ISO-8859-1"],
+ ["UTF-16BE", "", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["UTF-16BE", "", "UTF-16BE", "", "UTF-16BE"],
+ ["UTF-16BE", "", "UTF-16BE", "\x01", "UTF-16BE"],
+ ["UTF-16BE", "", "UTF-16BE", "\x81", "UTF-16BE"],
+ ["UTF-16BE", "", "ISO-2022-JP", "", "UTF-16BE"],
+ ["UTF-16BE", "", "ISO-2022-JP", "\x01", "ISO-2022-JP"],
+ ["UTF-16BE", "", "ISO-2022-JP", "\x81", "ISO-2022-JP"],
+ ["UTF-16BE", "\x01", "US-ASCII", "", "UTF-16BE"],
+ ["UTF-16BE", "\x01", "US-ASCII", "\x01", nil],
+ ["UTF-16BE", "\x01", "US-ASCII", "\x81", nil],
+ ["UTF-16BE", "\x01", "UTF-8", "", "UTF-16BE"],
+ ["UTF-16BE", "\x01", "UTF-8", "\u0001", nil],
+ ["UTF-16BE", "\x01", "UTF-8", "\x81", nil],
+ ["UTF-16BE", "\x01", "ASCII-8BIT", "", "UTF-16BE"],
+ ["UTF-16BE", "\x01", "ASCII-8BIT", "\x01", nil],
+ ["UTF-16BE", "\x01", "ASCII-8BIT", "\x81", nil],
+ ["UTF-16BE", "\x01", "ISO-8859-1", "", "UTF-16BE"],
+ ["UTF-16BE", "\x01", "ISO-8859-1", "\x01", nil],
+ ["UTF-16BE", "\x01", "ISO-8859-1", "\x81", nil],
+ ["UTF-16BE", "\x01", "UTF-16BE", "", "UTF-16BE"],
+ ["UTF-16BE", "\x01", "UTF-16BE", "\x01", "UTF-16BE"],
+ ["UTF-16BE", "\x01", "UTF-16BE", "\x81", "UTF-16BE"],
+ ["UTF-16BE", "\x01", "ISO-2022-JP", "", "UTF-16BE"],
+ ["UTF-16BE", "\x01", "ISO-2022-JP", "\x01", nil],
+ ["UTF-16BE", "\x01", "ISO-2022-JP", "\x81", nil],
+ ["UTF-16BE", "\x81", "US-ASCII", "", "UTF-16BE"],
+ ["UTF-16BE", "\x81", "US-ASCII", "\x01", nil],
+ ["UTF-16BE", "\x81", "US-ASCII", "\x81", nil],
+ ["UTF-16BE", "\x81", "UTF-8", "", "UTF-16BE"],
+ ["UTF-16BE", "\x81", "UTF-8", "\u0001", nil],
+ ["UTF-16BE", "\x81", "UTF-8", "\x81", nil],
+ ["UTF-16BE", "\x81", "ASCII-8BIT", "", "UTF-16BE"],
+ ["UTF-16BE", "\x81", "ASCII-8BIT", "\x01", nil],
+ ["UTF-16BE", "\x81", "ASCII-8BIT", "\x81", nil],
+ ["UTF-16BE", "\x81", "ISO-8859-1", "", "UTF-16BE"],
+ ["UTF-16BE", "\x81", "ISO-8859-1", "\x01", nil],
+ ["UTF-16BE", "\x81", "ISO-8859-1", "\x81", nil],
+ ["UTF-16BE", "\x81", "UTF-16BE", "", "UTF-16BE"],
+ ["UTF-16BE", "\x81", "UTF-16BE", "\x01", "UTF-16BE"],
+ ["UTF-16BE", "\x81", "UTF-16BE", "\x81", "UTF-16BE"],
+ ["UTF-16BE", "\x81", "ISO-2022-JP", "", "UTF-16BE"],
+ ["UTF-16BE", "\x81", "ISO-2022-JP", "\x01", nil],
+ ["UTF-16BE", "\x81", "ISO-2022-JP", "\x81", nil],
+ ["ISO-2022-JP", "", "US-ASCII", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "", "US-ASCII", "\x01", "US-ASCII"],
+ ["ISO-2022-JP", "", "US-ASCII", "\x81", "US-ASCII"],
+ ["ISO-2022-JP", "", "UTF-8", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "", "UTF-8", "\u0001", "UTF-8"],
+ ["ISO-2022-JP", "", "UTF-8", "\x81", "UTF-8"],
+ ["ISO-2022-JP", "", "ASCII-8BIT", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "", "ASCII-8BIT", "\x01", "ASCII-8BIT"],
+ ["ISO-2022-JP", "", "ASCII-8BIT", "\x81", "ASCII-8BIT"],
+ ["ISO-2022-JP", "", "ISO-8859-1", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "", "ISO-8859-1", "\x01", "ISO-8859-1"],
+ ["ISO-2022-JP", "", "ISO-8859-1", "\x81", "ISO-8859-1"],
+ ["ISO-2022-JP", "", "UTF-16BE", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "", "UTF-16BE", "\x01", "UTF-16BE"],
+ ["ISO-2022-JP", "", "UTF-16BE", "\x81", "UTF-16BE"],
+ ["ISO-2022-JP", "", "ISO-2022-JP", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "", "ISO-2022-JP", "\x01", "ISO-2022-JP"],
+ ["ISO-2022-JP", "", "ISO-2022-JP", "\x81", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x01", "US-ASCII", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x01", "US-ASCII", "\x01", nil],
+ ["ISO-2022-JP", "\x01", "US-ASCII", "\x81", nil],
+ ["ISO-2022-JP", "\x01", "UTF-8", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x01", "UTF-8", "\u0001", nil],
+ ["ISO-2022-JP", "\x01", "UTF-8", "\x81", nil],
+ ["ISO-2022-JP", "\x01", "ASCII-8BIT", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x01", "ASCII-8BIT", "\x01", nil],
+ ["ISO-2022-JP", "\x01", "ASCII-8BIT", "\x81", nil],
+ ["ISO-2022-JP", "\x01", "ISO-8859-1", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x01", "ISO-8859-1", "\x01", nil],
+ ["ISO-2022-JP", "\x01", "ISO-8859-1", "\x81", nil],
+ ["ISO-2022-JP", "\x01", "UTF-16BE", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x01", "UTF-16BE", "\x01", nil],
+ ["ISO-2022-JP", "\x01", "UTF-16BE", "\x81", nil],
+ ["ISO-2022-JP", "\x01", "ISO-2022-JP", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x01", "ISO-2022-JP", "\x01", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x01", "ISO-2022-JP", "\x81", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x81", "US-ASCII", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x81", "US-ASCII", "\x01", nil],
+ ["ISO-2022-JP", "\x81", "US-ASCII", "\x81", nil],
+ ["ISO-2022-JP", "\x81", "UTF-8", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x81", "UTF-8", "\u0001", nil],
+ ["ISO-2022-JP", "\x81", "UTF-8", "\x81", nil],
+ ["ISO-2022-JP", "\x81", "ASCII-8BIT", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x81", "ASCII-8BIT", "\x01", nil],
+ ["ISO-2022-JP", "\x81", "ASCII-8BIT", "\x81", nil],
+ ["ISO-2022-JP", "\x81", "ISO-8859-1", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x81", "ISO-8859-1", "\x01", nil],
+ ["ISO-2022-JP", "\x81", "ISO-8859-1", "\x81", nil],
+ ["ISO-2022-JP", "\x81", "UTF-16BE", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x81", "UTF-16BE", "\x01", nil],
+ ["ISO-2022-JP", "\x81", "UTF-16BE", "\x81", nil],
+ ["ISO-2022-JP", "\x81", "ISO-2022-JP", "", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x81", "ISO-2022-JP", "\x01", "ISO-2022-JP"],
+ ["ISO-2022-JP", "\x81", "ISO-2022-JP", "\x81", "ISO-2022-JP"],
+ ]
+
+ matrix.each do |encoding1, value1, encoding2, value2, compatible_encoding|
+ it "returns #{compatible_encoding} for #{value1.inspect} in #{encoding1} and #{value2.inspect} in #{encoding2}" do
+ actual_encoding = Encoding.compatible?(value1.dup.force_encoding(encoding1), value2.dup.force_encoding(encoding2))
+ actual_encoding&.name.should == compatible_encoding
+ end
+ end
+ end
end
describe "Encoding.compatible? String, Regexp" do
@@ -377,3 +750,9 @@ describe "Encoding.compatible? Object, Object" do
Encoding.compatible?(:sym, Object.new).should be_nil
end
end
+
+describe "Encoding.compatible? nil, nil" do
+ it "returns nil" do
+ Encoding.compatible?(nil, nil).should be_nil
+ end
+end