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