From 2402094e5e683895524a21e34bfee5faa770b777 Mon Sep 17 00:00:00 2001 From: Rami Abdelrazzaq Date: Sat, 12 Sep 2026 09:12:09 -0500 Subject: [PATCH] Test progress tracking for multibyte text files --- tests/test_file_progress.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/test_file_progress.py diff --git a/tests/test_file_progress.py b/tests/test_file_progress.py new file mode 100644 index 0000000..4baf438 --- /dev/null +++ b/tests/test_file_progress.py @@ -0,0 +1,29 @@ +import io + +import pytest + +from sqlite_utils.utils import UpdateWrapper + + +@pytest.mark.parametrize("encoding", ("utf-8", "utf-16-le", "utf-32-le")) +def test_update_wrapper_tracks_underlying_bytes(encoding): + text = "id,name\r\n1,Café\r\n2,猫\r\n" + raw = text.encode(encoding) + updates = [] + decoded = io.TextIOWrapper(io.BytesIO(raw), encoding=encoding) + + lines = list(UpdateWrapper(decoded, updates.append)) + + assert lines == ["id,name\n", "1,Café\n", "2,猫\n"] + assert sum(updates) == len(raw) + + +def test_update_wrapper_read_tracks_underlying_bytes(): + raw = "é猫".encode("utf-8") + updates = [] + decoded = io.TextIOWrapper(io.BytesIO(raw), encoding="utf-8") + wrapped = UpdateWrapper(decoded, updates.append) + + assert wrapped.read(1) == "é" + assert wrapped.read() == "猫" + assert sum(updates) == len(raw)