13
13
# license you chose for the specific language governing permissions and
14
14
# limitations under that license.
20
21
from fixtures.tests.helpers import LoggingFixture
23
class TestFixture(unittest.TestCase):
24
class TestFixture(testtools.TestCase):
25
26
def test_resetCallsSetUpCleanUp(self):
36
37
self.assertEqual(['setUp', 'cleanUp', 'setUp', 'cleanUp'], calls)
38
def test_cleanUpcallscleanups_swallows_exceptions(self):
39
def test_reset_raises_if_cleanup_raises(self):
40
class FixtureWithSetupOnly(fixtures.Fixture):
42
raise Exception('foo')
44
super(FixtureWithSetupOnly, self).setUp()
45
self.addCleanup(self.do_raise)
46
fixture = FixtureWithSetupOnly()
48
exc = self.assertRaises(Exception, fixture.reset)
49
self.assertEqual(('foo',), exc.args)
51
def test_cleanUpcallscleanups_returns_exceptions(self):
40
53
def raise_exception1():
50
63
self.addCleanup(raise_exception1)
51
64
fixture = FixtureWithException()
66
exceptions = fixture.cleanUp()
54
67
self.assertEqual(['1', '2'], calls)
68
# There should be two exceptions
69
self.assertEqual(2, len(exceptions))
70
# They should be a sys.exc_info tuple.
71
self.assertEqual(3, len(exceptions[0]))
72
type, value, tb = exceptions[0]
73
self.assertEqual(Exception, type)
74
self.assertIsInstance(value, Exception)
75
self.assertEqual(('woo',), value.args)
76
self.assertIsInstance(tb, sys.exc_info()[2].__class__)
56
78
def test_exit_propogates_exceptions(self):
57
79
fixture = fixtures.Fixture()
58
80
fixture.__enter__()
59
81
self.assertEqual(False, fixture.__exit__(None, None, None))
62
class TestFunctionFixture(unittest.TestCase):
83
def test_exit_runs_all_raises_first_exception(self):
85
def raise_exception1():
87
raise Exception('woo')
88
def raise_exception2():
90
raise Exception('woo')
91
class FixtureWithException(fixtures.Fixture):
93
super(FixtureWithException, self).setUp()
94
self.addCleanup(raise_exception2)
95
self.addCleanup(raise_exception1)
96
fixture = FixtureWithException()
97
ctx = fixture.__enter__()
98
exc = self.assertRaises(Exception, fixture.__exit__, None, None, None)
99
self.assertEqual(('woo',), exc.args)
100
self.assertEqual(['1', '2'], calls)
103
class TestFunctionFixture(testtools.TestCase):
64
105
def test_setup_only(self):
65
106
fixture = fixtures.FunctionFixture(lambda: 42)