trollop 2.1.2 → 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,46 @@
1
+ module Minitest::Assertions
2
+ def assert_parses_correctly(parser, commandline, expected_opts,
3
+ expected_leftovers)
4
+ opts = parser.parse commandline
5
+ assert_equal expected_opts, opts
6
+ assert_equal expected_leftovers, parser.leftovers
7
+ end
8
+
9
+ def assert_stderr(str = nil, msg = nil)
10
+ msg = "#{msg}.\n" if msg
11
+
12
+ old_stderr, $stderr = $stderr, StringIO.new('')
13
+ yield
14
+ assert_match str, $stderr.string, msg if str
15
+ ensure
16
+ $stderr = old_stderr
17
+ end
18
+
19
+ def assert_stdout(str = nil, msg = nil)
20
+ msg = "#{msg}.\n" if msg
21
+
22
+ old_stdout, $stdout = $stdout, StringIO.new('')
23
+ yield
24
+ assert_match str, $stdout.string, msg if str
25
+ ensure
26
+ $stdout = old_stdout
27
+ end
28
+
29
+ # like assert raises, but if it does raise, it checks status
30
+ # NOTE: this does not ensure the exception is raised
31
+ def assert_system_exit *exp
32
+ msg = "#{exp.pop}.\n" if String === exp.last
33
+ status = exp.first
34
+
35
+ begin
36
+ yield
37
+ rescue SystemExit => e
38
+ assert_equal status, e.status {
39
+ exception_details(e, "#{msg}#{mu_pp(exp)} exception expected, not")
40
+ } if status
41
+ return true
42
+ end
43
+ flunk "#{msg}#{mu_pp(exp)} SystemExit expected but nothing was raised."
44
+ end
45
+ end
46
+
@@ -3,7 +3,9 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
  unless ENV['MUTANT']
4
4
  begin
5
5
  require "coveralls"
6
- Coveralls.wear!
6
+ Coveralls.wear! do
7
+ add_filter '/test/'
8
+ end
7
9
  rescue LoadError
8
10
  end
9
11
  end
@@ -15,4 +17,6 @@ end
15
17
 
16
18
  require 'minitest/autorun'
17
19
 
