Skip to content

Commit 8417e47

Browse files
danchrdnozay
authored andcommitted
runner: reinstate all unittest arguments; add --output
I tested with Python 2.7, 3.5 and 3.7, and at least --buffer works everywhere. I was also missing a way to specify the output directory, so I added the ability to do so. This fixes #143 and closes #144.
1 parent 000969d commit 8417e47

File tree

3 files changed

+63
-9
lines changed

3 files changed

+63
-9
lines changed

tests/testsuite.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
import os
2424
import os.path
2525

26+
try:
27+
from unittest import mock
28+
except ImportError:
29+
import mock
30+
2631

2732
def _load_schema():
2833
path = os.path.join(os.path.dirname(__file__),
@@ -699,3 +704,27 @@ def test_write(self):
699704
self.writer.flush()
700705
self.assertEqual(self.getFirstContent(), self.getSecondContent())
701706
self.assertEqual(wrote, len(self.getSecondContent()))
707+
708+
709+
@unittest.skipIf(sys.version_info[0] < 3, 'Python 3 required')
710+
class XMLProgramTestCase(unittest.TestCase):
711+
@mock.patch('sys.argv', ['xmlrunner', '-o', 'flaf'])
712+
@mock.patch('xmlrunner.runner.XMLTestRunner')
713+
@mock.patch('sys.exit')
714+
def test_xmlrunner_output(self, exiter, testrunner):
715+
xmlrunner.runner.XMLTestProgram()
716+
717+
kwargs = dict(
718+
buffer=False,
719+
failfast=False,
720+
verbosity=1,
721+
warnings='default',
722+
output='flaf',
723+
)
724+
725+
if sys.version_info[:2] > (3, 4):
726+
kwargs.update(tb_locals=False)
727+
728+
testrunner.assert_called_once_with(**kwargs)
729+
730+
exiter.assert_called_once_with(False)

xmlrunner/__main__.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
"""Main entry point"""
22

33
import sys
4-
from .unittest import TestProgram
5-
from .runner import XMLTestRunner
4+
from .runner import XMLTestProgram
65

76
if sys.argv[0].endswith("__main__.py"):
87
import os.path
@@ -17,9 +16,4 @@
1716
__unittest = True
1817

1918

20-
main = TestProgram
21-
22-
main(
23-
module=None, testRunner=XMLTestRunner,
24-
# see issue #59
25-
failfast=False, catchbreak=False, buffer=False)
19+
XMLTestProgram(module=None)

xmlrunner/runner.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import sys
33
import time
44

5-
from .unittest import TextTestRunner
5+
from .unittest import TextTestRunner, TestProgram
66
from .result import _XMLTestResult
77

88
# see issue #74, the encoding name needs to be one of
@@ -113,3 +113,34 @@ def run(self, test):
113113
pass
114114

115115
return result
116+
117+
118+
class XMLTestProgram(TestProgram):
119+
output = None
120+
121+
def __init__(self, *args, **kwargs):
122+
kwargs.setdefault('testRunner', XMLTestRunner)
123+
super(XMLTestProgram, self).__init__(*args, **kwargs)
124+
125+
def _initArgParsers(self):
126+
super(XMLTestProgram, self)._initArgParsers()
127+
128+
for parser in (self._main_parser, self._discovery_parser):
129+
parser.add_argument('-o', '--output', metavar='DIR',
130+
help='Directory for storing XML reports '
131+
"('.' default)")
132+
133+
def runTests(self):
134+
if self.output is not None:
135+
kwargs = dict(verbosity=self.verbosity,
136+
failfast=self.failfast,
137+
buffer=self.buffer,
138+
warnings=self.warnings,
139+
output=self.output)
140+
141+
if sys.version_info[:2] > (3, 4):
142+
kwargs.update(tb_locals=self.tb_locals)
143+
144+
self.testRunner = self.testRunner(**kwargs)
145+
146+
super(XMLTestProgram, self).runTests()

0 commit comments

Comments
 (0)