1
+ from imp import reload
2
+ import logging
3
+
1
4
import pytest
2
5
3
6
@@ -17,3 +20,67 @@ def test_logging_error_causes_exception(capfd):
17
20
"Message: 'Wrong:'" ,
18
21
"Arguments: ('no %s',)" ]
19
22
assert 'TypeError: not all arguments converted during string formatting' in lines # noqa: E501
23
+
24
+
25
+ def test_loglevel (mocker , runner , devnull ):
26
+ from covimerage import cli
27
+
28
+ logger = cli .LOGGER
29
+
30
+ m = mocker .patch .object (logger , 'setLevel' )
31
+
32
+ for level in ['error' , 'warning' , 'info' , 'debug' ]:
33
+ result = runner .invoke (cli .main , [
34
+ '--loglevel' , level ,
35
+ 'report' , '--nonexistingoption' ])
36
+ assert result .output .splitlines () == [
37
+ 'Error: no such option: --nonexistingoption' ]
38
+ assert result .exit_code == 2
39
+
40
+ level_name = level .upper ()
41
+ assert m .call_args_list [- 1 ] == mocker .call (level_name )
42
+
43
+ # -v should not override -l.
44
+ m .reset_mock ()
45
+ result = runner .invoke (cli .main , [
46
+ '-l' , 'warning' , '-vvv' ,
47
+ 'report' , '--nonexistingoption' ])
48
+ assert result .output .splitlines () == [
49
+ 'Error: no such option: --nonexistingoption' ]
50
+ assert result .exit_code == 2
51
+ assert m .call_args_list == [mocker .call ('WARNING' )]
52
+
53
+ # -q should not override -l.
54
+ m .reset_mock ()
55
+ result = runner .invoke (cli .main , [
56
+ '-l' , 'warning' , '-qqq' ,
57
+ 'report' , '--nonexistingoption' ])
58
+ assert result .output .splitlines () == [
59
+ 'Error: no such option: --nonexistingoption' ]
60
+ assert result .exit_code == 2
61
+ assert m .call_args_list == [mocker .call ('WARNING' )]
62
+
63
+
64
+ @pytest .mark .parametrize ('default' , (None , 'INFO' , 'WARNING' ))
65
+ def test_loglevel_default (default , mocker , runner ):
66
+ from covimerage import cli
67
+ from covimerage .logger import LOGGER as logger
68
+
69
+ if default :
70
+ mocker .patch .object (logger , 'level' , getattr (logging , default ))
71
+ else :
72
+ default = 'INFO'
73
+ reload (cli )
74
+
75
+ result = runner .invoke (cli .main , ['-h' ])
76
+
77
+ assert logging .getLevelName (logger .level ) == default
78
+ lines = result .output .splitlines ()
79
+ idx = lines .index (' -l, --loglevel [error|warning|info|debug]' )
80
+ assert idx
81
+ indent = ' ' * 34
82
+ assert lines [idx + 1 :idx + 3 ] == [
83
+ indent + 'Set logging level explicitly (overrides' ,
84
+ indent + '-v/-q). [default: %s]' % (default .lower (),),
85
+ ]
86
+ assert result .exit_code == 0
0 commit comments