source: orange/Orange/testing/regression/xtest_one.py @ 10291:889c01bd6c36

Revision 10291:889c01bd6c36, 5.3 KB checked in by Miha Stajdohar <miha.stajdohar@…>, 2 years ago (diff)

Some more tests fixed.

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