Skip to content

Commit f152d4f

Browse files
committed
Merge pull request #100 from gliptak/classname
Generate classname from test data
2 parents 592d96a + 227ba79 commit f152d4f

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

tests/testsuite.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ def test_doctest_example(self):
2626
runner.run(suite)
2727
outdir.seek(0)
2828
output = outdir.read()
29-
# note: the testcases generated by DocTestSuite are not attached to where the docstring is declared.
30-
# In other words, it does not preserve classname/package information.
31-
self.assertIn('name="twice"'.encode('utf8'), output)
32-
self.assertIn('name="threetimes"'.encode('utf8'), output)
29+
self.assertIn('classname="tests.doctest_example.Multiplicator" name="threetimes"'
30+
.encode('utf8'), output)
31+
self.assertIn('classname="tests.doctest_example" name="twice"'
32+
.encode('utf8'), output)
3333

3434

3535
class XMLTestRunnerTestCase(unittest.TestCase):
@@ -123,6 +123,21 @@ def test_basic_unittest_constructs(self):
123123
suite.addTest(self.DummyTest('test_error'))
124124
self._test_xmlrunner(suite)
125125

126+
def test_classnames(self):
127+
suite = unittest.TestSuite()
128+
suite.addTest(self.DummyTest('test_pass'))
129+
suite.addTest(self.DummySubTest('test_subTest_pass'))
130+
outdir = BytesIO()
131+
stream = StringIO()
132+
runner = xmlrunner.XMLTestRunner(stream=stream, output=outdir, verbosity=0)
133+
runner.run(suite)
134+
outdir.seek(0)
135+
output = outdir.read()
136+
self.assertIn('classname="tests.testsuite.DummyTest" name="test_pass"'
137+
.encode('utf8'), output)
138+
self.assertIn('classname="tests.testsuite.DummySubTest" name="test_subTest_pass"'
139+
.encode('utf8'), output)
140+
126141
def test_xmlrunner_non_ascii(self):
127142
suite = unittest.TestSuite()
128143
suite.addTest(self.DummyTest('test_non_ascii_skip'))

xmlrunner/result.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ def _report_testsuite_properties(xml_testsuite, xml_document, properties):
315315

316316
_report_testsuite_properties = staticmethod(_report_testsuite_properties)
317317

318-
def _report_testsuite(suite_name, suite, tests, xml_document, parentElement,
318+
def _report_testsuite(suite_name, tests, xml_document, parentElement,
319319
properties):
320320
"""
321321
Appends the testsuite section to the XML document.
@@ -339,7 +339,7 @@ def _report_testsuite(suite_name, suite, tests, xml_document, parentElement,
339339
testsuite, xml_document, properties)
340340

341341
for test in tests:
342-
_XMLTestResult._report_testcase(suite, test, testsuite, xml_document)
342+
_XMLTestResult._report_testcase(test, testsuite, xml_document)
343343

344344
systemout = xml_document.createElement('system-out')
345345
testsuite.appendChild(systemout)
@@ -389,14 +389,16 @@ def _createCDATAsections(xmldoc, node, text):
389389

390390
_createCDATAsections = staticmethod(_createCDATAsections)
391391

392-
def _report_testcase(suite_name, test_result, xml_testsuite, xml_document):
392+
def _report_testcase(test_result, xml_testsuite, xml_document):
393393
"""
394394
Appends a testcase section to the XML document.
395395
"""
396396
testcase = xml_document.createElement('testcase')
397397
xml_testsuite.appendChild(testcase)
398398

399-
testcase.setAttribute('classname', suite_name)
399+
class_name = re.sub(r'^__main__.', '', test_result.id())
400+
class_name = class_name.rpartition('.')[0]
401+
testcase.setAttribute('classname', class_name)
400402
testcase.setAttribute(
401403
'name', _XMLTestResult._test_method_name(test_result.test_id)
402404
)
@@ -455,7 +457,7 @@ def generate_reports(self, test_runner):
455457

456458
# Build the XML file
457459
testsuite = _XMLTestResult._report_testsuite(
458-
suite_name, suite, tests, doc, parentElement, self.properties
460+
suite_name, tests, doc, parentElement, self.properties
459461
)
460462
xml_content = doc.toprettyxml(
461463
indent='\t',

0 commit comments

Comments
 (0)