mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-07 15:28:28 +01:00
* Add separate stream handler for error logging * test stdout and stderr * review refactor, newline after test * mock instead of unittest.mock * use filter instead of lambda * add result checks * remove Logger pseudo-integration test, add direct test * tests, refactor, StringIO intercepts stdout and stderr messages * Check exact error message Co-Authored-By: pared <[email protected]> * Check exact non-error message Co-Authored-By: pared <[email protected]>
87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
from mock import patch
|
|
|
|
try:
|
|
from StringIO import StringIO
|
|
except ImportError:
|
|
from io import StringIO
|
|
|
|
import colorama
|
|
import logging
|
|
|
|
from dvc.command.base import CmdBase
|
|
from dvc.config import Config
|
|
from dvc.logger import Logger
|
|
from dvc.main import main
|
|
|
|
from tests.basic_env import TestDvc
|
|
|
|
|
|
class StringContaining(str):
|
|
def __eq__(self, other):
|
|
return self in other
|
|
|
|
|
|
class TestLogger(TestDvc):
|
|
def test_config(self):
|
|
Logger('debug')
|
|
self.assertEqual(Logger.logger().getEffectiveLevel(), logging.DEBUG)
|
|
|
|
Logger('error')
|
|
self.assertEqual(Logger.logger().getEffectiveLevel(), logging.ERROR)
|
|
|
|
def test_set_level(self):
|
|
Logger.set_level('debug')
|
|
self.assertEqual(Logger.logger().getEffectiveLevel(), logging.DEBUG)
|
|
|
|
def test_be_quiet(self):
|
|
Logger.be_quiet()
|
|
self.assertEqual(Logger.logger().getEffectiveLevel(), logging.CRITICAL)
|
|
|
|
def test_be_verbose(self):
|
|
Logger.be_verbose()
|
|
self.assertEqual(Logger.logger().getEffectiveLevel(), logging.DEBUG)
|
|
|
|
def test_colorize(self):
|
|
for name, color in Logger.COLOR_MAP.items():
|
|
msg = Logger.colorize(name, name)
|
|
# This is not a tty, so it should not colorize anything
|
|
self.assertEqual(msg, name)
|
|
|
|
@patch('sys.stderr', new_callable=StringIO)
|
|
@patch('sys.stdout', new_callable=StringIO)
|
|
def test_stderr(self, mock_stdout, mock_stderr):
|
|
error_message = 'error msg'
|
|
Logger.init()
|
|
Logger.error(error_message)
|
|
self.assertEqual('', mock_stdout.getvalue())
|
|
self.assertEqual('Error: {}\n\nHaving any troubles? '
|
|
'Hit us up at dvc.org/support, we '
|
|
'are always happy to help!\n'.format(error_message),
|
|
mock_stderr.getvalue())
|
|
|
|
@patch('sys.stderr', new_callable=StringIO)
|
|
@patch('sys.stdout', new_callable=StringIO)
|
|
def test_stdout(self, mock_stdout, mock_stderr):
|
|
non_error_message = 'non-error message'
|
|
Logger.init()
|
|
Logger.info(non_error_message)
|
|
self.assertEqual('', mock_stderr.getvalue())
|
|
self.assertEqual('{}\n'.format(non_error_message),
|
|
mock_stdout.getvalue())
|
|
|
|
|
|
class TestLoggerCLI(TestDvc):
|
|
def test(self):
|
|
class A(object):
|
|
quiet = True
|
|
verbose = False
|
|
|
|
args = A()
|
|
CmdBase._set_loglevel(args)
|
|
self.assertEqual(Logger.logger().getEffectiveLevel(), logging.CRITICAL)
|
|
|
|
args.quiet = False
|
|
args.verbose = True
|
|
CmdBase._set_loglevel(args)
|
|
self.assertEqual(Logger.logger().getEffectiveLevel(), logging.DEBUG)
|