mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Update to latest unittest-xml-reporting
. Fix missing .fileno
method.
This commit is contained in:
parent
d0150d8369
commit
6878111344
2 changed files with 40 additions and 33 deletions
|
@ -475,7 +475,7 @@ def _runtests(session, coverage, cmd_args):
|
|||
@nox.parametrize('crypto', [None, 'm2crypto', 'pycryptodomex'])
|
||||
def runtests_parametrized(session, coverage, transport, crypto):
|
||||
# Install requirements
|
||||
_install_requirements(session, transport, 'unittest-xml-reporting==2.2.1')
|
||||
_install_requirements(session, transport, 'unittest-xml-reporting==2.5.2')
|
||||
|
||||
if crypto:
|
||||
if crypto == 'm2crypto':
|
||||
|
|
|
@ -15,12 +15,8 @@
|
|||
# Import python libs
|
||||
from __future__ import absolute_import
|
||||
import io
|
||||
import sys
|
||||
import logging
|
||||
|
||||
# Import 3rd-party libs
|
||||
from salt.ext import six
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
@ -29,46 +25,57 @@ try:
|
|||
import xmlrunner.result
|
||||
HAS_XMLRUNNER = True
|
||||
|
||||
class _DelegateIO(object):
|
||||
'''
|
||||
This class defines an object that captures whatever is written to
|
||||
a stream or file.
|
||||
'''
|
||||
class _DuplicateWriter(io.TextIOBase):
|
||||
"""
|
||||
Duplicate output from the first handle to the second handle
|
||||
The second handle is expected to be a StringIO and not to block.
|
||||
"""
|
||||
|
||||
def __init__(self, delegate):
|
||||
self._captured = six.StringIO()
|
||||
self.delegate = delegate
|
||||
def __init__(self, first, second):
|
||||
super(_DuplicateWriter, self).__init__()
|
||||
self._first = first
|
||||
self._second = second
|
||||
|
||||
def write(self, text):
|
||||
if six.PY2 and isinstance(text, six.text_type):
|
||||
text = text.encode(__salt_system_encoding__)
|
||||
self._captured.write(text)
|
||||
self.delegate.write(text)
|
||||
def flush(self):
|
||||
self._first.flush()
|
||||
self._second.flush()
|
||||
|
||||
def writable(self):
|
||||
return True
|
||||
|
||||
def writelines(self, lines):
|
||||
self._first.writelines(lines)
|
||||
self._second.writelines(lines)
|
||||
|
||||
def write(self, b):
|
||||
if isinstance(self._first, io.TextIOBase):
|
||||
wrote = self._first.write(b)
|
||||
|
||||
if wrote is not None:
|
||||
# expected to always succeed to write
|
||||
self._second.write(b[:wrote])
|
||||
|
||||
return wrote
|
||||
else:
|
||||
# file-like object in Python2
|
||||
# It doesn't return wrote bytes.
|
||||
self._first.write(b)
|
||||
self._second.write(b)
|
||||
return len(b)
|
||||
|
||||
def fileno(self):
|
||||
return self.delegate.fileno()
|
||||
return self._first.fileno()
|
||||
|
||||
def __getattr__(self, attr):
|
||||
try:
|
||||
return getattr(self._captured, attr)
|
||||
except (AttributeError, io.UnsupportedOperation):
|
||||
return getattr(self.delegate, attr)
|
||||
xmlrunner.result._DuplicateWriter = _DuplicateWriter
|
||||
|
||||
class _XMLTestResult(xmlrunner.result._XMLTestResult):
|
||||
def startTest(self, test):
|
||||
log.debug('>>>>> START >>>>> {0}'.format(test.id()))
|
||||
log.debug('>>>>> START >>>>> %s', test.id())
|
||||
# xmlrunner classes are NOT new-style classes
|
||||
xmlrunner.result._XMLTestResult.startTest(self, test)
|
||||
if self.buffer:
|
||||
# Let's override the values of self._stdXXX_buffer
|
||||
# We want a similar sys.stdXXX file like behaviour
|
||||
self._stderr_buffer = _DelegateIO(sys.__stderr__)
|
||||
self._stdout_buffer = _DelegateIO(sys.__stdout__)
|
||||
sys.stderr = self._stderr_buffer
|
||||
sys.stdout = self._stdout_buffer
|
||||
|
||||
def stopTest(self, test):
|
||||
log.debug('<<<<< END <<<<<<< {0}'.format(test.id()))
|
||||
log.debug('<<<<< END <<<<<<< %s', test.id())
|
||||
# xmlrunner classes are NOT new-style classes
|
||||
return xmlrunner.result._XMLTestResult.stopTest(self, test)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue