new 'file_encoding' assert method + test

This commit is contained in:
Johan Holmberg 2016-11-07 23:56:01 +01:00
parent b63c6ee187
commit 6672d7bccf
2 changed files with 138 additions and 0 deletions

View File

@ -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
View 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