annotate tests/test-manifest.py @ 31876:94c1d3c1aea2

treemanifest: add walksubtrees api Adds a new function to treemanifest that allows walking over the directories in the tree. Currently it only accepts a matcher to prune the walk, but in the future it will also accept a list of trees and will only walk over subtrees that differ from the versions in the list. This will be useful for identifying what parts of the tree are new to this revision, which is useful when deciding the minimal set of trees to send to a client given that they have a certain tree already. Since this is intended for an extension to use, the only current consumer is a test. In the future this function may be useful for implementing other algorithms like diff and changegroup generation.
author Durham Goode <durham@fb.com>
date Mon, 10 Apr 2017 13:07:47 -0700
parents 959ebff3505a
children 68c43a416585
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28929
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
1 from __future__ import absolute_import
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
2
28929
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
3 import binascii
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
4 import itertools
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
5 import silenttestrunner
28929
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
6 import unittest
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
7
28929
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
8 from mercurial import (
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
9 manifest as manifestmod,
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
10 match as matchmod,
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
11 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
12
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
13 EMTPY_MANIFEST = ''
24572
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
14 EMTPY_MANIFEST_V2 = '\0\n'
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
15
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
16 HASH_1 = '1' * 40
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
17 BIN_HASH_1 = binascii.unhexlify(HASH_1)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
18 HASH_2 = 'f' * 40
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
19 BIN_HASH_2 = binascii.unhexlify(HASH_2)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
20 HASH_3 = '1234567890abcdef0987654321deadbeef0fcafe'
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
21 BIN_HASH_3 = binascii.unhexlify(HASH_3)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
22 A_SHORT_MANIFEST = (
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
23 'bar/baz/qux.py\0%(hash2)s%(flag2)s\n'
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
24 'foo\0%(hash1)s%(flag1)s\n'
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
25 ) % {'hash1': HASH_1,
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
26 'flag1': '',
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
27 'hash2': HASH_2,
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
28 'flag2': 'l',
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
29 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
30
24572
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
31 # Same data as A_SHORT_MANIFEST
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
32 A_SHORT_MANIFEST_V2 = (
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
33 '\0\n'
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
34 '\x00bar/baz/qux.py\0%(flag2)s\n%(hash2)s\n'
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
35 '\x00foo\0%(flag1)s\n%(hash1)s\n'
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
36 ) % {'hash1': BIN_HASH_1,
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
37 'flag1': '',
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
38 'hash2': BIN_HASH_2,
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
39 'flag2': 'l',
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
40 }
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
41
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
42 # Same data as A_SHORT_MANIFEST
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
43 A_METADATA_MANIFEST = (
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
44 '\0foo\0bar\n'
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
45 '\x00bar/baz/qux.py\0%(flag2)s\0foo\0bar\n%(hash2)s\n' # flag and metadata
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
46 '\x00foo\0%(flag1)s\0foo\n%(hash1)s\n' # no flag, but metadata
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
47 ) % {'hash1': BIN_HASH_1,
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
48 'flag1': '',
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
49 'hash2': BIN_HASH_2,
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
50 'flag2': 'l',
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
51 }
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
52
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
53 A_STEM_COMPRESSED_MANIFEST = (
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
54 '\0\n'
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
55 '\x00bar/baz/qux.py\0%(flag2)s\n%(hash2)s\n'
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
56 '\x04qux/foo.py\0%(flag1)s\n%(hash1)s\n' # simple case of 4 stem chars
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
57 '\x0az.py\0%(flag1)s\n%(hash1)s\n' # tricky newline = 10 stem characters
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
58 '\x00%(verylongdir)sx/x\0\n%(hash1)s\n'
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
59 '\xffx/y\0\n%(hash2)s\n' # more than 255 stem chars
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
60 ) % {'hash1': BIN_HASH_1,
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
61 'flag1': '',
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
62 'hash2': BIN_HASH_2,
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
63 'flag2': 'l',
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
64 'verylongdir': 255 * 'x',
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
65 }
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
66
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
67 A_DEEPER_MANIFEST = (
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
68 'a/b/c/bar.py\0%(hash3)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
69 'a/b/c/bar.txt\0%(hash1)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
70 'a/b/c/foo.py\0%(hash3)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
71 'a/b/c/foo.txt\0%(hash2)s%(flag2)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
72 'a/b/d/baz.py\0%(hash3)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
73 'a/b/d/qux.py\0%(hash1)s%(flag2)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
74 'a/b/d/ten.txt\0%(hash3)s%(flag2)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
75 'a/b/dog.py\0%(hash3)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
76 'a/b/fish.py\0%(hash2)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
77 'a/c/london.py\0%(hash3)s%(flag2)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
78 'a/c/paper.txt\0%(hash2)s%(flag2)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
79 'a/c/paris.py\0%(hash2)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
80 'a/d/apple.py\0%(hash3)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
81 'a/d/pizza.py\0%(hash3)s%(flag2)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
82 'a/green.py\0%(hash1)s%(flag2)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
83 'a/purple.py\0%(hash2)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
84 'app.py\0%(hash3)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
85 'readme.txt\0%(hash2)s%(flag1)s\n'
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
86 ) % {'hash1': HASH_1,
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
87 'flag1': '',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
88 'hash2': HASH_2,
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
89 'flag2': 'l',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
90 'hash3': HASH_3,
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
91 }
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
92
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
93 HUGE_MANIFEST_ENTRIES = 200001
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
94
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
95 A_HUGE_MANIFEST = ''.join(sorted(
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
96 'file%d\0%s%s\n' % (i, h, f) for i, h, f in
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
97 itertools.izip(xrange(200001),
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
98 itertools.cycle((HASH_1, HASH_2)),
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
99 itertools.cycle(('', 'x', 'l')))))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
100
24655
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
101 class basemanifesttests(object):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
102 def parsemanifest(self, text):
24655
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
103 raise NotImplementedError('parsemanifest not implemented by test case')
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
104
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
105 def assertIn(self, thing, container, msg=None):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
106 # assertIn new in 2.7, use it if available, otherwise polyfill
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
107 sup = getattr(unittest.TestCase, 'assertIn', False)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
108 if sup:
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
109 return sup(self, thing, container, msg=msg)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
110 if not msg:
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
111 msg = 'Expected %r in %r' % (thing, container)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
112 self.assert_(thing in container, msg)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
113
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
114 def testEmptyManifest(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
115 m = self.parsemanifest(EMTPY_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
116 self.assertEqual(0, len(m))
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
117 self.assertEqual([], list(m))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
118
24572
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
119 def testEmptyManifestv2(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
120 m = self.parsemanifest(EMTPY_MANIFEST_V2)
24572
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
121 self.assertEqual(0, len(m))
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
122 self.assertEqual([], list(m))
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
123
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
124 def testManifest(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
125 m = self.parsemanifest(A_SHORT_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
126 self.assertEqual(['bar/baz/qux.py', 'foo'], list(m))
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
127 self.assertEqual(BIN_HASH_2, m['bar/baz/qux.py'])
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
128 self.assertEqual('l', m.flags('bar/baz/qux.py'))
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
129 self.assertEqual(BIN_HASH_1, m['foo'])
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
130 self.assertEqual('', m.flags('foo'))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
131 self.assertRaises(KeyError, lambda : m['wat'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
132
24572
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
133 def testParseManifestV2(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
134 m1 = self.parsemanifest(A_SHORT_MANIFEST)
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
135 m2 = self.parsemanifest(A_SHORT_MANIFEST_V2)
24572
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
136 # Should have same content as A_SHORT_MANIFEST
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
137 self.assertEqual(m1.text(), m2.text())
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
138
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
139 def testParseManifestMetadata(self):
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
140 # Metadata is for future-proofing and should be accepted but ignored
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
141 m = self.parsemanifest(A_METADATA_MANIFEST)
24572
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
142 self.assertEqual(A_SHORT_MANIFEST, m.text())
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
143
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
144 def testParseManifestStemCompression(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
145 m = self.parsemanifest(A_STEM_COMPRESSED_MANIFEST)
24572
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
146 self.assertIn('bar/baz/qux.py', m)
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
147 self.assertIn('bar/qux/foo.py', m)
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
148 self.assertIn('bar/qux/foz.py', m)
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
149 self.assertIn(256 * 'x' + '/x', m)
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
150 self.assertIn(256 * 'x' + '/y', m)
24573
701d3554de0e manifestv2: add support for writing new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24572
diff changeset
151 self.assertEqual(A_STEM_COMPRESSED_MANIFEST, m.text(usemanifestv2=True))
701d3554de0e manifestv2: add support for writing new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24572
diff changeset
152
701d3554de0e manifestv2: add support for writing new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24572
diff changeset
153 def testTextV2(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
154 m1 = self.parsemanifest(A_SHORT_MANIFEST)
24573
701d3554de0e manifestv2: add support for writing new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24572
diff changeset
155 v2text = m1.text(usemanifestv2=True)
701d3554de0e manifestv2: add support for writing new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24572
diff changeset
156 self.assertEqual(A_SHORT_MANIFEST_V2, v2text)
24572
b83679eb5f86 manifestv2: add support for reading new manifest format
Martin von Zweigbergk <martinvonz@google.com>
parents: 24570
diff changeset
157
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
158 def testSetItem(self):
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
159 want = BIN_HASH_1
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
160
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
161 m = self.parsemanifest(EMTPY_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
162 m['a'] = want
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
163 self.assertIn('a', m)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
164 self.assertEqual(want, m['a'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
165 self.assertEqual('a\0' + HASH_1 + '\n', m.text())
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
166
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
167 m = self.parsemanifest(A_SHORT_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
168 m['a'] = want
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
169 self.assertEqual(want, m['a'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
170 self.assertEqual('a\0' + HASH_1 + '\n' + A_SHORT_MANIFEST,
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
171 m.text())
24465
bb8e2b1a0803 test-manifest.py: separate out test for double-free after copy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24298
diff changeset
172
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
173 def testSetFlag(self):
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
174 want = 'x'
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
175
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
176 m = self.parsemanifest(EMTPY_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
177 # first add a file; a file-less flag makes no sense
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
178 m['a'] = BIN_HASH_1
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
179 m.setflag('a', want)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
180 self.assertEqual(want, m.flags('a'))
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
181 self.assertEqual('a\0' + HASH_1 + want + '\n', m.text())
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
182
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
183 m = self.parsemanifest(A_SHORT_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
184 # first add a file; a file-less flag makes no sense
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
185 m['a'] = BIN_HASH_1
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
186 m.setflag('a', want)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
187 self.assertEqual(want, m.flags('a'))
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
188 self.assertEqual('a\0' + HASH_1 + want + '\n' + A_SHORT_MANIFEST,
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
189 m.text())
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
190
24465
bb8e2b1a0803 test-manifest.py: separate out test for double-free after copy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24298
diff changeset
191 def testCopy(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
192 m = self.parsemanifest(A_SHORT_MANIFEST)
27637
b502138f5faa cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents: 25660
diff changeset
193 m['a'] = BIN_HASH_1
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
194 m2 = m.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
195 del m
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
196 del m2 # make sure we don't double free() anything
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
197
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
198 def testCompaction(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
199 unhex = binascii.unhexlify
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
200 h1, h2 = unhex(HASH_1), unhex(HASH_2)
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
201 m = self.parsemanifest(A_SHORT_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
202 m['alpha'] = h1
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
203 m['beta'] = h2
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
204 del m['foo']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
205 want = 'alpha\0%s\nbar/baz/qux.py\0%sl\nbeta\0%s\n' % (
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
206 HASH_1, HASH_2, HASH_2)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
207 self.assertEqual(want, m.text())
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
208 self.assertEqual(3, len(m))
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
209 self.assertEqual(['alpha', 'bar/baz/qux.py', 'beta'], list(m))
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
210 self.assertEqual(h1, m['alpha'])
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
211 self.assertEqual(h2, m['bar/baz/qux.py'])
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
212 self.assertEqual(h2, m['beta'])
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
213 self.assertEqual('', m.flags('alpha'))
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
214 self.assertEqual('l', m.flags('bar/baz/qux.py'))
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
215 self.assertEqual('', m.flags('beta'))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
216 self.assertRaises(KeyError, lambda : m['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
217
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
218 def testSetGetNodeSuffix(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
219 clean = self.parsemanifest(A_SHORT_MANIFEST)
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
220 m = self.parsemanifest(A_SHORT_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
221 h = m['foo']
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
222 f = m.flags('foo')
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
223 want = h + 'a'
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
224 # Merge code wants to set 21-byte fake hashes at times
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
225 m['foo'] = want
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
226 self.assertEqual(want, m['foo'])
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
227 self.assertEqual([('bar/baz/qux.py', BIN_HASH_2),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
228 ('foo', BIN_HASH_1 + 'a')],
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
229 list(m.iteritems()))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
230 # Sometimes it even tries a 22-byte fake hash, but we can
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
231 # return 21 and it'll work out
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
232 m['foo'] = want + '+'
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
233 self.assertEqual(want, m['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
234 # make sure the suffix survives a copy
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
235 match = matchmod.match('', '', ['re:foo'])
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
236 m2 = m.matches(match)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
237 self.assertEqual(want, m2['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
238 self.assertEqual(1, len(m2))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
239 m2 = m.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
240 self.assertEqual(want, m2['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
241 # suffix with iteration
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
242 self.assertEqual([('bar/baz/qux.py', BIN_HASH_2),
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
243 ('foo', want)],
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
244 list(m.iteritems()))
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
245
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
246 # shows up in diff
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
247 self.assertEqual({'foo': ((want, f), (h, ''))}, m.diff(clean))
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
248 self.assertEqual({'foo': ((h, ''), (want, f))}, clean.diff(m))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
249
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
250 def testMatchException(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
251 m = self.parsemanifest(A_SHORT_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
252 match = matchmod.match('', '', ['re:.*'])
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
253 def filt(path):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
254 if path == 'foo':
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
255 assert False
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
256 return True
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
257 match.matchfn = filt
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
258 self.assertRaises(AssertionError, m.matches, match)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
259
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
260 def testRemoveItem(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
261 m = self.parsemanifest(A_SHORT_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
262 del m['foo']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
263 self.assertRaises(KeyError, lambda : m['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
264 self.assertEqual(1, len(m))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
265 self.assertEqual(1, len(list(m)))
24228
542c891274b2 lazymanifest: use a binary search to do an insertion
Augie Fackler <augie@google.com>
parents: 24225
diff changeset
266 # now restore and make sure everything works right
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
267 m['foo'] = 'a' * 20
24228
542c891274b2 lazymanifest: use a binary search to do an insertion
Augie Fackler <augie@google.com>
parents: 24225
diff changeset
268 self.assertEqual(2, len(m))
542c891274b2 lazymanifest: use a binary search to do an insertion
Augie Fackler <augie@google.com>
parents: 24225
diff changeset
269 self.assertEqual(2, len(list(m)))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
270
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
271 def testManifestDiff(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
272 MISSING = (None, '')
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
273 addl = 'z-only-in-left\0' + HASH_1 + '\n'
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
274 addr = 'z-only-in-right\0' + HASH_2 + 'x\n'
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
275 left = self.parsemanifest(
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
276 A_SHORT_MANIFEST.replace(HASH_1, HASH_3 + 'x') + addl)
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
277 right = self.parsemanifest(A_SHORT_MANIFEST + addr)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
278 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
279 'foo': ((BIN_HASH_3, 'x'),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
280 (BIN_HASH_1, '')),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
281 'z-only-in-left': ((BIN_HASH_1, ''), MISSING),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
282 'z-only-in-right': (MISSING, (BIN_HASH_2, 'x')),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
283 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
284 self.assertEqual(want, left.diff(right))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
285
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
286 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
287 'bar/baz/qux.py': (MISSING, (BIN_HASH_2, 'l')),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
288 'foo': (MISSING, (BIN_HASH_3, 'x')),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
289 'z-only-in-left': (MISSING, (BIN_HASH_1, '')),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
290 }
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
291 self.assertEqual(want, self.parsemanifest(EMTPY_MANIFEST).diff(left))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
292
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
293 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
294 'bar/baz/qux.py': ((BIN_HASH_2, 'l'), MISSING),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
295 'foo': ((BIN_HASH_3, 'x'), MISSING),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
296 'z-only-in-left': ((BIN_HASH_1, ''), MISSING),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
297 }
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
298 self.assertEqual(want, left.diff(self.parsemanifest(EMTPY_MANIFEST)))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
299 copy = right.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
300 del copy['z-only-in-right']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
301 del right['foo']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
302 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
303 'foo': (MISSING, (BIN_HASH_1, '')),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
304 'z-only-in-right': ((BIN_HASH_2, 'x'), MISSING),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
305 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
306 self.assertEqual(want, right.diff(copy))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
307
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
308 short = self.parsemanifest(A_SHORT_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
309 pruned = short.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
310 del pruned['foo']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
311 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
312 'foo': ((BIN_HASH_1, ''), MISSING),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
313 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
314 self.assertEqual(want, short.diff(pruned))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
315 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
316 'foo': (MISSING, (BIN_HASH_1, '')),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
317 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
318 self.assertEqual(want, pruned.diff(short))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
319 want = {
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
320 'bar/baz/qux.py': None,
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
321 'foo': (MISSING, (BIN_HASH_1, '')),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
322 }
31255
959ebff3505a manifest: add match argument to diff and filesnotin
Durham Goode <durham@fb.com>
parents: 28929
diff changeset
323 self.assertEqual(want, pruned.diff(short, clean=True))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
324
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
325 def testReversedLines(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
326 backwards = ''.join(
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
327 l + '\n' for l in reversed(A_SHORT_MANIFEST.split('\n')) if l)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
328 try:
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
329 self.parsemanifest(backwards)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
330 self.fail('Should have raised ValueError')
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24656
diff changeset
331 except ValueError as v:
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
332 self.assertIn('Manifest lines not in sorted order.', str(v))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
333
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
334 def testNoTerminalNewline(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
335 try:
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
336 self.parsemanifest(A_SHORT_MANIFEST + 'wat')
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
337 self.fail('Should have raised ValueError')
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24656
diff changeset
338 except ValueError as v:
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
339 self.assertIn('Manifest did not end in a newline.', str(v))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
340
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
341 def testNoNewLineAtAll(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
342 try:
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
343 self.parsemanifest('wat')
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
344 self.fail('Should have raised ValueError')
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 24656
diff changeset
345 except ValueError as v:
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
346 self.assertIn('Manifest did not end in a newline.', str(v))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
347
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
348 def testHugeManifest(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
349 m = self.parsemanifest(A_HUGE_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
350 self.assertEqual(HUGE_MANIFEST_ENTRIES, len(m))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
351 self.assertEqual(len(m), len(list(m)))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
352
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
353 def testMatchesMetadata(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
354 '''Tests matches() for a few specific files to make sure that both
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
355 the set of files as well as their flags and nodeids are correct in
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
356 the resulting manifest.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
357 m = self.parsemanifest(A_HUGE_MANIFEST)
24495
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
358
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
359 match = matchmod.match('/', '',
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
360 ['file1', 'file200', 'file300'], exact=True)
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
361 m2 = m.matches(match)
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
362
24225
3e5c4af69808 manifest: split manifestdict into high-level and low-level logic
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
363 w = ('file1\0%sx\n'
3e5c4af69808 manifest: split manifestdict into high-level and low-level logic
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
364 'file200\0%sl\n'
3e5c4af69808 manifest: split manifestdict into high-level and low-level logic
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
365 'file300\0%s\n') % (HASH_2, HASH_1, HASH_1)
3e5c4af69808 manifest: split manifestdict into high-level and low-level logic
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
366 self.assertEqual(w, m2.text())
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
367
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
368 def testMatchesNonexistentFile(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
369 '''Tests matches() for a small set of specific files, including one
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
370 nonexistent file to make sure in only matches against existing files.
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
371 '''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
372 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
373
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
374 match = matchmod.match('/', '',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
375 ['a/b/c/bar.txt', 'a/b/d/qux.py', 'readme.txt', 'nonexistent'],
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
376 exact=True)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
377 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
378
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
379 self.assertEqual(
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
380 ['a/b/c/bar.txt', 'a/b/d/qux.py', 'readme.txt'],
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
381 m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
382
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
383 def testMatchesNonexistentDirectory(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
384 '''Tests matches() for a relpath match on a directory that doesn't
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
385 actually exist.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
386 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
387
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
388 match = matchmod.match('/', '', ['a/f'], default='relpath')
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
389 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
390
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
391 self.assertEqual([], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
392
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
393 def testMatchesExactLarge(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
394 '''Tests matches() for files matching a large list of exact files.
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
395 '''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
396 m = self.parsemanifest(A_HUGE_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
397
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
398 flist = m.keys()[80:300]
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
399 match = matchmod.match('/', '', flist, exact=True)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
400 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
401
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
402 self.assertEqual(flist, m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
403
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
404 def testMatchesFull(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
405 '''Tests matches() for what should be a full match.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
406 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
407
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
408 match = matchmod.match('/', '', [''])
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
409 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
410
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
411 self.assertEqual(m.keys(), m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
412
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
413 def testMatchesDirectory(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
414 '''Tests matches() on a relpath match on a directory, which should
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
415 match against all files within said directory.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
416 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
417
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
418 match = matchmod.match('/', '', ['a/b'], default='relpath')
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
419 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
420
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
421 self.assertEqual([
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
422 'a/b/c/bar.py', 'a/b/c/bar.txt', 'a/b/c/foo.py', 'a/b/c/foo.txt',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
423 'a/b/d/baz.py', 'a/b/d/qux.py', 'a/b/d/ten.txt', 'a/b/dog.py',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
424 'a/b/fish.py'], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
425
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
426 def testMatchesExactPath(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
427 '''Tests matches() on an exact match on a directory, which should
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
428 result in an empty manifest because you can't perform an exact match
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
429 against a directory.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
430 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
431
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
432 match = matchmod.match('/', '', ['a/b'], exact=True)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
433 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
434
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
435 self.assertEqual([], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
436
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
437 def testMatchesCwd(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
438 '''Tests matches() on a relpath match with the current directory ('.')
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
439 when not in the root directory.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
440 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
441
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
442 match = matchmod.match('/', 'a/b', ['.'], default='relpath')
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
443 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
444
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
445 self.assertEqual([
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
446 'a/b/c/bar.py', 'a/b/c/bar.txt', 'a/b/c/foo.py', 'a/b/c/foo.txt',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
447 'a/b/d/baz.py', 'a/b/d/qux.py', 'a/b/d/ten.txt', 'a/b/dog.py',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
448 'a/b/fish.py'], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
449
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
450 def testMatchesWithPattern(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
451 '''Tests matches() for files matching a pattern that reside
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
452 deeper than the specified directory.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
453 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
454
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
455 match = matchmod.match('/', '', ['a/b/*/*.txt'])
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
456 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
457
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
458 self.assertEqual(
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
459 ['a/b/c/bar.txt', 'a/b/c/foo.txt', 'a/b/d/ten.txt'],
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
460 m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
461
24655
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
462 class testmanifestdict(unittest.TestCase, basemanifesttests):
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
463 def parsemanifest(self, text):
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
464 return manifestmod.manifestdict(text)
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
465
24656
29c238e4a58a test-manifest: add some test coverage for treemanifest
Drew Gottlieb <drgott@google.com>
parents: 24655
diff changeset
466 class testtreemanifest(unittest.TestCase, basemanifesttests):
29c238e4a58a test-manifest: add some test coverage for treemanifest
Drew Gottlieb <drgott@google.com>
parents: 24655
diff changeset
467 def parsemanifest(self, text):
29c238e4a58a test-manifest: add some test coverage for treemanifest
Drew Gottlieb <drgott@google.com>
parents: 24655
diff changeset
468 return manifestmod.treemanifest('', text)
29c238e4a58a test-manifest: add some test coverage for treemanifest
Drew Gottlieb <drgott@google.com>
parents: 24655
diff changeset
469
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
470 def testWalkSubtrees(self):
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
471 m = self.parsemanifest(A_DEEPER_MANIFEST)
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
472
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
473 dirs = [s._dir for s in m.walksubtrees()]
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
474 self.assertEqual(
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
475 sorted(['', 'a/', 'a/c/', 'a/d/', 'a/b/', 'a/b/c/', 'a/b/d/']),
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
476 sorted(dirs)
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
477 )
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
478
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
479 match = matchmod.match('/', '', ['path:a/b/'])
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
480 dirs = [s._dir for s in m.walksubtrees(matcher=match)]
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
481 self.assertEqual(
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
482 sorted(['a/b/', 'a/b/c/', 'a/b/d/']),
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
483 sorted(dirs)
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
484 )
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
485
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
486 if __name__ == '__main__':
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
487 silenttestrunner.main(__name__)