annotate tests/test-manifest.py @ 43242:561f9bc4b4c5

widening: duplicate generateellipsesbundle2() for widening The widening and the non-widening code are quite different. It will be clearer to have them as sepearate functions. To start with, I've just copied it exactly, so it's clearer over the next few patches how they're different. The new function should gradually become more similar to bundle2.widen_bundle(), and should perhaps eventually be merged with that function. However, I've left it in narrowbundle2.py for now since it still depends on constants like _KILLNODESIGNAL there. Differential Revision: https://phab.mercurial-scm.org/D7092
author Martin von Zweigbergk <martinvonz@google.com>
date Thu, 10 Oct 2019 22:18:35 -0700
parents 2372284d9457
children 8b1a9ba375e5
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
28929
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
9 from mercurial import (
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
10 manifest as manifestmod,
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
11 match as matchmod,
b9ed5a88710c tests: make test-manifest use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27637
diff changeset
12 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
13
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
14 EMTPY_MANIFEST = b''
24569
5491248e148a test-manifest: create constant for empty manifest
Martin von Zweigbergk <martinvonz@google.com>
parents: 24549
diff changeset
15
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
16 HASH_1 = b'1' * 40
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
17 BIN_HASH_1 = binascii.unhexlify(HASH_1)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
18 HASH_2 = b'f' * 40
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
19 BIN_HASH_2 = binascii.unhexlify(HASH_2)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
20 HASH_3 = b'1234567890abcdef0987654321deadbeef0fcafe'
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
21 BIN_HASH_3 = binascii.unhexlify(HASH_3)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
22 A_SHORT_MANIFEST = (
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
23 b'bar/baz/qux.py\0%(hash2)s%(flag2)s\n' b'foo\0%(hash1)s%(flag1)s\n'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
24 ) % {b'hash1': HASH_1, b'flag1': b'', b'hash2': HASH_2, b'flag2': b'l',}
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
25
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
26 A_DEEPER_MANIFEST = (
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
27 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
28 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
29 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
30 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
31 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
32 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
33 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
34 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
35 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
36 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
37 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
38 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
39 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
40 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
41 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
42 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
43 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
44 b'readme.txt\0%(hash2)s%(flag1)s\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
45 ) % {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
46 b'hash1': HASH_1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
47 b'flag1': b'',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
48 b'hash2': HASH_2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
49 b'flag2': b'l',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
50 b'hash3': HASH_3,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
51 }
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
52
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
53 HUGE_MANIFEST_ENTRIES = 200001
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
54
32534
0048a852b6aa tests: make test-manifest finish importing in Python 3
Augie Fackler <raf@durin42.com>
parents: 32533
diff changeset
55 izip = getattr(itertools, 'izip', zip)
0048a852b6aa tests: make test-manifest finish importing in Python 3
Augie Fackler <raf@durin42.com>
parents: 32533
diff changeset
56 if 'xrange' not in globals():
0048a852b6aa tests: make test-manifest finish importing in Python 3
Augie Fackler <raf@durin42.com>
parents: 32533
diff changeset
57 xrange = range
0048a852b6aa tests: make test-manifest finish importing in Python 3
Augie Fackler <raf@durin42.com>
parents: 32533
diff changeset
58
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
59 A_HUGE_MANIFEST = b''.join(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
60 sorted(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
61 b'file%d\0%s%s\n' % (i, h, f)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
62 for i, h, f in izip(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
63 xrange(200001),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
64 itertools.cycle((HASH_1, HASH_2)),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
65 itertools.cycle((b'', b'x', b'l')),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
66 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
67 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
68 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
69
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
70
24655
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
71 class basemanifesttests(object):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
72 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
73 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
74
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
75 def testEmptyManifest(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
76 m = self.parsemanifest(EMTPY_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
77 self.assertEqual(0, len(m))
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
78 self.assertEqual([], list(m))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
79
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
80 def testManifest(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
81 m = self.parsemanifest(A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
82 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
83 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
84 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
85 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
86 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
87 with self.assertRaises(KeyError):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
88 m[b'wat']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
89
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
90 def testSetItem(self):
24570
487245cbf1ab test-manifest: extract constants for binary hashes
Martin von Zweigbergk <martinvonz@google.com>
parents: 24569
diff changeset
91 want = BIN_HASH_1
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
92
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
93 m = self.parsemanifest(EMTPY_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
94 m[b'a'] = want
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
95 self.assertIn(b'a', m)
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
96 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
97 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
98
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
99 m = self.parsemanifest(A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
100 m[b'a'] = want
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
101 self.assertEqual(want, m[b'a'])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
102 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
103
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
104 def testSetFlag(self):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
105 want = b'x'
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
106
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
107 m = self.parsemanifest(EMTPY_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
108 # 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
109 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
110 m.setflag(b'a', want)
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
111 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
112 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
113
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
114 m = self.parsemanifest(A_SHORT_MANIFEST)
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
115 # 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
116 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
117 m.setflag(b'a', want)
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
118 self.assertEqual(want, m.flags(b'a'))
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
119 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
120 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
121 )
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
122
24465
bb8e2b1a0803 test-manifest.py: separate out test for double-free after copy()
Martin von Zweigbergk <martinvonz@google.com>
parents: 24298
diff changeset
123 def testCopy(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
124 m = self.parsemanifest(A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
125 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
126 m2 = m.copy()
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
127 del m
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
128 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
129
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
130 def testCompaction(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
131 unhex = binascii.unhexlify
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
132 h1, h2 = unhex(HASH_1), unhex(HASH_2)
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
133 m = self.parsemanifest(A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
134 m[b'alpha'] = h1
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
135 m[b'beta'] = h2
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
136 del m[b'foo']
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
137 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
138 HASH_1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
139 HASH_2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
140 HASH_2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
141 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
142 self.assertEqual(want, m.text())
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
143 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
144 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
145 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
146 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
147 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
148 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
149 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
150 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
151 with self.assertRaises(KeyError):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
152 m[b'foo']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
153
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
154 def testSetGetNodeSuffix(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
155 clean = self.parsemanifest(A_SHORT_MANIFEST)
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
156 m = self.parsemanifest(A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
157 h = m[b'foo']
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
158 f = m.flags(b'foo')
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
159 want = h + b'a'
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
160 # Merge code wants to set 21-byte fake hashes at times
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
161 m[b'foo'] = want
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
162 self.assertEqual(want, m[b'foo'])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
163 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
164 [(b'bar/baz/qux.py', BIN_HASH_2), (b'foo', BIN_HASH_1 + b'a')],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
165 list(m.items()),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
166 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
167 # Sometimes it even tries a 22-byte fake hash, but we can
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
168 # return 21 and it'll work out
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
169 m[b'foo'] = want + b'+'
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
170 self.assertEqual(want, m[b'foo'])
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
171 # make sure the suffix survives a copy
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
172 match = matchmod.match(b'', b'', [b're:foo'])
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
173 m2 = m.matches(match)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
174 self.assertEqual(want, m2[b'foo'])
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
175 self.assertEqual(1, len(m2))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
176 m2 = m.copy()
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
177 self.assertEqual(want, m2[b'foo'])
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
178 # suffix with iteration
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
179 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
180 [(b'bar/baz/qux.py', BIN_HASH_2), (b'foo', want)], list(m.items())
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
181 )
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
182
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
183 # shows up in diff
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
184 self.assertEqual({b'foo': ((want, f), (h, b''))}, m.diff(clean))
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
185 self.assertEqual({b'foo': ((h, b''), (want, f))}, clean.diff(m))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
186
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
187 def testMatchException(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
188 m = self.parsemanifest(A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
189 match = matchmod.match(b'', b'', [b're:.*'])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
190
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
191 def filt(path):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
192 if path == b'foo':
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
193 assert False
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
194 return True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
195
24466
f310ca66a704 test-manifest.py: rewrite tests in terms of manifestdict
Martin von Zweigbergk <martinvonz@google.com>
parents: 24465
diff changeset
196 match.matchfn = filt
32279
68c43a416585 tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31876
diff changeset
197 with self.assertRaises(AssertionError):
68c43a416585 tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31876
diff changeset
198 m.matches(match)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
199
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
200 def testRemoveItem(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
201 m = self.parsemanifest(A_SHORT_MANIFEST)
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
202 del m[b'foo']
32279
68c43a416585 tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31876
diff changeset
203 with self.assertRaises(KeyError):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
204 m[b'foo']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
205 self.assertEqual(1, len(m))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
206 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
207 # 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
208 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
209 self.assertEqual(2, len(m))
542c891274b2 lazymanifest: use a binary search to do an insertion
Augie Fackler <augie@google.com>
parents: 24225
diff changeset
210 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
211
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
212 def testManifestDiff(self):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
213 MISSING = (None, b'')
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
214 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
215 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
216 left = self.parsemanifest(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
217 A_SHORT_MANIFEST.replace(HASH_1, HASH_3 + b'x') + addl
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
218 )
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
219 right = self.parsemanifest(A_SHORT_MANIFEST + addr)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
220 want = {
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
221 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
222 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
223 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
224 }
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
225 self.assertEqual(want, left.diff(right))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
226
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
227 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
228 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
229 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
230 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
231 }
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
232 self.assertEqual(want, self.parsemanifest(EMTPY_MANIFEST).diff(left))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
233
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
234 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
235 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
236 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
237 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
238 }
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
239 self.assertEqual(want, left.diff(self.parsemanifest(EMTPY_MANIFEST)))
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
240 copy = right.copy()
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
241 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
242 del right[b'foo']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
243 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
244 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
245 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
246 }
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
247 self.assertEqual(want, right.diff(copy))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
248
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
249 short = self.parsemanifest(A_SHORT_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
250 pruned = short.copy()
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
251 del pruned[b'foo']
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
252 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
253 b'foo': ((BIN_HASH_1, b''), MISSING),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
254 }
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
255 self.assertEqual(want, short.diff(pruned))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
256 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
257 b'foo': (MISSING, (BIN_HASH_1, b'')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
258 }
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
259 self.assertEqual(want, pruned.diff(short))
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
260 want = {
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
261 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
262 b'foo': (MISSING, (BIN_HASH_1, b'')),
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
263 }
31255
959ebff3505a manifest: add match argument to diff and filesnotin
Durham Goode <durham@fb.com>
parents: 28929
diff changeset
264 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
265
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
266 def testReversedLines(self):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
267 backwards = b''.join(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
268 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
269 )
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
270 try:
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
271 self.parsemanifest(backwards)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
272 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
273 except ValueError as v:
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
274 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
275
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
276 def testNoTerminalNewline(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
277 try:
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
278 self.parsemanifest(A_SHORT_MANIFEST + b'wat')
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
279 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
280 except ValueError as v:
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
281 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
282
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
283 def testNoNewLineAtAll(self):
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
284 try:
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
285 self.parsemanifest(b'wat')
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
286 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
287 except ValueError as v:
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
288 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
289
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
290 def testHugeManifest(self):
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
291 m = self.parsemanifest(A_HUGE_MANIFEST)
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
292 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
293 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
294
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
295 def testMatchesMetadata(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
296 '''Tests matches() for a few specific files to make sure that both
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
297 the set of files as well as their flags and nodeids are correct in
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
298 the resulting manifest.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
299 m = self.parsemanifest(A_HUGE_MANIFEST)
24495
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
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
301 match = matchmod.exact([b'file1', b'file200', b'file300'])
24495
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
302 m2 = m.matches(match)
d2a3a2808974 manifest: make manifest.intersectfiles() internal
Drew Gottlieb <drgott@google.com>
parents: 24468
diff changeset
303
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
304 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
305 HASH_2,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
306 HASH_1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
307 HASH_1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
308 )
24225
3e5c4af69808 manifest: split manifestdict into high-level and low-level logic
Augie Fackler <augie@google.com>
parents: 24214
diff changeset
309 self.assertEqual(w, m2.text())
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
310
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
311 def testMatchesNonexistentFile(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
312 '''Tests matches() for a small set of specific files, including one
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
313 nonexistent file to make sure in only matches against existing files.
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
314 '''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
315 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
316
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
317 match = matchmod.exact(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
318 [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
319 )
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
320 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
321
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
322 self.assertEqual(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
323 [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
324 )
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
325
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
326 def testMatchesNonexistentDirectory(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
327 '''Tests matches() for a relpath match on a directory that doesn't
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
328 actually exist.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
329 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
330
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
331 match = matchmod.match(b'/', b'', [b'a/f'], default=b'relpath')
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
332 m2 = m.matches(match)
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([], 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 testMatchesExactLarge(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
337 '''Tests matches() for files matching a large list of exact files.
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
338 '''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
339 m = self.parsemanifest(A_HUGE_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
340
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
341 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
342 match = matchmod.exact(flist)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
343 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
344
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
345 self.assertEqual(flist, m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
346
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
347 def testMatchesFull(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
348 '''Tests matches() for what should be a full match.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
349 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
350
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
351 match = matchmod.match(b'/', b'', [b''])
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
352 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
353
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
354 self.assertEqual(m.keys(), m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
355
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
356 def testMatchesDirectory(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
357 '''Tests matches() on a relpath match on a directory, which should
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
358 match against all files within said directory.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
359 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
360
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
361 match = matchmod.match(b'/', b'', [b'a/b'], default=b'relpath')
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
362 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
363
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
364 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
365 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
366 b'a/b/c/bar.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
367 b'a/b/c/bar.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
368 b'a/b/c/foo.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
369 b'a/b/c/foo.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
370 b'a/b/d/baz.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
371 b'a/b/d/qux.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
372 b'a/b/d/ten.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
373 b'a/b/dog.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
374 b'a/b/fish.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
375 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
376 m2.keys(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
377 )
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
378
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
379 def testMatchesExactPath(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
380 '''Tests matches() on an exact match on a directory, which should
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
381 result in an empty manifest because you can't perform an exact match
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
382 against a directory.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
383 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
384
41676
0531dff73d0b match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 41621
diff changeset
385 match = matchmod.exact([b'a/b'])
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
386 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
387
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
388 self.assertEqual([], m2.keys())
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
389
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
390 def testMatchesCwd(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
391 '''Tests matches() on a relpath match with the current directory ('.')
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
392 when not in the root directory.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
393 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
394
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
395 match = matchmod.match(b'/', b'a/b', [b'.'], default=b'relpath')
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
396 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
397
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
398 self.assertEqual(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
399 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
400 b'a/b/c/bar.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
401 b'a/b/c/bar.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
402 b'a/b/c/foo.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
403 b'a/b/c/foo.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
404 b'a/b/d/baz.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
405 b'a/b/d/qux.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
406 b'a/b/d/ten.txt',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
407 b'a/b/dog.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
408 b'a/b/fish.py',
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
409 ],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
410 m2.keys(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
411 )
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
412
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
413 def testMatchesWithPattern(self):
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
414 '''Tests matches() for files matching a pattern that reside
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
415 deeper than the specified directory.'''
24654
9d6db63ccf00 test-manifest: move parsemanifest() to be a testmanifest class method
Drew Gottlieb <drgott@google.com>
parents: 24573
diff changeset
416 m = self.parsemanifest(A_DEEPER_MANIFEST)
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
417
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
418 match = matchmod.match(b'/', b'', [b'a/b/*/*.txt'])
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
419 m2 = m.matches(match)
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
420
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
421 self.assertEqual(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
422 [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
423 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
424
24549
bcf0de51326e manifest: add some tests for manifest.matches()
Drew Gottlieb <drgott@google.com>
parents: 24495
diff changeset
425
24655
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
426 class testmanifestdict(unittest.TestCase, basemanifesttests):
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
427 def parsemanifest(self, text):
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
428 return manifestmod.manifestdict(text)
528ace39c85c test-manifest: make manifesttest a base class that is extended
Drew Gottlieb <drgott@google.com>
parents: 24654
diff changeset
429
40599
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
430 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
431 # 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
432 # 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
433 # 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
434 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
435 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
436 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
437 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
438 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
439 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
440 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
441 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
442 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
443 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
444 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
445 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
446 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
447 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
448 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
449 b'\xac\xbe'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
450 )
40599
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
451 with self.assertRaises(ValueError):
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
452 self.parsemanifest(data)
9eeda7199181 manifest: make sure there's a filename before bothering to look for newline
Augie Fackler <augie@google.com>
parents: 36373
diff changeset
453
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
454
24656
29c238e4a58a test-manifest: add some test coverage for treemanifest
Drew Gottlieb <drgott@google.com>
parents: 24655
diff changeset
455 class testtreemanifest(unittest.TestCase, basemanifesttests):
29c238e4a58a test-manifest: add some test coverage for treemanifest
Drew Gottlieb <drgott@google.com>
parents: 24655
diff changeset
456 def parsemanifest(self, text):
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
457 return manifestmod.treemanifest(b'', text)
24656
29c238e4a58a test-manifest: add some test coverage for treemanifest
Drew Gottlieb <drgott@google.com>
parents: 24655
diff changeset
458
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
459 def testWalkSubtrees(self):
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
460 m = self.parsemanifest(A_DEEPER_MANIFEST)
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
461
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
462 dirs = [s._dir for s in m.walksubtrees()]
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
463 self.assertEqual(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
464 sorted(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
465 [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
466 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41676
diff changeset
467 sorted(dirs),
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
468 )
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
469
32551
0ff336a42c39 tests: make test-manifest.py portable to Python 3
Augie Fackler <raf@durin42.com>
parents: 32534
diff changeset
470 match = matchmod.match(b'/', b'', [b'path:a/b/'])
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
471 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
472 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
473
31876
94c1d3c1aea2 treemanifest: add walksubtrees api
Durham Goode <durham@fb.com>
parents: 31255
diff changeset
474
24214
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
475 if __name__ == '__main__':
a5f1bccd2996 manifest.c: new extension code to lazily parse manifests
Augie Fackler <augie@google.com>
parents:
diff changeset
476 silenttestrunner.main(__name__)