~jfb-tempo-consulting/unifield-wm/sync-env-py3

« back to all changes in this revision

Viewing changes to tests/__init__.py

  • Committer: Samus CTO
  • Date: 2012-08-28 12:38:31 UTC
  • Revision ID: cto@openerp.com-20120828123831-9dhavvjktnrl2p8d
[INIT]

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from os import path
 
2
import sys, traceback, re
 
3
from sys import stdout, stderr
 
4
from xmlrpclib import Fault, ProtocolError
 
5
 
 
6
 
 
7
## Continue raising exception
 
8
def raise_error():
 
9
    raise sys.exc_info()[0], sys.exc_info()[1]
 
10
 
 
11
 
 
12
## Make a test
 
13
class test(object):
 
14
    def __init__(self):
 
15
        self.reset()
 
16
 
 
17
    def __init__(self, name=None):
 
18
        if name != None: self.name = name
 
19
        self.reset()
 
20
 
 
21
    def next(self):
 
22
        if self.step == 'finally': return False
 
23
        next_possibilities = ['finally']
 
24
        if not self.failure():
 
25
            if self.next_step != None:
 
26
                next_possibilities.insert(0, self.next_step)
 
27
                self.next_step = None
 
28
            elif self.step == None:
 
29
                next_possibilities[:0] = [0, 1]
 
30
            elif isinstance(self.step, int):
 
31
                next_possibilities[:0] = [self.step + 1, 'finally']
 
32
        for step in next_possibilities:
 
33
            foo = "step_"+str(step)
 
34
            if hasattr(self, foo):
 
35
                self.step = step
 
36
                return True
 
37
        return False
 
38
 
 
39
    def reset(self):
 
40
        self.status = 'not-executed'
 
41
        self.step = None
 
42
        self.next_step = None
 
43
        self.reason = None
 
44
        self.traceback = None
 
45
 
 
46
    def failed(self, reason):
 
47
        self.status, self.reason = 'failed', reason
 
48
        self.fail_step = self.step
 
49
 
 
50
    def success(self):
 
51
        self.step = 0
 
52
        self.status = 'success'
 
53
 
 
54
    def failure(self):
 
55
        return self.status == 'failed'
 
56
 
 
57
    def execute(self):
 
58
        try:
 
59
            foo = getattr(self, "step_"+str(self.step))
 
60
        except:
 
61
            if self.step not in (0, 'finally', ): raise Exception, "Cannot find step `"+str(self.step)+"'!"
 
62
        else:
 
63
            if self.step == 'finally':
 
64
                try:
 
65
                    self.step_finally()
 
66
                except:
 
67
                    stderr.write("Warning: finally process failed.\n")
 
68
            else:
 
69
                self.status = 'execution'
 
70
                try:
 
71
                    self.next_step = foo()
 
72
                except Fault, e:
 
73
                    self.traceback = "\n".join(traceback.format_exc().splitlines()[0:-1]) + "\n" + e.faultString
 
74
                    self.failed('Fault: '+str(e.faultCode))
 
75
                ## TODO not tested
 
76
                except ProtocolError, e:
 
77
                    self.traceback = "\n".join(traceback.format_exc().splitlines()[0:-1]) + "\n" + e.faultString
 
78
                    self.failed('ProtocolError: %s: %s' % (e.errcode, e.errmsg,))
 
79
                except:
 
80
                    e, msg = sys.exc_info()[0].__name__, str(sys.exc_info()[1])
 
81
                    self.traceback = traceback.format_exc()
 
82
                    self.failed(e+(": "+msg if msg else ''))
 
83
 
 
84
    def run(self):
 
85
        stdout.write(self.name)
 
86
        stdout.flush()
 
87
        while self.next():
 
88
            self.execute()
 
89
            if not self.failure():
 
90
                stdout.write('.')
 
91
                stdout.flush()
 
92
        if not self.failure():
 
93
            stdout.write('pass\n')
 
94
            stdout.flush()
 
95
            self.success()
 
96
        else:
 
97
            stdout.write('fail ('+str(self.fail_step)+'/)\n')
 
98
 
 
99
 
 
100
## Make a serie of tests
 
101
class serie(test):
 
102
    def __init__(self):
 
103
        self.reset()
 
104
 
 
105
    def reset(self):
 
106
        self.step = None
 
107
        self.status = 'not-executed'
 
108
        self.reason = None
 
109
        self.traceback = None
 
110
        _temp = __import__(self.__module__, globals(), locals(), self.tests, -1)
 
111
        if not hasattr(self, 'classes'):
 
112
            self.classes = self.tests
 
113
        self.tests = [getattr(_temp, t)() for t in self.classes]
 
114
        self.it = iter(self.tests)
 
115
 
 
116
    def run(self):
 
117
        self.status = 'execution'
 
118
        stdout.write(self.name+'...\n')
 
119
        try:
 
120
            while True:
 
121
                self.execute()
 
122
        except StopIteration:
 
123
            if not self.failure():
 
124
                self.success()
 
125
        stdout.write(self.name+' ended.\n')
 
126
 
 
127
    def execute(self):
 
128
        foo = self.it.next()
 
129
        foo.run()
 
130
        if foo.failure():
 
131
            self.traceback = foo.traceback
 
132
            self.failed("Serie Test failure on test: "+foo.name+': '+(foo.reason or 'Unknown'))
 
133
            raise StopIteration
 
134
 
 
135
 
 
136
################################################################################
 
137
##
 
138
##  tests
 
139
##
 
140
##################
 
141
if __name__ == '__main__':
 
142
    class example(test):
 
143
        name = "My new test"
 
144
 
 
145
        def step_1(self):
 
146
            globals()['a'] = False
 
147
 
 
148
        def step_2(self):
 
149
            pass
 
150
 
 
151
        def step_3(self):
 
152
            pass
 
153
            raise StandardError
 
154
 
 
155
        def step_finally(self):
 
156
            #raise Exception
 
157
            globals()['a'] = True
 
158
 
 
159
    class myserie(serie):
 
160
        name = "My Test Serie"
 
161
        tests = ['example']
 
162
 
 
163
    s = myserie()
 
164
 
 
165
    s.run()
 
166
    if s.failure(): print s.reason
 
167
 
 
168
    print a
 
169