20
+ Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |f| require f }
21
+
18
22
  require 'trollop'
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ module Trollop
4
+ class CommandlineErrorTest < ::MiniTest::Test
5
+ def test_class
6
+ assert_kind_of Exception, cle("message")
7
+ end
8
+
9
+ def test_message
10
+ assert "message", cle("message").message
11
+ end
12
+
13
+ def test_error_code_default
14
+ assert_nil cle("message").error_code
15
+ end
16
+
17
+ def test_error_code_custom
18
+ assert_equal(-3, cle("message", -3).error_code)
19
+ end
20
+
21
+ private
22
+
23
+ def cle(*args)
24
+ CommandlineError.new(*args)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+
3
+ module Trollop
4
+ class HelpNeededTest < ::MiniTest::Test
5
+ def test_class
6
+ assert_kind_of Exception, hn("message")
7
+ end
8
+
9
+ def test_message
10
+ assert "message", hn("message").message
11
+ end
12
+
13
+ private
14
+
15
+ def hn(*args)
16
+ HelpNeeded.new(*args)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,175 @@
1
+ require 'stringio'
2
+ require 'test_helper'
3
+
4
+ module Trollop
5
+ class ParserEduateTest < ::MiniTest::Test
6
+ def setup
7
+ end
8
+
9
+ def test_no_arguments_to_stdout
10
+ assert_stdout(/Options:/) do
11
+ parser.educate
12
+ end
13
+ end
14
+
15
+ def test_argument_to_stringio
16
+ assert_educates(/Options:/)
17
+ end
18
+
19
+ def test_no_headers
20
+ assert_educates(/^Options:/)
21
+ end
22
+
23
+ def test_usage
24
+ parser.usage("usage string")
25
+ assert_educates(/^Usage: \w* usage string\n\nOptions:/)
26
+ end
27
+
28
+ def test_usage_synopsis_version
29
+ end
30
+
31
+ # def test_banner
32
+ # def test_text
33
+
34
+ # width, legacy_width
35
+ # wrap
36
+ # wrap_lines
37
+
38
+ ############
39
+ # convert these into multiple tests
40
+ # pulled out of trollop_test for now
41
+ def test_help_has_default_banner
42
+ @p = Parser.new
43
+ sio = StringIO.new "w"
44
+ @p.parse []
45
+ @p.educate sio
46
+ help = sio.string.split "\n"
47
+ assert help[0] =~ /options/i
48
+ assert_equal 2, help.length # options, then -h
49
+
50
+ @p = Parser.new
51
+ @p.version "my version"
52
+ sio = StringIO.new "w"
53
+ @p.parse []
54
+ @p.educate sio
55
+ help = sio.string.split "\n"
56
+ assert help[0] =~ /my version/i
57
+ assert_equal 4, help.length # version, options, -h, -v
58
+
59
+ @p = Parser.new
60
+ @p.banner "my own banner"
61
+ sio = StringIO.new "w"
62
+ @p.parse []
63
+ @p.educate sio
64
+ help = sio.string.split "\n"
65
+ assert help[0] =~ /my own banner/i
66
+ assert_equal 2, help.length # banner, -h
67
+
68
+ @p = Parser.new
69
+ @p.text "my own text banner"
70
+ sio = StringIO.new "w"
71
+ @p.parse []
72
+ @p.educate sio
73
+ help = sio.string.split "\n"
74
+ assert help[0] =~ /my own text banner/i
75
+ assert_equal 2, help.length # banner, -h
76
+ end
77
+
78
+ def test_help_has_optional_usage
79
+ @p = Parser.new
80
+ @p.usage "OPTIONS FILES"
81
+ sio = StringIO.new "w"
82
+ @p.parse []
83
+ @p.educate sio
84
+ help = sio.string.split "\n"
85
+ assert help[0] =~ /OPTIONS FILES/i
86
+ assert_equal 4, help.length # line break, options, then -h
87
+ end
88
+
89
+ def test_help_has_optional_synopsis
90
+ @p = Parser.new
91
+ @p.synopsis "About this program"
92
+ sio = StringIO.new "w"
93
+ @p.parse []
94
+ @p.educate sio
95
+ help = sio.string.split "\n"
96
+ assert help[0] =~ /About this program/i
97
+ assert_equal 4, help.length # line break, options, then -h
98
+ end
99
+
100
+ def test_help_has_specific_order_for_usage_and_synopsis
101
+ @p = Parser.new
102
+ @p.usage "OPTIONS FILES"
103
+ @p.synopsis "About this program"
104
+ sio = StringIO.new "w"
105
+ @p.parse []
106
+ @p.educate sio
107
+ help = sio.string.split "\n"
108
+ assert help[0] =~ /OPTIONS FILES/i
109
+ assert help[1] =~ /About this program/i
110
+ assert_equal 5, help.length # line break, options, then -h
111
+ end
112
+
113
+ def test_help_preserves_positions
114
+ parser.opt :zzz, "zzz"
115
+ parser.opt :aaa, "aaa"
116
+ sio = StringIO.new "w"
117
+ parser.educate sio
118
+
119
+ help = sio.string.split "\n"
120
+ assert help[1] =~ /zzz/
121
+ assert help[2] =~ /aaa/
122
+ end
123
+
124
+ def test_help_includes_option_types
125
+ parser.opt :arg1, 'arg', :type => :int
126
+ parser.opt :arg2, 'arg', :type => :ints
127
+ parser.opt :arg3, 'arg', :type => :string
128
+ parser.opt :arg4, 'arg', :type => :strings
129
+ parser.opt :arg5, 'arg', :type => :float
130
+ parser.opt :arg6, 'arg', :type => :floats
131
+ parser.opt :arg7, 'arg', :type => :io
132
+ parser.opt :arg8, 'arg', :type => :ios
133
+ parser.opt :arg9, 'arg', :type => :date
134
+ parser.opt :arg10, 'arg', :type => :dates
135
+ sio = StringIO.new "w"
136
+ parser.educate sio
137
+
138
+ help = sio.string.split "\n"
139
+ assert help[1] =~ /<i>/
140
+ assert help[2] =~ /<i\+>/
141
+ assert help[3] =~ /<s>/
142
+ assert help[4] =~ /<s\+>/
143
+ assert help[5] =~ /<f>/
144
+ assert help[6] =~ /<f\+>/
145
+ assert help[7] =~ /<filename\/uri>/
146
+ assert help[8] =~ /<filename\/uri\+>/
147
+ assert help[9] =~ /<date>/
148
+ assert help[10] =~ /<date\+>/
149
+ end
150
+
151
+ def test_help_has_grammatical_default_text
152
+ parser.opt :arg1, 'description with period.', :default => 'hello'
153
+ parser.opt :arg2, 'description without period', :default => 'world'
154
+ sio = StringIO.new 'w'
155
+ parser.educate sio
156
+
157
+ help = sio.string.split "\n"
158
+ assert help[1] =~ /Default/
159
+ assert help[2] =~ /default/
160
+ end
161
+ ############
162
+
163
+ private
164
+
165
+ def parser
166
+ @p ||= Parser.new
167
+ end
168
+
169
+ def assert_educates(output)
170
+ str = StringIO.new
171
+ parser.educate str
172
+ assert_match output, str.string
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,14 @@
1
+ require 'stringio'
2
+ require 'test_helper'
3
+
4
+ module Trollop
5
+
6
+ class ParserOptTest < ::MiniTest::Test
7
+
8
+ private
9
+
10
+ def parser
11
+ @p ||= Parser.new
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,79 @@
1
+ require 'stringio'
2
+ require 'test_helper'
3
+
4
+ module Trollop
5
+ class ParserParseTest < ::MiniTest::Test
6
+
7
+ # TODO: parse
8
+ # resolve_default_short_options!
9
+ # parse_date_parameter
10
+ # parse_integer_parameter(param, arg)
11
+ # parse_float_parameter(param, arg)
12
+ # parse_io_parameter(param, arg)
13
+ # each_arg
14
+ # collect_argument_parameters
15
+
16
+ def test_help_needed
17
+ parser.opt "arg"
18
+ assert_raises(HelpNeeded) { parser.parse %w(-h) }
19
+ assert_raises(HelpNeeded) { parser.parse %w(--help) }
20
+ end
21
+
22
+ def test_help_overridden
23
+ parser.opt :arg1, "desc", :long => "help"
24
+ assert parser.parse(%w(-h))[:arg1]
25
+ assert parser.parse(%w(--help))[:arg1]
26
+ end
27
+
28
+ def test_help_with_other_args
29
+ parser.opt :arg1
30
+ assert_raises(HelpNeeded) { @p.parse %w(--arg1 --help) }
31
+ end
32
+
33
+ def test_help_with_arg_error
34
+ parser.opt :arg1, :type => String
35
+ assert_raises(HelpNeeded) { @p.parse %w(--arg1 --help) }
36
+ end
37
+
38
+ def test_version_needed_unset
39
+ parser.opt "arg"
40
+ assert_raises(CommandlineError) { parser.parse %w(-v) }
41
+ end
42
+
43
+ def test_version_needed
44
+ parser.version "trollop 5.2.3"
45
+ assert_raises(VersionNeeded) { parser.parse %w(-v) }
46
+ assert_raises(VersionNeeded) { parser.parse %w(--version) }
47
+ end
48
+
49
+ def test_version_overridden
50
+ parser.opt "version"
51
+ assert parser.parse(%w(-v))["version"]
52
+ assert parser.parse(%w(-v))[:version_given]
53
+ end
54
+
55
+ def test_version_only_appears_if_set
56
+ parser.opt "arg"
57
+ assert_raises(CommandlineError) { parser.parse %w(-v) }
58
+ end
59
+
60
+ def test_version_with_other_args
61
+ parser.opt :arg1
62
+ parser.version "1.1"
63
+ assert_raises(VersionNeeded) { parser.parse %w(--arg1 --version) }
64
+ end
65
+
66
+ def test_version_with_arg_error
67
+ parser.opt :arg1, :type => String
68
+ parser.version "1.1"
69
+ assert_raises(VersionNeeded) { parser.parse %w(--arg1 --version) }
70
+ end
71
+
72
+
73
+ private
74
+
75
+ def parser
76
+ @p ||= Parser.new
77
+ end
78
+ end
79
+ end
@@ -2,18 +2,48 @@ require 'stringio'
2
2
  require 'test_helper'
