Merge pull request #6073 from blueyed/merge-master-into-features

Merge master into features
This commit is contained in:
Daniel Hahler 2019-10-27 02:57:00 +01:00 committed by GitHub
commit a92f49afa7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 54 additions and 54 deletions

View File

@ -47,33 +47,6 @@ Bug Fixes
- `#5902 <https://github.com/pytest-dev/pytest/issues/5902>`_: Fix warnings about deprecated ``cmp`` attribute in ``attrs>=19.2``. - `#5902 <https://github.com/pytest-dev/pytest/issues/5902>`_: Fix warnings about deprecated ``cmp`` attribute in ``attrs>=19.2``.
pytest 4.6.6 (2019-10-11)
=========================
Bug Fixes
---------
- `#5523 <https://github.com/pytest-dev/pytest/issues/5523>`_: Fixed using multiple short options together in the command-line (for example ``-vs``) in Python 3.8+.
- `#5537 <https://github.com/pytest-dev/pytest/issues/5537>`_: Replace ``importlib_metadata`` backport with ``importlib.metadata`` from the
standard library on Python 3.8+.
- `#5806 <https://github.com/pytest-dev/pytest/issues/5806>`_: Fix "lexer" being used when uploading to bpaste.net from ``--pastebin`` to "text".
- `#5902 <https://github.com/pytest-dev/pytest/issues/5902>`_: Fix warnings about deprecated ``cmp`` attribute in ``attrs>=19.2``.
Trivial/Internal Changes
------------------------
- `#5801 <https://github.com/pytest-dev/pytest/issues/5801>`_: Fixes python version checks (detected by ``flake8-2020``) in case python4 becomes a thing.
pytest 5.2.0 (2019-09-28) pytest 5.2.0 (2019-09-28)
========================= =========================
@ -544,6 +517,32 @@ Improved Documentation
- `#5416 <https://github.com/pytest-dev/pytest/issues/5416>`_: Fix PytestUnknownMarkWarning in run/skip example. - `#5416 <https://github.com/pytest-dev/pytest/issues/5416>`_: Fix PytestUnknownMarkWarning in run/skip example.
pytest 4.6.6 (2019-10-11)
=========================
Bug Fixes
---------
- `#5523 <https://github.com/pytest-dev/pytest/issues/5523>`_: Fixed using multiple short options together in the command-line (for example ``-vs``) in Python 3.8+.
- `#5537 <https://github.com/pytest-dev/pytest/issues/5537>`_: Replace ``importlib_metadata`` backport with ``importlib.metadata`` from the
standard library on Python 3.8+.
- `#5806 <https://github.com/pytest-dev/pytest/issues/5806>`_: Fix "lexer" being used when uploading to bpaste.net from ``--pastebin`` to "text".
- `#5902 <https://github.com/pytest-dev/pytest/issues/5902>`_: Fix warnings about deprecated ``cmp`` attribute in ``attrs>=19.2``.
Trivial/Internal Changes
------------------------
- `#5801 <https://github.com/pytest-dev/pytest/issues/5801>`_: Fixes python version checks (detected by ``flake8-2020``) in case python4 becomes a thing.
pytest 4.6.5 (2019-08-05) pytest 4.6.5 (2019-08-05)
========================= =========================

View File

@ -4,6 +4,7 @@ import sys
import traceback import traceback
from inspect import CO_VARARGS from inspect import CO_VARARGS
from inspect import CO_VARKEYWORDS from inspect import CO_VARKEYWORDS
from io import StringIO
from traceback import format_exception_only from traceback import format_exception_only
from types import CodeType from types import CodeType
from types import TracebackType from types import TracebackType
@ -867,7 +868,7 @@ class TerminalRepr:
def __str__(self): def __str__(self):
# FYI this is called from pytest-xdist's serialization of exception # FYI this is called from pytest-xdist's serialization of exception
# information. # information.
io = py.io.TextIO() io = StringIO()
tw = py.io.TerminalWriter(file=io) tw = py.io.TerminalWriter(file=io)
self.toterminal(tw) self.toterminal(tw)
return io.getvalue().strip() return io.getvalue().strip()

View File

