Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions tests/testsuite.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@
import os
import os.path

try:
from unittest import mock
except ImportError:
import mock


def _load_schema():
path = os.path.join(os.path.dirname(__file__),
Expand Down Expand Up @@ -699,3 +704,27 @@ def test_write(self):
self.writer.flush()
self.assertEqual(self.getFirstContent(), self.getSecondContent())
self.assertEqual(wrote, len(self.getSecondContent()))


@unittest.skipIf(sys.version_info[0] < 3, 'Python 3 required')
class XMLProgramTestCase(unittest.TestCase):
@mock.patch('sys.argv', ['xmlrunner', '-o', 'flaf'])
@mock.patch('xmlrunner.runner.XMLTestRunner')
@mock.patch('sys.exit')
def test_xmlrunner_output(self, exiter, testrunner):
xmlrunner.runner.XMLTestProgram()

kwargs = dict(
buffer=False,
failfast=False,
verbosity=1,
warnings='default',
output='flaf',
)

if sys.version_info[:2] > (3, 4):
kwargs.update(tb_locals=False)

testrunner.assert_called_once_with(**kwargs)

exiter.assert_called_once_with(False)
10 changes: 2 additions & 8 deletions xmlrunner/__main__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
"""Main entry point"""

import sys
from .unittest import TestProgram
from .runner import XMLTestRunner
from .runner import XMLTestProgram

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


main = TestProgram

main(
module=None, testRunner=XMLTestRunner,
# see issue #59
failfast=False, catchbreak=False, buffer=False)
XMLTestProgram(module=None)
33 changes: 32 additions & 1 deletion xmlrunner/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import sys
import time

from .unittest import TextTestRunner
from .unittest import TextTestRunner, TestProgram
from .result import _XMLTestResult

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

return result


class XMLTestProgram(TestProgram):
output = None

def __init__(self, *args, **kwargs):
kwargs.setdefault('testRunner', XMLTestRunner)
super(XMLTestProgram, self).__init__(*args, **kwargs)

def _initArgParsers(self):
super(XMLTestProgram, self)._initArgParsers()

for parser in (self._main_parser, self._discovery_parser):
parser.add_argument('-o', '--output', metavar='DIR',
help='Directory for storing XML reports '
"('.' default)")

def runTests(self):
if self.output is not None:
kwargs = dict(verbosity=self.verbosity,
failfast=self.failfast,
buffer=self.buffer,
warnings=self.warnings,
output=self.output)

if sys.version_info[:2] > (3, 4):
kwargs.update(tb_locals=self.tb_locals)

self.testRunner = self.testRunner(**kwargs)

super(XMLTestProgram, self).runTests()