|
9 | 9 |
|
10 | 10 | from xmlrunner.unittest import unittest
|
11 | 11 | import xmlrunner
|
| 12 | +from xmlrunner.result import _DuplicateWriter |
12 | 13 | from xmlrunner.result import _XMLTestResult
|
13 | 14 | import doctest
|
14 | 15 | import tests.doctest_example
|
15 | 16 | from six import StringIO, BytesIO
|
16 | 17 | from tempfile import mkdtemp
|
| 18 | +from tempfile import mkstemp |
17 | 19 | from shutil import rmtree
|
18 | 20 | from glob import glob
|
19 | 21 | from xml.dom import minidom
|
20 | 22 | from lxml import etree
|
| 23 | +import os |
21 | 24 | import os.path
|
22 | 25 |
|
23 | 26 |
|
@@ -573,3 +576,48 @@ def test_xmlrunner_hold_traceback(self):
|
573 | 576 | runner = self._test_xmlrunner(suite)
|
574 | 577 | countAfterTest = sys.getrefcount(self.DummyRefCountTest.dummy)
|
575 | 578 | self.assertEqual(countBeforeTest, countAfterTest)
|
| 579 | + |
| 580 | + |
| 581 | +class DuplicateWriterTestCase(unittest.TestCase): |
| 582 | + def setUp(self): |
| 583 | + fd, self.file = mkstemp() |
| 584 | + self.fh = os.fdopen(fd, 'w') |
| 585 | + self.buffer = StringIO() |
| 586 | + self.writer = _DuplicateWriter(self.fh, self.buffer) |
| 587 | + |
| 588 | + def tearDown(self): |
| 589 | + self.buffer.close() |
| 590 | + self.fh.close() |
| 591 | + os.unlink(self.file) |
| 592 | + |
| 593 | + def getFirstContent(self): |
| 594 | + with open(self.file, 'r') as f: |
| 595 | + return f.read() |
| 596 | + |
| 597 | + def getSecondContent(self): |
| 598 | + return self.buffer.getvalue() |
| 599 | + |
| 600 | + def test_flush(self): |
| 601 | + self.writer.write('foobarbaz') |
| 602 | + self.writer.flush() |
| 603 | + self.assertEqual(self.getFirstContent(), self.getSecondContent()) |
| 604 | + |
| 605 | + def test_writable(self): |
| 606 | + self.assertTrue(self.writer.writable()) |
| 607 | + |
| 608 | + def test_writelines(self): |
| 609 | + self.writer.writelines([ |
| 610 | + 'foo\n', |
| 611 | + 'bar\n', |
| 612 | + 'baz\n', |
| 613 | + ]) |
| 614 | + self.writer.flush() |
| 615 | + self.assertEqual(self.getFirstContent(), self.getSecondContent()) |
| 616 | + |
| 617 | + def test_write(self): |
| 618 | + # try long buffer (1M) |
| 619 | + buffer = 'x' * (1024 * 1024) |
| 620 | + wrote = self.writer.write(buffer) |
| 621 | + self.writer.flush() |
| 622 | + self.assertEqual(self.getFirstContent(), self.getSecondContent()) |
| 623 | + self.assertEqual(wrote, len(self.getSecondContent())) |
0 commit comments