test/test_option_parser.rb in cri-2.8.0 vs test/test_option_parser.rb in cri-2.9.0

- old
+ new

@@ -1,88 +1,88 @@ require 'helper' module Cri class OptionParserTestCase < Cri::TestCase def test_parse_without_options - input = %w(foo bar baz) + input = %w[foo bar baz] definitions = [] parser = Cri::OptionParser.parse(input, definitions) assert_equal({}, parser.options) - assert_equal(%w(foo bar baz), parser.arguments) + assert_equal(%w[foo bar baz], parser.arguments) end def test_parse_with_invalid_option - input = %w(foo -x) + input = %w[foo -x] definitions = [] assert_raises(Cri::OptionParser::IllegalOptionError) do Cri::OptionParser.parse(input, definitions) end end def test_parse_with_unused_options - input = %w(foo) + input = %w[foo] definitions = [ { long: 'aaa', short: 'a', argument: :forbidden }, ] parser = Cri::OptionParser.parse(input, definitions) assert(!parser.options[:aaa]) end def test_parse_with_long_valueless_option - input = %w(foo --aaa bar) + input = %w[foo --aaa bar] definitions = [ { long: 'aaa', short: 'a', argument: :forbidden }, ] parser = Cri::OptionParser.parse(input, definitions) assert(parser.options[:aaa]) - assert_equal(%w(foo bar), parser.arguments) + assert_equal(%w[foo bar], parser.arguments) end def test_parse_with_long_valueful_option - input = %w(foo --aaa xxx bar) + input = %w[foo --aaa xxx bar] definitions = [ { long: 'aaa', short: 'a', argument: :required }, ] parser = Cri::OptionParser.parse(input, definitions) assert_equal({ aaa: 'xxx' }, parser.options) - assert_equal(%w(foo bar), parser.arguments) + assert_equal(%w[foo bar], parser.arguments) end def test_parse_with_long_valueful_equalsign_option - input = %w(foo --aaa=xxx bar) + input = %w[foo --aaa=xxx bar] definitions = [ { long: 'aaa', short: 'a', argument: :required }, ] parser = Cri::OptionParser.parse(input, definitions) assert_equal({ aaa: 'xxx' }, parser.options) - assert_equal(%w(foo bar), parser.arguments) + assert_equal(%w[foo bar], parser.arguments) end def test_parse_with_long_valueful_option_with_missing_value - input = %w(foo --aaa) + input = %w[foo --aaa] definitions = [ { long: 'aaa', short: 'a', argument: :required }, ] assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do Cri::OptionParser.parse(input, definitions) end end def test_parse_with_two_long_valueful_options - input = %w(foo --all --port 2) + input = %w[foo --all --port 2] definitions = [ { long: 'all', short: 'a', argument: :required }, { long: 'port', short: 'p', argument: :required }, ] @@ -90,11 +90,11 @@ Cri::OptionParser.parse(input, definitions) end end def test_parse_with_long_valueless_option_with_optional_value - input = %w(foo --aaa) + input = %w[foo --aaa] definitions = [ { long: 'aaa', short: 'a', argument: :optional }, ] parser = Cri::OptionParser.parse(input, definitions) @@ -102,11 +102,11 @@ assert(parser.options[:aaa]) assert_equal(['foo'], parser.arguments) end def test_parse_with_long_valueful_option_with_optional_value - input = %w(foo --aaa xxx) + input = %w[foo --aaa xxx] definitions = [ { long: 'aaa', short: 'a', argument: :optional }, ] parser = Cri::OptionParser.parse(input, definitions) @@ -114,11 +114,11 @@ assert_equal({ aaa: 'xxx' }, parser.options) assert_equal(['foo'], parser.arguments) end def test_parse_with_long_valueless_option_with_optional_value_and_more_options - input = %w(foo --aaa -b -c) + input = %w[foo --aaa -b -c] definitions = [ { long: 'aaa', short: 'a', argument: :optional }, { long: 'bbb', short: 'b', argument: :forbidden }, { long: 'ccc', short: 'c', argument: :forbidden }, ] @@ -130,34 +130,34 @@ assert(parser.options[:ccc]) assert_equal(['foo'], parser.arguments) end def test_parse_with_short_valueless_options - input = %w(foo -a bar) + input = %w[foo -a bar] definitions = [ { long: 'aaa', short: 'a', argument: :forbidden }, ] parser = Cri::OptionParser.parse(input, definitions) assert(parser.options[:aaa]) - assert_equal(%w(foo bar), parser.arguments) + assert_equal(%w[foo bar], parser.arguments) end def test_parse_with_short_valueful_option_with_missing_value - input = %w(foo -a) + input = %w[foo -a] definitions = [ { long: 'aaa', short: 'a', argument: :required }, ] assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do Cri::OptionParser.parse(input, definitions) end end def test_parse_with_short_combined_valueless_options - input = %w(foo -abc bar) + input = %w[foo -abc bar] definitions = [ { long: 'aaa', short: 'a', argument: :forbidden }, { long: 'bbb', short: 'b', argument: :forbidden }, { long: 'ccc', short: 'c', argument: :forbidden }, ] @@ -165,28 +165,31 @@ parser = Cri::OptionParser.parse(input, definitions) assert(parser.options[:aaa]) assert(parser.options[:bbb]) assert(parser.options[:ccc]) - assert_equal(%w(foo bar), parser.arguments) + assert_equal(%w[foo bar], parser.arguments) end def test_parse_with_short_combined_valueful_options_with_missing_value - input = %w(foo -abc bar) + input = %w[foo -abc bar qux] definitions = [ { long: 'aaa', short: 'a', argument: :required }, { long: 'bbb', short: 'b', argument: :forbidden }, { long: 'ccc', short: 'c', argument: :forbidden }, ] - assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do - Cri::OptionParser.parse(input, definitions) - end + parser = Cri::OptionParser.parse(input, definitions) + + assert_equal('bar', parser.options[:aaa]) + assert(parser.options[:bbb]) + assert(parser.options[:ccc]) + assert_equal(%w[foo qux], parser.arguments) end def test_parse_with_two_short_valueful_options - input = %w(foo -a -p 2) + input = %w[foo -a -p 2] definitions = [ { long: 'all', short: 'a', argument: :required }, { long: 'port', short: 'p', argument: :required }, ] @@ -194,11 +197,11 @@ Cri::OptionParser.parse(input, definitions) end end def test_parse_with_short_valueless_option_with_optional_value - input = %w(foo -a) + input = %w[foo -a] definitions = [ { long: 'aaa', short: 'a', argument: :optional }, ] parser = Cri::OptionParser.parse(input, definitions) @@ -206,11 +209,11 @@ assert(parser.options[:aaa]) assert_equal(['foo'], parser.arguments) end def test_parse_with_short_valueful_option_with_optional_value - input = %w(foo -a xxx) + input = %w[foo -a xxx] definitions = [ { long: 'aaa', short: 'a', argument: :optional }, ] parser = Cri::OptionParser.parse(input, definitions) @@ -218,11 +221,11 @@ assert_equal({ aaa: 'xxx' }, parser.options) assert_equal(['foo'], parser.arguments) end def test_parse_with_short_valueless_option_with_optional_value_and_more_options - input = %w(foo -a -b -c) + input = %w[foo -a -b -c] definitions = [ { long: 'aaa', short: 'a', argument: :optional }, { long: 'bbb', short: 'b', argument: :forbidden }, { long: 'ccc', short: 'c', argument: :forbidden }, ] @@ -234,49 +237,150 @@ assert(parser.options[:ccc]) assert_equal(['foo'], parser.arguments) end def test_parse_with_single_hyphen - input = %w(foo - bar) + input = %w[foo - bar] definitions = [] parser = Cri::OptionParser.parse(input, definitions) assert_equal({}, parser.options) assert_equal(['foo', '-', 'bar'], parser.arguments) end def test_parse_with_end_marker - input = %w(foo bar -- -x --yyy -abc) + input = %w[foo bar -- -x --yyy -abc] definitions = [] parser = Cri::OptionParser.parse(input, definitions) assert_equal({}, parser.options) assert_equal(['foo', 'bar', '-x', '--yyy', '-abc'], parser.arguments) assert_equal(['foo', 'bar', '--', '-x', '--yyy', '-abc'], parser.arguments.raw) end def test_parse_with_end_marker_between_option_key_and_value - input = %w(foo --aaa -- zzz) + input = %w[foo --aaa -- zzz] definitions = [ { long: 'aaa', short: 'a', argument: :required }, ] assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do Cri::OptionParser.parse(input, definitions) end end def test_parse_with_multiple_options - input = %w(foo -o test -o test2 -v -v -v) + input = %w[foo -o test -o test2 -v -v -v] definitions = [ { long: 'long', short: 'o', argument: :required, multiple: true }, { long: 'verbose', short: 'v', multiple: true }, ] parser = Cri::OptionParser.parse(input, definitions) - assert_equal(%w(test test2), parser.options[:long]) + assert_equal(%w[test test2], parser.options[:long]) assert_equal(3, parser.options[:verbose].size) + end + + def test_parse_with_default_required_no_value + input = %w[foo -a] + definitions = [ + { long: 'animal', short: 'a', argument: :required, default: 'donkey' }, + ] + + assert_raises(Cri::OptionParser::OptionRequiresAnArgumentError) do + Cri::OptionParser.parse(input, definitions) + end + end + + def test_parse_with_default_required_value + input = %w[foo -a giraffe] + definitions = [ + { long: 'animal', short: 'a', argument: :required, default: 'donkey' }, + ] + + parser = Cri::OptionParser.parse(input, definitions) + + assert_equal({ animal: 'giraffe' }, parser.options) + assert_equal(['foo'], parser.arguments) + end + + def test_parse_with_default_optional_no_value + input = %w[foo -a] + definitions = [ + { long: 'animal', short: 'a', argument: :optional, default: 'donkey' }, + ] + + parser = Cri::OptionParser.parse(input, definitions) + + assert_equal({ animal: 'donkey' }, parser.options) + assert_equal(['foo'], parser.arguments) + end + + def test_parse_with_default_optional_value + input = %w[foo -a giraffe] + definitions = [ + { long: 'animal', short: 'a', argument: :optional, default: 'donkey' }, + ] + + parser = Cri::OptionParser.parse(input, definitions) + + assert_equal({ animal: 'giraffe' }, parser.options) + assert_equal(['foo'], parser.arguments) + end + + def test_parse_with_default_optional_value_and_arg + input = %w[foo -a gi raffe] + definitions = [ + { long: 'animal', short: 'a', argument: :optional, default: 'donkey' }, + ] + + parser = Cri::OptionParser.parse(input, definitions) + + assert_equal({ animal: 'gi' }, parser.options) + assert_equal(%w[foo raffe], parser.arguments) + end + + def test_parse_with_combined_required_options + input = %w[foo -abc xxx yyy zzz] + definitions = [ + { long: 'aaa', short: 'a', argument: :forbidden }, + { long: 'bbb', short: 'b', argument: :required }, + { long: 'ccc', short: 'c', argument: :required }, + ] + + parser = Cri::OptionParser.parse(input, definitions) + + assert_equal({ aaa: true, bbb: 'xxx', ccc: 'yyy' }, parser.options) + assert_equal(%w[foo zzz], parser.arguments) + end + + def test_parse_with_combined_optional_options + input = %w[foo -abc xxx yyy zzz] + definitions = [ + { long: 'aaa', short: 'a', argument: :forbidden }, + { long: 'bbb', short: 'b', argument: :optional }, + { long: 'ccc', short: 'c', argument: :required }, + ] + + parser = Cri::OptionParser.parse(input, definitions) + + assert_equal({ aaa: true, bbb: 'xxx', ccc: 'yyy' }, parser.options) + assert_equal(%w[foo zzz], parser.arguments) + end + + def test_parse_with_combined_optional_options_with_missing_value + input = %w[foo -abc xxx] + definitions = [ + { long: 'aaa', short: 'a', argument: :forbidden }, + { long: 'bbb', short: 'b', argument: :required }, + { long: 'ccc', short: 'c', argument: :optional, default: 'c default' }, + ] + + parser = Cri::OptionParser.parse(input, definitions) + + assert_equal({ aaa: true, bbb: 'xxx', ccc: 'c default' }, parser.options) + assert_equal(%w[foo], parser.arguments) end end end