61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
"""
|
|
Logger tests
|
|
============
|
|
"""
|
|
|
|
import pytest
|
|
import pathlib
|
|
import time
|
|
|
|
|
|
@pytest.fixture
|
|
def file_handler():
|
|
# restores handler to original state
|
|
from kivy.config import Config
|
|
|
|
log_dir = Config.get("kivy", "log_dir")
|
|
log_maxfiles = Config.get("kivy", "log_maxfiles")
|
|
|
|
try:
|
|
yield None
|
|
finally:
|
|
Config.set("kivy", "log_dir", log_dir)
|
|
Config.set("kivy", "log_maxfiles", log_maxfiles)
|
|
|
|
|
|
@pytest.mark.parametrize('n', [0, 1, 5])
|
|
def test_purge_logs(tmp_path, file_handler, n):
|
|
from kivy.config import Config
|
|
from kivy.logger import FileHandler
|
|
|
|
Config.set("kivy", "log_dir", str(tmp_path))
|
|
Config.set("kivy", "log_maxfiles", n)
|
|
|
|
# create the default file first so it gets deleted so names match
|
|
handler = FileHandler()
|
|
handler._configure()
|
|
open_file = pathlib.Path(handler.filename).name
|
|
# wait a little so the timestamps are different for different files
|
|
time.sleep(.05)
|
|
|
|
names = [f'log_{i}.txt' for i in range(n + 2)]
|
|
for name in names:
|
|
p = tmp_path / name
|
|
p.write_text('some data')
|
|
time.sleep(.05)
|
|
|
|
handler.purge_logs()
|
|
|
|
# files that should have remained after purge
|
|
expected_names = list(reversed(names))[:n]
|
|
files = {f.name for f in tmp_path.iterdir()}
|
|
if open_file in files:
|
|
# one of the remaining files is the current open log, remove it
|
|
files.remove(open_file)
|
|
if len(expected_names) == len(files) + 1:
|
|
# the open log may or may not have been counted in the remaining
|
|
# files, remove one from expected to match removed open file
|
|
expected_names = expected_names[:-1]
|
|
|
|
assert set(expected_names) == files
|