source: orange/Orange/testing/regression/xtest_one.py @ 10634:1ebc6f592252

Revision 10634:1ebc6f592252, 5.6 KB checked in by mstajdohar, 2 years ago (diff)

Fixed some more obsolete stuff and added ignore DeprecationWarning on tutorial tests.

Line 
1import sys as t__sys
2import traceback as t__traceback
3import string as t__string
4import os as t__os
5
6from Orange.core import AttributeWarning
7
8#ignore warnings
9import warnings as t__warnings
10t__warnings.filterwarnings("ignore", "", AttributeWarning)
11
12#from numpy import seterr
13#seterr(all='raise')
14
15NO_RANDOMNESS = 1 # prevent random parts of scripts to run
16
17def t__isdigit(c):
18    return c in "0123456789"
19
20def t__samefiles(name1, name2):
21    equal = 1
22    try:
23        fnew, fold = open(name1, "rt"), open(name2, "rt")
24        lines1 = [t__string.rstrip(x) for x in fnew.readlines()]
25        lines2 = [t__string.rstrip(x) for x in fold.readlines()]
26    finally:
27        fnew.close()
28        fold.close()
29
30    if lines1 == lines2:
31        return 1
32    if len(lines1) != len(lines2):
33        return 0
34    for l in range(len(lines1)):
35        line1, line2 = lines1[l], lines2[l]
36        if line1 != line2:
37            if len(line1) != len(line2):
38                return 0
39            i = 0
40            while i < len(line1):
41                if line1[i] != line2[i]:
42                    j = i
43                    while i < len(line1) and t__isdigit(line1[i]):
44                        i += 1
45                    if i == j:
46                        return 0
47                    while j >= 0 and t__isdigit(line1[j]):
48                        j -= 1
49                    if j < 0 or line1[j] != ".":
50                        return 0
51                    j -= 1
52                    while j >= 0 and t__isdigit(line1[j]):
53                        j -= 1
54                    if (j >= 0) and (line1[j] in "+-"):
55                        j -= 1
56                    n1, n2 = line1[j + 1:i], line2[j + 1:i]
57                    if n1.count(".") != n2.count("."):
58                        return 0
59                    for c in n2:
60                        if not c in "0123456789.+- ":
61                            return 0
62                    maxdiff = 1.5 * (.1 ** (len(n1) - n1.find(".") - 1))
63                    if abs(float(n1) - float(n2)) > maxdiff:
64                        return 0
65                else:
66                    i += 1
67    return 1
68
69
70def t__copyfile(src, dst):
71    try:
72        srcf = open(src, "rt")
73        dstf = open(dst, "wt")
74        dstf.write(srcf.read())
75    finally:
76        srcf.close()
77        dstf.close()
78
79t__sys.path.append(".")
80
81# Arguments: name, #iterations, runNo, isNewFile, outputsdir
82
83t__name = t__sys.argv[1]
84t__iterations = int(t__sys.argv[2])
85t__outputsdir = t__sys.argv[3]
86
87# when testing backward compatibility support suppress deprecation warnings
88if "tests_20" in t__outputsdir or "tutorial" in t__outputsdir:
89    t__warnings.filterwarnings("ignore", category=DeprecationWarning)
90
91t__timedoutname, t__crashname, t__errorname, t__newname, t__changedname, t__random1name, t__random2name = ["%s/%s.%s.%s.%s.txt" % (t__outputsdir, t__name, t__sys.platform, t__sys.version[:3], t) for t in ["timedout", "crash", "error", "new", "changed", "random1", "random2"]]
92t__officialname = "%s/%s.%s.%s.txt" % (t__outputsdir, t__name, t__sys.platform, t__sys.version[:3])
93if not t__os.path.exists(t__officialname):
94    t__officialname = "%s/%s.%s.txt" % (t__outputsdir, t__name, t__sys.platform)
95    if not t__os.path.exists(t__officialname):
96        t__officialname = "%s/%s.txt" % (t__outputsdir, t__name)
97
98t__isNewFile = not t__os.path.exists(t__officialname)
99
100t__message = open("xtest1_report", "wt")
101
102t__isChanged = False
103
104for t__iteration in range(t__iterations):
105    if t__iterations > 1:
106        print t__iteration + 1,
107
108    try:
109        t__fnew = open(t__crashname, "wt")
110        t__sout = t__sys.stdout
111        t__serr = t__sys.stderr
112        try:
113            t__sys.stdout = t__sys.stderr = t__fnew
114            execfile(t__name)
115
116        except Exception, e:
117            # execution ended with an error
118            apply(t__traceback.print_exception, t__sys.exc_info())
119            t__sys.stdout = t__sout
120            t__sys.stderr = t__serr
121            t__fnew.close()
122
123            t__message.write("error\n%i\n" % t__iteration)
124            print "error"
125            t__message.write(reduce(lambda x, y: x + y, apply(t__traceback.format_exception, t__sys.exc_info())))
126            t__sys.stderr.write(reduce(lambda x, y: x + y, apply(t__traceback.format_exception, t__sys.exc_info())))
127            t__message.close()
128            t__sys.exit(1)
129
130        t__sys.stdout = t__sout
131        t__sys.stderr = t__serr
132    finally:
133        t__fnew.close()
134
135    if not t__iteration:
136        # first iteration
137        if t__isNewFile:
138            # the file is a new files and this has been the first iteration
139            t__os.rename(t__crashname, t__newname)
140            t__copyfile(t__newname, t__officialname)
141            t__prevname = t__newname
142        elif not t__samefiles(t__crashname, t__officialname):
143            # it's an old file and it has changed
144            t__os.rename(t__crashname, t__changedname)
145            t__prevname = t__changedname
146            t__isChanged = True
147        else:
148            # file is OK
149            t__os.remove(t__crashname)
150            t__prevname = t__officialname
151    else:
152        if not t__samefiles(t__crashname, t__prevname):
153            # random file (either new or old)
154            t__copyfile(t__prevname, t__random1name)
155            t__os.rename(t__crashname, t__random2name)
156            t__message.write("random\n")
157            print "random"
158            t__message.close()
159            t__sys.exit(2)
160        else:
161            t__os.remove(t__crashname) # iterate on with same file
162
163if t__isChanged:
164    t__message.write("changed")
165    print "changed"
166    t__message.close()
167    t__sys.exit(3)
168
169t__message.write("OK")
170print "OK"
171t__message.close()
172t__sys.exit(0)
Note: See TracBrowser for help on using the repository browser.