@ -2,13 +2,12 @@
import logging import logging
import re import re
from contextlib import contextmanager from contextlib import contextmanager
from io import StringIO
from typing import AbstractSet from typing import AbstractSet
from typing import Dict from typing import Dict
from typing import List from typing import List
from typing import Mapping from typing import Mapping
import py
import pytest import pytest
from _pytest.compat import nullcontext from _pytest.compat import nullcontext
from _pytest.config import create_terminal_writer from _pytest.config import create_terminal_writer
@ -223,7 +222,7 @@ class LogCaptureHandler(logging.StreamHandler):
def __init__(self) -> None: def __init__(self) -> None:
"""Creates a new log handler.""" """Creates a new log handler."""
logging.StreamHandler.__init__(self, py.io.TextIO()) logging.StreamHandler.__init__(self, StringIO())
self.records = [] # type: List[logging.LogRecord] self.records = [] # type: List[logging.LogRecord]
def emit(self, record: logging.LogRecord) -> None: def emit(self, record: logging.LogRecord) -> None:
@ -233,7 +232,7 @@ class LogCaptureHandler(logging.StreamHandler):
def reset(self) -> None: def reset(self) -> None:
self.records = [] self.records = []
self.stream = py.io.TextIO() self.stream = StringIO()
class LogCaptureFixture: class LogCaptureFixture:

View File

@ -10,6 +10,7 @@ import time
import traceback import traceback
from collections.abc import Sequence from collections.abc import Sequence
from fnmatch import fnmatch from fnmatch import fnmatch
from io import StringIO
from weakref import WeakKeyDictionary from weakref import WeakKeyDictionary
import py import py
@ -1221,7 +1222,7 @@ def getdecoded(out):
class LineComp: class LineComp:
def __init__(self): def __init__(self):
self.stringio = py.io.TextIO() self.stringio = StringIO()
def assert_contains_lines(self, lines2): def assert_contains_lines(self, lines2):
"""Assert that lines2 are contained (linearly) in lines1. """Assert that lines2 are contained (linearly) in lines1.

View File

@ -1,3 +1,4 @@
from io import StringIO
from pprint import pprint from pprint import pprint
from typing import Optional from typing import Optional
from typing import Union from typing import Union
@ -180,7 +181,7 @@ class BaseReport:
def _report_unserialization_failure(type_name, report_class, reportdict): def _report_unserialization_failure(type_name, report_class, reportdict):
url = "https://github.com/pytest-dev/pytest/issues" url = "https://github.com/pytest-dev/pytest/issues"
stream = py.io.TextIO() stream = StringIO()
pprint("-" * 100, stream=stream) pprint("-" * 100, stream=stream)
pprint("INTERNALERROR: Unknown entry type returned: %s" % type_name, stream=stream) pprint("INTERNALERROR: Unknown entry type returned: %s" % type_name, stream=stream)
pprint("report_name: %s" % report_class, stream=stream) pprint("report_name: %s" % report_class, stream=stream)

View File

@ -1,6 +1,6 @@
""" """
This is the script that is actually frozen into an executable: simply executes This is the script that is actually frozen into an executable: simply executes
py.test main(). pytest main().
""" """
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -5,12 +5,11 @@ import pickle
import subprocess import subprocess
import sys import sys
import textwrap import textwrap
from io import StringIO
from io import UnsupportedOperation from io import UnsupportedOperation
from typing import List from typing import List
from typing import TextIO from typing import TextIO
import py
import pytest import pytest
from _pytest import capture from _pytest import capture
from _pytest.capture import CaptureManager from _pytest.capture import CaptureManager
@ -894,10 +893,10 @@ def test_dupfile_on_bytesio():
def test_dupfile_on_textio(): def test_dupfile_on_textio():
tio = py.io.TextIO() sio = StringIO()
f = capture.safe_text_dupfile(tio, "wb") f = capture.safe_text_dupfile(sio, "wb")
f.write("hello") f.write("hello")
assert tio.getvalue() == "hello" assert sio.getvalue() == "hello"
assert not hasattr(f, "name") assert not hasattr(f, "name")

View File

@ -133,17 +133,17 @@ class TestReportSerialization:
""" """
reprec = testdir.inline_runsource( reprec = testdir.inline_runsource(
""" """
import py import pytest
def test_pass(): pass def test_pass(): pass
def test_fail(): 0/0 def test_fail(): 0/0
@py.test.mark.skipif("True") @pytest.mark.skipif("True")
def test_skip(): pass def test_skip(): pass
def test_skip_imperative(): def test_skip_imperative():
py.test.skip("hello") pytest.skip("hello")
@py.test.mark.xfail("True") @pytest.mark.xfail("True")
def test_xfail(): 0/0 def test_xfail(): 0/0
def test_xfail_imperative(): def test_xfail_imperative():
py.test.xfail("hello") pytest.xfail("hello")
""" """
) )
reports = reprec.getreports("pytest_runtest_logreport") reports = reprec.getreports("pytest_runtest_logreport")

