1
1
# stdlib
2
- from typing import Optional
2
+ import sys
3
+ from typing import Iterable
3
4
4
5
# 3rd party
5
6
import click
10
11
# this package
11
12
from consolekit import click_command
12
13
from consolekit .options import (
14
+ MultiValueOption ,
13
15
auto_default_option ,
14
16
colour_option ,
15
17
flag_option ,
16
18
force_option ,
17
19
no_pager_option ,
18
- verbose_option
20
+ verbose_option ,
21
+ version_option
19
22
)
23
+ from consolekit .terminal_colours import ColourTrilean
20
24
21
25
22
- def test_auto_default_option ():
26
+ def test_auto_default_option (file_regression : FileRegressionFixture ):
23
27
24
- @auto_default_option ("--width" , type = click .INT )
28
+ @auto_default_option ("--width" , type = click .INT , help = "The max width to display." , show_default = True )
25
29
@click_command ()
26
30
def main (width : int = 80 ):
27
31
print (width )
28
32
29
33
runner = CliRunner ()
30
34
31
- result : Result = runner .invoke (main , catch_exceptions = False )
35
+ result : Result = runner .invoke (main , catch_exceptions = False , args = "--help" )
36
+ check_file_regression (result .stdout .rstrip (), file_regression , extension = ".md" )
37
+ assert result .exit_code == 0
38
+
39
+ result = runner .invoke (main , catch_exceptions = False )
32
40
assert result .stdout .rstrip () == "80"
33
41
assert result .exit_code == 0
34
42
@@ -147,7 +155,7 @@ def test_colour_option(file_regression: FileRegressionFixture):
147
155
148
156
@colour_option ()
149
157
@click_command ()
150
- def main (colour : Optional [ bool ] ):
158
+ def main (colour : ColourTrilean ):
151
159
print (colour )
152
160
153
161
runner = CliRunner ()
@@ -167,3 +175,66 @@ def main(colour: Optional[bool]):
167
175
result = runner .invoke (main , catch_exceptions = False , args = "-h" )
168
176
check_file_regression (result .stdout .rstrip (), file_regression )
169
177
assert result .exit_code == 0
178
+
179
+
180
+ def test_version_option (file_regression : FileRegressionFixture ):
181
+
182
+ def version_callback (ctx : click .Context , param : click .Option , value : int ):
183
+ if not value or ctx .resilient_parsing :
184
+ return
185
+
186
+ if value > 1 :
187
+ click .echo ("consolekit version 1.2.3, Python 3.8.5" )
188
+ else :
189
+ click .echo ("consolekit version 1.2.3" )
190
+
191
+ ctx .exit ()
192
+
193
+ @version_option (version_callback )
194
+ @click_command ()
195
+ def main ():
196
+ sys .exit (1 )
197
+
198
+ runner = CliRunner ()
199
+
200
+ result = runner .invoke (main , catch_exceptions = False , args = "--version" )
201
+ assert result .stdout .rstrip () == "consolekit version 1.2.3"
202
+ assert result .exit_code == 0
203
+
204
+ result = runner .invoke (main , catch_exceptions = False , args = ["--version" , "--version" ])
205
+ assert result .stdout .rstrip () == "consolekit version 1.2.3, Python 3.8.5"
206
+ assert result .exit_code == 0
207
+
208
+
209
+ def test_multi_value_option (file_regression : FileRegressionFixture ):
210
+
211
+ @click .option (
212
+ "--select" ,
213
+ type = click .STRING ,
214
+ help = "The checks to enable" ,
215
+ cls = MultiValueOption ,
216
+ )
217
+ @colour_option ()
218
+ @click_command ()
219
+ def main (select : Iterable [str ], colour : bool ):
220
+ select = list (select )
221
+ print (* select )
222
+ print (", " .join (select ))
223
+
224
+ runner = CliRunner ()
225
+
226
+ result : Result = runner .invoke (main , catch_exceptions = False )
227
+ assert result .stdout .rstrip () == ''
228
+ assert result .exit_code == 0
229
+
230
+ result = runner .invoke (main , catch_exceptions = False , args = ["--select" , "E102" , "F223" ])
231
+ assert result .stdout .rstrip () == "E102 F223\n E102, F223"
232
+ assert result .exit_code == 0
233
+
234
+ result = runner .invoke (main , catch_exceptions = False , args = ["--select" , "E102" , "F223" , "--colour" ])
235
+ assert result .stdout .rstrip () == "E102 F223\n E102, F223"
236
+ assert result .exit_code == 0
237
+
238
+ result = runner .invoke (main , catch_exceptions = False , args = ["--select" , "E102" ])
239
+ assert result .stdout .rstrip () == "E102\n E102"
240
+ assert result .exit_code == 0
0 commit comments