3
3
 
4
4
  module Trollop
5
- module Test
6
5
 
7
- class Trollop < ::MiniTest::Unit::TestCase
6
+ class ParserTest < ::MiniTest::Test
8
7
  def setup
9
8
  @p = Parser.new
10
9
  end
11
10
 
12
- def test_die_without_options_ever_run
13
- ::Trollop.send(:instance_variable_set, "@last_parser", nil)
14
- assert_raises(ArgumentError) { ::Trollop.die 'hello' }
11
+ def parser
12
+ @p ||= Parser.new
15
13
  end
16
14
 
15
+ # initialize
16
+ # cloaker
17
+
18
+ def test_version
19
+ assert_nil parser.version
20
+ assert_equal "trollop 5.2.3", parser.version("trollop 5.2.3")
21
+ assert_equal "trollop 5.2.3", parser.version
22
+ end
23
+
24
+ def test_usage
25
+ assert_nil parser.usage
26
+
27
+ assert_equal "usage string", parser.usage("usage string")
28
+ assert_equal "usage string", parser.usage
29
+ end
30
+
31
+ def test_synopsis
32
+ assert_nil parser.synopsis
33
+
34
+ assert_equal "synopsis string", parser.synopsis("synopsis string")
35
+ assert_equal "synopsis string", parser.synopsis
36
+ end
37
+
38
+ # def test_depends
39
+ # def test_conflicts
40
+ # def test_stop_on
41
+ # def test_stop_on_unknown
42
+
43
+ # die
44
+ # def test_die_educate_on_error
45
+
46
+
17
47
  def test_unknown_arguments
