annotate tests/test-parseindex2.py @ 43095:fb41ea2ea076

formatting: introduce a `test-check-format-black.t` that enforce formatting This should prevent use to drift away from the expect format.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 07 Oct 2019 11:52:58 -0400
parents 2372284d9457
children 9f70512ae2cf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
1 """This unit test primarily tests parsers.parse_index2().
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
2
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
3 It also checks certain aspects of the parsers module as a whole.
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
4 """
20166
7eda5bb9ec8f parsers: clarify documentation of test-parseindex2.py
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20159
diff changeset
5
28754
7e5744e8334c py3: use print_function in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 28753
diff changeset
6 from __future__ import absolute_import, print_function
28841
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
7
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
8 import struct
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
9 import subprocess
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
10 import sys
38989
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38852
diff changeset
11 import unittest
28841
e155b8d5e3b7 tests: move stdlib imports before mercurial modules in test-parseindex2
Yuya Nishihara <yuya@tcha.org>
parents: 28754
diff changeset
12
28753
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
13 from mercurial.node import (
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
14 nullid,
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
15 nullrev,
0c2295384eea py3: use absolute_import in test-parseindex2.py
Robert Stanca <robert.stanca7@gmail.com>
parents: 27637
diff changeset
16 )
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 28841
diff changeset
17 from mercurial import (
39046
a450d460774e tests: restore Python 3 compat in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 39045
diff changeset
18 node as nodemod,
32372
df448de7cf3b parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 29205
diff changeset
19 policy,
38095
3de58f50afa2 tests: fix test-parseindex2 on Python 3
Augie Fackler <augie@google.com>
parents: 37894
diff changeset
20 pycompat,
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 28841
diff changeset
21 )
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
22
32372
df448de7cf3b parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 29205
diff changeset
23 parsers = policy.importmod(r'parsers')
df448de7cf3b parsers: switch to policy importer
Yuya Nishihara <yuya@tcha.org>
parents: 29205
diff changeset
24
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
25 # original python implementation
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
26 def gettype(q):
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
27 return int(q & 0xFFFF)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
28
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
29
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
30 def offset_type(offset, type):
37894
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
31 return int(int(offset) << 16 | type)
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
32
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
33
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
34 indexformatng = ">Qiiiiii20s12x"
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
35
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
36
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
37 def py_parseindex(data, inline):
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
38 s = 64
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
39 cache = None
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
40 index = []
27637
b502138f5faa cleanup: remove superfluous space after space after equals (python)
timeless <timeless@mozdev.org>
parents: 20742
diff changeset
41 nodemap = {nullid: nullrev}
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
42 n = off = 0
13253
61c9bc3da402 revlog: remove lazy index
Matt Mackall <mpm@selenic.com>
parents: 8117
diff changeset
43
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
44 l = len(data) - s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
45 append = index.append
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
46 if inline:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
47 cache = (0, data)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
48 while off <= l:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
49 e = struct.unpack(indexformatng, data[off : off + s])
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
50 nodemap[e[7]] = n
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
51 append(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
52 n += 1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
53 if e[1] < 0:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
54 break
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
55 off += e[1] + s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
56 else:
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
57 while off <= l:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
58 e = struct.unpack(indexformatng, data[off : off + s])
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
59 nodemap[e[7]] = n
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
60 append(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
61 n += 1
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
62 off += s
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
63
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
64 e = list(index[0])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
65 type = gettype(e[0])
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
66 e[0] = offset_type(0, type)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
67 index[0] = tuple(e)
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
68
13254
5ef5eb1f3515 revlog: only build the nodemap on demand
Matt Mackall <mpm@selenic.com>
parents: 13253
diff changeset
69 return index, cache
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
70
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
71
37893
b4e42a9bd12e tests: prefer string concatenation with () instead of \ in parseindex2 tests
Augie Fackler <augie@google.com>
parents: 32372
diff changeset
72 data_inlined = (
37894
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
73 b'\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x01\x8c'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
74 b'\x00\x00\x04\x07\x00\x00\x00\x00\x00\x00\x15\x15\xff\xff\xff'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
75 b'\xff\xff\xff\xff\xff\xebG\x97\xb7\x1fB\x04\xcf\x13V\x81\tw\x1b'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
76 b'w\xdduR\xda\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
77 b'x\x9c\x9d\x93?O\xc30\x10\xc5\xf7|\x8a\xdb\x9a\xa8m\x06\xd8*\x95'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
78 b'\x81B\xa1\xa2\xa2R\xcb\x86Pd\x9a\x0b5$vd_\x04\xfd\xf6\x9c\xff@'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
79 b'\x11!\x0b\xd9\xec\xf7\xbbw\xe7gG6\xad6\x04\xdaN\xc0\x92\xa0$)'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
80 b'\xb1\x82\xa2\xd1%\x16\xa4\x8b7\xa9\xca\xd4-\xb2Y\x02\xfc\xc9'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
81 b'\xcaS\xf9\xaeX\xed\xb6\xd77Q\x02\x83\xd4\x19\xf5--Y\xea\xe1W'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
82 b'\xab\xed\x10\xceR\x0f_\xdf\xdf\r\xe1,\xf5\xf0\xcb\xf5 \xceR\x0f'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
83 b'_\xdc\x0e\x0e\xc3R\x0f_\xae\x96\x9b!\x9e\xa5\x1e\xbf\xdb,\x06'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
84 b'\xc7q\x9a/\x88\x82\xc3B\xea\xb5\xb4TJ\x93\xb6\x82\x0e\xe16\xe6'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
85 b'KQ\xdb\xaf\xecG\xa3\xd1 \x01\xd3\x0b_^\xe8\xaa\xa0\xae\xad\xd1'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
86 b'&\xbef\x1bz\x08\xb0|\xc9Xz\x06\xf6Z\x91\x90J\xaa\x17\x90\xaa'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
87 b'\xd2\xa6\x11$5C\xcf\xba#\xa0\x03\x02*2\x92-\xfc\xb1\x94\xdf\xe2'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
88 b'\xae\xb8\'m\x8ey0^\x85\xd3\x82\xb4\xf0`:\x9c\x00\x8a\xfd\x01'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
89 b'\xb0\xc6\x86\x8b\xdd\xae\x80\xf3\xa9\x9fd\x16\n\x00R%\x1a\x06'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
90 b'\xe9\xd8b\x98\x1d\xf4\xf3+\x9bf\x01\xd8p\x1b\xf3.\xed\x9f^g\xc3'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
91 b'^\xd9W81T\xdb\xd5\x04sx|\xf2\xeb\xd6`%?x\xed"\x831\xbf\xf3\xdc'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
92 b'b\xeb%gaY\xe1\xad\x9f\xb9f\'1w\xa9\xa5a\x83s\x82J\xb98\xbc4\x8b'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
93 b'\x83\x00\x9f$z\xb8#\xa5\xb1\xdf\x98\xd9\xec\x1b\x89O\xe3Ts\x9a4'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
94 b'\x17m\x8b\xfc\x8f\xa5\x95\x9a\xfc\xfa\xed,\xe5|\xa1\xfe\x15\xb9'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
95 b'\xbc\xb2\x93\x1f\xf2\x95\xff\xdf,\x1a\xc5\xe7\x17*\x93Oz:>\x0e'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
96 )
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
97
37893
b4e42a9bd12e tests: prefer string concatenation with () instead of \ in parseindex2 tests
Augie Fackler <augie@google.com>
parents: 32372
diff changeset
98 data_non_inlined = (
37894
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
99 b'\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01D\x19'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
100 b'\x00\x07e\x12\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
101 b'\xff\xff\xff\xff\xd1\xf4\xbb\xb0\xbe\xfc\x13\xbd\x8c\xd3\x9d'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
102 b'\x0f\xcd\xd9;\x8c\x07\x8cJ/\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
103 b'\x00\x00\x00\x00\x00\x00\x01D\x19\x00\x00\x00\x00\x00\xdf\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
104 b'\x00\x01q\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\xff'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
105 b'\xff\xff\xff\xc1\x12\xb9\x04\x96\xa4Z1t\x91\xdfsJ\x90\xf0\x9bh'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
106 b'\x07l&\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
107 b'\x00\x01D\xf8\x00\x00\x00\x00\x01\x1b\x00\x00\x01\xb8\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
108 b'\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\xff\xff\xff\xff\x02\n'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
109 b'\x0e\xc6&\xa1\x92\xae6\x0b\x02i\xfe-\xe5\xbao\x05\xd1\xe7\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
110 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01F'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
111 b'\x13\x00\x00\x00\x00\x01\xec\x00\x00\x03\x06\x00\x00\x00\x01'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
112 b'\x00\x00\x00\x03\x00\x00\x00\x02\xff\xff\xff\xff\x12\xcb\xeby1'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
113 b'\xb6\r\x98B\xcb\x07\xbd`\x8f\x92\xd9\xc4\x84\xbdK\x00\x00\x00'
2f00c6e8f6a1 tests: port test-parseindex2.py to Python 3
Augie Fackler <augie@google.com>
parents: 37893
diff changeset
114 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
115 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
116
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
117
16363
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
118 def parse_index2(data, inline):
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
119 index, chunkcache = parsers.parse_index2(data, inline)
2cdd7e63211b parsers: incrementally parse the revlog index in C
Bryan O'Sullivan <bryano@fb.com>
parents: 13254
diff changeset
120 return list(index), chunkcache
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
121
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
122
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
123 def importparsers(hexversion):
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
124 """Import mercurial.parsers with the given sys.hexversion."""
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
125 # The file parsers.c inspects sys.hexversion to determine the version
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
126 # of the currently-running Python interpreter, so we monkey-patch
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
127 # sys.hexversion to simulate using different versions.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
128 code = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
129 "import sys; sys.hexversion=%s; "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
130 "import mercurial.cext.parsers" % hexversion
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
131 )
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
132 cmd = "python -c \"%s\"" % code
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
133 # We need to do these tests inside a subprocess because parser.c's
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
134 # version-checking code happens inside the module init function, and
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
135 # when using reload() to reimport an extension module, "The init function
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
136 # of extension modules is not called a second time"
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
137 # (from http://docs.python.org/2/library/functions.html?#reload).
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
138 p = subprocess.Popen(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
139 cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
140 )
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
141 return p.communicate() # returns stdout, stderr
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
142
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
143
39045
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
144 def hexfailmsg(testnumber, hexversion, stdout, expected):
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
145 try:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
146 hexstring = hex(hexversion)
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
147 except TypeError:
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
148 hexstring = None
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
149 return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
150 "FAILED: version test #%s with Python %s and patched "
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
151 "sys.hexversion %r (%r):\n Expected %s but got:\n-->'%s'\n"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
152 % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
153 testnumber,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
154 sys.version_info,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
155 hexversion,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
156 hexstring,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
157 expected,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
158 stdout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
159 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
160 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
161
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
162
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
163 def makehex(major, minor, micro):
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
164 return int("%x%02x%02x00" % (major, minor, micro), 16)
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
165
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
166
38989
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38852
diff changeset
167 class parseindex2tests(unittest.TestCase):
39045
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
168 def assertversionokay(self, testnumber, hexversion):
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
169 stdout, stderr = importparsers(hexversion)
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
170 self.assertFalse(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
171 stdout, hexfailmsg(testnumber, hexversion, stdout, 'no stdout')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
172 )
39045
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
173
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
174 def assertversionfail(self, testnumber, hexversion):
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
175 stdout, stderr = importparsers(hexversion)
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
176 # We include versionerrortext to distinguish from other ImportErrors.
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
177 errtext = b"ImportError: %s" % pycompat.sysbytes(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
178 parsers.versionerrortext
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
179 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
180 self.assertIn(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
181 errtext,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
182 stdout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
183 hexfailmsg(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
184 testnumber,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
185 hexversion,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
186 stdout,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
187 expected="stdout to contain %r" % errtext,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
188 ),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
189 )
39045
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
190
38990
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
191 def testversiondetection(self):
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
192 """Check the version-detection logic when importing parsers."""
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
193 # Only test the version-detection logic if it is present.
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
194 try:
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
195 parsers.versionerrortext
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
196 except AttributeError:
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
197 return
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
198 info = sys.version_info
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
199 major, minor, micro = info[0], info[1], info[2]
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
200 # Test same major-minor versions.
39045
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
201 self.assertversionokay(1, makehex(major, minor, micro))
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
202 self.assertversionokay(2, makehex(major, minor, micro + 1))
38990
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
203 # Test different major-minor versions.
39045
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
204 self.assertversionfail(3, makehex(major + 1, minor, micro))
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
205 self.assertversionfail(4, makehex(major, minor + 1, micro))
88b04bd2cbb4 tests: port remaining bits of test-parseindex2 to unittest asserts
Augie Fackler <augie@google.com>
parents: 38993
diff changeset
206 self.assertversionfail(5, "'foo'")
20742
3681de20b0a7 parsers: fail fast if Python has wrong minor version (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20166
diff changeset
207
38990
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
208 def testbadargs(self):
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
209 # Check that parse_index2() raises TypeError on bad arguments.
38991
22216c4607bb tests: move chunks of test-parseindex2.py to use unittest properly
Augie Fackler <augie@google.com>
parents: 38990
diff changeset
210 with self.assertRaises(TypeError):
38990
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
211 parse_index2(0, True)
20109
e57c532c3835 parse_index2: fix crash on bad argument type (issue4110)
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 16620
diff changeset
212
38990
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
213 def testparseindexfile(self):
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
214 # Check parsers.parse_index2() on an index file against the
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
215 # original Python implementation of parseindex, both with and
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
216 # without inlined data.
20166
7eda5bb9ec8f parsers: clarify documentation of test-parseindex2.py
Chris Jerdonek <chris.jerdonek@gmail.com>
parents: 20159
diff changeset
217
38993
ee0720e82257 tests: rename variables in revlog index parse test for clarity
Augie Fackler <augie@google.com>
parents: 38992
diff changeset
218 want = py_parseindex(data_inlined, True)
ee0720e82257 tests: rename variables in revlog index parse test for clarity
Augie Fackler <augie@google.com>
parents: 38992
diff changeset
219 got = parse_index2(data_inlined, True)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
220 self.assertEqual(want, got) # inline data
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
221
38993
ee0720e82257 tests: rename variables in revlog index parse test for clarity
Augie Fackler <augie@google.com>
parents: 38992
diff changeset
222 want = py_parseindex(data_non_inlined, False)
ee0720e82257 tests: rename variables in revlog index parse test for clarity
Augie Fackler <augie@google.com>
parents: 38992
diff changeset
223 got = parse_index2(data_non_inlined, False)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
224 self.assertEqual(want, got) # no inline data
7110
75fdc39b6172 Add parseindex2.py test case
Bernhard Leiner <bleiner@gmail.com>
parents:
diff changeset
225
38990
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
226 ix = parsers.parse_index2(data_inlined, True)[0]
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
227 for i, r in enumerate(ix):
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
228 if r[7] == nullid:
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
229 i = -1
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
230 try:
38991
22216c4607bb tests: move chunks of test-parseindex2.py to use unittest properly
Augie Fackler <augie@google.com>
parents: 38990
diff changeset
231 self.assertEqual(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
232 ix[r[7]],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
233 i,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
234 'Reverse lookup inconsistent for %r' % nodemod.hex(r[7]),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
235 )
38990
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
236 except TypeError:
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
237 # pure version doesn't support this
087a755310c3 tests: fix up indent width in test-parseindex2.py
Augie Fackler <augie@google.com>
parents: 38989
diff changeset
238 break
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16363
diff changeset
239
39067
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39048
diff changeset
240 def testminusone(self):
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39048
diff changeset
241 want = (0, 0, 0, -1, -1, -1, -1, nullid)
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39048
diff changeset
242 index, junk = parsers.parse_index2(data_inlined, True)
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39048
diff changeset
243 got = index[-1]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
244 self.assertEqual(want, got) # inline data
39067
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39048
diff changeset
245
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39048
diff changeset
246 index, junk = parsers.parse_index2(data_non_inlined, False)
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39048
diff changeset
247 got = index[-1]
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
248 self.assertEqual(want, got) # no inline data
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
249
39067
daedb70fd467 tests: add test coverage for revlogindex[-1] which was previously missing
Augie Fackler <augie@google.com>
parents: 39048
diff changeset
250
38989
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38852
diff changeset
251 if __name__ == '__main__':
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38852
diff changeset
252 import silenttestrunner
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 39067
diff changeset
253
38989
01966d45b45e tests: start moving test-parseindex2.py to a unittest
Augie Fackler <augie@google.com>
parents: 38852
diff changeset
254 silenttestrunner.main(__name__)