Skip to content

Commit a87ba64

Browse files
ikedamdnozay
authored andcommitted
Add tests to verify the compatibility with unittest.TestProgram
* Tests will fail on Python3 as the parameters of XMLTestRunner doesn't suffice required parameters by unitttest.TestProgram.
1 parent a285464 commit a87ba64

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

tests/testsuite.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,79 @@ def test_xmlrunner_hold_traceback(self):
577577
countAfterTest = sys.getrefcount(self.DummyRefCountTest.dummy)
578578
self.assertEqual(countBeforeTest, countAfterTest)
579579

580+
class StderrXMLTestRunner(xmlrunner.XMLTestRunner):
581+
"""
582+
XMLTestRunner that outputs to sys.stderr that might be replaced
583+
584+
Though XMLTestRunner defaults to use sys.stderr as stream,
585+
it cannot be replaced e.g. by replaced by capture_stdout_stderr(),
586+
as it's already resolved.
587+
This class resolved sys.stderr lazily and outputs to replaced sys.stderr.
588+
"""
589+
def __init__(self, **kwargs):
590+
super(XMLTestRunnerTestCase.StderrXMLTestRunner, self).__init__(
591+
stream=sys.stderr,
592+
**kwargs
593+
)
594+
595+
def test_test_program_succeed_with_buffer(self):
596+
with capture_stdout_stderr() as r:
597+
unittest.TestProgram(
598+
module=self.__class__.__module__,
599+
testRunner=self.StderrXMLTestRunner,
600+
argv=[
601+
sys.argv[0],
602+
'-b',
603+
'XMLTestRunnerTestCase.DummyTest.test_runner_buffer_output_pass',
604+
],
605+
exit=False,
606+
)
607+
self.assertNotIn('should not be printed', r[0].getvalue())
608+
self.assertNotIn('should not be printed', r[1].getvalue())
609+
610+
def test_test_program_succeed_wo_buffer(self):
611+
with capture_stdout_stderr() as r:
612+
unittest.TestProgram(
613+
module=self.__class__.__module__,
614+
testRunner=self.StderrXMLTestRunner,
615+
argv=[
616+
sys.argv[0],
617+
'XMLTestRunnerTestCase.DummyTest.test_runner_buffer_output_pass',
618+
],
619+
exit=False,
620+
)
621+
self.assertIn('should not be printed', r[0].getvalue())
622+
self.assertNotIn('should not be printed', r[1].getvalue())
623+
624+
def test_test_program_fail_with_buffer(self):
625+
with capture_stdout_stderr() as r:
626+
unittest.TestProgram(
627+
module=self.__class__.__module__,
628+
testRunner=self.StderrXMLTestRunner,
629+
argv=[
630+
sys.argv[0],
631+
'-b',
632+
'XMLTestRunnerTestCase.DummyTest.test_runner_buffer_output_fail',
633+
],
634+
exit=False,
635+
)
636+
self.assertNotIn('should be printed', r[0].getvalue())
637+
self.assertIn('should be printed', r[1].getvalue())
638+
639+
def test_test_program_fail_wo_buffer(self):
640+
with capture_stdout_stderr() as r:
641+
unittest.TestProgram(
642+
module=self.__class__.__module__,
643+
testRunner=self.StderrXMLTestRunner,
644+
argv=[
645+
sys.argv[0],
646+
'XMLTestRunnerTestCase.DummyTest.test_runner_buffer_output_fail',
647+
],
648+
exit=False,
649+
)
650+
self.assertIn('should be printed', r[0].getvalue())
651+
self.assertNotIn('should be printed', r[1].getvalue())
652+
580653

581654
class DuplicateWriterTestCase(unittest.TestCase):
582655
def setUp(self):

0 commit comments

Comments
 (0)