annotate tests/test-manifest.py @ 24570:487245cbf1ab

test-manifest: extract constants for binary hashes The binary hashes are used quite frequently, so let's extract constants for them so we don't have to repeat binascii.unhexlify() so often.
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 31 Mar 2015 15:06:55 -0700
parents 5491248e148a
children b83679eb5f86
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
1 import binascii
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
2 import unittest
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
3 import itertools
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
4
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
5 import silenttestrunner
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
6
24225
3e5c4af69808 manifest: split manifestdict into high-level and low-level logic
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
7 from mercurial import manifest as manifestmod
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
8 from mercurial import match as matchmod
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
9
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
10 EMTPY_MANIFEST = ''
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
11
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
12 HASH_1 = '1' * 40
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
13 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
14 HASH_2 = 'f' * 40
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
15 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
16 HASH_3 = '1234567890abcdef0987654321deadbeef0fcafe'
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
17 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
18 A_SHORT_MANIFEST = (
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
19 '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
20 '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
21 ) % {'hash1': HASH_1,
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
22 'flag1': '',
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
23 'hash2': HASH_2,
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
24 'flag2': 'l',
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
25 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
26
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
27 A_DEEPER_MANIFEST = (
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
28 '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
29 '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
30 '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
31 '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
32 '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
33 '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
34 '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
35 '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
36 '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
37 '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
38 '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
39 '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
40 '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
41 '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
42 '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
43 '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
44 '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
45 '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
46 ) % {'hash1': HASH_1,
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
47 'flag1': '',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
48 'hash2': HASH_2,
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
49 'flag2': 'l',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
50 'hash3': HASH_3,
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
51 }
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
52
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
53 HUGE_MANIFEST_ENTRIES = 200001
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
54
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
55 A_HUGE_MANIFEST = ''.join(sorted(
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
56 '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
57 itertools.izip(xrange(200001),
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
58 itertools.cycle((HASH_1, HASH_2)),
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
59 itertools.cycle(('', 'x', 'l')))))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
60
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
61 def parsemanifest(text):
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
62 return manifestmod.manifestdict(text)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
63
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
64 class testmanifest(unittest.TestCase):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
65
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
66 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
67 # 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
68 sup = getattr(unittest.TestCase, 'assertIn', False)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
69 if sup:
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
70 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
71 if not msg:
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
72 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
73 self.assert_(thing in container, msg)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
74
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
75 def testEmptyManifest(self):
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
76 m = parsemanifest(EMTPY_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
77 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
78 self.assertEqual([], list(m))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
79
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
80 def testManifest(self):
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
81 m = parsemanifest(A_SHORT_MANIFEST)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
82 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
83 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
84 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
85 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
86 self.assertEqual('', m.flags('foo'))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
87 self.assertRaises(KeyError, lambda : m['wat'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
88
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
89 def testSetItem(self):
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
90 want = BIN_HASH_1
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
91
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
92 m = parsemanifest(EMTPY_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
93 m['a'] = want
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
94 self.assertIn('a', m)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
95 self.assertEqual(want, m['a'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
96 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
97
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
98 m = parsemanifest(A_SHORT_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
99 m['a'] = want
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
100 self.assertEqual(want, m['a'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
101 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
102 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
103
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
104 def testSetFlag(self):
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
105 want = 'x'
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
106
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
107 m = parsemanifest(EMTPY_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
108 # 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
109 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
110 m.setflag('a', want)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
111 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
112 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
113
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
114 m = parsemanifest(A_SHORT_MANIFEST)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
115 # 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
116 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
117 m.setflag('a', want)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
118 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
119 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
120 m.text())
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
121
24465
bb8e2b1a0803 test-manifest.py: separate out test for double-free after copy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24298
diff changeset
122 def testCopy(self):
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
123 m = parsemanifest(A_SHORT_MANIFEST)
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
124 m['a'] = BIN_HASH_1
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
125 m2 = m.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
126 del m
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
127 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
128
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
129 def testCompaction(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
130 unhex = binascii.unhexlify
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
131 h1, h2 = unhex(HASH_1), unhex(HASH_2)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
132 m = parsemanifest(A_SHORT_MANIFEST)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
133 m['alpha'] = h1
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
134 m['beta'] = h2
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
135 del m['foo']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
136 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
137 HASH_1, HASH_2, HASH_2)
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
138 self.assertEqual(want, m.text())
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
139 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
140 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
141 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
142 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
143 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
144 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
145 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
146 self.assertEqual('', m.flags('beta'))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
147 self.assertRaises(KeyError, lambda : m['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
148
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
149 def testSetGetNodeSuffix(self):
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
150 clean = parsemanifest(A_SHORT_MANIFEST)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
151 m = parsemanifest(A_SHORT_MANIFEST)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
152 h = m['foo']
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
153 f = m.flags('foo')
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
154 want = h + 'a'
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
155 # 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
156 m['foo'] = want
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
157 self.assertEqual(want, m['foo'])
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
158 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
159 ('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
160 list(m.iteritems()))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
161 # 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
162 # 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
163 m['foo'] = want + '+'
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
164 self.assertEqual(want, m['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
165 # 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
166 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
167 m2 = m.matches(match)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
168 self.assertEqual(want, m2['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
169 self.assertEqual(1, len(m2))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
170 m2 = m.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
171 self.assertEqual(want, m2['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
172 # suffix with iteration
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
173 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
174 ('foo', want)],
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
175 list(m.iteritems()))
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
176
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
177 # 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
178 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
179 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
180
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
181 def testMatchException(self):
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
182 m = parsemanifest(A_SHORT_MANIFEST)
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
183 match = matchmod.match('', '', ['re:.*'])
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
184 def filt(path):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
185 if path == 'foo':
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
186 assert False
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
187 return True
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
188 match.matchfn = filt
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
189 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
190
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
191 def testRemoveItem(self):
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
192 m = parsemanifest(A_SHORT_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
193 del m['foo']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
194 self.assertRaises(KeyError, lambda : m['foo'])
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
195 self.assertEqual(1, len(m))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
196 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
197 # 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
198 m['foo'] = 'a' * 20
24228
542c891274b2 lazymanifest: use a binary search to do an insertion
Augie Fackler <augie@google.com>
parents: 24225
diff changeset
199 self.assertEqual(2, len(m))
542c891274b2 lazymanifest: use a binary search to do an insertion
Augie Fackler <augie@google.com>
parents: 24225
diff changeset
200 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
201
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
202 def testManifestDiff(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
203 MISSING = (None, '')
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
204 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
205 addr = 'z-only-in-right\0' + HASH_2 + 'x\n'
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
206 left = parsemanifest(
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
207 A_SHORT_MANIFEST.replace(HASH_1, HASH_3 + 'x') + addl)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
208 right = parsemanifest(A_SHORT_MANIFEST + addr)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
209 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
210 'foo': ((BIN_HASH_3, 'x'),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
211 (BIN_HASH_1, '')),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
212 '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
213 '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
214 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
215 self.assertEqual(want, left.diff(right))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
216
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
217 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
218 '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
219 'foo': (MISSING, (BIN_HASH_3, 'x')),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
220 '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
221 }
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
222 self.assertEqual(want, parsemanifest(EMTPY_MANIFEST).diff(left))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
223
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
224 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
225 '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
226 'foo': ((BIN_HASH_3, 'x'), MISSING),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
227 '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
228 }
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
229 self.assertEqual(want, left.diff(parsemanifest(EMTPY_MANIFEST)))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
230 copy = right.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
231 del copy['z-only-in-right']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
232 del right['foo']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
233 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
234 'foo': (MISSING, (BIN_HASH_1, '')),
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
235 '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
236 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
237 self.assertEqual(want, right.diff(copy))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
238
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
239 short = parsemanifest(A_SHORT_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
240 pruned = short.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
241 del pruned['foo']
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
242 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
243 'foo': ((BIN_HASH_1, ''), MISSING),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
244 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
245 self.assertEqual(want, short.diff(pruned))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
246 want = {
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
247 'foo': (MISSING, (BIN_HASH_1, '')),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
248 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
249 self.assertEqual(want, pruned.diff(short))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
250 want = {
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
251 'bar/baz/qux.py': None,
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
252 'foo': (MISSING, (BIN_HASH_1, '')),
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
253 }
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
254 self.assertEqual(want, pruned.diff(short, True))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
255
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
256 def testReversedLines(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
257 backwards = ''.join(
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
258 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
259 try:
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
260 parsemanifest(backwards)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
261 self.fail('Should have raised ValueError')
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
262 except ValueError, v:
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
263 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
264
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
265 def testNoTerminalNewline(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
266 try:
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
267 parsemanifest(A_SHORT_MANIFEST + 'wat')
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
268 self.fail('Should have raised ValueError')
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
269 except ValueError, v:
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
270 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
271
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
272 def testNoNewLineAtAll(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
273 try:
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
274 parsemanifest('wat')
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
275 self.fail('Should have raised ValueError')
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
276 except ValueError, v:
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
277 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
278
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
279 def testHugeManifest(self):
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
280 m = parsemanifest(A_HUGE_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
281 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
282 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
283
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
284 def testMatchesMetadata(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
285 '''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
286 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
287 the resulting manifest.'''
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
288 m = parsemanifest(A_HUGE_MANIFEST)
24495
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
289
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
290 match = matchmod.match('/', '',
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
291 ['file1', 'file200', 'file300'], exact=True)
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
292 m2 = m.matches(match)
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
293
24225
3e5c4af69808 manifest: split manifestdict into high-level and low-level logic
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
294 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
295 'file200\0%sl\n'
3e5c4af69808 manifest: split manifestdict into high-level and low-level logic
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
296 '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
297 self.assertEqual(w, m2.text())
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
298
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
299 def testMatchesNonexistentFile(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
300 '''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
301 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
302 '''
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
303 m = parsemanifest(A_DEEPER_MANIFEST)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
304
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
305 match = matchmod.match('/', '',
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
306 ['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
307 exact=True)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
308 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
309
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
310 self.assertEqual(
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
311 ['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
312 m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
313
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
314 def testMatchesNonexistentDirectory(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
315 '''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
316 actually exist.'''
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
317 m = parsemanifest(A_DEEPER_MANIFEST)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
318
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
319 match = matchmod.match('/', '', ['a/f'], default='relpath')
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
320 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
321
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
322 self.assertEqual([], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
323
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
324 def testMatchesExactLarge(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
325 '''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
326 '''
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
327 m = parsemanifest(A_HUGE_MANIFEST)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
328
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
329 flist = m.keys()[80:300]
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
330 match = matchmod.match('/', '', flist, exact=True)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
331 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
332
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
333 self.assertEqual(flist, m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
334
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
335 def testMatchesFull(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
336 '''Tests matches() for what should be a full match.'''
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
337 m = parsemanifest(A_DEEPER_MANIFEST)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
338
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
339 match = matchmod.match('/', '', [''])
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
340 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
341
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
342 self.assertEqual(m.keys(), m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
343
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
344 def testMatchesDirectory(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
345 '''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
346 match against all files within said directory.'''
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
347 m = parsemanifest(A_DEEPER_MANIFEST)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
348
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
349 match = matchmod.match('/', '', ['a/b'], default='relpath')
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
350 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
351
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
352 self.assertEqual([
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
353 '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
354 '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
355 'a/b/fish.py'], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
356
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
357 def testMatchesExactPath(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
358 '''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
359 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
360 against a directory.'''
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
361 m = parsemanifest(A_DEEPER_MANIFEST)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
362
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
363 match = matchmod.match('/', '', ['a/b'], exact=True)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
364 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
365
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
366 self.assertEqual([], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
367
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
368 def testMatchesCwd(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
369 '''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
370 when not in the root directory.'''
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
371 m = parsemanifest(A_DEEPER_MANIFEST)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
372
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
373 match = matchmod.match('/', 'a/b', ['.'], default='relpath')
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
374 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
375
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
376 self.assertEqual([
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
377 '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
378 '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
379 'a/b/fish.py'], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
380
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
381 def testMatchesWithPattern(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
382 '''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
383 deeper than the specified directory.'''
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
384 m = parsemanifest(A_DEEPER_MANIFEST)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
385
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
386 match = matchmod.match('/', '', ['a/b/*/*.txt'])
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
387 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
388
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
389 self.assertEqual(
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
390 ['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
391 m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
392
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
393 if __name__ == '__main__':
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
394 silenttestrunner.main(__name__)