18
48
  assert_raises(CommandlineError) { @p.parse(%w(--arg)) }
19
49
  @p.opt "arg"
@@ -88,7 +118,7 @@ class Trollop < ::MiniTest::Unit::TestCase
88
118
  opts = @p.parse(%w(--argsi=4))
89
119
  assert_equal 4, opts["argsi"]
90
120
  opts = @p.parse(%w(--argsi=-4))
91
- assert_equal -4, opts["argsi"]
121
+ assert_equal( -4, opts["argsi"])
92
122
 
93
123
  assert_raises(CommandlineError) { @p.parse(%w(--argsi 4.2)) }
94
124
  assert_raises(CommandlineError) { @p.parse(%w(--argsi hello)) }
@@ -338,7 +368,6 @@ class Trollop < ::MiniTest::Unit::TestCase
338
368
 
339
369
  ## specifying turns them all on, regardless of default
340
370
  opts = @p.parse %w(--no-default-false --no-default-true --no-default-none)
341
- p opts
342
371
  assert_equal true, opts[:no_default_none]
343
372
  assert_equal true, opts[:no_default_false]
344
373
  assert_equal true, opts[:no_default_true]
@@ -353,12 +382,6 @@ class Trollop < ::MiniTest::Unit::TestCase
353
382
  assert_raises(CommandlineError) { @p.parse %w(--no-no-default-true) }
354
383
  end
355
384
 
356
- def test_special_flags_work
357
- @p.version "asdf fdas"
358
- assert_raises(VersionNeeded) { @p.parse(%w(-v)) }
359
- assert_raises(HelpNeeded) { @p.parse(%w(-h)) }
360
- end
361
-
362
385
  def test_short_options_combine
363
386
  @p.opt :arg1, "desc", :short => "a"
364
387
  @p.opt :arg2, "desc", :short => "b"
@@ -383,13 +406,6 @@ class Trollop < ::MiniTest::Unit::TestCase
383
406
  assert_raises(CommandlineError) { @p.parse %w(-cba 4) }
