mirror of
https://github.com/OpenFreeEnergy/openfe.git
synced 2026-06-04 22:34:24 +08:00
90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
import os
|
|
import pytest
|
|
|
|
from unittest.mock import patch
|
|
import logging
|
|
import contextlib
|
|
|
|
from openfecli.utils import (
|
|
import_thing, _should_configure_logger, configure_logger
|
|
)
|
|
|
|
|
|
# looks like this can't be done as a fixture; related to
|
|
# https://github.com/pytest-dev/pytest/issues/2974
|
|
@contextlib.contextmanager
|
|
def patch_root_logger():
|
|
# use this to hide away some handlers that pytest attaches
|
|
old_manager = logging.Logger.manager
|
|
old_root = logging.root
|
|
new_root = logging.RootLogger(logging.WARNING)
|
|
manager = logging.Manager(new_root)
|
|
|
|
logging.Logger.manager = manager
|
|
logging.root = new_root
|
|
yield new_root
|
|
logging.Logger.manager = old_manager
|
|
logging.root = old_root
|
|
|
|
|
|
@pytest.mark.parametrize('import_string,expected', [
|
|
('os.path.exists', os.path.exists),
|
|
('os.getcwd', os.getcwd),
|
|
('os', os),
|
|
])
|
|
def test_import_thing(import_string, expected):
|
|
assert import_thing(import_string) is expected
|
|
|
|
|
|
def test_import_thing_import_error():
|
|
with pytest.raises(ImportError):
|
|
import_thing('foo.bar')
|
|
|
|
|
|
def test_import_thing_attribute_error():
|
|
with pytest.raises(AttributeError):
|
|
import_thing('os.foo')
|
|
|
|
|
|
@pytest.mark.parametrize("logger_name, expected", [
|
|
("default", True), ("default.default", True),
|
|
("level", False), ("level.default", False),
|
|
("handler", False), ("handler.default", False),
|
|
("default.noprop", False)
|
|
])
|
|
@pytest.mark.parametrize('with_adapter', [True, False])
|
|
def test_should_configure_logger(logger_name, expected, with_adapter):
|
|
with patch_root_logger():
|
|
logging.getLogger("level").setLevel(logging.INFO)
|
|
logging.getLogger("handler").addHandler(logging.NullHandler())
|
|
logging.getLogger("default.noprop").propagate = False
|
|
logger = logging.getLogger(logger_name)
|
|
if with_adapter:
|
|
logger = logging.LoggerAdapter(logger, extra={"foo": "bar"})
|
|
assert _should_configure_logger(logger) == expected
|
|
|
|
|
|
def test_root_logger_level_configured():
|
|
with patch_root_logger():
|
|
root = logging.getLogger()
|
|
root.setLevel(logging.INFO)
|
|
|
|
logger = logging.getLogger("default.default")
|
|
assert not _should_configure_logger(logger)
|
|
|
|
|
|
@pytest.mark.parametrize('with_handler', [True, False])
|
|
def test_configure_logger(with_handler):
|
|
handler = logging.NullHandler() if with_handler else None
|
|
expected_handlers = [handler] if handler else []
|
|
with patch_root_logger():
|
|
configure_logger('default.default', handler=handler)
|
|
logger = logging.getLogger('default.default')
|
|
parent = logging.getLogger('default')
|
|
assert logger.isEnabledFor(logging.INFO)
|
|
assert not parent.isEnabledFor(logging.INFO)
|
|
assert logger.handlers == expected_handlers
|
|
assert parent.handlers == []
|
|
|
|
|