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 |