diff --git a/Tests/conftest.py b/Tests/conftest.py new file mode 100644 index 000000000..11e783122 --- /dev/null +++ b/Tests/conftest.py @@ -0,0 +1,28 @@ +import fontTools +import pytest + + +@pytest.fixture(autouse=True, scope="session") +def disableConfigLogger(): + """Session-scoped fixture to make fontTools.configLogger function no-op. + + Logging in python maintain a global state. When in the tests we call a main() + function from modules subset or ttx, a call to configLogger is made that modifies + this global state (to configures a handler for the fontTools logger). + To prevent that, we monkey-patch the `configLogger` attribute of the `fontTools` + module (the one used in the scripts main() functions) so that it does nothing, + to avoid any side effects. + + NOTE: `fontTools.configLogger` is only an alias for the configLogger function in + `fontTools.misc.loggingTools` module; the original function is not modified. + """ + + def noop(*args, **kwargs): + return + + originalConfigLogger = fontTools.configLogger + fontTools.configLogger = noop + try: + yield + finally: + fontTools.configLogger = originalConfigLogger