From 8f41048dac4492b25bdb0e293ac21aaff0d048b8 Mon Sep 17 00:00:00 2001 From: Delgan Date: Sun, 9 Jul 2023 12:15:23 +0200 Subject: [PATCH] Fix buffering unit test failing on some platforms --- tests/test_add_option_kwargs.py | 36 ++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/tests/test_add_option_kwargs.py b/tests/test_add_option_kwargs.py index 2839107d..43c1b7ff 100644 --- a/tests/test_add_option_kwargs.py +++ b/tests/test_add_option_kwargs.py @@ -1,5 +1,3 @@ -import io - import pytest from loguru import logger @@ -21,13 +19,33 @@ def test_file_mode_w(tmp_path): assert file.read_text() == "msg\n" -def test_file_buffering(tmp_path): - file = tmp_path / "test.log" - logger.add(file, format="{message}", buffering=-1) - logger.debug("x" * (io.DEFAULT_BUFFER_SIZE // 2)) - assert file.read_text() == "" - logger.debug("x" * (io.DEFAULT_BUFFER_SIZE * 2)) - assert file.read_text() != "" +def test_file_auto_buffering(tmp_path): + # There doesn't seem to be a reliable way to known buffer size for text files. + # We perform a preliminary test to ensure empirically that 128 <= buffer size <= 65536. + dummy_filepath = tmp_path / "dummy.txt" + with open(dummy_filepath, buffering=-1, mode="w") as dummy_file: + dummy_file.write("." * 127) + if dummy_filepath.read_text() != "": + pytest.skip("Size buffer for text files is too small.") + dummy_file.write("." * (65536 - 127)) + if dummy_filepath.read_text() == "": + pytest.skip("Size buffer for text files is too big.") + + filepath = tmp_path / "test.log" + logger.add(filepath, format="{message}", buffering=-1) + logger.debug("A short message.") + assert filepath.read_text() == "" + logger.debug("A long message" + "." * 65536) + assert filepath.read_text() != "" + + +def test_file_line_buffering(tmp_path): + filepath = tmp_path / "test.log" + logger.add(filepath, format=lambda _: "{message}", buffering=1) + logger.debug("Without newline") + assert filepath.read_text() == "" + logger.debug("With newline\n") + assert filepath.read_text() != "" def test_invalid_function_kwargs():