Skip to content

Commit 6150642

Browse files
committed
Fix test program for python 2.7
--output and --output-file should work for python 2.7 now.
1 parent e919133 commit 6150642

File tree

2 files changed

+55
-12
lines changed

2 files changed

+55
-12
lines changed

tests/testsuite.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -856,7 +856,6 @@ def test_write(self):
856856
self.assertEqual(wrote, len(self.getSecondContent()))
857857

858858

859-
@unittest.skipIf(sys.version_info[0] < 3, 'Python 3 required')
860859
class XMLProgramTestCase(unittest.TestCase):
861860
@mock.patch('sys.argv', ['xmlrunner', '-o', 'flaf'])
862861
@mock.patch('xmlrunner.runner.XMLTestRunner')
@@ -865,16 +864,38 @@ def test_xmlrunner_output(self, exiter, testrunner):
865864
xmlrunner.runner.XMLTestProgram()
866865

867866
kwargs = dict(
868-
buffer=False,
869-
failfast=False,
870-
verbosity=1,
871-
warnings='default',
867+
buffer=mock.ANY,
868+
failfast=mock.ANY,
869+
verbosity=mock.ANY,
870+
warnings=mock.ANY,
872871
output='flaf',
873872
)
874873

875874
if sys.version_info[:2] > (3, 4):
876-
kwargs.update(tb_locals=False)
875+
kwargs.update(tb_locals=mock.ANY)
877876

878877
testrunner.assert_called_once_with(**kwargs)
878+
exiter.assert_called_once_with(False)
879+
880+
@mock.patch('sys.argv', ['xmlrunner', '--output-file', 'test.xml'])
881+
@mock.patch('xmlrunner.runner.open')
882+
@mock.patch('xmlrunner.runner.XMLTestRunner')
883+
@mock.patch('sys.exit')
884+
def test_xmlrunner_output_file(self, exiter, testrunner, opener):
885+
xmlrunner.runner.XMLTestProgram()
886+
opener.assert_called_once_with('test.xml', 'wb')
887+
opener().close.assert_called()
879888

889+
kwargs = dict(
890+
buffer=mock.ANY,
891+
failfast=mock.ANY,
892+
verbosity=mock.ANY,
893+
warnings=mock.ANY,
894+
output=opener('test.xml', 'wb'),
895+
)
896+
897+
if sys.version_info[:2] > (3, 4):
898+
kwargs.update(tb_locals=mock.ANY)
899+
900+
testrunner.assert_called_once_with(**kwargs)
880901
exiter.assert_called_once_with(False)

xmlrunner/runner.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,22 +117,44 @@ def run(self, test):
117117

118118

119119
class XMLTestProgram(TestProgram):
120-
output = None
121120

122121
def __init__(self, *args, **kwargs):
123122
kwargs.setdefault('testRunner', XMLTestRunner)
123+
self.warnings = None # python2 fix
124+
self._parseKnownArgs(kwargs)
124125
super(XMLTestProgram, self).__init__(*args, **kwargs)
125126

127+
def _parseKnownArgs(self, kwargs):
128+
argv = kwargs.get('argv')
129+
if argv is None:
130+
argv = sys.argv
131+
132+
# python2 argparse fix
133+
parser = argparse.ArgumentParser(prog='xmlrunner')
134+
group = parser.add_mutually_exclusive_group()
135+
group.add_argument(
136+
'-o', '--output', metavar='DIR',
137+
help='Directory for storing XML reports (\'.\' default)')
138+
group.add_argument(
139+
'--output-file', metavar='FILENAME',
140+
help='Filename for storing XML report')
141+
namespace, argv = parser.parse_known_args(argv)
142+
self.output = namespace.output
143+
self.output_file = namespace.output_file
144+
kwargs['argv'] = argv
145+
126146
def _initArgParsers(self):
147+
# this code path is only called in python3 (optparse vs argparse)
127148
super(XMLTestProgram, self)._initArgParsers()
128149

129150
for parser in (self._main_parser, self._discovery_parser):
130151
group = parser.add_mutually_exclusive_group()
131-
group.add_argument('-o', '--output', metavar='DIR',
132-
help='Directory for storing XML reports '
133-
"('.' default)")
134-
group.add_argument('--output-file', metavar='FILENAME',
135-
help='Filename for storing XML report')
152+
group.add_argument(
153+
'-o', '--output', metavar='DIR', nargs=1,
154+
help='Directory for storing XML reports (\'.\' default)')
155+
group.add_argument(
156+
'--output-file', metavar='FILENAME', nargs=1,
157+
help='Filename for storing XML report')
136158

137159
def runTests(self):
138160
kwargs = dict(

0 commit comments

Comments
 (0)