From 0687baaf57ac2fef4ed5406d1a37e05658f8859f Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 14 Oct 2016 13:26:13 +0000 Subject: optparse/kwargs.rb * lib/optparse/kwargs.rb (OptionParser#define_by_keywords): [EXPERIMENTAL] extract command line option definitions from the information of keyword arguments. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/optparse/test_kwargs.rb | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 test/optparse/test_kwargs.rb (limited to 'test') diff --git a/test/optparse/test_kwargs.rb b/test/optparse/test_kwargs.rb new file mode 100644 index 0000000000..68fe207a2c --- /dev/null +++ b/test/optparse/test_kwargs.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: false +require 'test/unit' +require 'optparse' +require 'optparse/kwargs' + +class TestOptionParser < Test::Unit::TestCase +end +class TestOptionParser::KwArg < Test::Unit::TestCase + class K + def initialize(host:, port: 8080) + @host = host + @port = port + end + end + + class DummyOutput < String + alias write << + 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 -- cgit v1.2.3