View File

@ -1,6 +1,5 @@
import os import os
from io import StringIO
import py
import _pytest._code import _pytest._code
import pytest import pytest
@ -13,7 +12,7 @@ pytestmark = pytest.mark.filterwarnings("ignore:--result-log is deprecated")
def test_write_log_entry(): def test_write_log_entry():
reslog = ResultLog(None, None) reslog = ResultLog(None, None)
reslog.logfile = py.io.TextIO() reslog.logfile = StringIO()
reslog.write_log_entry("name", ".", "") reslog.write_log_entry("name", ".", "")
entry = reslog.logfile.getvalue() entry = reslog.logfile.getvalue()
assert entry[-1] == "\n" assert entry[-1] == "\n"
@ -21,7 +20,7 @@ def test_write_log_entry():
assert len(entry_lines) == 1 assert len(entry_lines) == 1
assert entry_lines[0] == ". name" assert entry_lines[0] == ". name"
reslog.logfile = py.io.TextIO() reslog.logfile = StringIO()
reslog.write_log_entry("name", "s", "Skipped") reslog.write_log_entry("name", "s", "Skipped")
entry = reslog.logfile.getvalue() entry = reslog.logfile.getvalue()
assert entry[-1] == "\n" assert entry[-1] == "\n"
@ -30,7 +29,7 @@ def test_write_log_entry():
assert entry_lines[0] == "s name" assert entry_lines[0] == "s name"
assert entry_lines[1] == " Skipped" assert entry_lines[1] == " Skipped"
reslog.logfile = py.io.TextIO() reslog.logfile = StringIO()
reslog.write_log_entry("name", "s", "Skipped\n") reslog.write_log_entry("name", "s", "Skipped\n")
entry = reslog.logfile.getvalue() entry = reslog.logfile.getvalue()
assert entry[-1] == "\n" assert entry[-1] == "\n"
@ -39,7 +38,7 @@ def test_write_log_entry():
assert entry_lines[0] == "s name" assert entry_lines[0] == "s name"
assert entry_lines[1] == " Skipped" assert entry_lines[1] == " Skipped"
reslog.logfile = py.io.TextIO() reslog.logfile = StringIO()
longrepr = " tb1\n tb 2\nE tb3\nSome Error" longrepr = " tb1\n tb 2\nE tb3\nSome Error"
reslog.write_log_entry("name", "F", longrepr) reslog.write_log_entry("name", "F", longrepr)
entry = reslog.logfile.getvalue() entry = reslog.logfile.getvalue()
@ -118,7 +117,7 @@ class TestWithFunctionIntegration:
raise ValueError raise ValueError
except ValueError: except ValueError:
excinfo = _pytest._code.ExceptionInfo.from_current() excinfo = _pytest._code.ExceptionInfo.from_current()
reslog = ResultLog(None, py.io.TextIO()) reslog = ResultLog(None, StringIO())
reslog.pytest_internalerror(excinfo.getrepr(style=style)) reslog.pytest_internalerror(excinfo.getrepr(style=style))
entry = reslog.logfile.getvalue() entry = reslog.logfile.getvalue()
entry_lines = entry.splitlines() entry_lines = entry.splitlines()

View File

@ -5,6 +5,7 @@ import collections
import os import os
import sys import sys
import textwrap import textwrap
from io import StringIO
import pluggy import pluggy
import py import py
@ -268,7 +269,7 @@ class TestTerminal:
def test_rewrite(self, testdir, monkeypatch): def test_rewrite(self, testdir, monkeypatch):
config = testdir.parseconfig() config = testdir.parseconfig()
f = py.io.TextIO() f = StringIO()
monkeypatch.setattr(f, "isatty", lambda *args: True) monkeypatch.setattr(f, "isatty", lambda *args: True)
tr = TerminalReporter(config, f) tr = TerminalReporter(config, f)
tr._tw.fullwidth = 10 tr._tw.fullwidth = 10