Disable output capturing in doctest to avoid losing reference to stdout. Fixes #985.

This commit is contained in:
Jason R. Coombs 2018-02-13 12:08:39 -05:00
parent 527845ef29
commit 391553887b
1 changed files with 12 additions and 0 deletions

View File

@ -2,6 +2,7 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import traceback import traceback
import sys
import pytest import pytest
from _pytest._code.code import ExceptionInfo, ReprFileLocation, TerminalRepr from _pytest._code.code import ExceptionInfo, ReprFileLocation, TerminalRepr
@ -103,8 +104,19 @@ class DoctestItem(pytest.Item):
def runtest(self): def runtest(self):
_check_all_skipped(self.dtest) _check_all_skipped(self.dtest)
self._disable_output_capturing()
self.runner.run(self.dtest) self.runner.run(self.dtest)
def _disable_output_capturing(self):
"""
Disable output capturing. Otherwise, stdout is lost to doctest (#985)
"""
capman = self.config.pluginmanager.getplugin("capturemanager")
if capman:
out, err = capman.suspend_global_capture(in_=True)
sys.stdout.write(out)
sys.stdout.write(err)
def repr_failure(self, excinfo): def repr_failure(self, excinfo):
import doctest import doctest
if excinfo.errisinstance((doctest.DocTestFailure, if excinfo.errisinstance((doctest.DocTestFailure,