From b3d45b91f898653843a4444567733c5bdb71a3f7 Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Sun, 8 Mar 2009 13:16:13 +1100 Subject: TestWithScenarios now honours the scenarios list as far as cloning and renaming tests goes. --- lib/testscenarios/testcase.py | 14 ++++++++++++++ lib/testscenarios/tests/test_testcase.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/lib/testscenarios/testcase.py b/lib/testscenarios/testcase.py index f8c0e8e..0b8898c 100644 --- a/lib/testscenarios/testcase.py +++ b/lib/testscenarios/testcase.py @@ -23,5 +23,19 @@ __all__ = [ import unittest +from testtools.testcase import clone_test_with_new_id + class TestWithScenarios(unittest.TestCase): """A TestCase with support for scenarios via a scenarios attribute.""" + + def run(self, result=None): + scenarios = getattr(self, 'scenarios', None) + if scenarios: + for name, parameters in scenarios: + newtest = clone_test_with_new_id(self, + self.id() + '(' + name + ')') + newtest.scenarios = None + newtest.run(result) + return + else: + return super(TestWithScenarios, self).run(result) diff --git a/lib/testscenarios/tests/test_testcase.py b/lib/testscenarios/tests/test_testcase.py index c5e85b9..9cfd724 100644 --- a/lib/testscenarios/tests/test_testcase.py +++ b/lib/testscenarios/tests/test_testcase.py @@ -20,6 +20,7 @@ import unittest import testscenarios +from testtools.tests.helpers import LoggingResult class TestTestWithScenarios(unittest.TestCase): @@ -34,4 +35,35 @@ class TestTestWithScenarios(unittest.TestCase): self.assertTrue(result.wasSuccessful()) self.assertEqual(1, result.testsRun) + def test_with_one_scenario_one_run(self): + class ReferenceTest(testscenarios.TestWithScenarios): + scenarios = [('demo', {})] + def test_pass(self): + pass + test = ReferenceTest("test_pass") + log = [] + result = LoggingResult(log) + test.run(result) + self.assertTrue(result.wasSuccessful()) + self.assertEqual(1, result.testsRun) + self.assertEqual( + 'testscenarios.tests.test_testcase.ReferenceTest.test_pass(demo)', + log[0][1].id()) + def test_with_two_scenarios_two_run(self): + class ReferenceTest(testscenarios.TestWithScenarios): + scenarios = [('1', {}), ('2', {})] + def test_pass(self): + pass + test = ReferenceTest("test_pass") + log = [] + result = LoggingResult(log) + test.run(result) + self.assertTrue(result.wasSuccessful()) + self.assertEqual(2, result.testsRun) + self.assertEqual( + 'testscenarios.tests.test_testcase.ReferenceTest.test_pass(1)', + log[0][1].id()) + self.assertEqual( + 'testscenarios.tests.test_testcase.ReferenceTest.test_pass(2)', + log[4][1].id()) -- cgit v1.2.1