def test_nonrecursive(self): m1 = self.mfp.build(["bar", "foo", " bar", " foo"]) m2 = self.mfp.build(["foo", " foo", "xyzzy"]) m3 = self.mfp.build(["foo", " bar", " baz", " foo", " foo"]) self.assertEqual(list(Manifest.merge(m1, m2, m3)), [ ("bar", None, None), ("foo", "foo", "foo"), ("foo/bar", None, "foo/bar"), (None, None, "foo/bar/baz"), ("foo/foo", "foo/foo", "foo/foo"), (None, None, "foo/foo/foo"), (None, "xyzzy", None)]) # now without recursion self.assertEqual(list(Manifest.merge(m1, m2, m3, recursive = False)), [ ("bar", None, None), ("foo", "foo", "foo"), (None, "xyzzy", None)]) # and finally with selective recursion (only recurse into "foo"s) actual = [] gen = Manifest.merge(m1, m2, m3, recursive = False) try: t = next(gen) while True: actual.append(t) paths = [p for p in t if p is not None] self.assertTrue(paths) path = paths[0] self.assertEqual([path] * len(paths), paths) try: last_component = path.rsplit("/", 1)[1] except: last_component = path if last_component == "foo": t = gen.send(True) else: t = next(gen) except StopIteration: pass self.assertEqual(actual, [ ("bar", None, None), ("foo", "foo", "foo"), ("foo/bar", None, "foo/bar"), ("foo/foo", "foo/foo", "foo/foo"), (None, None, "foo/foo/foo"), (None, "xyzzy", None)])
def test_custom_key(self): m1 = self.mfp.build(["1foo", "2bar", "3baz"]) m2 = self.mfp.build(["abc", "def", "ghi"]) m3 = self.mfp.build(["123", "456", "789"]) self.assertEqual( list(Manifest.merge(m1, m2, m3, key = lambda px: True)), [ ("1foo", "abc", "123"), ("2bar", "def", "456"), ("3baz", "ghi", "789")])
def test_empty_subdir_vs_nonepty_subdir(self): m1 = Manifest_from_walking_unpacked_tar("file_and_empty_subdir.tar") m2 = Manifest_from_walking_unpacked_tar("file_and_subdir.tar") self.assertEqual(list(Manifest.merge(m1, m2)), [ ("file", "file"), ("subdir", "subdir"), (None, "subdir/foo")])
def test_three_mixed_singles(self): m1, m2, m3 = map(self.mfp.build, (["foo"], ["bar"], ["foo"])) self.assertEqual(list(Manifest.merge(m1, m2, m3)), [ (None, "bar", None), ("foo", None, "foo")])
def test_three_with_overlap(self): ms = map(self.mfp.build, (["foo", "same"], ["bar", "same"], ["baz", "same"])) self.assertEqual(list(Manifest.merge(*ms)), [ (None, "bar", None), (None, None, "baz"), ("foo", None, None), ("same", "same", "same")])
def test_single_file_x2(self): m1 = Manifest_from_walking_unpacked_tar("single_file.tar") m2 = self.mfp.build(["foo"]) self.assertEqual(list(Manifest.merge(m1, m2)), [("foo", "foo")])
def test_one_single_file(self): m = Manifest_from_walking_unpacked_tar("single_file.tar") self.assertEqual(list(Manifest.merge(m)), [("foo",)])
def test_two_empties(self): m1, m2 = Manifest(), Manifest_from_walking_unpacked_tar("empty.tar") self.assertEqual(list(Manifest.merge(m1, m2)), [])
def test_one_empty(self): m = Manifest() self.assertEqual(list(Manifest.merge(m)), [])
def test_nothing(self): self.assertEqual(list(Manifest.merge()), [])