diff --git a/lib/docopt.rb b/lib/docopt.rb index 0bdd9d2..0227426 100644 --- a/lib/docopt.rb +++ b/lib/docopt.rb @@ -18,8 +18,13 @@ def message @@message end - def initialize(message='') + def initialize(message='', error=true) @@message = (message + "\n" + @@usage).strip + @error = error + end + + def error? + !!@error end end @@ -634,11 +639,11 @@ def dump_patterns(pattern, indent=0) def extras(help, version, options, doc) if help and options.any? { |o| ['-h', '--help'].include?(o.name) && o.value } Exit.set_usage(nil) - raise Exit, doc.strip + raise Exit.new(doc.strip, false) end if version and options.any? { |o| o.name == '--version' && o.value } Exit.set_usage(nil) - raise Exit, version + raise Exit.new(version, false) end end diff --git a/test/test_docopt.rb b/test/test_docopt.rb index 7d9f697..bf2e6ea 100644 --- a/test/test_docopt.rb +++ b/test/test_docopt.rb @@ -1,5 +1,6 @@ require 'test/unit' require 'pathname' +require 'docopt' class DocoptTest < Test::Unit::TestCase @@ -9,4 +10,28 @@ def test_docopt_reference_testcases puts assert system('python', "test/language_agnostic_tester.py", "test/testee.rb", chdir: TOPDIR) end + + def test_exit_success_on_help + exception = assert_raises(Docopt::Exit) do + Docopt.docopt("Usage: mytool -a", :argv => ["--help"]) + end + + assert !exception.error? + end + + def test_exit_success_on_version + exception = assert_raises(Docopt::Exit) do + Docopt.docopt("Usage: mytool -a", :version => "1.2.3", :argv => ["--version"]) + end + + assert !exception.error? + end + + def test_exit_failure_on_unknown_option + exception = assert_raises(Docopt::Exit) do + Docopt.docopt("Usage: mytool -a", :argv => ["--foo"]) + end + + assert exception.error? + end end