ruby-changes:69690
From: Burdette <ko1@a...>
Date: Thu, 11 Nov 2021 10:38:05 +0900 (JST)
Subject: [ruby-changes:69690] db316e627f (master): [ruby/getoptlong] Write a first test of getoptlong.rb
https://git.ruby-lang.org/ruby.git/commit/?id=db316e627f From db316e627f32cf73e3cc8f8d67b67894f36c17f3 Mon Sep 17 00:00:00 2001 From: Burdette Lamar <BurdetteLamar@Y...> Date: Tue, 26 Oct 2021 06:20:19 -0500 Subject: [ruby/getoptlong] Write a first test of getoptlong.rb https://github.com/ruby/getoptlong/commit/18cdb03fd4 --- test/test_getoptlong.rb | 163 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 test/test_getoptlong.rb diff --git a/test/test_getoptlong.rb b/test/test_getoptlong.rb new file mode 100644 index 00000000000..f3f08128710 --- /dev/null +++ b/test/test_getoptlong.rb @@ -0,0 +1,163 @@ https://github.com/ruby/ruby/blob/trunk/test/test_getoptlong.rb#L1 +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 -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/