| #!/usr/bin/env python |
| '''Script to run all tests using python "unittest" module''' |
| |
| __author__ = "Miki Tebeka <miki.tebeka@zoran.com>" |
| |
| from unittest import TestCase, main, makeSuite, TestSuite |
| from os import popen, environ, remove |
| from glob import glob |
| from sys import executable, argv |
| from os.path import isfile, basename, splitext |
| |
| # Add path to lex.py and yacc.py |
| environ["PYTHONPATH"] = ".." |
| |
| class PLYTest(TestCase): |
| '''General test case for PLY test''' |
| def _runtest(self, filename): |
| '''Run a single test file an compare result''' |
| exp_file = filename.replace(".py", ".exp") |
| self.failUnless(isfile(exp_file), "can't find %s" % exp_file) |
| pipe = popen("%s %s 2>&1" % (executable, filename)) |
| out = pipe.read().strip() |
| self.failUnlessEqual(out, open(exp_file).read().strip()) |
| |
| |
| class LexText(PLYTest): |
| '''Testing Lex''' |
| pass |
| |
| class YaccTest(PLYTest): |
| '''Testing Yacc''' |
| |
| def tearDown(self): |
| '''Cleanup parsetab.py[c] file''' |
| for ext in (".py", ".pyc"): |
| fname = "parsetab%s" % ext |
| if isfile(fname): |
| remove(fname) |
| |
| def add_test(klass, filename): |
| '''Add a test to TestCase class''' |
| def t(self): |
| self._runtest(filename) |
| # Test name is test_FILENAME without the ./ and without the .py |
| setattr(klass, "test_%s" % (splitext(basename(filename))[0]), t) |
| |
| # Add lex tests |
| for file in glob("./lex_*.py"): |
| add_test(LexText, file) |
| lex_suite = makeSuite(LexText, "test_") |
| |
| # Add yacc tests |
| for file in glob("./yacc_*.py"): |
| add_test(YaccTest, file) |
| yacc_suite = makeSuite(YaccTest, "test_") |
| |
| # All tests suite |
| test_suite = TestSuite((lex_suite, yacc_suite)) |
| |
| if __name__ == "__main__": |
| main() |
| |