test__proc: use ExpectedError class to test errors

This commit is contained in:
Denis Bilenko
2009-06-22 15:46:43 +07:00
parent 80019d8df7
commit f1500d666a

View File

@@ -27,6 +27,8 @@ from greentest import LimitedTestCase
DELAY = 0.01 DELAY = 0.01
class ExpectedError(Exception):
pass
class TestLink_Signal(LimitedTestCase): class TestLink_Signal(LimitedTestCase):
@@ -218,8 +220,8 @@ class TestRaise_link(TestCase):
assert not p, p assert not p, p
self.assertRaises(ValueError, event.wait) self.assertRaises(ExpectedError, event.wait)
self.assertRaises(ValueError, queue.wait) self.assertRaises(ExpectedError, queue.wait)
self.assertRaises(kill_exc_type, receiver.wait) self.assertRaises(kill_exc_type, receiver.wait)
self.assertRaises(kill_exc_type, proc.waitall, [receiver]) self.assertRaises(kill_exc_type, proc.waitall, [receiver])
sleep(DELAY) sleep(DELAY)
@@ -229,7 +231,7 @@ class TestRaise_link(TestCase):
self.check_timed_out(*xxxxx) self.check_timed_out(*xxxxx)
def test_raise(self): def test_raise(self):
p = self.p = proc.spawn(int, 'badint') p = self.p = proc.spawn(lambda : api.getcurrent().throw(ExpectedError('test_raise')))
self._test_raise(p, True, proc.LinkedFailed) self._test_raise(p, True, proc.LinkedFailed)
# repeating the same with dead process # repeating the same with dead process
for _ in xrange(3): for _ in xrange(3):
@@ -293,26 +295,26 @@ class TestStuff(unittest.TestCase):
return 1 return 1
x = proc.spawn(x) x = proc.spawn(x)
z = proc.spawn(lambda : 3) z = proc.spawn(lambda : 3)
y = proc.spawn(int, 'badint') y = proc.spawn(lambda : api.getcurrent().throw(ExpectedError('test_wait_error')))
y.link(x) y.link(x)
x.link(y) x.link(y)
y.link(z) y.link(z)
z.link(y) z.link(y)
self.assertRaises(ValueError, proc.waitall, [x, y, z]) self.assertRaises(ExpectedError, proc.waitall, [x, y, z])
self.assertRaises(proc.LinkedFailed, proc.waitall, [x]) self.assertRaises(proc.LinkedFailed, proc.waitall, [x])
self.assertEqual(proc.waitall([z]), [3]) self.assertEqual(proc.waitall([z]), [3])
self.assertRaises(ValueError, proc.waitall, [y]) self.assertRaises(ExpectedError, proc.waitall, [y])
def test_wait_all_exception_order(self): def test_wait_all_exception_order(self):
# if there're several exceptions raised, the earliest one must be raised by wait # if there're several exceptions raised, the earliest one must be raised by wait
def badint(): def first():
sleep(0.1) sleep(0.1)
int('first') raise ExpectedError('first')
a = proc.spawn(badint) a = proc.spawn(first)
b = proc.spawn(int, 'second') b = proc.spawn(lambda : api.getcurrent().throw(ExpectedError('second')))
try: try:
proc.waitall([a, b]) proc.waitall([a, b])
except ValueError, ex: except ExpectedError, ex:
assert 'second' in str(ex), repr(str(ex)) assert 'second' in str(ex), repr(str(ex))
def test_multiple_listeners_error(self): def test_multiple_listeners_error(self):
@@ -324,19 +326,19 @@ class TestStuff(unittest.TestCase):
results = [] results = []
def listener1(*args): def listener1(*args):
results.append(10) results.append(10)
1/0 raise ExpectedError('listener1')
def listener2(*args): def listener2(*args):
results.append(20) results.append(20)
2/0 raise ExpectedError('listener2')
def listener3(*args): def listener3(*args):
3/0 raise ExpectedError('listener3')
p.link(listener1) p.link(listener1)
p.link(listener2) p.link(listener2)
p.link(listener3) p.link(listener3)
sleep(DELAY*10) sleep(DELAY*10)
assert results in [[10, 20], [20, 10]], results assert results in [[10, 20], [20, 10]], results
p = proc.spawn(int, 'hello') p = proc.spawn(lambda : api.getcurrent().throw(ExpectedError('test_multiple_listeners_error')))
results = [] results = []
p.link(listener1) p.link(listener1)
p.link(listener2) p.link(listener2)
@@ -351,13 +353,13 @@ class TestStuff(unittest.TestCase):
def listener1(*args): def listener1(*args):
p.unlink(listener2) p.unlink(listener2)
results.append(5) results.append(5)
1/0 raise ExpectedError('listener1')
def listener2(*args): def listener2(*args):
p.unlink(listener1) p.unlink(listener1)
results.append(5) results.append(5)
2/0 raise ExpectedError('listener2')
def listener3(*args): def listener3(*args):
3/0 raise ExpectedError('listener3')
p.link(listener1) p.link(listener1)
p.link(listener2) p.link(listener2)
p.link(listener3) p.link(listener3)
@@ -377,14 +379,14 @@ class TestStuff(unittest.TestCase):
e = coros.event() e = coros.event()
def func(): def func():
try: try:
1/0 raise ExpectedError('test_killing_unlinked')
except: except:
e.send_exception(*sys.exc_info()) e.send_exception(*sys.exc_info())
p = proc.spawn_link(func) p = proc.spawn_link(func)
try: try:
try: try:
e.wait() e.wait()
except ZeroDivisionError: except ExpectedError:
pass pass
finally: finally:
p.unlink() # this disables LinkedCompleted that otherwise would be raised by the next line p.unlink() # this disables LinkedCompleted that otherwise would be raised by the next line