# HG changeset patch # User Franz Glasner # Date 1747481148 -7200 # Node ID ff4424a7a8cf41b48b0ff4641b9b34882c587b3c # Parent 58552d3d176644987017e20c905255fccc34c02e treesum: unit tests for generating and reading treesum files diff -r 58552d3d1766 -r ff4424a7a8cf cutils/treesum.py --- a/cutils/treesum.py Mon May 12 15:33:16 2025 +0200 +++ b/cutils/treesum.py Sat May 17 13:25:48 2025 +0200 @@ -2064,5 +2064,36 @@ get_infos_from_digestfile([digest_file], self, True) +class TreesumInfo(object): + + def __init__(self): + self._algorithm = self._digest = self._size = None + + def __call__(self, block_no, tag, generator, fsencoding, flags, + fnmatch_filters, comments, errors, + algorithm, digest, size): + self._algorithm = algorithm + self._digest = digest + self._size = size + + @property + def algorithm(self): + return self._algorithm + + @property + def digest(self): + return self._digest + + @property + def size(self): + return self._size + + @classmethod + def collect_last_from_file(cls, digest_file): + info = cls() + get_infos_from_digestfile([digest_file], info, True) + return info + + if __name__ == "__main__": sys.exit(main()) diff -r 58552d3d1766 -r ff4424a7a8cf tests/test_treesum.py --- a/tests/test_treesum.py Mon May 12 15:33:16 2025 +0200 +++ b/tests/test_treesum.py Sat May 17 13:25:48 2025 +0200 @@ -19,7 +19,7 @@ import cutils.treesum -class TreesumTests(unittest.TestCase): +class TaggedTreesumTests(unittest.TestCase): def setUp(self): if not os.path.isdir(TMPDIR): @@ -29,10 +29,114 @@ if os.path.isdir(TMPDIR): shutil.rmtree(TMPDIR) - def test_xxx(self): - self.assertTrue(True) + def test_gen_and_info_P_utf8(self): + digest_file = os.path.join( + TMPDIR, + "%d__test_gen_and_info_P_utf8.info" % (os.getpid(),)) + rel_tmpdir = os.path.relpath(TMPDIR, DATADIR) + gen_opts = cutils.treesum.gen_generate_opts( + directories=[DATADIR], + algorithm="SHA1", + fnmatch_filters=[("exclude", "glob:%s" % (rel_tmpdir,))], + generator="full", + grouping_separator="_", + output=digest_file, + output_style="tagged", + print_size=True, + utf8=True) + info_opts = cutils.treesum.gen_info_opts(digest_files=[digest_file], + last=True) + cutils.treesum.generate_treesum(gen_opts) + cutils.treesum.print_treesum_digestfile_infos(info_opts) + info = cutils.treesum.TreesumInfo.collect_last_from_file(digest_file) + self.assertEqual( + b"\xe1\x76\x18\xfc\x9b\x2f\x1e\x41\xfc\xe0\x04\xfc\x92\x43\x4e\xa7\x49\xbd\x57\x36", # noqa: E501 line too long + info.digest) + self.assertEqual(2808, info.size) + self.assertEqual("SHA1", info.algorithm) + + def test_gen_and_info_P_native(self): + digest_file = os.path.join( + TMPDIR, + "%d__test_gen_and_info_P_native.info" % (os.getpid(),)) + rel_tmpdir = os.path.relpath(TMPDIR, DATADIR) + gen_opts = cutils.treesum.gen_generate_opts( + directories=[DATADIR], + algorithm="SHA1", + fnmatch_filters=[("exclude", "glob:%s" % (rel_tmpdir,))], + generator="full", + grouping_separator="_", + output=digest_file, + output_style="tagged", + print_size=True, + utf8=False) + info_opts = cutils.treesum.gen_info_opts(digest_files=[digest_file], + last=True) + cutils.treesum.generate_treesum(gen_opts) + cutils.treesum.print_treesum_digestfile_infos(info_opts) + info = cutils.treesum.TreesumInfo.collect_last_from_file(digest_file) + self.assertEqual( + b"\xe1\x76\x18\xfc\x9b\x2f\x1e\x41\xfc\xe0\x04\xfc\x92\x43\x4e\xa7\x49\xbd\x57\x36", # noqa: E501 line too long + info.digest) + self.assertEqual(2808, info.size) + self.assertEqual("SHA1", info.algorithm) + + def test_gen_and_info_L_utf8(self): + digest_file = os.path.join( + TMPDIR, + "%d__test_gen_and_info_L_utf8.info" % (os.getpid(),)) + rel_tmpdir = os.path.relpath(TMPDIR, DATADIR) + gen_opts = cutils.treesum.gen_generate_opts( + directories=[DATADIR], + algorithm="SHA1", + fnmatch_filters=[("exclude", "glob:%s" % (rel_tmpdir,))], + follow_symlinks=cutils.treesum.FollowSymlinkConfig( + True, True, True), + generator="full", + grouping_separator="_", + output=digest_file, + output_style="tagged", + print_size=True, + utf8=True) + info_opts = cutils.treesum.gen_info_opts(digest_files=[digest_file], + last=True) + cutils.treesum.generate_treesum(gen_opts) + cutils.treesum.print_treesum_digestfile_infos(info_opts) + info = cutils.treesum.TreesumInfo.collect_last_from_file(digest_file) + self.assertEqual( + b"\xb3\xdd\x1b\x93\xec\x3a\xa5\xf1\xb1\xc6\xbd\x8c\x1e\xe1\xd5\xcf\x72\x65\x27\x1d", # noqa: E501 line too long + info.digest) + self.assertEqual(2863, info.size) + self.assertEqual("SHA1", info.algorithm) + + def test_gen_and_info_L_native(self): + digest_file = os.path.join( + TMPDIR, + "%d__test_gen_and_info_L_native.info" % (os.getpid(),)) + rel_tmpdir = os.path.relpath(TMPDIR, DATADIR) + gen_opts = cutils.treesum.gen_generate_opts( + directories=[DATADIR], + algorithm="SHA1", + fnmatch_filters=[("exclude", "glob:%s" % (rel_tmpdir,))], + follow_symlinks=cutils.treesum.FollowSymlinkConfig( + True, True, True), + generator="full", + grouping_separator="_", + output=digest_file, + output_style="tagged", + print_size=True, + utf8=False) + info_opts = cutils.treesum.gen_info_opts(digest_files=[digest_file], + last=True) + cutils.treesum.generate_treesum(gen_opts) + cutils.treesum.print_treesum_digestfile_infos(info_opts) + info = cutils.treesum.TreesumInfo.collect_last_from_file(digest_file) + self.assertEqual( + b"\xb3\xdd\x1b\x93\xec\x3a\xa5\xf1\xb1\xc6\xbd\x8c\x1e\xe1\xd5\xcf\x72\x65\x27\x1d", # noqa: E501 line too long + info.digest) + self.assertEqual(2863, info.size) + self.assertEqual("SHA1", info.algorithm) if __name__ == "__main__": - print(TMPDIR) - sys.exit(unittest.main()) + sys.exit(unittest.main(buffer=True))