source: orange/Orange/testing/regression/xtest_one.py @ 10626:3cc8c9fe520a

Revision 10626:3cc8c9fe520a, 5.5 KB checked in by mstajdohar, 2 years ago (diff)

Fail test on warnings except for DeprecationWarning on old tests and AttributeWarning.

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