8
8
from mkbuildoptglobals import extract_build_opt , InvalidSignature , InvalidSyntax
9
9
import contextlib
10
10
11
+
11
12
@contextlib .contextmanager
12
13
def buffer (init : str ):
13
14
yield io .StringIO (init ), io .StringIO ()
14
15
16
+
15
17
class TestExtractBuildOpt (unittest .TestCase ):
18
+ def testNoSource (self ):
19
+ src = io .StringIO ()
20
+ dst = io .StringIO ()
21
+
22
+ extract_build_opt ("anything.opt" , dst , src )
23
+ self .assertFalse (dst .getvalue ())
24
+
25
+ def testSomeSource (self ):
26
+ src = io .StringIO ("12345" )
27
+ dst = io .StringIO ()
28
+
29
+ extract_build_opt ("numbers.opt" , dst , src )
30
+ self .assertFalse (dst .getvalue ())
31
+
32
+ def testNoOpt (self ):
33
+ src = io .StringIO (
34
+ r"""
35
+ #include <cstdio>
36
+ int main() {
37
+ puts("hello world");
38
+ return 0;
39
+ }
40
+ """
41
+ )
42
+
43
+ dst = io .StringIO ()
44
+
45
+ extract_build_opt ("something.opt" , dst , src )
46
+ self .assertFalse (dst .getvalue ())
47
+
48
+ def testAfterOpt (self ):
49
+ src = io .StringIO (
50
+ r"""
51
+ int main() {
52
+ puts("hello world");
53
+ return 0;
54
+ }
55
+ /*@create-file:after.opt@
56
+ -fhello-world
57
+ */
58
+ """
59
+ )
60
+
61
+ dst = io .StringIO ()
62
+
63
+ extract_build_opt ("after.opt" , dst , src )
64
+ self .assertEqual ("-fhello-world\n " , dst .getvalue ())
65
+
66
+ def testEmptyBlock (self ):
67
+ src = io .StringIO (
68
+ r"""
69
+
70
+
71
+ /*@create-file:empty.opt@
72
+ */
73
+
74
+ """
75
+ )
76
+
77
+ dst = io .StringIO ()
78
+
79
+ extract_build_opt ("empty.opt" , dst , src )
80
+ self .assertFalse (dst .getvalue ())
81
+
16
82
def testParseOnce (self ):
17
83
src = io .StringIO (
18
- """
19
- /*@create-file:build .opt@
84
+ r """
85
+ /*@create-file:special .opt@
20
86
-fspecial-option
87
+ */
88
+ """
89
+ )
90
+
91
+ dst = io .StringIO ()
92
+
93
+ extract_build_opt ("special.opt" , dst , src )
94
+ self .assertEqual ("-fspecial-option\n " , dst .getvalue ())
95
+
96
+ def testParseOnceLines (self ):
97
+ src = io .StringIO (
98
+ r"""
99
+ /*@create-file:build.opt@
100
+ -DFOO="arbitrary definition 1"
101
+ #comment
102
+
103
+ // comment
104
+
105
+ -DBAR="arbitrary definition 2"
106
+ // finalize this
21
107
*/
22
108
"""
23
109
)
24
110
25
111
dst = io .StringIO ()
26
112
27
113
extract_build_opt ("build.opt" , dst , src )
28
- self .assertEqual ("-fspecial-option\n " , dst .getvalue ())
114
+ self .assertEqual (
115
+ '-DFOO="arbitrary definition 1"\n ' '-DBAR="arbitrary definition 2"\n ' ,
116
+ dst .getvalue (),
117
+ )
29
118
30
119
def testParseSecond (self ):
31
120
src = io .StringIO (
@@ -54,18 +143,20 @@ def testParseSecond(self):
54
143
def testMultiple (self ):
55
144
src = io .StringIO (
56
145
r"""
146
+ #include <cstdio>
147
+ int foo() { return 111; }
148
+
57
149
/*@ create-file:foo.opt @
58
150
-ffoo
59
151
*/
60
-
152
+ #define INTERMIXED_DATA
61
153
/*@create-file:foo.opt:debug@
62
154
-fbaz
63
155
*/
64
156
65
157
/*@create-file:bar.opt:debug@
66
158
-DUNUSED
67
159
*/
68
-
69
160
/*@create-file:foo.opt@
70
161
-mbar
71
162
*/
@@ -74,6 +165,7 @@ def testMultiple(self):
74
165
-DALSO_UNUSED
75
166
*/
76
167
168
+
77
169
"""
78
170
)
79
171
@@ -107,21 +199,21 @@ def testInvalidSignature(self):
107
199
with self .assertRaises (InvalidSignature ) as raises :
108
200
extract_build_opt ("bar.opt" , dst , src )
109
201
110
- self .assertEqual ( "" , dst .getvalue ())
202
+ self .assertFalse ( dst .getvalue ())
111
203
112
204
e = raises .exception
113
205
self .assertFalse (e .file )
114
206
self .assertEqual (12 , e .lineno )
115
207
self .assertEqual ("/*@make-file:bar.opt@\n " , e .line )
116
208
117
- def testPartialDest (self ):
209
+ def testPartialInvalidSyntax (self ):
118
210
src = io .StringIO (
119
211
r"""
120
- /*@create-file:foo .opt@
212
+ /*@create-file:syntax .opt@
121
213
-DIMPORTANT_FLAG
122
214
-DANOTHER_FLAG=123
123
215
*/
124
- /*@ create-file:foo .opt @
216
+ /*@ create-file:syntax .opt @
125
217
/*@oops
126
218
-mthis-fails
127
219
*/
@@ -130,29 +222,60 @@ def testPartialDest(self):
130
222
131
223
dst = io .StringIO ()
132
224
with self .assertRaises (InvalidSyntax ) as raises :
133
- extract_build_opt ("foo.opt" , dst , src )
225
+ extract_build_opt ("syntax.opt" , dst , src )
226
+
227
+ self .assertFalse (dst .getvalue ())
134
228
135
229
e = raises .exception
136
230
self .assertFalse (e .file )
137
231
self .assertEqual (7 , e .lineno )
138
232
self .assertEqual ("/*@oops\n " , e .line )
139
- self .assertEqual ("-DIMPORTANT_FLAG\n -DANOTHER_FLAG=123\n " , dst .getvalue ())
233
+
234
+ def testPartialUnclosed (self ):
235
+ src = io .StringIO (
236
+ r"""
237
+ /*@create-file:unclosed.opt@
238
+ line 1
239
+ line 2
240
+ """
241
+ )
242
+ dst = io .StringIO ()
243
+ with self .assertRaises (InvalidSyntax ) as raises :
244
+ extract_build_opt ("unclosed.opt" , dst , src )
245
+
246
+ self .assertFalse (dst .getvalue ())
140
247
141
248
def testParseSignatureSpace (self ):
142
- with buffer (r"""
249
+ with buffer (
250
+ r"""
143
251
/*@ create-file:test.opt @
144
252
-ftest-test-test
145
253
*/
146
- """ ) as (src , dst ):
254
+ """
255
+ ) as (src , dst ):
147
256
extract_build_opt ("test.opt" , dst , src )
148
257
self .assertEqual ("-ftest-test-test\n " , dst .getvalue ())
149
258
150
- with buffer (r"""
259
+ with buffer (
260
+ r"""
151
261
/*@create-file:test.opt
152
262
@
153
263
-ftest-test-test
154
264
*/
155
- """ ) as (src , dst ):
265
+ """
266
+ ) as (src , dst ):
267
+ with self .assertRaises (InvalidSyntax ) as raises :
268
+ extract_build_opt ("test.opt" , dst , src )
269
+
270
+ self .assertFalse (dst .getvalue ())
271
+
272
+ with buffer (
273
+ r"""
274
+ /*@create-file:test.opt
275
+ -ftest-test-test
276
+ */
277
+ """
278
+ ) as (src , dst ):
156
279
with self .assertRaises (InvalidSyntax ) as raises :
157
280
extract_build_opt ("test.opt" , dst , src )
158
281
0 commit comments