Mercurial > hg
annotate contrib/testparseutil.py @ 48903:0bb28b7736bc
chgserver: remove Python 2 support code
The logic here is more complicated than most Python 2/3 support code.
But the rewritten logic should be identical.
Differential Revision: https://phab.mercurial-scm.org/D12306
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 21 Feb 2022 10:43:58 -0700 |
parents | 6000f5b25c9b |
children | 642e31cb55f0 |
rev | line source |
---|---|
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
1 # testparseutil.py - utilities to parse test script for check tools |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
2 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
3 # Copyright 2018 FUJIWARA Katsunori <foozy@lares.dti.ne.jp> and others |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
4 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
7 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
8 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
9 import abc |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
10 import re |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
11 import sys |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
12 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
13 #################### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
14 # for Python3 compatibility (almost comes from mercurial/pycompat.py) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
15 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
16 ispy3 = sys.version_info[0] >= 3 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
17 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
18 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
19 def identity(a): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
20 return a |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
21 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
22 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
23 def _rapply(f, xs): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
24 if xs is None: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
25 # assume None means non-value of optional data |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
26 return xs |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
27 if isinstance(xs, (list, set, tuple)): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
28 return type(xs)(_rapply(f, x) for x in xs) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
29 if isinstance(xs, dict): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
30 return type(xs)((_rapply(f, k), _rapply(f, v)) for k, v in xs.items()) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
31 return f(xs) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
32 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
33 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
34 def rapply(f, xs): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
35 if f is identity: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
36 # fast path mainly for py2 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
37 return xs |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
38 return _rapply(f, xs) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
39 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
40 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
41 if ispy3: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
42 import builtins |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
43 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
44 def bytestr(s): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
45 # tiny version of pycompat.bytestr |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
46 return s.encode('latin1') |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
47 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
48 def sysstr(s): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
49 if isinstance(s, builtins.str): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
50 return s |
43091
127cc1f72e70
py3: stop normalizing .encode()/.decode() arguments to unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43076
diff
changeset
|
51 return s.decode('latin-1') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
52 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
53 def opentext(f): |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
54 return open(f, 'r') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
55 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
56 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
57 else: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
58 bytestr = str |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
59 sysstr = identity |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
60 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
61 opentext = open |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
62 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
63 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
64 def b2s(x): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
65 # convert BYTES elements in "x" to SYSSTR recursively |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
66 return rapply(sysstr, x) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
67 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
68 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
69 def writeout(data): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
70 # write "data" in BYTES into stdout |
42390
37f38e1dea44
testparseutil: stop extracting using std* streams as bytes on py3
Augie Fackler <augie@google.com>
parents:
42330
diff
changeset
|
71 sys.stdout.write(data) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
72 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
73 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
74 def writeerr(data): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
75 # write "data" in BYTES into stderr |
42390
37f38e1dea44
testparseutil: stop extracting using std* streams as bytes on py3
Augie Fackler <augie@google.com>
parents:
42330
diff
changeset
|
76 sys.stderr.write(data) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
77 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
78 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
79 #################### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
80 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
81 |
43474
70d42e2ad9b4
pytype: don't warn us about ignored-on-py3 metaclasses
Augie Fackler <augie@google.com>
parents:
43091
diff
changeset
|
82 class embeddedmatcher(object): # pytype: disable=ignored-metaclass |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44020
diff
changeset
|
83 """Base class to detect embedded code fragments in *.t test script""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
84 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
85 __metaclass__ = abc.ABCMeta |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
86 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
87 def __init__(self, desc): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
88 self.desc = desc |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
89 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
90 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
91 def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
92 """Examine whether embedded code starts at line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
93 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
94 This can return arbitrary object, and it is used as 'ctx' for |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
95 subsequent method invocations. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
96 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
97 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
98 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
99 def endsat(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
100 """Examine whether embedded code ends at line""" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
101 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
102 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
103 def isinside(self, ctx, line): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44020
diff
changeset
|
104 """Examine whether line is inside embedded code, if not yet endsat""" |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
105 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
106 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
107 def ignores(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
108 """Examine whether detected embedded code should be ignored""" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
109 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
110 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
111 def filename(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
112 """Return filename of embedded code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
113 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
114 If filename isn't specified for embedded code explicitly, this |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
115 returns None. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
116 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
117 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
118 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
119 def codeatstart(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
120 """Return actual code at the start line of embedded code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
121 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
122 This might return None, if the start line doesn't contain |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
123 actual code. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
124 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
125 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
126 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
127 def codeatend(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
128 """Return actual code at the end line of embedded code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
129 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
130 This might return None, if the end line doesn't contain actual |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
131 code. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
132 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
133 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
134 @abc.abstractmethod |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
135 def codeinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
136 """Return actual code at line inside embedded code""" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
137 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
138 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
139 def embedded(basefile, lines, errors, matchers): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
140 """pick embedded code fragments up from given lines |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
141 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
142 This is common parsing logic, which examines specified matchers on |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
143 given lines. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
144 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
145 :basefile: a name of a file, from which lines to be parsed come. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
146 :lines: to be parsed (might be a value returned by "open(basefile)") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
147 :errors: an array, into which messages for detected error are stored |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
148 :matchers: an array of embeddedmatcher objects |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
149 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
150 This function yields '(filename, starts, ends, code)' tuple. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
151 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
152 :filename: a name of embedded code, if it is explicitly specified |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
153 (e.g. "foobar" of "cat >> foobar <<EOF"). |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
154 Otherwise, this is None |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
155 :starts: line number (1-origin), at which embedded code starts (inclusive) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
156 :ends: line number (1-origin), at which embedded code ends (exclusive) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
157 :code: extracted embedded code, which is single-stringified |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
158 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
159 >>> class ambigmatcher(object): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
160 ... # mock matcher class to examine implementation of |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
161 ... # "ambiguous matching" corner case |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
162 ... def __init__(self, desc, matchfunc): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
163 ... self.desc = desc |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
164 ... self.matchfunc = matchfunc |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
165 ... def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
166 ... return self.matchfunc(line) |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
167 >>> ambig1 = ambigmatcher('ambiguous #1', |
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
168 ... lambda l: l.startswith(' $ cat ')) |
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
169 >>> ambig2 = ambigmatcher('ambiguous #2', |
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
170 ... lambda l: l.endswith('<< EOF\\n')) |
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
171 >>> lines = [' $ cat > foo.py << EOF\\n'] |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
172 >>> errors = [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
173 >>> matchers = [ambig1, ambig2] |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
174 >>> list(t for t in embedded('<dummy>', lines, errors, matchers)) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
175 [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
176 >>> b2s(errors) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
177 ['<dummy>:1: ambiguous line for "ambiguous #1", "ambiguous #2"'] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
178 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
179 """ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
180 matcher = None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
181 ctx = filename = code = startline = None # for pyflakes |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
182 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
183 for lineno, line in enumerate(lines, 1): |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
184 if not line.endswith('\n'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
185 line += '\n' # to normalize EOF line |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
186 if matcher: # now, inside embedded code |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
187 if matcher.endsat(ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
188 codeatend = matcher.codeatend(ctx, line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
189 if codeatend is not None: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
190 code.append(codeatend) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
191 if not matcher.ignores(ctx): |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
192 yield (filename, startline, lineno, ''.join(code)) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
193 matcher = None |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
194 # DO NOT "continue", because line might start next fragment |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
195 elif not matcher.isinside(ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
196 # this is an error of basefile |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
197 # (if matchers are implemented correctly) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
198 errors.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
199 '%s:%d: unexpected line for "%s"' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
200 % (basefile, lineno, matcher.desc) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
201 ) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
202 # stop extracting embedded code by current 'matcher', |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
203 # because appearance of unexpected line might mean |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
204 # that expected end-of-embedded-code line might never |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
205 # appear |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
206 matcher = None |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
207 # DO NOT "continue", because line might start next fragment |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
208 else: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
209 code.append(matcher.codeinside(ctx, line)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
210 continue |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
211 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
212 # examine whether current line starts embedded code or not |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
213 assert not matcher |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
214 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
215 matched = [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
216 for m in matchers: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
217 ctx = m.startsat(line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
218 if ctx: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
219 matched.append((m, ctx)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
220 if matched: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
221 if len(matched) > 1: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
222 # this is an error of matchers, maybe |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
223 errors.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
224 '%s:%d: ambiguous line for %s' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
225 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
226 basefile, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
227 lineno, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
228 ', '.join(['"%s"' % m.desc for m, c in matched]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
229 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
230 ) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
231 # omit extracting embedded code, because choosing |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
232 # arbitrary matcher from matched ones might fail to |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
233 # detect the end of embedded code as expected. |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
234 continue |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
235 matcher, ctx = matched[0] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
236 filename = matcher.filename(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
237 code = [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
238 codeatstart = matcher.codeatstart(ctx, line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
239 if codeatstart is not None: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
240 code.append(codeatstart) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
241 startline = lineno |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
242 else: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
243 startline = lineno + 1 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
244 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
245 if matcher: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
246 # examine whether EOF ends embedded code, because embedded |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
247 # code isn't yet ended explicitly |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
248 if matcher.endsat(ctx, '\n'): |
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
249 codeatend = matcher.codeatend(ctx, '\n') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
250 if codeatend is not None: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
251 code.append(codeatend) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
252 if not matcher.ignores(ctx): |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
253 yield (filename, startline, lineno + 1, ''.join(code)) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
254 else: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
255 # this is an error of basefile |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
256 # (if matchers are implemented correctly) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
257 errors.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
258 '%s:%d: unexpected end of file for "%s"' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
259 % (basefile, lineno, matcher.desc) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
260 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
261 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
262 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
263 # heredoc limit mark to ignore embedded code at check-code.py or so |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
264 heredocignorelimit = 'NO_CHECK_EOF' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
265 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
266 # the pattern to match against cases below, and to return a limit mark |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
267 # string as 'lname' group |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
268 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
269 # - << LIMITMARK |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
270 # - << "LIMITMARK" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
271 # - << 'LIMITMARK' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
272 heredoclimitpat = r'\s*<<\s*(?P<lquote>["\']?)(?P<limit>\w+)(?P=lquote)' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
273 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
274 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
275 class fileheredocmatcher(embeddedmatcher): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
276 """Detect "cat > FILE << LIMIT" style embedded code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
277 |
42391
c2deb2512823
testparseutil: fix doctest to use str instead of bytes
Augie Fackler <augie@google.com>
parents:
42390
diff
changeset
|
278 >>> matcher = fileheredocmatcher('heredoc .py file', r'[^<]+\\.py') |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
279 >>> b2s(matcher.startsat(' $ cat > file.py << EOF\\n')) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
280 ('file.py', ' > EOF\\n') |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
281 >>> b2s(matcher.startsat(' $ cat >>file.py <<EOF\\n')) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
282 ('file.py', ' > EOF\\n') |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
283 >>> b2s(matcher.startsat(' $ cat> \\x27any file.py\\x27<< "EOF"\\n')) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
284 ('any file.py', ' > EOF\\n') |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
285 >>> b2s(matcher.startsat(" $ cat > file.py << 'ANYLIMIT'\\n")) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
286 ('file.py', ' > ANYLIMIT\\n') |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
287 >>> b2s(matcher.startsat(' $ cat<<ANYLIMIT>"file.py"\\n')) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
288 ('file.py', ' > ANYLIMIT\\n') |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
289 >>> start = ' $ cat > file.py << EOF\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
290 >>> ctx = matcher.startsat(start) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
291 >>> matcher.codeatstart(ctx, start) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
292 >>> b2s(matcher.filename(ctx)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
293 'file.py' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
294 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
295 False |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
296 >>> inside = ' > foo = 1\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
297 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
298 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
299 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
300 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
301 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
302 'foo = 1\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
303 >>> end = ' > EOF\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
304 >>> matcher.endsat(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
305 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
306 >>> matcher.codeatend(ctx, end) |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
307 >>> matcher.endsat(ctx, ' > EOFEOF\\n') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
308 False |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
309 >>> ctx = matcher.startsat(' $ cat > file.py << NO_CHECK_EOF\\n') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
310 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
311 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
312 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
313 |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
314 _prefix = ' > ' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
315 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
316 def __init__(self, desc, namepat): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
317 super(fileheredocmatcher, self).__init__(desc) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
318 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
319 # build the pattern to match against cases below (and ">>" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
320 # variants), and to return a target filename string as 'name' |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
321 # group |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
322 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
323 # - > NAMEPAT |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
324 # - > "NAMEPAT" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
325 # - > 'NAMEPAT' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
326 namepat = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
327 r'\s*>>?\s*(?P<nquote>["\']?)(?P<name>%s)(?P=nquote)' % namepat |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
328 ) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
329 self._fileres = [ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
330 # "cat > NAME << LIMIT" case |
44020
ac3cb5e05a38
cleanup: replace contiguous spaces in regex patterns with an explicit count
Matt Harbison <matt_harbison@yahoo.com>
parents:
43474
diff
changeset
|
331 re.compile(r' {2}\$ \s*cat' + namepat + heredoclimitpat), |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
332 # "cat << LIMIT > NAME" case |
44020
ac3cb5e05a38
cleanup: replace contiguous spaces in regex patterns with an explicit count
Matt Harbison <matt_harbison@yahoo.com>
parents:
43474
diff
changeset
|
333 re.compile(r' {2}\$ \s*cat' + heredoclimitpat + namepat), |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
334 ] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
335 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
336 def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
337 # ctx is (filename, END-LINE-OF-EMBEDDED-CODE) tuple |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
338 for filere in self._fileres: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
339 matched = filere.match(line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
340 if matched: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
341 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
342 matched.group('name'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
343 ' > %s\n' % matched.group('limit'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
344 ) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
345 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
346 def endsat(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
347 return ctx[1] == line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
348 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
349 def isinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
350 return line.startswith(self._prefix) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
351 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
352 def ignores(self, ctx): |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
353 return ' > %s\n' % heredocignorelimit == ctx[1] |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
354 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
355 def filename(self, ctx): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
356 return ctx[0] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
357 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
358 def codeatstart(self, ctx, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
359 return None # no embedded code at start line |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
360 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
361 def codeatend(self, ctx, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
362 return None # no embedded code at end line |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
363 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
364 def codeinside(self, ctx, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
365 return line[len(self._prefix) :] # strip prefix |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
366 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
367 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
368 #### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
369 # for embedded python script |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
370 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
371 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
372 class pydoctestmatcher(embeddedmatcher): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
373 """Detect ">>> code" style embedded python code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
374 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
375 >>> matcher = pydoctestmatcher() |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
376 >>> startline = ' >>> foo = 1\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
377 >>> matcher.startsat(startline) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
378 True |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
379 >>> matcher.startsat(' ... foo = 1\\n') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
380 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
381 >>> ctx = matcher.startsat(startline) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
382 >>> matcher.filename(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
383 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
384 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
385 >>> b2s(matcher.codeatstart(ctx, startline)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
386 'foo = 1\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
387 >>> inside = ' >>> foo = 1\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
388 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
389 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
390 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
391 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
392 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
393 'foo = 1\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
394 >>> inside = ' ... foo = 1\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
395 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
396 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
397 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
398 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
399 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
400 'foo = 1\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
401 >>> inside = ' expected output\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
402 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
403 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
404 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
405 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
406 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
407 '\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
408 >>> inside = ' \\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
409 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
410 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
411 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
412 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
413 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
414 '\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
415 >>> end = ' $ foo bar\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
416 >>> matcher.endsat(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
417 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
418 >>> matcher.codeatend(ctx, end) |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
419 >>> end = '\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
420 >>> matcher.endsat(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
421 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
422 >>> matcher.codeatend(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
423 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
424 |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
425 _prefix = ' >>> ' |
44020
ac3cb5e05a38
cleanup: replace contiguous spaces in regex patterns with an explicit count
Matt Harbison <matt_harbison@yahoo.com>
parents:
43474
diff
changeset
|
426 _prefixre = re.compile(r' {2}(>>>|\.\.\.) ') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
427 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
428 # If a line matches against not _prefixre but _outputre, that line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
429 # is "an expected output line" (= not a part of code fragment). |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
430 # |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
431 # Strictly speaking, a line matching against "(#if|#else|#endif)" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
432 # is also treated similarly in "inline python code" semantics by |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
433 # run-tests.py. But "directive line inside inline python code" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
434 # should be rejected by Mercurial reviewers. Therefore, this |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
435 # regexp does not matche against such directive lines. |
44020
ac3cb5e05a38
cleanup: replace contiguous spaces in regex patterns with an explicit count
Matt Harbison <matt_harbison@yahoo.com>
parents:
43474
diff
changeset
|
436 _outputre = re.compile(r' {2}$| {2}[^$]') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
437 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
438 def __init__(self): |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
439 super(pydoctestmatcher, self).__init__("doctest style python code") |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
440 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
441 def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
442 # ctx is "True" |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
443 return line.startswith(self._prefix) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
444 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
445 def endsat(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
446 return not (self._prefixre.match(line) or self._outputre.match(line)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
447 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
448 def isinside(self, ctx, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
449 return True # always true, if not yet ended |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
450 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
451 def ignores(self, ctx): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
452 return False # should be checked always |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
453 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
454 def filename(self, ctx): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
455 return None # no filename |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
456 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
457 def codeatstart(self, ctx, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
458 return line[len(self._prefix) :] # strip prefix ' >>> '/' ... ' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
459 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
460 def codeatend(self, ctx, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
461 return None # no embedded code at end line |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
462 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
463 def codeinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
464 if self._prefixre.match(line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
465 return line[len(self._prefix) :] # strip prefix ' >>> '/' ... ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
466 return '\n' # an expected output line is treated as an empty line |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
467 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
468 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
469 class pyheredocmatcher(embeddedmatcher): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
470 """Detect "python << LIMIT" style embedded python code |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
471 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
472 >>> matcher = pyheredocmatcher() |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
473 >>> b2s(matcher.startsat(' $ python << EOF\\n')) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
474 ' > EOF\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
475 >>> b2s(matcher.startsat(' $ $PYTHON <<EOF\\n')) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
476 ' > EOF\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
477 >>> b2s(matcher.startsat(' $ "$PYTHON"<< "EOF"\\n')) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
478 ' > EOF\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
479 >>> b2s(matcher.startsat(" $ $PYTHON << 'ANYLIMIT'\\n")) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
480 ' > ANYLIMIT\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
481 >>> matcher.startsat(' $ "$PYTHON" < EOF\\n') |
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
482 >>> start = ' $ python << EOF\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
483 >>> ctx = matcher.startsat(start) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
484 >>> matcher.codeatstart(ctx, start) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
485 >>> matcher.filename(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
486 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
487 False |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
488 >>> inside = ' > foo = 1\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
489 >>> matcher.endsat(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
490 False |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
491 >>> matcher.isinside(ctx, inside) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
492 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
493 >>> b2s(matcher.codeinside(ctx, inside)) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
494 'foo = 1\\n' |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
495 >>> end = ' > EOF\\n' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
496 >>> matcher.endsat(ctx, end) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
497 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
498 >>> matcher.codeatend(ctx, end) |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
499 >>> matcher.endsat(ctx, ' > EOFEOF\\n') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
500 False |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
501 >>> ctx = matcher.startsat(' $ python << NO_CHECK_EOF\\n') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
502 >>> matcher.ignores(ctx) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
503 True |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
504 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
505 |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
506 _prefix = ' > ' |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
507 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
508 _startre = re.compile( |
44020
ac3cb5e05a38
cleanup: replace contiguous spaces in regex patterns with an explicit count
Matt Harbison <matt_harbison@yahoo.com>
parents:
43474
diff
changeset
|
509 r' {2}\$ (\$PYTHON|"\$PYTHON"|python).*' + heredoclimitpat |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
510 ) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
511 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
512 def __init__(self): |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
513 super(pyheredocmatcher, self).__init__("heredoc python invocation") |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
514 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
515 def startsat(self, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
516 # ctx is END-LINE-OF-EMBEDDED-CODE |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
517 matched = self._startre.match(line) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
518 if matched: |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
519 return ' > %s\n' % matched.group('limit') |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
520 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
521 def endsat(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
522 return ctx == line |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
523 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
524 def isinside(self, ctx, line): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
525 return line.startswith(self._prefix) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
526 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
527 def ignores(self, ctx): |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
528 return ' > %s\n' % heredocignorelimit == ctx |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
529 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
530 def filename(self, ctx): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
531 return None # no filename |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
532 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
533 def codeatstart(self, ctx, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
534 return None # no embedded code at start line |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
535 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
536 def codeatend(self, ctx, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
537 return None # no embedded code at end line |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
538 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
539 def codeinside(self, ctx, line): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
540 return line[len(self._prefix) :] # strip prefix |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
541 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
542 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
543 _pymatchers = [ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
544 pydoctestmatcher(), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
545 pyheredocmatcher(), |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
546 # use '[^<]+' instead of '\S+', in order to match against |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
547 # paths including whitespaces |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
548 fileheredocmatcher('heredoc .py file', r'[^<]+\.py'), |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
549 ] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
550 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
551 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
552 def pyembedded(basefile, lines, errors): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
553 return embedded(basefile, lines, errors, _pymatchers) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
554 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
555 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
556 #### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
557 # for embedded shell script |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
558 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
559 _shmatchers = [ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
560 # use '[^<]+' instead of '\S+', in order to match against |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
561 # paths including whitespaces |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
562 fileheredocmatcher('heredoc .sh file', r'[^<]+\.sh'), |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
563 ] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
564 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
565 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
566 def shembedded(basefile, lines, errors): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
567 return embedded(basefile, lines, errors, _shmatchers) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
568 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
569 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
570 #### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
571 # for embedded hgrc configuration |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
572 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
573 _hgrcmatchers = [ |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
574 # use '[^<]+' instead of '\S+', in order to match against |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
575 # paths including whitespaces |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
576 fileheredocmatcher( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
577 'heredoc hgrc file', r'(([^/<]+/)+hgrc|\$HGRCPATH|\${HGRCPATH})' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
578 ), |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
579 ] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
580 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
581 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
582 def hgrcembedded(basefile, lines, errors): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
583 return embedded(basefile, lines, errors, _hgrcmatchers) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
584 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
585 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
586 #### |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
587 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
588 if __name__ == "__main__": |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
589 import optparse |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
590 import sys |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
591 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
592 def showembedded(basefile, lines, embeddedfunc, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
593 errors = [] |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
594 for name, starts, ends, code in embeddedfunc(basefile, lines, errors): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
595 if not name: |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
596 name = '<anonymous>' |
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
597 writeout("%s:%d: %s starts\n" % (basefile, starts, name)) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
598 if opts.verbose and code: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
599 writeout(" |%s\n" % "\n |".join(l for l in code.splitlines())) |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
600 writeout("%s:%d: %s ends\n" % (basefile, ends, name)) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
601 for e in errors: |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
602 writeerr("%s\n" % e) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
603 return len(errors) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
604 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
605 def applyembedded(args, embeddedfunc, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
606 ret = 0 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
607 if args: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
608 for f in args: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
609 with opentext(f) as fp: |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
610 if showembedded(f, fp, embeddedfunc, opts): |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
611 ret = 1 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
612 else: |
42390
37f38e1dea44
testparseutil: stop extracting using std* streams as bytes on py3
Augie Fackler <augie@google.com>
parents:
42330
diff
changeset
|
613 lines = [l for l in sys.stdin.readlines()] |
42330
5364ba1f796f
py3: make contrib/testparseutil.py to work on str(unicodes)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
41552
diff
changeset
|
614 if showembedded('<stdin>', lines, embeddedfunc, opts): |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
615 ret = 1 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
616 return ret |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
617 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
618 commands = {} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
619 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
620 def command(name, desc): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
621 def wrap(func): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
622 commands[name] = (desc, func) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
623 |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
624 return wrap |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
625 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
626 @command("pyembedded", "detect embedded python script") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
627 def pyembeddedcmd(args, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
628 return applyembedded(args, pyembedded, opts) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
629 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
630 @command("shembedded", "detect embedded shell script") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
631 def shembeddedcmd(args, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
632 return applyembedded(args, shembedded, opts) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
633 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
634 @command("hgrcembedded", "detect embedded hgrc configuration") |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
635 def hgrcembeddedcmd(args, opts): |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
636 return applyembedded(args, hgrcembedded, opts) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
637 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
638 availablecommands = "\n".join( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
639 [" - %s: %s" % (key, value[0]) for key, value in commands.items()] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
640 ) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
641 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
642 parser = optparse.OptionParser( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
643 """%prog COMMAND [file ...] |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
644 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
645 Pick up embedded code fragments from given file(s) or stdin, and list |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
646 up start/end lines of them in standard compiler format |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
647 ("FILENAME:LINENO:"). |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
648 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
649 Available commands are: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
650 """ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
651 + availablecommands |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
652 + """ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
653 """ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
654 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
655 parser.add_option( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
656 "-v", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
657 "--verbose", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
658 help="enable additional output (e.g. actual code)", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
659 action="store_true", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42391
diff
changeset
|
660 ) |
40093
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
661 (opts, args) = parser.parse_args() |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
662 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
663 if not args or args[0] not in commands: |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
664 parser.print_help() |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
665 sys.exit(255) |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
666 |
726cfc47f17a
contrib: add an utility module to parse test scripts
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
diff
changeset
|
667 sys.exit(commands[args[0]][1](args[1:], opts)) |