Skip to content

Commit 5bf4b65

Browse files
committed
test: fix CLI tests
1 parent db44c0e commit 5bf4b65

File tree

2 files changed

+84
-66
lines changed

2 files changed

+84
-66
lines changed

test/test_cli.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
"""Tests of the CLI."""
2+
3+
import contextlib
4+
import io
5+
import logging
6+
import runpy
7+
import sys
8+
import unittest
9+
10+
from version_query.version import VersionComponent
11+
from version_query.query import \
12+
query_caller, query_version_str, predict_caller, predict_version_str
13+
14+
_LOG = logging.getLogger(__name__)
15+
16+
17+
@contextlib.contextmanager
18+
def temporarily_set_logger_level(logger_name: str, level: int):
19+
"""Change logger level on enter and restore on exit of this context."""
20+
logger = logging.getLogger(logger_name)
21+
level_ = logger.level
22+
logger.setLevel(level)
23+
try:
24+
yield
25+
finally:
26+
logger.setLevel(level_)
27+
28+
29+
def preserve_logger_level(logger_name: str):
30+
return temporarily_set_logger_level(logger_name, logging.getLogger(logger_name).level)
31+
32+
33+
def run_module(name: str, *args, run_name: str = '__main__') -> None:
34+
backup_sys_argv = sys.argv
35+
sys.argv = [name + '.py'] + list(args)
36+
runpy.run_module(name, run_name=run_name, alter_sys=True)
37+
sys.argv = backup_sys_argv
38+
39+
40+
class Tests(unittest.TestCase):
41+
42+
def test_not_as_main(self): # pylint: disable = no-self-use
43+
run_module('version_query', run_name='__not_main__')
44+
45+
def test_help(self):
46+
sio = io.StringIO()
47+
with contextlib.redirect_stderr(sio), preserve_logger_level('version_query'), \
48+
self.assertRaises(SystemExit):
49+
run_module('version_query')
50+
_LOG.info('%s', sio.getvalue())
51+
52+
def test_bad_usage(self):
53+
sio = io.StringIO()
54+
with contextlib.redirect_stderr(sio), preserve_logger_level('version_query'), \
55+
self.assertRaises(ValueError):
56+
run_module('version_query', '-p', '-i', '.')
57+
_LOG.info('%s', sio.getvalue())
58+
59+
def test_here(self):
60+
sio = io.StringIO()
61+
with temporarily_set_logger_level('version_query', logging.ERROR), \
62+
contextlib.redirect_stdout(sio):
63+
run_module('version_query', '.')
64+
self.assertEqual(sio.getvalue().rstrip(), query_caller().to_str())
65+
self.assertEqual(sio.getvalue().rstrip(), query_version_str())
66+
67+
def test_increment_here(self):
68+
sio = io.StringIO()
69+
with temporarily_set_logger_level('version_query', logging.ERROR), \
70+
contextlib.redirect_stdout(sio):
71+
run_module('version_query', '-i', '.')
72+
self.assertEqual(sio.getvalue().rstrip(),
73+
query_caller().increment(VersionComponent.Patch).to_str())
74+
75+
def test_predict_here(self):
76+
sio = io.StringIO()
77+
with temporarily_set_logger_level('version_query', logging.ERROR), \
78+
contextlib.redirect_stdout(sio):
79+
run_module('version_query', '-p', '.')
80+
self.assertEqual(sio.getvalue().rstrip(), predict_caller().to_str())
81+
self.assertEqual(sio.getvalue().rstrip(), predict_version_str())

test/test_query.py

Lines changed: 3 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,29 @@
11
"""Tests of querying tools."""
22

3-
import contextlib
43
import importlib
5-
import io
64
import logging
75
import os
86
import pathlib
97
import sys
108
import tempfile
119
import unittest
12-
import unittest.mock
1310

1411
from boilerplates.packaging_tests import run_module
1512

16-
from version_query.version import VersionComponent, Version
13+
from version_query.version import Version
1714
from version_query.git_query import query_git_repo, predict_git_repo
1815
from version_query.py_query import query_metadata_json, query_pkg_info, query_package_folder
19-
from version_query.query import \
20-
query_folder, query_caller, query_version_str, predict_caller, predict_version_str
16+
from version_query.query import query_folder, query_caller
2117
from .examples import \
2218
PY_LIB_DIR, GIT_REPO_EXAMPLES, METADATA_JSON_EXAMPLE_PATHS, PKG_INFO_EXAMPLE_PATHS, \
2319
PACKAGE_FOLDER_EXAMPLES
20+
from .test_cli import preserve_logger_level
2421

2522
_LOG = logging.getLogger(__name__)
2623

2724
IGNORED_FOLDER_NAMES = ['opencv']
2825

2926

30-
@contextlib.contextmanager
31-
def temporarily_set_logger_level(logger_name: str, level: int):
32-
"""Change logger level on enter and restore on exit of this context."""
33-
logger = logging.getLogger(logger_name)
34-
level_ = logger.level
35-
logger.setLevel(level)
36-
try:
37-
yield
38-
finally:
39-
logger.setLevel(level_)
40-
41-
42-
def preserve_logger_level(logger_name: str):
43-
return temporarily_set_logger_level(logger_name, logging.getLogger(logger_name).level)
44-
45-
4627
class Tests(unittest.TestCase):
4728

4829
def _check_examples_count(self, description, examples):
@@ -164,47 +145,3 @@ def test_query_caller(self):
164145
version = query_caller()
165146
_LOG.debug('caller: %s', version)
166147
self.assertIsInstance(version, Version)
167-
168-
def test_not_as_main(self): # pylint: disable = no-self-use
169-
run_module('version_query', run_name=None)
170-
171-
def test_help(self):
172-
sio = io.StringIO()
173-
with contextlib.redirect_stderr(sio):
174-
with preserve_logger_level('version_query'):
175-
with self.assertRaises(SystemExit):
176-
run_module('version_query')
177-
_LOG.info('%s', sio.getvalue())
178-
179-
def test_bad_usage(self):
180-
sio = io.StringIO()
181-
with contextlib.redirect_stderr(sio):
182-
with preserve_logger_level('version_query'):
183-
with self.assertRaises(ValueError):
184-
run_module('version_query', '-p', '-i', '.')
185-
_LOG.info('%s', sio.getvalue())
186-
187-
def test_here(self):
188-
with temporarily_set_logger_level('version_query', logging.ERROR):
189-
sio = io.StringIO()
190-
with contextlib.redirect_stdout(sio):
191-
run_module('version_query', '.')
192-
self.assertEqual(sio.getvalue().rstrip(), query_caller().to_str())
193-
self.assertEqual(sio.getvalue().rstrip(), query_version_str())
194-
195-
def test_increment_here(self):
196-
with temporarily_set_logger_level('version_query', logging.ERROR):
197-
sio = io.StringIO()
198-
with contextlib.redirect_stdout(sio):
199-
with preserve_logger_level('version_query'):
200-
run_module('version_query', '-i', '.')
201-
self.assertEqual(sio.getvalue().rstrip(),
202-
query_caller().increment(VersionComponent.Patch).to_str())
203-
204-
def test_predict_here(self):
205-
with temporarily_set_logger_level('version_query', logging.ERROR):
206-
sio = io.StringIO()
207-
with contextlib.redirect_stdout(sio):
208-
run_module('version_query', '-p', '.')
209-
self.assertEqual(sio.getvalue().rstrip(), predict_caller().to_str())
210-
self.assertEqual(sio.getvalue().rstrip(), predict_version_str())

0 commit comments

Comments
 (0)