2 '''Script to run all tests using python "unittest" module'''
4 __author__
= "Miki Tebeka <miki.tebeka@zoran.com>"
6 from unittest
import TestCase
, main
, makeSuite
, TestSuite
7 from os
import popen
, environ
, remove
9 from sys
import executable
, argv
10 from os
.path
import isfile
, basename
, splitext
12 # Add path to lex.py and yacc.py
13 environ
["PYTHONPATH"] = ".."
15 class PLYTest(TestCase
):
16 '''General test case for PLY test'''
17 def _runtest(self
, filename
):
18 '''Run a single test file an compare result'''
19 exp_file
= filename
.replace(".py", ".exp")
20 self
.failUnless(isfile(exp_file
), "can't find %s" % exp_file
)
21 pipe
= popen("%s %s 2>&1" % (executable
, filename
))
22 out
= pipe
.read().strip()
23 self
.failUnlessEqual(out
, open(exp_file
).read().strip())
26 class LexText(PLYTest
):
30 class YaccTest(PLYTest
):
34 '''Cleanup parsetab.py[c] file'''
35 for ext
in (".py", ".pyc"):
36 fname
= "parsetab%s" % ext
40 def add_test(klass
, filename
):
41 '''Add a test to TestCase class'''
43 self
._runtest
(filename
)
44 # Test name is test_FILENAME without the ./ and without the .py
45 setattr(klass
, "test_%s" % (splitext(basename(filename
))[0]), t
)
48 for file in glob("./lex_*.py"):
49 add_test(LexText
, file)
50 lex_suite
= makeSuite(LexText
, "test_")
53 for file in glob("./yacc_*.py"):
54 add_test(YaccTest
, file)
55 yacc_suite
= makeSuite(YaccTest
, "test_")
58 test_suite
= TestSuite((lex_suite
, yacc_suite
))
60 if __name__
== "__main__":