Mercurial > hg
annotate tests/test-manifest.py @ 47043:12450fbea288
manifests: push down expected node length into the parser
This strictly enforces the node length in the manifest lines according
to what the repository expects. One test case moves large hash testing
into the non-treemanifest part as treemanifests don't provide an
interface for overriding just the node length for now.
Differential Revision: https://phab.mercurial-scm.org/D10533
author | Joerg Sonnenberger <joerg@bec.de> |
---|---|
date | Fri, 30 Apr 2021 02:11:58 +0200 |
parents | 6266d19556ad |
children | 6000f5b25c9b |
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__) |