mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/getoptlong] Write a first test of getoptlong.rb
https://github.com/ruby/getoptlong/commit/18cdb03fd4
This commit is contained in:
parent
414b5565f7
commit
db316e627f
1 changed files with 163 additions and 0 deletions
163
test/test_getoptlong.rb
Normal file
163
test/test_getoptlong.rb
Normal file
|
@ -0,0 +1,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
|
||||||
|
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
|
||||||
|
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
|
Loading…
Add table
Reference in a new issue