1 #Copyright (C) 2008 Codethink Ltd
3 #his program is free software; you can redistribute it and/or modify
4 #it under the terms of the GNU General Public License as published by
5 #the Free Software Foundation; either version 2 of the License, or
6 #(at your option) any later version.
8 #This program is distributed in the hope that it will be useful,
9 #but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 #GNU General Public License for more details.
12 #You should have received a copy of the GNU General Public License
13 #along with this program; if not, write to the Free Software
14 #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 from Events import Events
21 PASY_TEST_NOT_STARTED = 0
22 PASY_TEST_IN_PROGRESS = 1
26 class PasyEvents(Events):
27 __events__ = ('finished', )
29 class PasyTestStep(object):
31 def __init__(self, name):
32 self.events = PasyEvents()
33 self._state = PASY_TEST_NOT_STARTED
38 if self._state == PASY_TEST_IN_PROGRESS:
39 self._state = PASY_TEST_WIN
40 self.events.finished()
43 if self._state == PASY_TEST_IN_PROGRESS:
44 self._state = PASY_TEST_FAIL
46 self.events.finished()
48 def assertEqual(self, a, b, msg):
53 self._state = PASY_TEST_IN_PROGRESS
57 if self._state == PASY_TEST_WIN:
58 return "%s - PASSED" % (self._name,)
59 elif self._state == PASY_TEST_FAIL:
60 return "%s - FAILED - %s" % (self._name, self.failMsg)
62 return "%s - INCOMPLETE" %s (self._name,)
68 class PasyTestFunc(PasyTestStep):
70 def __init__(self, name, func):
71 PasyTestStep.__init__(self, name)
82 class PasyTest(PasyTestStep):
86 def __init__(self, name, cont):
87 PasyTestStep.__init__(self, name)
92 for name in self.__tests__:
93 func = getattr(self, name)
94 self._addfunc(func.func_name, func)
96 def _addfunc(self, name, func):
97 functest = PasyTestFunc(func.func_name, func)
98 self._tests.append(functest)
101 self._iter = self._test_iterator()
102 gobject.idle_add(self.idle_handler)
104 def idle_handler(self):
106 step = self._iter.next()
107 def finished_handler():
108 if step.state == PASY_TEST_WIN or self._cont == True:
109 gobject.idle_add(self.idle_handler)
110 elif step.state == PASY_TEST_FAIL and self._cont == False:
111 self.fail("Sub test %s Failed" % step._name)
112 step.events.finished += finished_handler
114 except StopIteration:
115 # No More tests, check for success or fail
117 for test in self._tests:
118 succeeded = succeeded and (test.state == PASY_TEST_WIN)
125 def _test_iterator(self):
126 for test in self._tests:
130 if self._state == PASY_TEST_WIN:
131 header = "%s - PASSED" % (self._name,)
132 elif self._state == PASY_TEST_FAIL:
133 header = "%s - FAILED - %s" % (self._name, self.failMsg)
135 header = "%s - INCOMPLETE" %s (self._name,)
138 for test in self._tests:
139 step_messages.append(test.report())
141 step_report = "\n\t".join(step_messages)
142 return header + "\n\t" + step_report