mirror of https://github.com/tailix/libkernaux.git
71 lines
1.6 KiB
Ruby
71 lines
1.6 KiB
Ruby
def test_cmdline(str, expected)
|
|
result = KernAux.cmdline str
|
|
|
|
assert_true result.instance_of? Array
|
|
assert_true result.frozen?
|
|
result.each do |item|
|
|
assert_true item.instance_of? String
|
|
assert_true item.frozen?
|
|
end
|
|
|
|
assert_equal result, expected
|
|
end
|
|
|
|
assert 'default' do
|
|
test_cmdline 'foo bar\\ baz "car cdr"', ['foo', 'bar baz', 'car cdr']
|
|
end
|
|
|
|
assert 'when str is empty' do
|
|
test_cmdline '', []
|
|
end
|
|
|
|
assert 'when str has invalid type' do
|
|
assert_raise TypeError, 'Integer cannot be converted to String' do
|
|
KernAux.cmdline 123
|
|
end
|
|
end
|
|
|
|
assert 'when str has EOL after backslash' do
|
|
assert_raise KernAux::CmdlineError, 'EOL after backslash' do
|
|
KernAux.cmdline '\\'
|
|
end
|
|
end
|
|
|
|
assert 'when str has EOL after backslash inside quote' do
|
|
assert_raise KernAux::CmdlineError, 'EOL after backslash inside quote' do
|
|
KernAux.cmdline '"\\'
|
|
end
|
|
end
|
|
|
|
assert 'when str has unescaped quotation mark' do
|
|
assert_raise KernAux::CmdlineError, 'unescaped quotation mark' do
|
|
KernAux.cmdline 'foo"'
|
|
end
|
|
end
|
|
|
|
assert 'when str has EOL inside quote' do
|
|
assert_raise KernAux::CmdlineError, 'EOL inside quote' do
|
|
KernAux.cmdline '"'
|
|
end
|
|
end
|
|
|
|
assert 'when there are not too many args' do
|
|
test_cmdline 'a ' * 256, ['a'] * 256
|
|
end
|
|
|
|
assert 'when there are too many args' do
|
|
assert_raise KernAux::CmdlineError, 'too many args' do
|
|
KernAux.cmdline 'a ' * 257
|
|
end
|
|
end
|
|
|
|
assert 'when args don\'t cause buffer overflow' do
|
|
test_cmdline 'a' * 4095, ['a' * 4095]
|
|
end
|
|
|
|
assert 'when args cause buffer overflow' do
|
|
assert_raise KernAux::CmdlineError, 'buffer overflow' do
|
|
KernAux.cmdline 'a' * 4096
|
|
end
|
|
end
|