Mercurial > hg
annotate tests/test-manifest.py @ 44261:04a3ae7aba14
chg: force-set LC_CTYPE on server start to actual value from the environment
Python 3.7+ will "coerce" the LC_CTYPE variable in many instances, and this can
cause issues with chg being able to start up. D7550 attempted to fix this, but a
combination of a misreading of the way that python3.7 does the coercion and an
untested state (LC_CTYPE being set to an invalid value) meant that this was
still not quite working.
This change will cause differences between chg and hg: hg will have the LC_CTYPE
environment variable coerced, while chg will not. This is unlikely to cause any
detectable behavior differences in what Mercurial itself outputs, but it does
have two known effects:
- When using hg, the coerced LC_CTYPE will be passed to subprocesses, even
non-python ones. Using chg will remove the coercion, and this will not
happen. This is arguably more correct behavior on chg's part.
- On macOS, if you set your region to Brazil but your language to English,
this isn't representable in locale strings, so macOS sets LC_CTYPE=UTF-8. If
this value is passed along when ssh'ing to a non-macOS machine, some
functions (such as locale.setlocale()) may raise an exception due to an
unsupported locale setting. This is most easily encountered when doing an
interactive commit/split/etc. when using ui.interface=curses.
Differential Revision: https://phab.mercurial-scm.org/D8039
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Wed, 29 Jan 2020 13:39:50 -0800 |
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__) |