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