Mercurial > hg-stable
annotate tests/test-simplekeyvaluefile.py @ 38531:1ad873c3e4a4
narrowbundle2: when we handle a widen, mark the operation as unsafe
We have to manually drive the context manager here since the logic is
awkwardly split between a couple of places.
Differential Revision: https://phab.mercurial-scm.org/D3719
author | Augie Fackler <augie@google.com> |
---|---|
date | Tue, 12 Jun 2018 11:31:20 -0400 |
parents | 6eca47f6319d |
children | aaad36b88298 |
rev | line source |
---|---|
31559
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
1 from __future__ import absolute_import |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
2 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
3 import unittest |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
4 import silenttestrunner |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
5 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
6 from mercurial import ( |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
7 error, |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
8 scmutil, |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
9 ) |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
10 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
11 class mockfile(object): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
12 def __init__(self, name, fs): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
13 self.name = name |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
14 self.fs = fs |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
15 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
16 def __enter__(self): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
17 return self |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
18 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
19 def __exit__(self, *args, **kwargs): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
20 pass |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
21 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
22 def write(self, text): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
23 self.fs.contents[self.name] = text |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
24 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
25 def read(self): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
26 return self.fs.contents[self.name] |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
27 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
28 class mockvfs(object): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
29 def __init__(self): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
30 self.contents = {} |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
31 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
32 def read(self, path): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
33 return mockfile(path, self).read() |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
34 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
35 def readlines(self, path): |
32309
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
31591
diff
changeset
|
36 # lines need to contain the trailing '\n' to mock the real readlines |
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
31591
diff
changeset
|
37 return [l for l in mockfile(path, self).read().splitlines(True)] |
31559
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
38 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
39 def __call__(self, path, mode, atomictemp): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
40 return mockfile(path, self) |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
41 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
42 class testsimplekeyvaluefile(unittest.TestCase): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
43 def setUp(self): |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
44 self.vfs = mockvfs() |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
45 |
32309
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
31591
diff
changeset
|
46 def testbasicwritingiandreading(self): |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
47 dw = {b'key1': b'value1', b'Key2': b'value2'} |
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
48 scmutil.simplekeyvaluefile(self.vfs, b'kvfile').write(dw) |
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
49 self.assertEqual(sorted(self.vfs.read(b'kvfile').split(b'\n')), |
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
50 [b'', b'Key2=value2', b'key1=value1']) |
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
51 dr = scmutil.simplekeyvaluefile(self.vfs, b'kvfile').read() |
32309
ed2c44741190
scmutil: add simplekeyvaluefile reading test
Kostia Balytskyi <ikostia@fb.com>
parents:
31591
diff
changeset
|
52 self.assertEqual(dr, dw) |
31559
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
53 |
37715
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
54 if not getattr(unittest.TestCase, 'assertRaisesRegex', False): |
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
55 # Python 3.7 deprecates the regex*p* version, but 2.7 lacks |
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
56 # the regex version. |
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
57 assertRaisesRegex = (# camelcase-required |
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
58 unittest.TestCase.assertRaisesRegexp) |
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
59 |
31559
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
60 def testinvalidkeys(self): |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
61 d = {b'0key1': b'value1', b'Key2': b'value2'} |
37715
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
62 with self.assertRaisesRegex(error.ProgrammingError, |
32319
68c43a416585
tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32310
diff
changeset
|
63 'keys must start with a letter.*'): |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
64 scmutil.simplekeyvaluefile(self.vfs, b'kvfile').write(d) |
32319
68c43a416585
tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32310
diff
changeset
|
65 |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
66 d = {b'key1@': b'value1', b'Key2': b'value2'} |
37715
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
67 with self.assertRaisesRegex(error.ProgrammingError, 'invalid key.*'): |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
68 scmutil.simplekeyvaluefile(self.vfs, b'kvfile').write(d) |
31559
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
69 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
70 def testinvalidvalues(self): |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
71 d = {b'key1': b'value1', b'Key2': b'value2\n'} |
37715
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
72 with self.assertRaisesRegex(error.ProgrammingError, 'invalid val.*'): |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
73 scmutil.simplekeyvaluefile(self.vfs, b'kvfile').write(d) |
31559
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
74 |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
75 def testcorruptedfile(self): |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
76 self.vfs.contents[b'badfile'] = b'ababagalamaga\n' |
37715
1859b9a7ddef
cleanup: polyfill assertRaisesRegex so we can avoid assertRaisesRegexp
Augie Fackler <augie@google.com>
parents:
32319
diff
changeset
|
77 with self.assertRaisesRegex(error.CorruptedState, |
32319
68c43a416585
tests: use context manager form of assertRaises
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32310
diff
changeset
|
78 'dictionary.*element.*'): |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
79 scmutil.simplekeyvaluefile(self.vfs, b'badfile').read() |
31559
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
80 |
32310
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32309
diff
changeset
|
81 def testfirstline(self): |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
82 dw = {b'key1': b'value1'} |
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
83 scmutil.simplekeyvaluefile(self.vfs, b'fl').write(dw, firstline=b'1.0') |
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
84 self.assertEqual(self.vfs.read(b'fl'), b'1.0\nkey1=value1\n') |
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
85 dr = scmutil.simplekeyvaluefile(self.vfs, b'fl')\ |
32310
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32309
diff
changeset
|
86 .read(firstlinenonkeyval=True) |
37983
6eca47f6319d
tests: port test-simplekeyvaluefile.py to Python 3
Augie Fackler <augie@google.com>
parents:
37715
diff
changeset
|
87 self.assertEqual(dr, {b'__firstline': b'1.0', b'key1': b'value1'}) |
32310
218ca8526ec0
scmutil: make simplekeyvaluefile able to have a non-key-value first line
Kostia Balytskyi <ikostia@fb.com>
parents:
32309
diff
changeset
|
88 |
31559
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
89 if __name__ == "__main__": |
56acc4250900
scmutil: add a simple key-value file helper
Kostia Balytskyi <ikostia@fb.com>
parents:
diff
changeset
|
90 silenttestrunner.main(__name__) |