source: orange/Orange/testing/unit/tests/test_regression.py @ 10655:a228b55811a4

Revision 10655:a228b55811a4, 3.6 KB checked in by markotoplak, 2 years ago (diff)

Moved testing from utils into testing.

Line 
1import sys
2import os.path
3try:
4    import unittest2 as unittest
5except:
6    import unittest
7import subprocess
8
9from Orange.utils import environ
10from Orange.testing import testing
11
12
13class TestRegression(unittest.TestCase):
14
15    PLATFORM = sys.platform
16    PYVERSION = sys.version[:3]
17    STATES = ["OK", "timedout", "changed", "random", "error", "crash"]
18
19    def setUp(self):
20        pass
21
22    def test_regression_on(self, roottest, indir, outdir, name):
23        for state in TestRegression.STATES:
24            remname = "%s/%s.%s.%s.%s.txt" % \
25                                (outdir, name, TestRegression.PLATFORM, \
26                                 TestRegression.PYVERSION, state)
27            if os.path.exists(remname):
28                os.remove(remname)
29
30        tmpdir = os.getcwd().replace("\\", "/")
31        os.chdir(indir)
32        p = subprocess.Popen([sys.executable,
33                              os.path.join(roottest, "xtest_one.py"),
34                              name, "1", outdir],
35                              stdout=subprocess.PIPE,
36                              stderr=subprocess.PIPE)
37
38        stdout, stderr = p.communicate()
39        rv = stdout.strip().lower()
40        self.assertEqual(rv, "ok", "Regression test %s: %s" % (rv, name) \
41                        if stderr == "" else \
42                        "Regression test %s: %s\n\n%s" % (rv, name, stderr))
43        os.chdir(tmpdir)
44
45root = os.path.normpath(os.path.join(environ.install_dir, ".."))
46roottest = os.path.join(root, "Orange/testing/regression")
47
48dirs = [("tests", "Orange/testing/regression/tests"),
49        ("tests_20", "Orange/testing/regression/tests_20"),
50        ("tutorial", "docs/tutorial/rst/code"),
51        ("reference", "docs/reference/rst/code")]
52
53for dirname, indir in dirs:
54    indir = os.path.join(root, indir)
55    outdir = "%s/results_%s" % (roottest, dirname)
56
57    if not os.path.exists(outdir):
58        os.mkdir(outdir)
59
60    exclude = os.path.join(indir, "exclude-from-regression.txt")
61    dont_test = [x.strip() for x in file(exclude).readlines()] if \
62                                        os.path.exists(exclude) else []
63    test_set = []
64    names = sorted([name for name in os.listdir(indir) if \
65                    name[-3:] == ".py"and name not in dont_test])
66
67    for name in names:
68        if not os.path.exists(os.path.join(outdir, name + ".txt")):
69            # past result not available
70            test_set.append((name, "new"))
71        else:
72            # past result available
73            for state in TestRegression.STATES:
74                if os.path.exists("%s/%s.%s.%s.%s.txt" % \
75                               (outdir, name, TestRegression.PLATFORM, \
76                                TestRegression.PYVERSION, state)):
77                    test_set.append((name, state))
78                    # current result already on disk
79                    break
80            else:
81                if os.path.exists("%s/%s.%s.%s.random1.txt" % \
82                                  (outdir, name, TestRegression.PLATFORM, \
83                                   TestRegression.PYVERSION)):
84                    test_set.append((name, "random"))
85                else:
86                    test_set.append((name, "OK"))
87
88    for name, last_res in test_set:
89        newname, func = testing._expanded(TestRegression.test_regression_on,
90                                           "%s_%s" % (dirname, name[:-3]),
91                                           (roottest, indir, outdir, name))
92        setattr(TestRegression, newname, func)
93
94setattr(TestRegression, "test_regression_on", None)
95func = None
96
97if __name__ == "__main__":
98    unittest.main()
Note: See TracBrowser for help on using the repository browser.