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