Bug 458861. Validate TrueType headers before activating downloaded font. r=roc, sr...
[wine-gecko.git] / config / tests / unit-Preprocessor.py
blob6bcf41b739f1cee0b484d46d83ef1889421752b8
1 import unittest
3 from StringIO import StringIO
4 import os
5 import sys
6 import os.path
7 sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
9 from Preprocessor import Preprocessor
11 class NamedIO(StringIO):
12 def __init__(self, name, content):
13 self.name = name
14 StringIO.__init__(self, content)
16 class TestPreprocessor(unittest.TestCase):
17 """
18 Unit tests for the Context class
19 """
21 def setUp(self):
22 self.pp = Preprocessor()
23 self.pp.out = StringIO()
25 def test_conditional_if_0(self):
26 f = NamedIO("conditional_if_0.in", """#if 0
27 FAIL
28 #else
29 PASS
30 #endif
31 """)
32 self.pp.do_include(f)
33 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
35 def test_string_value(self):
36 f = NamedIO("string_value.in", """#define FOO STRING
37 #if FOO
38 string value is true
39 #else
40 string value is false
41 #endif
42 """)
43 self.pp.do_include(f)
44 self.assertEqual(self.pp.out.getvalue(), "string value is false\n")
46 def test_number_value(self):
47 f = NamedIO("string_value.in", """#define FOO 1
48 #if FOO
49 number value is true
50 #else
51 number value is false
52 #endif
53 """)
54 self.pp.do_include(f)
55 self.assertEqual(self.pp.out.getvalue(), "number value is true\n")
57 def test_conditional_if_0_elif_1(self):
58 f = NamedIO('conditional_if_0_elif_1.in', '''#if 0
59 #elif 1
60 PASS
61 #else
62 FAIL
63 #endif
64 ''')
65 self.pp.do_include(f)
66 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
68 def test_conditional_if_1(self):
69 f = NamedIO('conditional_if_1.in', '''#if 1
70 PASS
71 #else
72 FAILE
73 #endif
74 ''')
75 self.pp.do_include(f)
76 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
78 def test_conditional_if_1_elif_1_else(self):
79 f = NamedIO('conditional_if_1_elif_1_else.in', '''#if 1
80 PASS
81 #elif 1
82 FAIL
83 #else
84 FAIL
85 #endif
86 ''')
87 self.pp.do_include(f)
88 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
90 def test_conditional_if_1_if_1(self):
91 f = NamedIO('conditional_if_1_if_1.in', '''#if 1
92 #if 1
93 PASS
94 #else
95 FAIL
96 #endif
97 #else
98 FAIL
99 #endif
100 ''')
101 self.pp.do_include(f)
102 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
104 def test_conditional_not_0(self):
105 f = NamedIO('conditional_not_0.in', '''#if !0
106 PASS
107 #else
108 FAIL
109 #endif
110 ''')
111 self.pp.do_include(f)
112 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
114 def test_conditional_not_1(self):
115 f = NamedIO('conditional_not_1.in', '''#if !1
116 FAIL
117 #else
118 PASS
119 #endif
120 ''')
121 self.pp.do_include(f)
122 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
124 def test_conditional_not_emptyval(self):
125 f = NamedIO('conditional_not_emptyval.in', '''#define EMPTYVAL
126 #if !EMPTYVAL
127 FAIL
128 #else
129 PASS
130 #endif
131 #if EMPTYVAL
132 PASS
133 #else
134 FAIL
135 #endif
136 ''')
137 self.pp.do_include(f)
138 self.assertEqual(self.pp.out.getvalue(), "PASS\nPASS\n")
140 def test_conditional_not_nullval(self):
141 f = NamedIO('conditional_not_nullval.in', '''#define NULLVAL 0
142 #if !NULLVAL
143 PASS
144 #else
145 FAIL
146 #endif
147 ''')
148 self.pp.do_include(f)
149 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
151 def test_expand(self):
152 f = NamedIO('expand.in', '''#define ASVAR AS
153 #expand P__ASVAR__S
154 ''')
155 self.pp.do_include(f)
156 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
158 def test_undef_defined(self):
159 f = NamedIO('undef_defined.in', '''#define BAR
160 #undef BAR
162 ''')
163 self.pp.do_include(f)
164 self.assertEqual(self.pp.out.getvalue(), "BAR\n")
166 def test_undef_undefined(self):
167 f = NamedIO('undef_undefined.in', '''#undef VAR
168 ''')
169 self.pp.do_include(f)
170 self.assertEqual(self.pp.out.getvalue(), "")
172 def test_filter_attemptSubstitution(self):
173 f = NamedIO('filter_attemptSubstitution.in', '''#filter attemptSubstitution
174 P@VAR@ASS
175 #unfilter attemptSubstitution
176 ''')
177 self.pp.do_include(f)
178 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
180 def test_filter_emptyLines(self):
181 f = NamedIO('filter_emptyLines.in', '''lines with a
183 blank line
184 #filter emptyLines
185 lines with
187 no blank lines
188 #unfilter emptyLines
189 yet more lines with
191 blank lines
192 ''')
193 self.pp.do_include(f)
194 self.assertEqual(self.pp.out.getvalue(), '''lines with a
196 blank line
197 lines with
198 no blank lines
199 yet more lines with
201 blank lines
202 ''')
204 def test_filter_slashslash(self):
205 f = NamedIO('filter_slashslash.in', '''#filter slashslash
206 PASS//FAIL // FAIL
207 #unfilter slashslash
208 PASS // PASS
209 ''')
210 self.pp.do_include(f)
211 self.assertEqual(self.pp.out.getvalue(), "PASS\nPASS // PASS\n")
213 def test_filter_spaces(self):
214 f = NamedIO('filter_spaces.in', '''#filter spaces
215 You should see two nice ascii tables
216 +-+-+-+
217 | | | |
218 +-+-+-+
219 #unfilter spaces
220 +-+---+
221 | | |
222 +-+---+
223 ''')
224 self.pp.do_include(f)
225 self.assertEqual(self.pp.out.getvalue(), """You should see two nice ascii tables
226 +-+-+-+
227 | | | |
228 +-+-+-+
229 +-+---+
230 | | |
231 +-+---+
232 """)
234 def test_filter_substitution(self):
235 f = NamedIO('filter_substitution.in', '''#define VAR ASS
236 #filter substitution
237 P@VAR@
238 #unfilter substitution
239 ''')
240 self.pp.do_include(f)
241 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
243 def test_error(self):
244 f = NamedIO('error.in', '''#error spit this message out
245 ''')
246 caught_msg = None
247 try:
248 self.pp.do_include(f)
249 except Preprocessor.Error, e:
250 caught_msg = e.args[0][-1]
251 self.assertEqual(caught_msg, 'spit this message out')
253 def test_javascript_line(self):
254 f = NamedIO('javascript_line.js.in', '''// Line 1
255 #if 0
256 // line 3
257 #endif
258 // line 5
259 # comment
260 // line 7
261 // line 8
262 // line 9
263 # another comment
264 // line 11
265 #define LINE 1
266 // line 13, given line number overwritten with 2
267 ''')
268 self.pp.do_include(f)
269 out = """// Line 1
270 //@line 5 "CWDjavascript_line.js.in"
271 // line 5
272 //@line 7 "CWDjavascript_line.js.in"
273 // line 7
274 // line 8
275 // line 9
276 //@line 11 "CWDjavascript_line.js.in"
277 // line 11
278 //@line 2 "CWDjavascript_line.js.in"
279 // line 13, given line number overwritten with 2
281 out = out.replace('CWD', os.getcwd() + os.path.sep)
282 self.assertEqual(self.pp.out.getvalue(), out)
284 def test_literal(self):
285 f = NamedIO('literal.in', '''#literal PASS
286 ''')
287 self.pp.do_include(f)
288 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
290 def test_var_directory(self):
291 f = NamedIO('var_directory.in', '''#ifdef DIRECTORY
292 PASS
293 #else
294 FAIL
295 #endif
296 ''')
297 self.pp.do_include(f)
298 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
300 def test_var_file(self):
301 f = NamedIO('var_file.in', '''#ifdef FILE
302 PASS
303 #else
304 FAIL
305 #endif
306 ''')
307 self.pp.do_include(f)
308 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
310 def test_var_if_0(self):
311 f = NamedIO('var_if_0.in', '''#define VAR 0
312 #if VAR
313 FAIL
314 #else
315 PASS
316 #endif
317 ''')
318 self.pp.do_include(f)
319 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
321 def test_var_if_0_elifdef(self):
322 f = NamedIO('var_if_0_elifdef.in', '''#if 0
323 #elifdef FILE
324 PASS
325 #else
326 FAIL
327 #endif
328 ''')
329 self.pp.do_include(f)
330 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
332 def test_var_if_0_elifndef(self):
333 f = NamedIO('var_if_0_elifndef.in', '''#if 0
334 #elifndef VAR
335 PASS
336 #else
337 FAIL
338 #endif
339 ''')
340 self.pp.do_include(f)
341 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
343 def test_var_ifdef_0(self):
344 f = NamedIO('var_ifdef_0.in', '''#define VAR 0
345 #ifdef VAR
346 PASS
347 #else
348 FAIL
349 #endif
350 ''')
351 self.pp.do_include(f)
352 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
354 def test_var_ifdef_undef(self):
355 f = NamedIO('var_ifdef_undef.in', '''#define VAR 0
356 #undef VAR
357 #ifdef VAR
358 FAIL
359 #else
360 PASS
361 #endif
362 ''')
363 self.pp.do_include(f)
364 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
366 def test_var_ifndef_0(self):
367 f = NamedIO('var_ifndef_0.in', '''#define VAR 0
368 #ifndef VAR
369 FAIL
370 #else
371 PASS
372 #endif
373 ''')
374 self.pp.do_include(f)
375 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
377 def test_var_ifndef_undef(self):
378 f = NamedIO('var_ifndef_undef.in', '''#define VAR 0
379 #undef VAR
380 #ifndef VAR
381 PASS
382 #else
383 FAIL
384 #endif
385 ''')
386 self.pp.do_include(f)
387 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
389 def test_var_line(self):
390 f = NamedIO('var_line.in', '''#ifdef LINE
391 PASS
392 #else
393 FAIL
394 #endif
395 ''')
396 self.pp.do_include(f)
397 self.assertEqual(self.pp.out.getvalue(), "PASS\n")
399 def test_lineEndings(self):
400 f = NamedIO('lineEndings.in', '''first
401 #literal second
402 ''')
403 self.pp.setLineEndings('cr')
404 self.pp.do_include(f)
405 self.assertEqual(self.pp.out.getvalue(), "first\rsecond\r")
407 if __name__ == '__main__':
408 unittest.main()