File: optimist_test.rb

package info (click to toggle)
ruby-optimist 3.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 348 kB
  • sloc: ruby: 2,912; makefile: 4
file content (192 lines) | stat: -rw-r--r-- 4,407 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
require_relative 'test_helper'

class OptimistTest < Minitest::Test
  def setup
    Optimist.send(:instance_variable_set, "@last_parser", nil)
  end

  def parser(&block)
    Optimist::Parser.new(&block)
  end

  def test_options
    opts = Optimist.options %w(-f) do
      opt :f
    end

    assert_equal true, opts[:f]
  end

  def test_options_die_default
    assert_stderr(/Error: unknown argument.*Try --help/m) do
      assert_system_exit(-1) do
        Optimist.options %w(-f) do
          opt :x
        end
      end
    end
  end

  def test_options_die_educate_on_error
    assert_stderr(/Error: unknown argument.*Options/m) do
      assert_system_exit(-1) do
        Optimist.options %w(-f) do
          opt :x
          educate_on_error
        end
      end
    end
  end

  def test_die_without_options_ever_run
    err_regex = /Optimist::die can only be called after Optimist::options/
    assert_raises_errmatch(ArgumentError, err_regex) { Optimist.die 'hello' }
  end

  def test_die
    assert_stderr(/Error: issue with parsing/) do
      assert_system_exit(-1) do
        Optimist.options []
        Optimist.die "issue with parsing"
      end
    end
  end

  def test_die_custom_error_code
    assert_stderr(/Error: issue with parsing/) do
      assert_system_exit(5) do
        Optimist.options []
        Optimist.die "issue with parsing", nil, 5
      end
    end
  end

  def test_die_custom_error_code_two_args
    assert_stderr(/Error: issue with parsing/) do
      assert_system_exit(5) do
        Optimist.options []
        Optimist.die "issue with parsing", 5
      end
    end
  end

  def test_educate_without_options_ever_run
    err_regex = /Optimist::educate can only be called after Optimist::options/
    assert_raises_errmatch(ArgumentError, err_regex) { Optimist.educate }
  end

  def test_educate
    assert_stdout(/Show this message/) do
      assert_system_exit(0) do
        Optimist.options []
        Optimist.educate
      end
    end
  end

  def test_with_standard_exception_options
    p = parser do
      opt :f
    end

    opts = Optimist::with_standard_exception_handling p do
      p.parse %w(-f)
    end

    assert_equal true, opts[:f]
  end

  def test_with_standard_exception_version_exception
    p = parser do
      version "5.5"
    end

    assert_stdout(/5\.5/) do
      assert_system_exit(0) do
        Optimist::with_standard_exception_handling p do
          raise Optimist::VersionNeeded
        end
      end
    end
  end

  def test_with_standard_exception_version_flag
    p = parser do
      version "5.5"
    end

    assert_stdout(/5\.5/) do
      assert_system_exit(0) do
        Optimist::with_standard_exception_handling p do
          p.parse %w(-v)
        end
      end
    end
  end

  def test_with_standard_exception_die_exception
    assert_stderr(/Error: cl error/) do
      assert_system_exit(-1) do
        p = parser
        Optimist.with_standard_exception_handling(p) do
          raise ::Optimist::CommandlineError.new('cl error')
        end
      end
    end
  end

  def test_with_standard_exception_die_exception_custom_error
    assert_stderr(/Error: cl error/) do
      assert_system_exit(5) do
        p = parser
        Optimist.with_standard_exception_handling(p) do
          raise ::Optimist::CommandlineError.new('cl error', 5)
        end
      end
    end
  end

  def test_with_standard_exception_die
    assert_stderr(/Error: cl error/) do
      assert_system_exit(-1) do
        p = parser
        Optimist.with_standard_exception_handling(p) do
          p.die 'cl error'
        end
      end
    end
  end

  def test_with_standard_exception_die_custom_error
    assert_stderr(/Error: cl error/) do
      assert_system_exit(3) do
        p = parser
        Optimist.with_standard_exception_handling(p) do
          p.die 'cl error', nil, 3
        end
      end
    end
  end

  def test_with_standard_exception_help_needed
    assert_stdout(/Options/) do
      assert_system_exit(0) do
        p = parser
        Optimist.with_standard_exception_handling(p) do
          raise Optimist::HelpNeeded
        end
      end
    end
  end

  def test_with_standard_exception_help_needed_flag
    assert_stdout(/Options/) do
      assert_system_exit(0) do
        p = parser
        Optimist.with_standard_exception_handling(p) do
          p.parse(%w(-h))
        end
      end
    end
  end
end