Statistiques
| Révision :

root / ase / test / __init__.py @ 1

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