annotate tests/test-manifest.py @ 47738:c53008253113

test: use the internal `_normallookup` in `test-rebuildstate.t` This is a low level test doing low level manipulation. Differential Revision: https://phab.mercurial-scm.org/D11180
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 19 Jul 2021 15:34:17 +0200
parents 12450fbea288
children 6000f5b25c9b
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
40599
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
7 import zlib
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
8
46780
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
9 from mercurial.node import sha1nodeconstants
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
10
28929
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
11 from mercurial import (
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
12 manifest as manifestmod,
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
13 match as matchmod,
43964
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
14 util,
28929
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
15 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
16
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
17 EMTPY_MANIFEST = b''
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
18
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
19 HASH_1 = b'1' * 40
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
20 BIN_HASH_1 = binascii.unhexlify(HASH_1)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
21 HASH_2 = b'f' * 40
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
22 BIN_HASH_2 = binascii.unhexlify(HASH_2)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
23 HASH_3 = b'1234567890abcdef0987654321deadbeef0fcafe'
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
24 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
25 A_SHORT_MANIFEST = (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
26 b'bar/baz/qux.py\0%(hash2)s%(flag2)s\n' b'foo\0%(hash1)s%(flag1)s\n'
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
27 ) % {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
28 b'hash1': HASH_1,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
29 b'flag1': b'',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
30 b'hash2': HASH_2,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
31 b'flag2': b'l',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
32 }
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
33
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
34 A_DEEPER_MANIFEST = (
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
35 b'a/b/c/bar.py\0%(hash3)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
36 b'a/b/c/bar.txt\0%(hash1)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
37 b'a/b/c/foo.py\0%(hash3)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
38 b'a/b/c/foo.txt\0%(hash2)s%(flag2)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
39 b'a/b/d/baz.py\0%(hash3)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
40 b'a/b/d/qux.py\0%(hash1)s%(flag2)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
41 b'a/b/d/ten.txt\0%(hash3)s%(flag2)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
42 b'a/b/dog.py\0%(hash3)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
43 b'a/b/fish.py\0%(hash2)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
44 b'a/c/london.py\0%(hash3)s%(flag2)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
45 b'a/c/paper.txt\0%(hash2)s%(flag2)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
46 b'a/c/paris.py\0%(hash2)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
47 b'a/d/apple.py\0%(hash3)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
48 b'a/d/pizza.py\0%(hash3)s%(flag2)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
49 b'a/green.py\0%(hash1)s%(flag2)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
50 b'a/purple.py\0%(hash2)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
51 b'app.py\0%(hash3)s%(flag1)s\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
52 b'readme.txt\0%(hash2)s%(flag1)s\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
53 ) % {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
54 b'hash1': HASH_1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
55 b'flag1': b'',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
56 b'hash2': HASH_2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
57 b'flag2': b'l',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
58 b'hash3': HASH_3,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
59 }
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
60
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
61 HUGE_MANIFEST_ENTRIES = 200001
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
62
32534
0048a852b6aa tests: make test-manifest finish importing in Python 3
Augie Fackler <raf@durin42.com>
parents: 32533
diff changeset
63 izip = getattr(itertools, 'izip', zip)
0048a852b6aa tests: make test-manifest finish importing in Python 3
Augie Fackler <raf@durin42.com>
parents: 32533
diff changeset
64 if 'xrange' not in globals():
0048a852b6aa tests: make test-manifest finish importing in Python 3
Augie Fackler <raf@durin42.com>
parents: 32533
diff changeset
65 xrange = range
0048a852b6aa tests: make test-manifest finish importing in Python 3
Augie Fackler <raf@durin42.com>
parents: 32533
diff changeset
66
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
67 A_HUGE_MANIFEST = b''.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
68 sorted(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
69 b'file%d\0%s%s\n' % (i, h, f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
70 for i, h, f in izip(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
71 xrange(200001),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
72 itertools.cycle((HASH_1, HASH_2)),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
73 itertools.cycle((b'', b'x', b'l')),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
74 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
75 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
76 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
77
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
78
24655
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
79 class basemanifesttests(object):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
80 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
81 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
82
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
83 def testEmptyManifest(self):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
84 m = self.parsemanifest(20, EMTPY_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
85 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
86 self.assertEqual([], list(m))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
87
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
88 def testManifest(self):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
89 m = self.parsemanifest(20, A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
90 self.assertEqual([b'bar/baz/qux.py', b'foo'], list(m))
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
91 self.assertEqual(BIN_HASH_2, m[b'bar/baz/qux.py'])
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
92 self.assertEqual(b'l', m.flags(b'bar/baz/qux.py'))
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
93 self.assertEqual(BIN_HASH_1, m[b'foo'])
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
94 self.assertEqual(b'', m.flags(b'foo'))
32279
68c43a416585 tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31876
diff changeset
95 with self.assertRaises(KeyError):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
96 m[b'wat']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
97
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
98 def testSetItem(self):
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
99 want = BIN_HASH_1
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
100
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
101 m = self.parsemanifest(20, EMTPY_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
102 m[b'a'] = want
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
103 self.assertIn(b'a', m)
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
104 self.assertEqual(want, m[b'a'])
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
105 self.assertEqual(b'a\0' + HASH_1 + b'\n', m.text())
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
106
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
107 m = self.parsemanifest(20, A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
108 m[b'a'] = want
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
109 self.assertEqual(want, m[b'a'])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
110 self.assertEqual(b'a\0' + HASH_1 + b'\n' + A_SHORT_MANIFEST, 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
111
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
112 def testSetFlag(self):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
113 want = b'x'
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
114
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
115 m = self.parsemanifest(20, EMTPY_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
116 # first add a file; a file-less flag makes no sense
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
117 m[b'a'] = BIN_HASH_1
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
118 m.setflag(b'a', want)
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
119 self.assertEqual(want, m.flags(b'a'))
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
120 self.assertEqual(b'a\0' + HASH_1 + want + b'\n', m.text())
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
121
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
122 m = self.parsemanifest(20, A_SHORT_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
123 # first add a file; a file-less flag makes no sense
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
124 m[b'a'] = BIN_HASH_1
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
125 m.setflag(b'a', want)
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
126 self.assertEqual(want, m.flags(b'a'))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
127 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
128 b'a\0' + HASH_1 + want + b'\n' + A_SHORT_MANIFEST, m.text()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
129 )
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
130
24465
bb8e2b1a0803 test-manifest.py: separate out test for double-free after copy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24298
diff changeset
131 def testCopy(self):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
132 m = self.parsemanifest(20, A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
133 m[b'a'] = BIN_HASH_1
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
134 m2 = m.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
135 del m
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
136 del m2 # make sure we don't double free() anything
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
137
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
138 def testCompaction(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
139 unhex = binascii.unhexlify
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
140 h1, h2 = unhex(HASH_1), unhex(HASH_2)
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
141 m = self.parsemanifest(20, A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
142 m[b'alpha'] = h1
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
143 m[b'beta'] = h2
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
144 del m[b'foo']
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
145 want = b'alpha\0%s\nbar/baz/qux.py\0%sl\nbeta\0%s\n' % (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
146 HASH_1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
147 HASH_2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
148 HASH_2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
149 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
150 self.assertEqual(want, m.text())
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
151 self.assertEqual(3, len(m))
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
152 self.assertEqual([b'alpha', b'bar/baz/qux.py', b'beta'], list(m))
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
153 self.assertEqual(h1, m[b'alpha'])
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
154 self.assertEqual(h2, m[b'bar/baz/qux.py'])
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
155 self.assertEqual(h2, m[b'beta'])
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
156 self.assertEqual(b'', m.flags(b'alpha'))
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
157 self.assertEqual(b'l', m.flags(b'bar/baz/qux.py'))
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
158 self.assertEqual(b'', m.flags(b'beta'))
32279
68c43a416585 tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31876
diff changeset
159 with self.assertRaises(KeyError):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
160 m[b'foo']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
161
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
162 def testMatchException(self):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
163 m = self.parsemanifest(20, A_SHORT_MANIFEST)
43964
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
164 match = matchmod.match(util.localpath(b'/repo'), b'', [b're:.*'])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
165
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
166 def filt(path):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
167 if path == b'foo':
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
168 assert False
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
169 return True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
170
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
171 match.matchfn = filt
32279
68c43a416585 tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31876
diff changeset
172 with self.assertRaises(AssertionError):
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
173 m._matches(match)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
174
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
175 def testRemoveItem(self):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
176 m = self.parsemanifest(20, A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
177 del m[b'foo']
32279
68c43a416585 tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31876
diff changeset
178 with self.assertRaises(KeyError):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
179 m[b'foo']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
180 self.assertEqual(1, len(m))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
181 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
182 # now restore and make sure everything works right
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
183 m[b'foo'] = b'a' * 20
24228
542c891274b2 lazymanifest: use a binary search to do an insertion
Augie Fackler <augie@google.com>
parents: 24225
diff changeset
184 self.assertEqual(2, len(m))
542c891274b2 lazymanifest: use a binary search to do an insertion
Augie Fackler <augie@google.com>
parents: 24225
diff changeset
185 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
186
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
187 def testManifestDiff(self):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
188 MISSING = (None, b'')
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
189 addl = b'z-only-in-left\0' + HASH_1 + b'\n'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
190 addr = b'z-only-in-right\0' + HASH_2 + b'x\n'
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
191 left = self.parsemanifest(
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
192 20, A_SHORT_MANIFEST.replace(HASH_1, HASH_3 + b'x') + addl
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
193 )
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
194 right = self.parsemanifest(20, A_SHORT_MANIFEST + addr)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
195 want = {
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
196 b'foo': ((BIN_HASH_3, b'x'), (BIN_HASH_1, b'')),
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
197 b'z-only-in-left': ((BIN_HASH_1, b''), MISSING),
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
198 b'z-only-in-right': (MISSING, (BIN_HASH_2, b'x')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
199 }
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
200 self.assertEqual(want, left.diff(right))
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 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
203 b'bar/baz/qux.py': (MISSING, (BIN_HASH_2, b'l')),
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
204 b'foo': (MISSING, (BIN_HASH_3, b'x')),
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
205 b'z-only-in-left': (MISSING, (BIN_HASH_1, b'')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
206 }
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
207 self.assertEqual(
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
208 want, self.parsemanifest(20, EMTPY_MANIFEST).diff(left)
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
209 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
210
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
211 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
212 b'bar/baz/qux.py': ((BIN_HASH_2, b'l'), MISSING),
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
213 b'foo': ((BIN_HASH_3, b'x'), MISSING),
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
214 b'z-only-in-left': ((BIN_HASH_1, b''), MISSING),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
215 }
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
216 self.assertEqual(
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
217 want, left.diff(self.parsemanifest(20, EMTPY_MANIFEST))
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
218 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
219 copy = right.copy()
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
220 del copy[b'z-only-in-right']
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
221 del right[b'foo']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
222 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
223 b'foo': (MISSING, (BIN_HASH_1, b'')),
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
224 b'z-only-in-right': ((BIN_HASH_2, b'x'), MISSING),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
225 }
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
226 self.assertEqual(want, right.diff(copy))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
227
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
228 short = self.parsemanifest(20, A_SHORT_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
229 pruned = short.copy()
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
230 del pruned[b'foo']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
231 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
232 b'foo': ((BIN_HASH_1, b''), MISSING),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
233 }
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
234 self.assertEqual(want, short.diff(pruned))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
235 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
236 b'foo': (MISSING, (BIN_HASH_1, b'')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
237 }
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
238 self.assertEqual(want, pruned.diff(short))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
239 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
240 b'bar/baz/qux.py': None,
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
241 b'foo': (MISSING, (BIN_HASH_1, b'')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
242 }
31255
959ebff3505a manifest: add match argument to diff and filesnotin
Durham Goode <durham@fb.com>
parents: 28929
diff changeset
243 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
244
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
245 def testReversedLines(self):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
246 backwards = b''.join(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
247 l + b'\n' for l in reversed(A_SHORT_MANIFEST.split(b'\n')) if l
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
248 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
249 try:
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
250 self.parsemanifest(20, backwards)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
251 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
252 except ValueError as v:
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
253 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
254
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
255 def testNoTerminalNewline(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
256 try:
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
257 self.parsemanifest(20, A_SHORT_MANIFEST + b'wat')
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
258 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
259 except ValueError as v:
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
260 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
261
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
262 def testNoNewLineAtAll(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
263 try:
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
264 self.parsemanifest(20, b'wat')
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
265 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
266 except ValueError as v:
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
267 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
268
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
269 def testHugeManifest(self):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
270 m = self.parsemanifest(20, A_HUGE_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
271 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
272 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
273
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
274 def testMatchesMetadata(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
275 """Tests matches() for a few specific files to make sure that both
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
276 the set of files as well as their flags and nodeids are correct in
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
277 the resulting manifest."""
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
278 m = self.parsemanifest(20, A_HUGE_MANIFEST)
24495
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
279
41676
0531dff73d0b match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41621
diff changeset
280 match = matchmod.exact([b'file1', b'file200', b'file300'])
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
281 m2 = m._matches(match)
24495
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
282
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
283 w = (b'file1\0%sx\n' b'file200\0%sl\n' b'file300\0%s\n') % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
284 HASH_2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
285 HASH_1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
286 HASH_1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
287 )
24225
3e5c4af69808 manifest: split manifestdict into high-level and low-level logic
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
288 self.assertEqual(w, m2.text())
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
289
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
290 def testMatchesNonexistentFile(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
291 """Tests matches() for a small set of specific files, including one
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
292 nonexistent file to make sure in only matches against existing files.
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
293 """
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
294 m = self.parsemanifest(20, A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
295
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
296 match = matchmod.exact(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
297 [b'a/b/c/bar.txt', b'a/b/d/qux.py', b'readme.txt', b'nonexistent']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
298 )
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
299 m2 = m._matches(match)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
300
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
301 self.assertEqual(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
302 [b'a/b/c/bar.txt', b'a/b/d/qux.py', b'readme.txt'], m2.keys()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
303 )
24549
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 def testMatchesNonexistentDirectory(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
306 """Tests matches() for a relpath match on a directory that doesn't
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
307 actually exist."""
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
308 m = self.parsemanifest(20, A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
309
43964
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
310 match = matchmod.match(
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
311 util.localpath(b'/repo'), b'', [b'a/f'], default=b'relpath'
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
312 )
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
313 m2 = m._matches(match)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
314
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
315 self.assertEqual([], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
316
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
317 def testMatchesExactLarge(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
318 """Tests matches() for files matching a large list of exact files."""
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
319 m = self.parsemanifest(20, A_HUGE_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
320
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
321 flist = m.keys()[80:300]
41676
0531dff73d0b match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41621
diff changeset
322 match = matchmod.exact(flist)
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
323 m2 = m._matches(match)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
324
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
325 self.assertEqual(flist, m2.keys())
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 def testMatchesFull(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
328 '''Tests matches() for what should be a full match.'''
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
329 m = self.parsemanifest(20, A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
330
43964
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
331 match = matchmod.match(util.localpath(b'/repo'), b'', [b''])
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
332 m2 = m._matches(match)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
333
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
334 self.assertEqual(m.keys(), m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
335
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
336 def testMatchesDirectory(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
337 """Tests matches() on a relpath match on a directory, which should
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
338 match against all files within said directory."""
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
339 m = self.parsemanifest(20, A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
340
43964
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
341 match = matchmod.match(
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
342 util.localpath(b'/repo'), b'', [b'a/b'], default=b'relpath'
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
343 )
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
344 m2 = m._matches(match)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
345
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
346 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
347 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
348 b'a/b/c/bar.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
349 b'a/b/c/bar.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
350 b'a/b/c/foo.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
351 b'a/b/c/foo.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
352 b'a/b/d/baz.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
353 b'a/b/d/qux.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
354 b'a/b/d/ten.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
355 b'a/b/dog.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
356 b'a/b/fish.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
357 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
358 m2.keys(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
359 )
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
360
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
361 def testMatchesExactPath(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
362 """Tests matches() on an exact match on a directory, which should
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
363 result in an empty manifest because you can't perform an exact match
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
364 against a directory."""
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
365 m = self.parsemanifest(20, A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
366
41676
0531dff73d0b match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41621
diff changeset
367 match = matchmod.exact([b'a/b'])
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
368 m2 = m._matches(match)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
369
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
370 self.assertEqual([], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
371
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
372 def testMatchesCwd(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
373 """Tests matches() on a relpath match with the current directory ('.')
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
374 when not in the root directory."""
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
375 m = self.parsemanifest(20, A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
376
43964
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
377 match = matchmod.match(
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
378 util.localpath(b'/repo'), b'a/b', [b'.'], default=b'relpath'
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
379 )
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
380 m2 = m._matches(match)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
381
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
382 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
383 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
384 b'a/b/c/bar.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
385 b'a/b/c/bar.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
386 b'a/b/c/foo.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
387 b'a/b/c/foo.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
388 b'a/b/d/baz.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
389 b'a/b/d/qux.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
390 b'a/b/d/ten.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
391 b'a/b/dog.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
392 b'a/b/fish.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
393 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
394 m2.keys(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
395 )
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
396
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
397 def testMatchesWithPattern(self):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
398 """Tests matches() for files matching a pattern that reside
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45118
diff changeset
399 deeper than the specified directory."""
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
400 m = self.parsemanifest(20, A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
401
43964
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
402 match = matchmod.match(util.localpath(b'/repo'), b'', [b'a/b/*/*.txt'])
44352
0bf3b5e80d30 manifest: move matches method to be outside the interface
Augie Fackler <augie@google.com>
parents: 43964
diff changeset
403 m2 = m._matches(match)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
404
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
405 self.assertEqual(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
406 [b'a/b/c/bar.txt', b'a/b/c/foo.txt', b'a/b/d/ten.txt'], m2.keys()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
407 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
408
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
409
24655
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
410 class testmanifestdict(unittest.TestCase, basemanifesttests):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
411 def parsemanifest(self, nodelen, text):
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
412 return manifestmod.manifestdict(nodelen, text)
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
413
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
414 def testManifestLongHashes(self):
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
415 m = self.parsemanifest(32, b'a\0' + b'f' * 64 + b'\n')
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
416 self.assertEqual(binascii.unhexlify(b'f' * 64), m[b'a'])
24655
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
417
40599
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
418 def testObviouslyBogusManifest(self):
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
419 # This is a 163k manifest that came from oss-fuzz. It was a
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
420 # timeout there, but when run normally it doesn't seem to
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
421 # present any particular slowness.
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
422 data = zlib.decompress(
40629
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
423 b'x\x9c\xed\xce;\n\x83\x00\x10\x04\xd0\x8deNa\x93~\xf1\x03\xc9q\xf4'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
424 b'\x14\xeaU\xbdB\xda\xd4\xe6Cj\xc1FA\xde+\x86\xe9f\xa2\xfci\xbb\xfb'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
425 b'\xa3\xef\xea\xba\xca\x7fk\x86q\x9a\xc6\xc8\xcc&\xb3\xcf\xf8\xb8|#'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
426 b'\x8a9\x00\xd8\xe6v\xf4\x01N\xe1\n\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
427 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
428 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
429 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
430 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
431 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
432 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
433 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
434 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
435 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ab59cc71f80c tests: fix bytes/str issue I introduced when adding this test
Augie Fackler <augie@google.com>
parents: 40599
diff changeset
436 b'\x00\x00\xc0\x8aey\x1d}\x01\xd8\xe0\xb9\xf3\xde\x1b\xcf\x17'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
437 b'\xac\xbe'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
438 )
40599
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
439 with self.assertRaises(ValueError):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
440 self.parsemanifest(20, data)
40599
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
441
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
442
24656
29c238e4a58a test-manifest: add some test coverage for treemanifest
Drew Gottlieb <drgott@google.com>
parents: 24655
diff changeset
443 class testtreemanifest(unittest.TestCase, basemanifesttests):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
444 def parsemanifest(self, nodelen, text):
46780
6266d19556ad node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
445 return manifestmod.treemanifest(sha1nodeconstants, b'', text)
24656
29c238e4a58a test-manifest: add some test coverage for treemanifest
Drew Gottlieb <drgott@google.com>
parents: 24655
diff changeset
446
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
447 def testWalkSubtrees(self):
47043
12450fbea288 manifests: push down expected node length into the parser
Joerg Sonnenberger <joerg@bec.de>
parents: 46780
diff changeset
448 m = self.parsemanifest(20, A_DEEPER_MANIFEST)
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
449
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
450 dirs = [s._dir for s in m.walksubtrees()]
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
451 self.assertEqual(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
452 sorted(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
453 [b'', b'a/', b'a/c/', b'a/d/', b'a/b/', b'a/b/c/', b'a/b/d/']
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
454 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
455 sorted(dirs),
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
456 )
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
457
43964
8f67735344ae tests: convert the `root` arg of matchmod.match() to local path separators
Matt Harbison <matt_harbison@yahoo.com>
parents: 43949
diff changeset
458 match = matchmod.match(util.localpath(b'/repo'), b'', [b'path:a/b/'])
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
459 dirs = [s._dir for s in m.walksubtrees(matcher=match)]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
460 self.assertEqual(sorted([b'a/b/', b'a/b/c/', b'a/b/d/']), sorted(dirs))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
461
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
462
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
463 if __name__ == '__main__':
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
464 silenttestrunner.main(__name__)