ruby--ruby/test/test_getoptlong.rb

164 lines
4.3 KiB
Ruby

require 'test/unit'
require 'getoptlong'
class TestGetoptLong < Test::Unit::TestCase
def verify(test_argv, expected_remaining_argv, expected_options)
# Save ARGV and replace it with a test ARGV.
argv_saved = ARGV.dup
ARGV.replace(test_argv)
# Define options.
opts = GetoptLong.new(
['--xxx', '-x', '--aaa', '-a', GetoptLong::REQUIRED_ARGUMENT],
['--yyy', '-y', '--bbb', '-b', GetoptLong::OPTIONAL_ARGUMENT],
['--zzz', '-z', '--ccc', '-c', GetoptLong::NO_ARGUMENT]
)
opts.quiet = true
# Gather options.
actual_options = []
opts.each do |opt, arg|
actual_options << "#{opt}: #{arg}"
end
# Save remaining test ARGV and restore original ARGV.
actual_remaining_argv = ARGV.dup
ARGV.replace(argv_saved)
# Assert.
assert_equal(expected_remaining_argv, actual_remaining_argv, 'ARGV')
assert_equal(expected_options, actual_options, 'Options')
end
def test_no_options
expected_options = []
expected_argv = %w[foo bar]
argv = %w[foo bar]
verify(argv, expected_argv, expected_options)
end
def test_required_argument
expected_options = [
'--xxx: arg'
]
expected_argv = %w[foo bar]
options = %w[--xxx --xx --x -x --aaa --aa --a -a]
options.each do |option|
argv = ['foo', option, 'arg', 'bar']
verify(argv, expected_argv, expected_options)
end
end
def test_required_argument_missing
options = %w[--xxx --xx --x -x --aaa --aa --a -a]
options.each do |option|
argv = [option]
e = assert_raise(GetoptLong::MissingArgument) do
verify(argv, [], [])
end
assert_match('requires an argument', e.message)
end
end
def test_optional_argument
expected_options = [
'--yyy: arg'
]
expected_argv = %w[foo bar]
options = %w[--yyy --y --y -y --bbb --bb --b -b]
options.each do |option|
argv = ['foo', 'bar', option, 'arg']
verify(argv, expected_argv, expected_options)
end
end
def test_optional_argument_missing
expected_options = [
'--yyy: '
]
expected_argv = %w[foo bar]
options = %w[--yyy --y --y -y --bbb --bb --b -b]
options.each do |option|
argv = ['foo', 'bar', option]
verify(argv, expected_argv, expected_options)
end
end
def test_no_argument
expected_options = [
'--zzz: '
]
expected_argv = %w[foo bar]
options = %w[--zzz --zz --z -z --ccc --cc --c -c]
options.each do |option|
argv = ['foo', option, 'bar']
verify(argv, expected_argv, expected_options)
end
end
def test_new_with_empty_array
e = assert_raise(ArgumentError) do
GetoptLong.new([])
end
assert_match(/no argument-flag/, e.message)
end
def test_new_with_bad_array
e = assert_raise(ArgumentError) do
GetoptLong.new('foo')
end
assert_match(/option list contains non-Array argument/, e.message)
end
def test_new_with_empty_subarray
e = assert_raise(ArgumentError) do
GetoptLong.new([[]])
end
assert_match(/no argument-flag/, e.message)
end
def test_new_with_bad_subarray
e = assert_raise(ArgumentError) do
GetoptLong.new([1])
end
assert_match(/no option name/, e.message)
end
def test_new_with_invalid_option
invalid_options = %w[verbose -verbose -- +]
invalid_options.each do |invalid_option|
e = assert_raise(ArgumentError, invalid_option.to_s) do
arguments = [
[invalid_option, '-v', GetoptLong::NO_ARGUMENT]
]
GetoptLong.new(*arguments)
end
assert_match(/invalid option/, e.message)
end
end
def test_new_with_invalid_alias
invalid_aliases = %w[v - -- +]
invalid_aliases.each do |invalid_alias|
e = assert_raise(ArgumentError, invalid_alias.to_s) do
arguments = [
['--verbose', invalid_alias, GetoptLong::NO_ARGUMENT]
]
GetoptLong.new(*arguments)
end
assert_match(/invalid option/, e.message)
end
end
def test_new_with_invalid_flag
invalid_flags = ['foo']
invalid_flags.each do |invalid_flag|
e = assert_raise(ArgumentError, invalid_flag.to_s) do
arguments = [
['--verbose', '-v', invalid_flag]
]
GetoptLong.new(*arguments)
end
assert_match(/no argument-flag/, e.message)
end
end
end