384
407
  end
385
408
 
386
- def test_version_only_appears_if_set
387
- @p.opt "arg"
388
- assert_raises(CommandlineError) { @p.parse %w(-v) }
389
- @p.version "trollop 1.2.3.4"
390
- assert_raises(VersionNeeded) { @p.parse %w(-v) }
391
- end
392
-
393
409
  def test_doubledash_ends_option_processing
394
410
  @p.opt :arg1, "desc", :short => "a", :default => 0
395
411
  @p.opt :arg2, "desc", :short => "b", :default => 0
@@ -442,6 +458,18 @@ Options:
442
458
  EOM
443
459
  end
444
460
 
461
+ def test_integer_formatting
462
+ @p.opt :arg, "desc", :type => :integer, :short => "i"
463
+ opts = @p.parse %w(-i 5)
464
+ assert_equal 5, opts[:arg]
465
+ end
466
+
467
+ def test_integer_formatting
468
+ @p.opt :arg, "desc", :type => :integer, :short => "i", :default => 3
469
+ opts = @p.parse %w(-i)
470
+ assert_equal 3, opts[:arg]
471
+ end
472
+
445
473
  def test_floating_point_formatting
446
474
  @p.opt :arg, "desc", :type => :float, :short => "f"
447
475
  opts = @p.parse %w(-f 1)
@@ -471,6 +499,12 @@ Options:
471
499
  assert_raises(CommandlineError) { @p.parse %w(-f -.) }
472
500
  end
473
501
 
502
+ def test_floating_point_formatting_default
503
+ @p.opt :arg, "desc", :type => :float, :short => "f", :default => 5.5
504
+ opts = @p.parse %w(-f)
505
+ assert_equal 5.5, opts[:arg]
506
+ end
507
+
474
508
  def test_date_formatting
475
509
  @p.opt :arg, "desc", :type => :date, :short => 'd'
476
510
  opts = @p.parse(['-d', 'Jan 4, 2007'])
@@ -483,7 +517,7 @@ Options:
483
517
  assert_raises(ArgumentError) { @p.opt :arg, "desc", :short => "-1" }
484
518
  @p.opt :a1b, "desc"
485
519
  @p.opt :a2b, "desc"
486
- assert @p.specs[:a2b][:short].to_i == 0
520
+ assert @p.specs[:a2b].short.to_i == 0
487
521
  end
488
522
 
489
523
  def test_short_options_can_be_weird
@@ -660,7 +694,7 @@ Options:
660
694
 
661
695
  def test_auto_generated_long_names_convert_underscores_to_hyphens
662
696
  @p.opt :hello_there
663
- assert_equal "hello-there", @p.specs[:hello_there][:long]
697
+ assert_equal "hello-there", @p.specs[:hello_there].long
664
698
  end
665
699
 
666
700
  def test_arguments_passed_through_block
@@ -672,139 +706,6 @@ Options:
672
706
  assert_equal @goat, boat
673
707
  end
674
708
 
