2016-10-14 09:26:13 -04:00
|
|
|
# frozen_string_literal: false
|
|
|
|
require 'test/unit'
|
|
|
|
require 'optparse'
|
|
|
|
require 'optparse/kwargs'
|
|
|
|
|
2022-04-22 16:01:43 -04:00
|
|
|
class TestOptionParserKwArg < Test::Unit::TestCase
|
2016-10-14 09:26:13 -04:00
|
|
|
class K
|
|
|
|
def initialize(host:, port: 8080)
|
|
|
|
@host = host
|
|
|
|
@port = port
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class DummyOutput < String
|
2017-10-23 10:05:07 -04:00
|
|
|
alias write concat
|
2016-10-14 09:26:13 -04:00
|
|
|
end
|
|
|
|
def assert_no_error(*args)
|
|
|
|
$stderr, stderr = DummyOutput.new, $stderr
|
|
|
|
assert_nothing_raised(*args) {return yield}
|
|
|
|
ensure
|
|
|
|
stderr, $stderr = $stderr, stderr
|
|
|
|
$!.backtrace.delete_if {|e| /\A#{Regexp.quote(__FILE__)}:#{__LINE__-2}/o =~ e} if $!
|
|
|
|
assert_empty(stderr)
|
|
|
|
end
|
|
|
|
alias no_error assert_no_error
|
|
|
|
|
|
|
|
def test_kwarg
|
|
|
|
opt = OptionParser.new
|
|
|
|
options = opt.define_by_keywords({}, K.instance_method(:initialize),
|
|
|
|
port: [Integer])
|
|
|
|
assert_raise(OptionParser::MissingArgument) {opt.parse!(%w"--host")}
|
|
|
|
assert_nothing_raised {opt.parse!(%w"--host=localhost")}
|
|
|
|
assert_equal("localhost", options[:host])
|
|
|
|
assert_nothing_raised {opt.parse!(%w"--port")}
|
|
|
|
assert_nothing_raised {opt.parse!(%w"--port=80")}
|
|
|
|
assert_equal(80, options[:port])
|
|
|
|
end
|
|
|
|
end
|