3 from StringIO
import StringIO
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
):
14 StringIO
.__init
__(self
, content
)
16 class TestPreprocessor(unittest
.TestCase
):
18 Unit tests for the Context class
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
33 self
.assertEqual(self
.pp
.out
.getvalue(), "PASS\n")
35 def test_string_value(self
):
36 f
= NamedIO("string_value.in", """#define FOO STRING
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
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
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
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
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
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
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
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
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
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
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
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
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
175 #unfilter attemptSubstitution
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
193 self
.pp
.do_include(f
)
194 self
.assertEqual(self
.pp
.out
.getvalue(), '''lines with a
204 def test_filter_slashslash(self
):
205 f
= NamedIO('filter_slashslash.in', '''#filter slashslash
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
224 self
.pp
.do_include(f
)
225 self
.assertEqual(self
.pp
.out
.getvalue(), """You should see two nice ascii tables
234 def test_filter_substitution(self
):
235 f
= NamedIO('filter_substitution.in', '''#define VAR ASS
238 #unfilter substitution
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
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
266 // line 13, given line number overwritten with 2
268 self
.pp
.do_include(f
)
270 //@line 5 "CWDjavascript_line.js.in"
272 //@line 7 "CWDjavascript_line.js.in"
276 //@line 11 "CWDjavascript_line.js.in"
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
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
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
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
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
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
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
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
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
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
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
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
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__':