ruby--ruby/test/optparse/test_kwargs.rb

39 lines
1.1 KiB
Ruby

# frozen_string_literal: false
require 'test/unit'
require 'optparse'
require 'optparse/kwargs'
class TestOptionParserKwArg < Test::Unit::TestCase
class K
def initialize(host:, port: 8080)
@host = host
@port = port
end
end
class DummyOutput < String
alias write concat
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