Mercurial > hg
annotate contrib/testparseutil.py @ 49487:e8481625c582
rust: add Debug constraint to Matcher trait
This makes sure we can easily debug which Matcher we're looking at when using
trait objects, and is just generally useful. Effort to make the debugging
output nicer has been kept to a minimum, please feel free to improve.
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Mon, 11 Jul 2022 11:59:13 +0200 |
parents | 642e31cb55f0 |
children | cd3b8fd1d3eb |
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 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
82 class embeddedmatcher: # 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 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
159 >>> class ambigmatcher: |
40093
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)) |