diff --git a/test/lib/helper.py b/test/lib/helper.py index e6784e51c..f951a6a12 100644 --- a/test/lib/helper.py +++ b/test/lib/helper.py @@ -97,7 +97,8 @@ def wrapper(self, *args, **kwargs): return func(self, path, *args, **kwargs) except Exception: _logger.info( - "Test %s.%s failed, output is at %r\n", + "%s %s.%s failed, output is at %r\n", + "Test" if func.__name__.startswith("test_") else "Helper", type(self).__name__, func.__name__, path, diff --git a/test/test_tree.py b/test/test_tree.py index 695cb803e..0c06b950c 100644 --- a/test/test_tree.py +++ b/test/test_tree.py @@ -4,14 +4,14 @@ # 3-Clause BSD License: https://opensource.org/license/bsd-3-clause/ from io import BytesIO - -from git.objects import Tree, Blob -from test.lib import TestBase - -import os import os.path as osp +from pathlib import Path import subprocess +from git.objects import Tree, Blob +from git.util import cwd +from test.lib import TestBase, with_rw_directory + class TestTree(TestBase): def test_serializable(self): @@ -42,28 +42,39 @@ def test_serializable(self): testtree._deserialize(stream) # END for each item in tree - def test_tree_modifier_ordering(self): - def setup_git_repository_and_get_ordered_files(): - os.mkdir("tmp") - os.chdir("tmp") + @with_rw_directory + def _get_git_ordered_files(self, rw_dir): + """Get files as git orders them, to compare in test_tree_modifier_ordering.""" + # Create directory contents. + Path(rw_dir, "file").mkdir() + for filename in ( + "bin", + "bin.d", + "file.to", + "file.toml", + "file.toml.bin", + "file0", + ): + Path(rw_dir, filename).touch() + Path(rw_dir, "file", "a").touch() + + with cwd(rw_dir): + # Prepare the repository. subprocess.run(["git", "init", "-q"], check=True) - os.mkdir("file") - for filename in [ - "bin", - "bin.d", - "file.to", - "file.toml", - "file.toml.bin", - "file0", - "file/a", - ]: - open(filename, "a").close() - subprocess.run(["git", "add", "."], check=True) subprocess.run(["git", "commit", "-m", "c1"], check=True) - tree_hash = subprocess.check_output(["git", "rev-parse", "HEAD^{tree}"]).decode().strip() - cat_file_output = subprocess.check_output(["git", "cat-file", "-p", tree_hash]).decode() - return [line.split()[-1] for line in cat_file_output.split("\n") if line] + + # Get git output from which an ordered file list can be parsed. + rev_parse_command = ["git", "rev-parse", "HEAD^{tree}"] + tree_hash = subprocess.check_output(rev_parse_command).decode().strip() + cat_file_command = ["git", "cat-file", "-p", tree_hash] + cat_file_output = subprocess.check_output(cat_file_command).decode() + + return [line.split()[-1] for line in cat_file_output.split("\n") if line] + + def test_tree_modifier_ordering(self): + """TreeModifier.set_done() sorts files in the same order git does.""" + git_file_names_in_order = self._get_git_ordered_files() hexsha = "6c1faef799095f3990e9970bc2cb10aa0221cf9c" roottree = self.rorepo.tree(hexsha) @@ -92,9 +103,6 @@ def names_in_mod_cache(): here = file_names_in_order() return [e for e in a if e in here] - git_file_names_in_order = setup_git_repository_and_get_ordered_files() - os.chdir("..") - mod.set_done() assert names_in_mod_cache() == git_file_names_in_order, "set_done() performs git-sorting"
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: