# -*- coding: utf-8 -*- """PyVISA testsuite. """ import logging from logging.handlers import BufferingHandler import pytest from pyvisa import ResourceManager, logger try: ResourceManager() except ValueError: VISA_PRESENT = False else: VISA_PRESENT = True require_visa_lib = pytest.mark.skipif( not VISA_PRESENT, reason="Requires an installed VISA library. Run on PyVISA buildbot.", ) class TestHandler(BufferingHandler): def __init__(self, only_warnings=False): # BufferingHandler takes a "capacity" argument # so as to know when to flush. As we're overriding # shouldFlush anyway, we can set a capacity of zero. # You can call flush() manually to clear out the # buffer. self.only_warnings = only_warnings BufferingHandler.__init__(self, 0) def shouldFlush(self, record): return False def emit(self, record): if self.only_warnings and record.level != logging.WARNING: return self.buffer.append(record.__dict__) class BaseTestCase: CHECK_NO_WARNING = True def setup_method(self): self._test_handler = None if self.CHECK_NO_WARNING: self._test_handler = th = TestHandler() th.setLevel(logging.WARNING) logger.addHandler(th) def teardown_method(self): if self._test_handler is not None: buf = self._test_handler.buffer length = len(buf) msg = "\n".join(record.get("msg", str(record)) for record in buf) assert length == 0, "%d warnings raised.\n%s" % (length, msg)