1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
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
|