diff options
Diffstat (limited to 'fixtures/tests/test_testcase.py')
-rw-r--r-- | fixtures/tests/test_testcase.py | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/fixtures/tests/test_testcase.py b/fixtures/tests/test_testcase.py new file mode 100644 index 0000000..3f186c5 --- /dev/null +++ b/fixtures/tests/test_testcase.py @@ -0,0 +1,97 @@ +# fixtures: Fixtures with cleanups for testing and convenience. +# +# Copyright (c) 2010, Robert Collins <robertc@robertcollins.net> +# +# Licensed under either the Apache License, Version 2.0 or the BSD 3-clause +# license at the users choice. A copy of both licenses are available in the +# project source as Apache-2.0 and BSD. You may not use this file except in +# compliance with one of these two licences. +# +# Unless required by applicable law or agreed to in writing, software +# distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# license you chose for the specific language governing permissions and +# limitations under that license. + +import unittest +import testtools +from testtools.content import text_content +from testtools.testcase import skipIf + +import fixtures +from fixtures import TestWithFixtures +from fixtures.fixture import gather_details +from fixtures.tests.helpers import LoggingFixture + + +class TestTestWithFixtures(unittest.TestCase): + + def test_useFixture(self): + fixture = LoggingFixture() + class SimpleTest(testtools.TestCase, TestWithFixtures): + def test_foo(self): + self.useFixture(fixture) + result = unittest.TestResult() + SimpleTest('test_foo').run(result) + self.assertTrue(result.wasSuccessful()) + self.assertEqual(['setUp', 'cleanUp'], fixture.calls) + + def test_useFixture_uses_raise_first(self): + calls = [] + def raiser(ignored): + calls.append('called') + raise Exception('foo') + fixture = fixtures.FunctionFixture(lambda:None, raiser) + class SimpleTest(testtools.TestCase, TestWithFixtures): + def test_foo(self): + self.useFixture(fixture) + result = unittest.TestResult() + SimpleTest('test_foo').run(result) + self.assertFalse(result.wasSuccessful()) + self.assertEqual(['called'], calls) + + @skipIf(gather_details is None, "gather_details() is not available.") + def test_useFixture_details_captured_from_setUp(self): + # Details added during fixture set-up are gathered even if setUp() + # fails with an exception. + class SomethingBroke(Exception): pass + class BrokenFixture(fixtures.Fixture): + def setUp(self): + super(BrokenFixture, self).setUp() + self.addDetail('content', text_content("foobar")) + raise SomethingBroke() + broken_fixture = BrokenFixture() + class DetailedTestCase(TestWithFixtures, testtools.TestCase): + def setUp(self): + super(DetailedTestCase, self).setUp() + self.useFixture(broken_fixture) + def test(self): + pass + detailed_test_case = DetailedTestCase("test") + self.assertRaises(SomethingBroke, detailed_test_case.setUp) + self.assertEqual( + {"content": text_content("foobar")}, + broken_fixture.getDetails()) + self.assertEqual( + {"content": text_content("foobar")}, + detailed_test_case.getDetails()) + + @skipIf(gather_details is None, "gather_details() is not available.") + def test_useFixture_details_not_captured_from_setUp(self): + # Details added during fixture set-up are not gathered if the test + # case does not have the ability to accept those details. + class SomethingBroke(Exception): pass + class BrokenFixture(fixtures.Fixture): + def setUp(self): + super(BrokenFixture, self).setUp() + self.addDetail('content', text_content("foobar")) + raise SomethingBroke() + broken_fixture = BrokenFixture() + class NonDetailedTestCase(TestWithFixtures, unittest.TestCase): + def setUp(self): + super(NonDetailedTestCase, self).setUp() + self.useFixture(broken_fixture) + def test(self): + pass + non_detailed_test_case = NonDetailedTestCase("test") + self.assertRaises(SomethingBroke, non_detailed_test_case.setUp) |