675
- def test_help_has_default_banner
676
- @p = Parser.new
677
- sio = StringIO.new "w"
678
- @p.parse []
679
- @p.educate sio
680
- help = sio.string.split "\n"
681
- assert help[0] =~ /options/i
682
- assert_equal 2, help.length # options, then -h
683
-
684
- @p = Parser.new
685
- @p.version "my version"
686
- sio = StringIO.new "w"
687
- @p.parse []
688
- @p.educate sio
689
- help = sio.string.split "\n"
690
- assert help[0] =~ /my version/i
691
- assert_equal 4, help.length # version, options, -h, -v
692
-
693
- @p = Parser.new
694
- @p.banner "my own banner"
695
- sio = StringIO.new "w"
696
- @p.parse []
697
- @p.educate sio
698
- help = sio.string.split "\n"
699
- assert help[0] =~ /my own banner/i
700
- assert_equal 2, help.length # banner, -h
701
- end
702
-
703
- def test_help_has_optional_usage
704
- @p = Parser.new
705
- @p.usage "OPTIONS FILES"
706
- sio = StringIO.new "w"
707
- @p.parse []
708
- @p.educate sio
709
- help = sio.string.split "\n"
710
- assert help[0] =~ /OPTIONS FILES/i
711
- assert_equal 4, help.length # line break, options, then -h
712
- end
713
-
714
- def test_help_has_optional_synopsis
715
- @p = Parser.new
716
- @p.synopsis "About this program"
717
- sio = StringIO.new "w"
718
- @p.parse []
719
- @p.educate sio
720
- help = sio.string.split "\n"
721
- assert help[0] =~ /About this program/i
722
- assert_equal 4, help.length # line break, options, then -h
723
- end
724
-
725
- def test_help_has_specific_order_for_usage_and_synopsis
726
- @p = Parser.new
727
- @p.usage "OPTIONS FILES"
728
- @p.synopsis "About this program"
729
- sio = StringIO.new "w"
730
- @p.parse []
731
- @p.educate sio
732
- help = sio.string.split "\n"
733
- assert help[0] =~ /OPTIONS FILES/i
734
- assert help[1] =~ /About this program/i
735
- assert_equal 5, help.length # line break, options, then -h
736
- end
737
-
738
- def test_help_preserves_positions
739
- @p.opt :zzz, "zzz"
740
- @p.opt :aaa, "aaa"
741
- sio = StringIO.new "w"
742
- @p.educate sio
743
-
744
- help = sio.string.split "\n"
745
- assert help[1] =~ /zzz/
746
- assert help[2] =~ /aaa/
747
- end
748
-
749
- def test_help_includes_option_types
750
- @p.opt :arg1, 'arg', :type => :int
751
- @p.opt :arg2, 'arg', :type => :ints
752
- @p.opt :arg3, 'arg', :type => :string
753
- @p.opt :arg4, 'arg', :type => :strings
754
- @p.opt :arg5, 'arg', :type => :float
755
- @p.opt :arg6, 'arg', :type => :floats
756
- @p.opt :arg7, 'arg', :type => :io
757
- @p.opt :arg8, 'arg', :type => :ios
758
- @p.opt :arg9, 'arg', :type => :date
759
- @p.opt :arg10, 'arg', :type => :dates
760
- sio = StringIO.new "w"
761
- @p.educate sio
762
-
763
- help = sio.string.split "\n"
764
- assert help[1] =~ /<i>/
765
- assert help[2] =~ /<i\+>/
766
- assert help[3] =~ /<s>/
767
- assert help[4] =~ /<s\+>/
768
- assert help[5] =~ /<f>/
769
- assert help[6] =~ /<f\+>/
770
- assert help[7] =~ /<filename\/uri>/
771
- assert help[8] =~ /<filename\/uri\+>/
772
- assert help[9] =~ /<date>/
773
- assert help[10] =~ /<date\+>/
774
- end
775
-
776
- def test_help_has_grammatical_default_text
777
- @p.opt :arg1, 'description with period.', :default => 'hello'
778
- @p.opt :arg2, 'description without period', :default => 'world'
779
- sio = StringIO.new 'w'
780
- @p.educate sio
781
-
782
- help = sio.string.split "\n"
783
- assert help[1] =~ /Default/
784
- assert help[2] =~ /default/
785
- end
786
-
787
- def test_version_and_help_short_args_can_be_overridden
788
- @p.opt :verbose, "desc", :short => "-v"
789
- @p.opt :hello, "desc", :short => "-h"
790
- @p.version "version"
791
-
792
- @p.parse(%w(-v))
793
- assert_raises(VersionNeeded) { @p.parse(%w(--version)) }
794
- @p.parse(%w(-h))
795
- assert_raises(HelpNeeded) { @p.parse(%w(--help)) }
796
- end
797
-
798
- def test_version_and_help_long_args_can_be_overridden
799
- @p.opt :asdf, "desc", :long => "help"
800
- @p.opt :asdf2, "desc2", :long => "version"
801
- @p.parse %w()
802
- @p.parse %w(--help)
803
- @p.parse %w(--version)
804
- @p.parse %w(-h)
805
- @p.parse %w(-v)
806
- end
807
-
808
709
  def test_version_and_help_override_errors
