new 'file_encoding' assert method + test
This commit is contained in:
parent
b63c6ee187
commit
6672d7bccf
@ -487,6 +487,30 @@ module Cmdtest
|
||||
:other_error
|
||||
end
|
||||
|
||||
# Assert file encoding
|
||||
def file_encoding(file, enc, bom: nil)
|
||||
_process_after do
|
||||
bytes = nil
|
||||
File.open(file, 'rb') do |f|
|
||||
bytes = f.read
|
||||
end
|
||||
str = bytes.force_encoding(enc)
|
||||
valid = str.valid_encoding?
|
||||
_assert valid do
|
||||
"file not in encoding: #{file}, #{enc}"
|
||||
end
|
||||
if valid && bom != nil
|
||||
has_bom = str.size >= 1 && str.codepoints[0] == 0xfeff
|
||||
_assert ! (! bom && has_bom) do
|
||||
"file has unexpected BOM: #{file}"
|
||||
end
|
||||
_assert ! (bom && ! has_bom) do
|
||||
"file hasn't expected BOM: #{file}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Assert file equal to specific value.
|
||||
def file_equal(file, expected)
|
||||
_file_equal_aux(true, file, expected)
|
||||
|
114
t/CMDTEST_file_encoding.rb
Normal file
114
t/CMDTEST_file_encoding.rb
Normal file
@ -0,0 +1,114 @@
|
||||
|
||||
require "selftest_utils"
|
||||
|
||||
class CMDTEST_file_encoding < Cmdtest::Testcase
|
||||
|
||||
include SelftestUtils
|
||||
|
||||
#----------------------------------------
|
||||
# 'file_encoding' detects equal file encoding + bom
|
||||
|
||||
def test_file_encoding_UTF8_CORRECT
|
||||
create_CMDTEST_foo [
|
||||
"file_open('foo', 'w') {|f| f.write \"\\uFEFFabc-αβγ-Г-א-åäö\\n\" }",
|
||||
"",
|
||||
"cmd 'true.rb' do",
|
||||
" file_encoding 'foo', 'UTF-8'",
|
||||
"end",
|
||||
]
|
||||
|
||||
cmd_cmdtest do
|
||||
stdout_equal [
|
||||
"### true.rb",
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
def test_file_encoding_UTF8_INCORRECT
|
||||
create_CMDTEST_foo [
|
||||
"file_open('foo', 'wb') {|f| f.write \"\\xffabc-αβγ-Г-א-åäö\\n\" }",
|
||||
"",
|
||||
"cmd 'true.rb' do",
|
||||
" file_encoding 'foo', 'UTF-8'",
|
||||
"end",
|
||||
]
|
||||
|
||||
cmd_cmdtest do
|
||||
stdout_equal [
|
||||
"### true.rb",
|
||||
"--- ERROR: file not in encoding: foo, UTF-8",
|
||||
]
|
||||
exit_nonzero
|
||||
end
|
||||
end
|
||||
|
||||
def test_file_encoding_UTF8_CORRECT_BOM_true_CORRECT
|
||||
create_CMDTEST_foo [
|
||||
"file_open('foo', 'w') {|f| f.write \"\\uFEFFabc-αβγ-Г-א-åäö\\n\" }",
|
||||
"",
|
||||
"cmd 'true.rb' do",
|
||||
" file_encoding 'foo', 'UTF-8', bom: true",
|
||||
"end",
|
||||
]
|
||||
|
||||
cmd_cmdtest do
|
||||
stdout_equal [
|
||||
"### true.rb",
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
def test_file_encoding_UTF8_CORRECT_BOM_false_INCORRECT
|
||||
create_CMDTEST_foo [
|
||||
"file_open('foo', 'w') {|f| f.write \"\\uFEFFabc-αβγ-Г-א-åäö\\n\" }",
|
||||
"",
|
||||
"cmd 'true.rb' do",
|
||||
" file_encoding 'foo', 'UTF-8', bom: false",
|
||||
"end",
|
||||
]
|
||||
|
||||
cmd_cmdtest do
|
||||
stdout_equal [
|
||||
"### true.rb",
|
||||
"--- ERROR: file has unexpected BOM: foo",
|
||||
]
|
||||
exit_nonzero
|
||||
end
|
||||
end
|
||||
|
||||
def test_file_encoding_UTF8_CORRECT_BOM_false_CORRECT
|
||||
create_CMDTEST_foo [
|
||||
"file_open('foo', 'w') {|f| f.write \"abc-αβγ-Г-א-åäö\\n\" }",
|
||||
"",
|
||||
"cmd 'true.rb' do",
|
||||
" file_encoding 'foo', 'UTF-8', bom: false",
|
||||
"end",
|
||||
]
|
||||
|
||||
cmd_cmdtest do
|
||||
stdout_equal [
|
||||
"### true.rb",
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
def test_file_encoding_UTF8_CORRECT_BOM_true_INCORRECT
|
||||
create_CMDTEST_foo [
|
||||
"file_open('foo', 'w') {|f| f.write \"abc-αβγ-Г-א-åäö\\n\" }",
|
||||
"",
|
||||
"cmd 'true.rb' do",
|
||||
" file_encoding 'foo', 'UTF-8', bom: true",
|
||||
"end",
|
||||
]
|
||||
|
||||
cmd_cmdtest do
|
||||
stdout_equal [
|
||||
"### true.rb",
|
||||
"--- ERROR: file hasn't expected BOM: foo",
|
||||
]
|
||||
exit_nonzero
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user