root / ase / test / __init__.py @ 4
Historique | Voir | Annoter | Télécharger (2,63 ko)
| 1 | 1 | tkerber | import sys |
|---|---|---|---|
| 2 | 1 | tkerber | import unittest |
| 3 | 1 | tkerber | from glob import glob |
| 4 | 1 | tkerber | |
| 5 | 1 | tkerber | class NotAvailable(SystemExit): |
| 6 | 1 | tkerber | def __init__(self, msg, code=0): |
| 7 | 1 | tkerber | SystemExit.__init__(self, (msg,code,)) |
| 8 | 1 | tkerber | self.msg = msg
|
| 9 | 1 | tkerber | self.code = code
|
| 10 | 1 | tkerber | |
| 11 | 1 | tkerber | # -------------------------------------------------------------------
|
| 12 | 1 | tkerber | |
| 13 | 1 | tkerber | # Custom test case/suite for embedding unittests in the test scripts
|
| 14 | 1 | tkerber | |
| 15 | 1 | tkerber | if sys.version_info < (2, 4, 0, 'final', 0): |
| 16 | 1 | tkerber | class CustomTestCase(unittest.TestCase): |
| 17 | 1 | tkerber | assertTrue = unittest.TestCase.failUnless |
| 18 | 1 | tkerber | assertFalse = unittest.TestCase.failIf |
| 19 | 1 | tkerber | else:
|
| 20 | 1 | tkerber | from unittest import TestCase as CustomTestCase |
| 21 | 1 | tkerber | |
| 22 | 1 | tkerber | from ase.parallel import paropen |
| 23 | 1 | tkerber | |
| 24 | 1 | tkerber | class CustomTextTestRunner(unittest.TextTestRunner): |
| 25 | 1 | tkerber | def __init__(self, logname, descriptions=1, verbosity=1): |
| 26 | 1 | tkerber | self.f = paropen(logname, 'w') |
| 27 | 1 | tkerber | unittest.TextTestRunner.__init__(self, self.f, descriptions, verbosity) |
| 28 | 1 | tkerber | |
| 29 | 1 | tkerber | def run(self, test): |
| 30 | 1 | tkerber | stderr_old = sys.stderr |
| 31 | 1 | tkerber | try:
|
| 32 | 1 | tkerber | sys.stderr = self.f
|
| 33 | 1 | tkerber | testresult = unittest.TextTestRunner.run(self, test)
|
| 34 | 1 | tkerber | finally:
|
| 35 | 1 | tkerber | sys.stderr = stderr_old |
| 36 | 1 | tkerber | return testresult
|
| 37 | 1 | tkerber | |
| 38 | 1 | tkerber | # -------------------------------------------------------------------
|
| 39 | 1 | tkerber | |
| 40 | 1 | tkerber | class ScriptTestCase(unittest.TestCase): |
| 41 | 1 | tkerber | def __init__(self, methodname='testfile', filename=None, display=True): |
| 42 | 1 | tkerber | unittest.TestCase.__init__(self, methodname)
|
| 43 | 1 | tkerber | self.filename = filename
|
| 44 | 1 | tkerber | self.display = display
|
| 45 | 1 | tkerber | |
| 46 | 1 | tkerber | def testfile(self): |
| 47 | 1 | tkerber | try:
|
| 48 | 1 | tkerber | execfile(self.filename, {'display': self.display}) |
| 49 | 1 | tkerber | except KeyboardInterrupt: |
| 50 | 1 | tkerber | raise RuntimeError('Keyboard interrupt') |
| 51 | 1 | tkerber | except NotAvailable, err:
|
| 52 | 1 | tkerber | # Only non-zero error codes are failures
|
| 53 | 1 | tkerber | if err.code:
|
| 54 | 1 | tkerber | raise
|
| 55 | 1 | tkerber | |
| 56 | 1 | tkerber | def id(self): |
| 57 | 1 | tkerber | return self.filename |
| 58 | 1 | tkerber | |
| 59 | 1 | tkerber | def __str__(self): |
| 60 | 1 | tkerber | return '%s (ScriptTestCase)' % self.filename.split('/')[-1] |
| 61 | 1 | tkerber | |
| 62 | 1 | tkerber | def __repr__(self): |
| 63 | 1 | tkerber | return "ScriptTestCase(filename='%s')" % self.filename |
| 64 | 1 | tkerber | |
| 65 | 1 | tkerber | |
| 66 | 1 | tkerber | def test(verbosity=1, dir=None, display=True, stream=sys.stdout): |
| 67 | 1 | tkerber | ts = unittest.TestSuite() |
| 68 | 1 | tkerber | if dir is None: |
| 69 | 1 | tkerber | dir = __path__[0]
|
| 70 | 1 | tkerber | tests = glob(dir + '/*.py') |
| 71 | 1 | tkerber | tests.sort() |
| 72 | 1 | tkerber | for test in tests: |
| 73 | 1 | tkerber | if test.endswith('__init__.py'): |
| 74 | 1 | tkerber | continue
|
| 75 | 1 | tkerber | if test.endswith('COCu111.py'): |
| 76 | 1 | tkerber | lasttest = test |
| 77 | 1 | tkerber | continue
|
| 78 | 1 | tkerber | ts.addTest(ScriptTestCase(filename=test, display=display)) |
| 79 | 1 | tkerber | ts.addTest(ScriptTestCase(filename=lasttest, display=display)) |
| 80 | 1 | tkerber | |
| 81 | 1 | tkerber | from ase.utils import devnull |
| 82 | 1 | tkerber | sys.stdout = devnull |
| 83 | 1 | tkerber | |
| 84 | 1 | tkerber | ttr = unittest.TextTestRunner(verbosity=verbosity, stream=stream) |
| 85 | 1 | tkerber | results = ttr.run(ts) |
| 86 | 1 | tkerber | |
| 87 | 1 | tkerber | sys.stdout = sys.__stdout__ |
| 88 | 1 | tkerber | |
| 89 | 1 | tkerber | return results |