diff options
author | Robert Collins <robertc@robertcollins.net> | 2010-02-01 15:49:05 +1100 |
---|---|---|
committer | Robert Collins <robertc@robertcollins.net> | 2010-02-01 15:49:05 +1100 |
commit | e659415fc6f0a437d475beb0e4655d03cefb5c18 (patch) | |
tree | 3b5eabc6d3cafe5413507753dd67d3ecfe2bf376 /lib | |
parent | 7b795c0b42770ec978805db3db3d1b99270e6e16 (diff) | |
parent | cdfb53972b4c7c15c0060f90d8079b630d3421ee (diff) | |
download | testscenarios-e659415fc6f0a437d475beb0e4655d03cefb5c18.tar.gz |
Merge patch from Ben Finney making tests with a shortDescription have that altered as well as the id.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/testscenarios/__init__.py | 2 | ||||
-rw-r--r-- | lib/testscenarios/scenarios.py | 7 | ||||
-rw-r--r-- | lib/testscenarios/tests/test_scenarios.py | 47 |
3 files changed, 47 insertions, 9 deletions
diff --git a/lib/testscenarios/__init__.py b/lib/testscenarios/__init__.py index 9d762d6..d608f13 100644 --- a/lib/testscenarios/__init__.py +++ b/lib/testscenarios/__init__.py @@ -38,7 +38,7 @@ methods for details. # established at this point, and setup.py will use a version of next-$(revno). # If the releaselevel is 'final', then the tarball will be major.minor.micro. # Otherwise it is major.minor.micro~$(revno). -__version__ = (0, 1, 0, 'final', 0) +__version__ = (0, 2, 0, 'final', 0) __all__ = [ 'TestWithScenarios', diff --git a/lib/testscenarios/scenarios.py b/lib/testscenarios/scenarios.py index 7d781a7..e531b2e 100644 --- a/lib/testscenarios/scenarios.py +++ b/lib/testscenarios/scenarios.py @@ -35,8 +35,13 @@ def apply_scenario((name, parameters), test): :param test: The test to apply the scenario to. This test is unaltered. :return: A new test cloned from test, with the scenario applied. """ + scenario_suffix = '(' + name + ')' newtest = clone_test_with_new_id(test, - test.id() + '(' + name + ')') + test.id() + scenario_suffix) + test_desc = test.shortDescription() + if test_desc is not None: + newtest_desc = "%(test_desc)s %(scenario_suffix)s" % vars() + newtest.shortDescription = (lambda: newtest_desc) for key, value in parameters.iteritems(): setattr(newtest, key, value) return newtest diff --git a/lib/testscenarios/tests/test_scenarios.py b/lib/testscenarios/tests/test_scenarios.py index cf6685d..4c80150 100644 --- a/lib/testscenarios/tests/test_scenarios.py +++ b/lib/testscenarios/tests/test_scenarios.py @@ -104,17 +104,50 @@ class TestGenerateScenarios(testtools.TestCase): class TestApplyScenario(testtools.TestCase): - def test_apply_scenario_sets_id_and_attributes(self): + def setUp(self): + super(TestApplyScenario, self).setUp() + + self.scenario_name = 'demo' + self.scenario_attrs = {'foo': 'bar'} + self.scenario = (self.scenario_name, self.scenario_attrs) + class ReferenceTest(unittest.TestCase): def test_pass(self): pass - test = ReferenceTest("test_pass") - result = apply_scenario(('demo', {'foo': 'bar'}), test) - self.assertEqual( - 'testscenarios.tests.test_scenarios.ReferenceTest.test_pass(demo)', - result.id()) - self.assertEqual('bar', result.foo) + def test_pass_with_docstring(self): + """ The test that always passes. + + This test case has a PEP 257 conformant docstring, + with its first line being a brief synopsis and the + rest of the docstring explaining that this test + does nothing but pass unconditionally. + + """ + pass + self.ReferenceTest = ReferenceTest + + def test_sets_specified_id(self): + raw_test = self.ReferenceTest('test_pass') + raw_id = "testscenarios.tests.test_scenarios.ReferenceTest.test_pass" + scenario_name = self.scenario_name + expect_id = "%(raw_id)s(%(scenario_name)s)" % vars() + modified_test = apply_scenario(self.scenario, raw_test) + self.assertEqual(expect_id, modified_test.id()) + + def test_sets_specified_attributes(self): + raw_test = self.ReferenceTest('test_pass') + modified_test = apply_scenario(self.scenario, raw_test) + self.assertEqual('bar', modified_test.foo) + + def test_appends_scenario_name_to_short_description(self): + raw_test = self.ReferenceTest('test_pass_with_docstring') + modified_test = apply_scenario(self.scenario, raw_test) + raw_doc = self.ReferenceTest.test_pass_with_docstring.__doc__ + raw_desc = raw_doc.split("\n")[0].strip() + scenario_name = self.scenario_name + expect_desc = "%(raw_desc)s (%(scenario_name)s)" % vars() + self.assertEqual(expect_desc, modified_test.shortDescription()) class TestApplyScenarios(testtools.TestCase): |