#!/usr/bin/env python3 # pylint: disable=wrong-import-position """Lots of unit tests for the new readline0.py.""" from __future__ import with_statement import os import unittest import readline0 class Tests(unittest.TestCase): # pylint: disable=R0904 # R0904: We need lots of public methods - we provide lots of tests """Unit tests for readline0.""" @staticmethod def do_a_test(byte_string: bytes, expected_list: list[bytes], blocksize: int, separator: bytes = b"\0") -> None: """Run one test with 3 parameters.""" with open("file.txt", "wb") as file_: file_.write(byte_string) with open("file.txt", "rb") as file_: actual_list = [] for line in readline0.readline0(file_=file_, blocksize=blocksize, separator=separator): actual_list.append(line) assert expected_list == actual_list, "\nExpected list: %s\nActual list: %s\n" % (expected_list, actual_list) os.unlink("file.txt") def test1_3_5_final_null(self) -> None: """1 3 5 final null.""" self.do_a_test(b"ab\0de\0gh\0ij\0kl\0", [b"ab", b"de", b"gh", b"ij", b"kl"], 1) def test1_3_5_no_final_null(self) -> None: """1 3 5 no final null.""" self.do_a_test(b"ab\0de\0gh\0ij\0kl", [b"ab", b"de", b"gh", b"ij", b"kl"], 1) def test2_3_5_final_null(self) -> None: """2 3 5 final null.""" self.do_a_test(b"ab\0de\0gh\0ij\0kl\0", [b"ab", b"de", b"gh", b"ij", b"kl"], 2) def test2_3_5_no_final_null(self) -> None: """2 3 5 no final null.""" self.do_a_test(b"ab\0de\0gh\0ij\0kl", [b"ab", b"de", b"gh", b"ij", b"kl"], 2) def test2_3_6_final_null(self) -> None: """2 3 6 final null.""" self.do_a_test(b"ab\0de\0gh\0ij\0kl\0mn\0", [b"ab", b"de", b"gh", b"ij", b"kl", b"mn"], 2) def test2_3_6_no_final_null(self) -> None: """2 3 6 no final null.""" self.do_a_test(b"ab\0de\0gh\0ij\0kl\0mn", [b"ab", b"de", b"gh", b"ij", b"kl", b"mn"], 2) def test2_4_6_final_null(self) -> None: """2 4 5 final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno\0", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 2) def test2_4_6_no_final_null(self) -> None: """2 4 5 no final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 2) def test3_4_6_final_null(self) -> None: """3 4 6 final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno\0", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 3) def test3_4_6_no_final_null(self) -> None: """3 4 6 no final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 3) def test4_4_6_final_null(self) -> None: """4 4 6 final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno\0", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 4) def test4_4_6_no_final_null(self) -> None: """4 4 6 no final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 4) def test5_4_6_final_null(self) -> None: """5 4 6 final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno\0", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 5) def test5_4_6_no_final_null(self) -> None: """5 4 6 no final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 5) def test8_4_6_final_null(self) -> None: """8 4 6 final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno\0", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 8) def test8_4_6_no_final_null(self) -> None: """8 4 6 no final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 8) def test9_4_6_final_null(self) -> None: """9 4 6 final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno\0", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 9) def test9_4_6_no_final_null(self) -> None: """9 4 6 no final null.""" self.do_a_test(b"abc\0def\0ghi\0ijk\0klm\0mno", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], 9) def test10_multichar_sep(self) -> None: r"""Test with two nulls including two final nulls.""" self.do_a_test( b"abc\0\0def\0\0ghi\0\0ijk\0\0klm\0\0mno\0\0", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], blocksize=9, separator=b"\0\0", ) def test11_multichar_sep(self) -> None: r"""Test with two nulls excluding two final nulls.""" self.do_a_test( b"abc\0\0def\0\0ghi\0\0ijk\0\0klm\0\0mno", [b"abc", b"def", b"ghi", b"ijk", b"klm", b"mno"], blocksize=9, separator=b"\0\0", ) unittest.main()