From 41e0d532f07aed599e3353e2020dfb740fc32dda Mon Sep 17 00:00:00 2001 From: Eric Wild Date: Mon, 7 Sep 2026 19:51:23 +0200 Subject: [PATCH] tests: stop test_log from leaking the print callback PySimLogger.setup() installs a process-global print callback. PySimLogger_Test sets one, a helper that asserts the message equals a global expected_message, and never removes it, so from the moment test_log runs, every PySimLogger message emitted anywhere in the process is checked against whatever string that global happens to hold. Fortunately unittest discovery runs modules in sorted order, and today the PySimLogger users that log during tests all sort before test_log, so this only breaks as soon as I try to add tests, just like anything else breaks as soon as I try to use it. Change-Id: I481e2c443fe0f412380b0f1acf6da5971ffca147 --- tests/unittests/test_log.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/unittests/test_log.py b/tests/unittests/test_log.py index a8e38dd0d..ac651ae79 100755 --- a/tests/unittests/test_log.py +++ b/tests/unittests/test_log.py @@ -37,6 +37,17 @@ expected_message = None class PySimLogger_Test(unittest.TestCase): + def setUp(self): + # PySimLogger.setup() is global, so a print callback left installed here fires for + # every PySimLogger message emitted by any test module that runs later in the same process + # ... where it asserts against a stale 'expected_message' and fails a test that has nothing + # to do with logging. Great fun! + # Restore before each test. + saved = (PySimLogger.print_callback, PySimLogger.verbose) + def _restore(): + PySimLogger.print_callback, PySimLogger.verbose = saved + self.addCleanup(_restore) + def __test_01_safe_defaults_one(self, callback, message:str): # When log messages are sent to an unconfigured PySimLogger class, we expect the unmodified message being # logged to stdout, just as if it were printed via a normal print() statement.