809
710
  @p.opt :asdf, "desc", :type => String
810
711
  @p.version "version"
@@ -975,13 +876,6 @@ Options:
975
876
  assert_equal @q.leftovers, []
976
877
  end
977
878
 
978
- def assert_parses_correctly(parser, commandline, expected_opts,
979
- expected_leftovers)
980
- opts = parser.parse commandline
981
- assert_equal expected_opts, opts
982
- assert_equal expected_leftovers, parser.leftovers
983
- end
984
-
985
879
  def test_unknown_subcommand
986
880
  @p.opt :global_flag, "Global flag", :short => "-g", :type => :flag
987
881
  @p.opt :global_param, "Global parameter", :short => "-p", :default => 5
@@ -1035,6 +929,9 @@ Options:
1035
929
  opts = @p.parse %w(--arg2 5/1/2010)
1036
930
  assert_kind_of Date, opts[:arg2]
1037
931
  assert_equal Date.new(2010, 5, 1), opts[:arg2]
932
+
933
+ opts = @p.parse %w(--arg3)
934
+ assert_equal temp, opts[:arg3]
1038
935
  end
1039
936
 
1040
937
  def test_unknown_arg_class_type
@@ -1180,64 +1077,75 @@ Options:
1180
1077
  end
1181
1078
 
1182
1079
  def test_simple_interface_handles_help
1183
- ARGV.clear
1184
- ARGV.unshift "-h"
1185
- assert_raises(SystemExit) do
1186
- ::Trollop::options do
1187
- opt :potato
1080
+ assert_stdout(/Options:/) do
1081
+ assert_raises(SystemExit) do
1082
+ ::Trollop::options(%w(-h)) do
1083
+ opt :potato
1084
+ end
1085
+ end
1086
+ end
1087
+
1088
+ # ensure regular status is returned
1089
+
1090
+ assert_stdout do
1091
+ begin
1092
+ ::Trollop::options(%w(-h)) do
1093
+ opt :potato
1094
+ end
1095
+ rescue SystemExit => e
1096
+ assert_equal 0, e.status
1188
1097
  end
1189
1098
  end
1190
1099
  end
1191
1100
 
1192
1101
  def test_simple_interface_handles_version
1193
- ARGV.clear
1194
- ARGV.unshift "-v"
1195
- assert_raises(SystemExit) do
1196
- ::Trollop::options do
1197
- version "1.2"
1198
- opt :potato
1102
+ assert_stdout(/1.2/) do
1103
+ assert_raises(SystemExit) do
1104
+ ::Trollop::options(%w(-v)) do
1105
+ version "1.2"
1106
+ opt :potato
1107
+ end
1199
1108
  end
1200
1109
  end
1201
1110
  end
1202
1111
 
1203
1112
  def test_simple_interface_handles_regular_usage
1204
- ARGV.clear
1205
- ARGV.unshift "--potato"
1206
- opts = ::Trollop::options do
1113
+ opts = ::Trollop::options(%w(--potato)) do
1207
1114
  opt :potato
1208
1115
  end
1209
1116
  assert opts[:potato]
1210
1117
  end
1211
1118
 
1212
1119
  def test_simple_interface_handles_die
1213
- old_stderr, $stderr = $stderr, StringIO.new('w')
1214
- ARGV.clear
1215
- ARGV.unshift "--potato"
1216
- ::Trollop::options do
1217
- opt :potato
1120
+ assert_stderr do
1121
+ ::Trollop::options(%w(--potato)) do
1122
+ opt :potato
1123
+ end
1124
+ assert_raises(SystemExit) { ::Trollop::die :potato, "is invalid" }
1218
1125
  end
1219
- assert_raises(SystemExit) { ::Trollop::die :potato, "is invalid" }
1220
- ensure
1221
- $stderr = old_stderr
1222
1126
  end
1223
1127
 
1224
1128
  def test_simple_interface_handles_die_without_message
