#!/usr/bin/env python
import sys
import pytest
if "__pypy__" in sys.modules:
pytest.skip("Broken on pypy")
from circuits import Event, Component
from circuits.app.log import Log, Logger
LEVELS = list(Logger.LEVELS.keys())
class Test(Event):
"""Test Event"""
class App(Component):
def test(self, level="debug"):
self.fire(Log(level, "Hello World!"))
@pytest.fixture
def app(request, manager, watcher):
app = App().register(manager)
watcher.wait("registered")
def finalizer():
app.unregister()
watcher.wait("unregistered")
request.addfinalizer(finalizer)
return app
@pytest.fixture
def filename(request, tmpdir):
return str(tmpdir.ensure("test.log"))
@pytest.fixture
def logger(request, manager, watcher, monkeypatch, filename):
logger = Logger(filename, "test", "file", "DEBUG").register(manager)
watcher.wait("registered")
def formatTime(self, record, datefmt=None):
return ""
handler = logger.logger.handlers[0]
formatter = handler.formatter
monkeypatch.setattr(formatter, "formatTime", formatTime)
def finalizer():
logger.unregister()
watcher.wait("unregistered")
request.addfinalizer(finalizer)
return logger
def pytest_generate_tests(metafunc):
for level in LEVELS:
metafunc.addcall(funcargs={"level": level})
def test(app, logger, filename, level, watcher):
with open(filename, "r+") as f:
app.fire(Test(level))
watcher.wait("test")
f.seek(0)
s = f.read().strip()
if level == "exception":
level = "error"
elif level == "warn":
level = "warning"
assert s == "test[log] {0:s}: Hello World!".format(level.upper())