[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]