1225
- old_stderr, $stderr = $stderr, StringIO.new('w')
1226
- ARGV.clear
1227
- ARGV.unshift "--potato"
1228
- opts = ::Trollop::options do
1229
- opt :potato
1129
+ assert_stderr(/Error:/) do
1130
+ ::Trollop::options(%w(--potato)) do
1131
+ opt :potato
1132
+ end
1133
+ assert_raises(SystemExit) { ::Trollop::die :potato }
1230
1134
  end
1231
- assert_raises(SystemExit) { ::Trollop::die :potato }
1232
- assert $stderr.string =~ /Error:/
1233
- ensure
1234
- $stderr = old_stderr
1235
1135
  end
1236
1136
 
1237
- def test_with_standard_exception_handling
1238
- assert_raises(SystemExit) do
1239
- ::Trollop.with_standard_exception_handling(@p) do
1240
- raise ::Trollop::CommandlineError.new('cl error')
1137
+ def test_invalid_option_with_simple_interface
1138
+ assert_stderr do
1139
+ assert_raises(SystemExit) do
1140
+ ::Trollop.options(%w(--potato))
1141
+ end
1142
+ end
1143
+
1144
+ assert_stderr do
1145
+ begin
1146
+ ::Trollop.options(%w(--potato))
1147
+ rescue SystemExit => e
1148
+ assert_equal(-1, e.status)
1241
1149
  end
1242
1150
  end
1243
1151
  end
@@ -1257,7 +1165,56 @@ Options:
1257
1165
  @p.parse(%w(--cb1))
1258
1166
  end
1259
1167
  end
1260
- end
1261
1168
 
1169
+ def test_ignore_invalid_options
1170
+ @p.opt :arg1, "desc", :type => String
1171
+ @p.opt :b, "desc", :type => String
1172
+ @p.opt :c, "desc", :type => :flag
1173
+ @p.opt :d, "desc", :type => :flag
1174
+ @p.ignore_invalid_options = true
1175
+ opts = @p.parse %w{unknown -S param --arg1 potato -fb daisy --foo -ecg --bar baz -z}
1176
+ assert_equal "potato", opts[:arg1]
1177
+ assert_equal "daisy", opts[:b]
1178
+ assert opts[:c]
1179
+ refute opts[:d]
1180
+ assert_equal %w{unknown -S param -f --foo -eg --bar baz -z}, @p.leftovers
1181
+ end
1182
+
1183
+ def test_ignore_invalid_options_stop_on_unknown_long
1184
+ @p.opt :arg1, "desc", :type => String
1185
+ @p.ignore_invalid_options = true
1186
+ @p.stop_on_unknown
1187
+ opts = @p.parse %w{--unk --arg1 potato}
1188
+ refute opts[:arg1]
1189
+ assert_equal %w{--unk --arg1 potato}, @p.leftovers
1190
+ end
1191
+
1192
+ def test_ignore_invalid_options_stop_on_unknown_short
1193
+ @p.opt :arg1, "desc", :type => String
1194
+ @p.ignore_invalid_options = true
1195
+ @p.stop_on_unknown
1196
+ opts = @p.parse %w{-ua potato}
1197
+ refute opts[:arg1]
1198
+ assert_equal %w{-ua potato}, @p.leftovers
1199
+ end
1200
+
1201
+ def test_ignore_invalid_options_stop_on_unknown_partial_end_short
1202
+ @p.opt :arg1, "desc", :type => :flag
1203
+ @p.ignore_invalid_options = true
1204
+ @p.stop_on_unknown
1205
+ opts = @p.parse %w{-au potato}
1206
+ assert opts[:arg1]
1207
+ assert_equal %w{-u potato}, @p.leftovers
1208
+ end
1209
+
1210
+ def test_ignore_invalid_options_stop_on_unknown_partial_mid_short
1211
+ @p.opt :arg1, "desc", :type => :flag
1212
+ @p.ignore_invalid_options = true
1213
+ @p.stop_on_unknown
1214
+ opts = @p.parse %w{-abu potato}
1215
+ assert opts[:arg1]
1216
+ assert_equal %w{-bu potato}, @p.leftovers
1217
+ end
1262
1218
  end
1219
+
1263
1220
  end