From 562c0bfedaa96a1488cbfc0d282412743ea8cde0 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 9 Jun 2019 11:34:58 +0900 Subject: [PATCH] Split test_strip_bom for each encoding --- test/ruby/test_io_m17n.rb | 46 +++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/test/ruby/test_io_m17n.rb b/test/ruby/test_io_m17n.rb index 4cc3d15f3d..6fb8d8a0cf 100644 --- a/test/ruby/test_io_m17n.rb +++ b/test/ruby/test_io_m17n.rb @@ -2080,26 +2080,42 @@ EOT } end - def test_strip_bom - with_tmpdir { - text = "\uFEFFa" - stripped = "a" - %w/UTF-8 UTF-16BE UTF-16LE UTF-32BE UTF-32LE/.each do |name| - path = '%s-bom.txt' % name + %w/UTF-8 UTF-16BE UTF-16LE UTF-32BE UTF-32LE/.each do |name| + define_method("test_strip_bom:#{name}") do + path = "#{name}-bom.txt" + with_tmpdir { + text = "\uFEFFa" + stripped = "a" content = text.encode(name) generate_file(path, content) result = File.read(path, mode: 'rb:BOM|UTF-8') assert_equal(Encoding.find(name), result.encoding, name) assert_equal(content[1..-1].b, result.b, name) - result = File.read(path, mode: 'rb:BOM|UTF-8:UTF-8') - assert_equal(Encoding::UTF_8, result.encoding, name) - assert_equal(stripped, result, name) - end + %w[rb rt r].each do |mode| + message = "#{name}, mode: #{mode.dump}" + result = File.read(path, mode: "#{mode}:BOM|UTF-8:UTF-8") + assert_equal(Encoding::UTF_8, result.encoding, message) + assert_equal(stripped, result, message) + end + } + end + end + + def test_strip_bom_no_conv + with_tmpdir { + path = 'UTF-8-bom.txt' + generate_file(path, "\uFEFFa") bug3407 = '[ruby-core:30641]' - path = 'UTF-8-bom.txt' result = File.read(path, encoding: 'BOM|UTF-8') - assert_equal("a", result.force_encoding("ascii-8bit"), bug3407) + assert_equal("a", result.b, bug3407) + } + end + + def test_strip_bom_invalid + with_tmpdir { + path = 'UTF-8-bom.txt' + generate_file(path, "\uFEFFa") bug8323 = '[ruby-core:54563] [Bug #8323]' expected = "a\xff".force_encoding("utf-8") @@ -2110,8 +2126,14 @@ EOT result = File.read(path, encoding: 'BOM|UTF-8:UTF-8') assert_not_predicate(result, :valid_encoding?, bug8323) assert_equal(expected, result, bug8323) + } + end + def test_strip_bom_no_bom + with_tmpdir { + bug8323 = '[ruby-core:54563] [Bug #8323]' path = 'ascii.txt' + stripped = "a" generate_file(path, stripped) result = File.read(path, encoding: 'BOM|UTF-8') assert_equal(stripped, result, bug8323)