Merge pull request #3068 from asottile/pystd

Replace py.std with stdlib imports
This commit is contained in:
Ronny Pfannschmidt 2018-01-10 07:52:55 +01:00 committed by GitHub
commit cf9b31bd5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 117 additions and 106 deletions

View File

@ -1,5 +1,7 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import inspect
import sys import sys
import traceback
from inspect import CO_VARARGS, CO_VARKEYWORDS from inspect import CO_VARARGS, CO_VARKEYWORDS
import re import re
from weakref import ref from weakref import ref
@ -422,7 +424,7 @@ class ExceptionInfo(object):
""" """
if style == 'native': if style == 'native':
return ReprExceptionInfo(ReprTracebackNative( return ReprExceptionInfo(ReprTracebackNative(
py.std.traceback.format_exception( traceback.format_exception(
self.type, self.type,
self.value, self.value,
self.traceback[0]._rawentry, self.traceback[0]._rawentry,
@ -556,7 +558,7 @@ class FormattedExcinfo(object):
# else: # else:
# self._line("%-10s =\\" % (name,)) # self._line("%-10s =\\" % (name,))
# # XXX # # XXX
# py.std.pprint.pprint(value, stream=self.excinfowriter) # pprint.pprint(value, stream=self.excinfowriter)
return ReprLocals(lines) return ReprLocals(lines)
def repr_traceback_entry(self, entry, excinfo=None): def repr_traceback_entry(self, entry, excinfo=None):
@ -669,7 +671,7 @@ class FormattedExcinfo(object):
else: else:
# fallback to native repr if the exception doesn't have a traceback: # fallback to native repr if the exception doesn't have a traceback:
# ExceptionInfo objects require a full traceback to work # ExceptionInfo objects require a full traceback to work
reprtraceback = ReprTracebackNative(py.std.traceback.format_exception(type(e), e, None)) reprtraceback = ReprTracebackNative(traceback.format_exception(type(e), e, None))
reprcrash = None reprcrash = None
repr_chain += [(reprtraceback, reprcrash, descr)] repr_chain += [(reprtraceback, reprcrash, descr)]
@ -886,7 +888,7 @@ def getrawcode(obj, trycall=True):
obj = getattr(obj, 'f_code', obj) obj = getattr(obj, 'f_code', obj)
obj = getattr(obj, '__code__', obj) obj = getattr(obj, '__code__', obj)
if trycall and not hasattr(obj, 'co_firstlineno'): if trycall and not hasattr(obj, 'co_firstlineno'):
if hasattr(obj, '__call__') and not py.std.inspect.isclass(obj): if hasattr(obj, '__call__') and not inspect.isclass(obj):
x = getrawcode(obj.__call__, trycall=False) x = getrawcode(obj.__call__, trycall=False)
if hasattr(x, 'co_firstlineno'): if hasattr(x, 'co_firstlineno'):
return x return x

View File

@ -3,6 +3,7 @@ from __future__ import absolute_import, division, generators, print_function
import ast import ast
from ast import PyCF_ONLY_AST as _AST_FLAG from ast import PyCF_ONLY_AST as _AST_FLAG
from bisect import bisect_right from bisect import bisect_right
import linecache
import sys import sys
import six import six
import inspect import inspect
@ -191,7 +192,7 @@ class Source(object):
if flag & _AST_FLAG: if flag & _AST_FLAG:
return co return co
lines = [(x + "\n") for x in self.lines] lines = [(x + "\n") for x in self.lines]
py.std.linecache.cache[filename] = (1, None, lines, filename) linecache.cache[filename] = (1, None, lines, filename)
return co return co
# #
@ -223,8 +224,7 @@ def getfslineno(obj):
code = _pytest._code.Code(obj) code = _pytest._code.Code(obj)
except TypeError: except TypeError:
try: try:
fn = (py.std.inspect.getsourcefile(obj) or fn = inspect.getsourcefile(obj) or inspect.getfile(obj)
py.std.inspect.getfile(obj))
except TypeError: except TypeError:
return "", -1 return "", -1
@ -248,7 +248,7 @@ def getfslineno(obj):
def findsource(obj): def findsource(obj):
try: try:
sourcelines, lineno = py.std.inspect.findsource(obj) sourcelines, lineno = inspect.findsource(obj)
except py.builtin._sysex: except py.builtin._sysex:
raise raise
except: # noqa except: # noqa

1
changelog/3067.trivial Normal file
View File

@ -0,0 +1 @@
Replace py.std with stdlib imports.

View File

@ -159,10 +159,10 @@ class TestRaises(object):
def test_dynamic_compile_shows_nicely(): def test_dynamic_compile_shows_nicely():
src = 'def foo():\n assert 1 == 0\n' src = 'def foo():\n assert 1 == 0\n'
name = 'abc-123' name = 'abc-123'
module = py.std.imp.new_module(name) module = imp.new_module(name)
code = _pytest._code.compile(src, name, 'exec') code = _pytest._code.compile(src, name, 'exec')
py.builtin.exec_(code, module.__dict__) py.builtin.exec_(code, module.__dict__)
py.std.sys.modules[name] = module sys.modules[name] = module
module.foo() module.foo()

View File

@ -413,10 +413,10 @@ get on the terminal - we are working on that)::
def test_dynamic_compile_shows_nicely(): def test_dynamic_compile_shows_nicely():
src = 'def foo():\n assert 1 == 0\n' src = 'def foo():\n assert 1 == 0\n'
name = 'abc-123' name = 'abc-123'
module = py.std.imp.new_module(name) module = imp.new_module(name)
code = _pytest._code.compile(src, name, 'exec') code = _pytest._code.compile(src, name, 'exec')
py.builtin.exec_(code, module.__dict__) py.builtin.exec_(code, module.__dict__)
py.std.sys.modules[name] = module sys.modules[name] = module
> module.foo() > module.foo()
failure_demo.py:166: failure_demo.py:166:

View File

@ -1,6 +1,5 @@
import json import json
import py import py
import textwrap
issues_url = "https://api.github.com/repos/pytest-dev/pytest/issues" issues_url = "https://api.github.com/repos/pytest-dev/pytest/issues"

View File

@ -2,6 +2,7 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import os import os
import sys import sys
import types
import six import six
@ -398,7 +399,7 @@ class TestGeneralUsage(object):
p = tmpdir.join('test_test_plugins_given_as_strings.py') p = tmpdir.join('test_test_plugins_given_as_strings.py')
p.write('def test_foo(): pass') p.write('def test_foo(): pass')
mod = py.std.types.ModuleType("myplugin") mod = types.ModuleType("myplugin")
monkeypatch.setitem(sys.modules, 'myplugin', mod) monkeypatch.setitem(sys.modules, 'myplugin', mod)
assert pytest.main(args=[str(tmpdir)], plugins=['myplugin']) == 0 assert pytest.main(args=[str(tmpdir)], plugins=['myplugin']) == 0
@ -492,17 +493,17 @@ class TestInvocationVariants(object):
def test_python_minus_m_invocation_ok(self, testdir): def test_python_minus_m_invocation_ok(self, testdir):
p1 = testdir.makepyfile("def test_hello(): pass") p1 = testdir.makepyfile("def test_hello(): pass")
res = testdir.run(py.std.sys.executable, "-m", "pytest", str(p1)) res = testdir.run(sys.executable, "-m", "pytest", str(p1))
assert res.ret == 0 assert res.ret == 0
def test_python_minus_m_invocation_fail(self, testdir): def test_python_minus_m_invocation_fail(self, testdir):
p1 = testdir.makepyfile("def test_fail(): 0/0") p1 = testdir.makepyfile("def test_fail(): 0/0")
res = testdir.run(py.std.sys.executable, "-m", "pytest", str(p1)) res = testdir.run(sys.executable, "-m", "pytest", str(p1))
assert res.ret == 1 assert res.ret == 1
def test_python_pytest_package(self, testdir): def test_python_pytest_package(self, testdir):
p1 = testdir.makepyfile("def test_pass(): pass") p1 = testdir.makepyfile("def test_pass(): pass")
res = testdir.run(py.std.sys.executable, "-m", "pytest", str(p1)) res = testdir.run(sys.executable, "-m", "pytest", str(p1))
assert res.ret == 0 assert res.ret == 0
res.stdout.fnmatch_lines(["*1 passed*"]) res.stdout.fnmatch_lines(["*1 passed*"])
@ -560,7 +561,7 @@ class TestInvocationVariants(object):
]) ])
def join_pythonpath(what): def join_pythonpath(what):
cur = py.std.os.environ.get('PYTHONPATH') cur = os.environ.get('PYTHONPATH')
if cur: if cur:
return str(what) + os.pathsep + cur return str(what) + os.pathsep + cur
return what return what
@ -618,7 +619,7 @@ class TestInvocationVariants(object):
# └── test_world.py # └── test_world.py
def join_pythonpath(*dirs): def join_pythonpath(*dirs):
cur = py.std.os.environ.get('PYTHONPATH') cur = os.environ.get('PYTHONPATH')
if cur: if cur:
dirs += (cur,) dirs += (cur,)
return os.pathsep.join(str(p) for p in dirs) return os.pathsep.join(str(p) for p in dirs)

View File

@ -2,6 +2,8 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import operator import operator
import os
import sys
import _pytest import _pytest
import py import py
import pytest import pytest
@ -472,7 +474,7 @@ class TestFormattedExcinfo(object):
excinfo = _pytest._code.ExceptionInfo() excinfo = _pytest._code.ExceptionInfo()
repr = pr.repr_excinfo(excinfo) repr = pr.repr_excinfo(excinfo)
assert repr.reprtraceback.reprentries[1].lines[0] == "> ???" assert repr.reprtraceback.reprentries[1].lines[0] == "> ???"
if py.std.sys.version_info[0] >= 3: if sys.version_info[0] >= 3:
assert repr.chain[0][0].reprentries[1].lines[0] == "> ???" assert repr.chain[0][0].reprentries[1].lines[0] == "> ???"
def test_repr_many_line_source_not_existing(self): def test_repr_many_line_source_not_existing(self):
@ -487,7 +489,7 @@ raise ValueError()
excinfo = _pytest._code.ExceptionInfo() excinfo = _pytest._code.ExceptionInfo()
repr = pr.repr_excinfo(excinfo) repr = pr.repr_excinfo(excinfo)
assert repr.reprtraceback.reprentries[1].lines[0] == "> ???" assert repr.reprtraceback.reprentries[1].lines[0] == "> ???"
if py.std.sys.version_info[0] >= 3: if sys.version_info[0] >= 3:
assert repr.chain[0][0].reprentries[1].lines[0] == "> ???" assert repr.chain[0][0].reprentries[1].lines[0] == "> ???"
def test_repr_source_failing_fullsource(self): def test_repr_source_failing_fullsource(self):
@ -545,13 +547,13 @@ raise ValueError()
fail = IOError() fail = IOError()
repr = pr.repr_excinfo(excinfo) repr = pr.repr_excinfo(excinfo)
assert repr.reprtraceback.reprentries[0].lines[0] == "> ???" assert repr.reprtraceback.reprentries[0].lines[0] == "> ???"
if py.std.sys.version_info[0] >= 3: if sys.version_info[0] >= 3:
assert repr.chain[0][0].reprentries[0].lines[0] == "> ???" assert repr.chain[0][0].reprentries[0].lines[0] == "> ???"
fail = py.error.ENOENT # noqa fail = py.error.ENOENT # noqa
repr = pr.repr_excinfo(excinfo) repr = pr.repr_excinfo(excinfo)
assert repr.reprtraceback.reprentries[0].lines[0] == "> ???" assert repr.reprtraceback.reprentries[0].lines[0] == "> ???"
if py.std.sys.version_info[0] >= 3: if sys.version_info[0] >= 3:
assert repr.chain[0][0].reprentries[0].lines[0] == "> ???" assert repr.chain[0][0].reprentries[0].lines[0] == "> ???"
def test_repr_local(self): def test_repr_local(self):
@ -738,7 +740,7 @@ raise ValueError()
repr = p.repr_excinfo(excinfo) repr = p.repr_excinfo(excinfo)
assert repr.reprtraceback assert repr.reprtraceback
assert len(repr.reprtraceback.reprentries) == len(reprtb.reprentries) assert len(repr.reprtraceback.reprentries) == len(reprtb.reprentries)
if py.std.sys.version_info[0] >= 3: if sys.version_info[0] >= 3:
assert repr.chain[0][0] assert repr.chain[0][0]
assert len(repr.chain[0][0].reprentries) == len(reprtb.reprentries) assert len(repr.chain[0][0].reprentries) == len(reprtb.reprentries)
assert repr.reprcrash.path.endswith("mod.py") assert repr.reprcrash.path.endswith("mod.py")
@ -758,7 +760,7 @@ raise ValueError()
def raiseos(): def raiseos():
raise OSError(2) raise OSError(2)
monkeypatch.setattr(py.std.os, 'getcwd', raiseos) monkeypatch.setattr(os, 'getcwd', raiseos)
assert p._makepath(__file__) == __file__ assert p._makepath(__file__) == __file__
p.repr_traceback(excinfo) p.repr_traceback(excinfo)
@ -816,10 +818,10 @@ raise ValueError()
for style in ("short", "long", "no"): for style in ("short", "long", "no"):
for showlocals in (True, False): for showlocals in (True, False):
repr = excinfo.getrepr(style=style, showlocals=showlocals) repr = excinfo.getrepr(style=style, showlocals=showlocals)
if py.std.sys.version_info[0] < 3: if sys.version_info[0] < 3:
assert isinstance(repr, ReprExceptionInfo) assert isinstance(repr, ReprExceptionInfo)
assert repr.reprtraceback.style == style assert repr.reprtraceback.style == style
if py.std.sys.version_info[0] >= 3: if sys.version_info[0] >= 3:
assert isinstance(repr, ExceptionChainRepr) assert isinstance(repr, ExceptionChainRepr)
for repr in repr.chain: for repr in repr.chain:
assert repr[0].style == style assert repr[0].style == style

View File

@ -2,6 +2,7 @@
# disable flake check on this file because some constructs are strange # disable flake check on this file because some constructs are strange
# or redundant on purpose and can't be disable on a line-by-line basis # or redundant on purpose and can't be disable on a line-by-line basis
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import inspect
import sys import sys
import _pytest._code import _pytest._code
@ -187,9 +188,9 @@ class TestSourceParsingAndCompiling(object):
def f(): def f():
raise ValueError() raise ValueError()
""") """)
source1 = py.std.inspect.getsource(co1) source1 = inspect.getsource(co1)
assert 'KeyError' in source1 assert 'KeyError' in source1
source2 = py.std.inspect.getsource(co2) source2 = inspect.getsource(co2)
assert 'ValueError' in source2 assert 'ValueError' in source2
def test_getstatement(self): def test_getstatement(self):
@ -373,7 +374,6 @@ def test_deindent():
c = '''while True: c = '''while True:
pass pass
''' '''
import inspect
lines = deindent(inspect.getsource(f).splitlines()) lines = deindent(inspect.getsource(f).splitlines())
assert lines == ["def f():", " c = '''while True:", " pass", "'''"] assert lines == ["def f():", " c = '''while True:", " pass", "'''"]
@ -461,7 +461,7 @@ def test_getfslineno():
fspath, lineno = getfslineno(A) fspath, lineno = getfslineno(A)
_, A_lineno = py.std.inspect.findsource(A) _, A_lineno = inspect.findsource(A)
assert fspath.basename == "test_source.py" assert fspath.basename == "test_source.py"
assert lineno == A_lineno assert lineno == A_lineno

View File

@ -4,7 +4,6 @@ import sys
from textwrap import dedent from textwrap import dedent
import _pytest._code import _pytest._code
import py
import pytest import pytest
from _pytest.main import ( from _pytest.main import (
Collector, Collector,
@ -25,7 +24,7 @@ class TestModule(object):
b = testdir.mkdir("b") b = testdir.mkdir("b")
p = a.ensure("test_whatever.py") p = a.ensure("test_whatever.py")
p.pyimport() p.pyimport()
del py.std.sys.modules['test_whatever'] del sys.modules['test_whatever']
b.ensure("test_whatever.py") b.ensure("test_whatever.py")
result = testdir.runpytest() result = testdir.runpytest()
result.stdout.fnmatch_lines([ result.stdout.fnmatch_lines([
@ -754,7 +753,7 @@ class TestSorting(object):
assert fn1 == fn2 assert fn1 == fn2
assert fn1 != modcol assert fn1 != modcol
if py.std.sys.version_info < (3, 0): if sys.version_info < (3, 0):
assert cmp(fn1, fn2) == 0 assert cmp(fn1, fn2) == 0
assert hash(fn1) == hash(fn2) assert hash(fn1) == hash(fn2)

View File

@ -730,7 +730,7 @@ class TestMetafuncFunctional(object):
def test_attributes(self, testdir): def test_attributes(self, testdir):
p = testdir.makepyfile(""" p = testdir.makepyfile("""
# assumes that generate/provide runs in the same process # assumes that generate/provide runs in the same process
import py, pytest import sys, pytest
def pytest_generate_tests(metafunc): def pytest_generate_tests(metafunc):
metafunc.addcall(param=metafunc) metafunc.addcall(param=metafunc)
@ -749,7 +749,7 @@ class TestMetafuncFunctional(object):
def test_method(self, metafunc, pytestconfig): def test_method(self, metafunc, pytestconfig):
assert metafunc.config == pytestconfig assert metafunc.config == pytestconfig
assert metafunc.module.__name__ == __name__ assert metafunc.module.__name__ == __name__
if py.std.sys.version_info > (3, 0): if sys.version_info > (3, 0):
unbound = TestClass.test_method unbound = TestClass.test_method
else: else:
unbound = TestClass.test_method.im_func unbound = TestClass.test_method.im_func

View File

@ -1,5 +1,6 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import py import subprocess
import sys
import pytest import pytest
# test for _argcomplete but not specific for any application # test for _argcomplete but not specific for any application
@ -23,21 +24,21 @@ def equal_with_bash(prefix, ffc, fc, out=None):
def _wrapcall(*args, **kargs): def _wrapcall(*args, **kargs):
try: try:
if py.std.sys.version_info > (2, 7): if sys.version_info > (2, 7):
return py.std.subprocess.check_output(*args, **kargs).decode().splitlines() return subprocess.check_output(*args, **kargs).decode().splitlines()
if 'stdout' in kargs: if 'stdout' in kargs:
raise ValueError('stdout argument not allowed, it will be overridden.') raise ValueError('stdout argument not allowed, it will be overridden.')
process = py.std.subprocess.Popen( process = subprocess.Popen(
stdout=py.std.subprocess.PIPE, *args, **kargs) stdout=subprocess.PIPE, *args, **kargs)
output, unused_err = process.communicate() output, unused_err = process.communicate()
retcode = process.poll() retcode = process.poll()
if retcode: if retcode:
cmd = kargs.get("args") cmd = kargs.get("args")
if cmd is None: if cmd is None:
cmd = args[0] cmd = args[0]
raise py.std.subprocess.CalledProcessError(retcode, cmd) raise subprocess.CalledProcessError(retcode, cmd)
return output.decode().splitlines() return output.decode().splitlines()
except py.std.subprocess.CalledProcessError: except subprocess.CalledProcessError:
return [] return []
@ -83,7 +84,7 @@ class TestArgComplete(object):
ffc = FastFilesCompleter() ffc = FastFilesCompleter()
fc = FilesCompleter() fc = FilesCompleter()
for x in ['/', '/d', '/data', 'qqq', '']: for x in ['/', '/d', '/data', 'qqq', '']:
assert equal_with_bash(x, ffc, fc, out=py.std.sys.stdout) assert equal_with_bash(x, ffc, fc, out=sys.stdout)
@pytest.mark.skipif("sys.platform in ('win32', 'darwin')") @pytest.mark.skipif("sys.platform in ('win32', 'darwin')")
def test_remove_dir_prefix(self): def test_remove_dir_prefix(self):
@ -94,4 +95,4 @@ class TestArgComplete(object):
ffc = FastFilesCompleter() ffc = FastFilesCompleter()
fc = FilesCompleter() fc = FilesCompleter()
for x in '/usr/'.split(): for x in '/usr/'.split():
assert not equal_with_bash(x, ffc, fc, out=py.std.sys.stdout) assert not equal_with_bash(x, ffc, fc, out=sys.stdout)

View File

@ -5,6 +5,7 @@ import os
import py_compile import py_compile
import stat import stat
import sys import sys
import textwrap
import zipfile import zipfile
import py import py
import pytest import pytest
@ -911,7 +912,7 @@ class TestAssertionRewriteHookDetails(object):
def test_reload_is_same(self, testdir): def test_reload_is_same(self, testdir):
# A file that will be picked up during collecting. # A file that will be picked up during collecting.
testdir.tmpdir.join("file.py").ensure() testdir.tmpdir.join("file.py").ensure()
testdir.tmpdir.join("pytest.ini").write(py.std.textwrap.dedent(""" testdir.tmpdir.join("pytest.ini").write(textwrap.dedent("""
[pytest] [pytest]
python_files = *.py python_files = *.py
""")) """))
@ -997,7 +998,7 @@ class TestIssue2121():
def test_simple_failure(): def test_simple_failure():
assert 1 + 1 == 3 assert 1 + 1 == 3
""") """)
testdir.tmpdir.join("pytest.ini").write(py.std.textwrap.dedent(""" testdir.tmpdir.join("pytest.ini").write(textwrap.dedent("""
[pytest] [pytest]
python_files = tests/**.py python_files = tests/**.py
""")) """))

View File

@ -410,8 +410,8 @@ class TestLastFailed(object):
def test_lastfailed_collectfailure(self, testdir, monkeypatch): def test_lastfailed_collectfailure(self, testdir, monkeypatch):
testdir.makepyfile(test_maybe=""" testdir.makepyfile(test_maybe="""
import py import os
env = py.std.os.environ env = os.environ
if '1' == env['FAILIMPORT']: if '1' == env['FAILIMPORT']:
raise ImportError('fail') raise ImportError('fail')
def test_hello(): def test_hello():
@ -439,8 +439,8 @@ class TestLastFailed(object):
def test_lastfailed_failure_subset(self, testdir, monkeypatch): def test_lastfailed_failure_subset(self, testdir, monkeypatch):
testdir.makepyfile(test_maybe=""" testdir.makepyfile(test_maybe="""
import py import os
env = py.std.os.environ env = os.environ
if '1' == env['FAILIMPORT']: if '1' == env['FAILIMPORT']:
raise ImportError('fail') raise ImportError('fail')
def test_hello(): def test_hello():
@ -448,8 +448,8 @@ class TestLastFailed(object):
""") """)
testdir.makepyfile(test_maybe2=""" testdir.makepyfile(test_maybe2="""
import py import os
env = py.std.os.environ env = os.environ
if '1' == env['FAILIMPORT']: if '1' == env['FAILIMPORT']:
raise ImportError('fail') raise ImportError('fail')
def test_hello(): def test_hello():

View File

@ -1,6 +1,7 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import pprint
import sys
import pytest import pytest
import py
import _pytest._code import _pytest._code
from _pytest.main import Session, EXIT_NOTESTSCOLLECTED, _in_venv from _pytest.main import Session, EXIT_NOTESTSCOLLECTED, _in_venv
@ -36,7 +37,7 @@ class TestCollector(object):
assert fn1 == fn2 assert fn1 == fn2
assert fn1 != modcol assert fn1 != modcol
if py.std.sys.version_info < (3, 0): if sys.version_info < (3, 0):
assert cmp(fn1, fn2) == 0 assert cmp(fn1, fn2) == 0
assert hash(fn1) == hash(fn2) assert hash(fn1) == hash(fn2)
@ -128,7 +129,7 @@ class TestCollectFS(object):
("activate", "activate.csh", "activate.fish", ("activate", "activate.csh", "activate.fish",
"Activate", "Activate.bat", "Activate.ps1")) "Activate", "Activate.bat", "Activate.ps1"))
def test_ignored_virtualenvs(self, testdir, fname): def test_ignored_virtualenvs(self, testdir, fname):
bindir = "Scripts" if py.std.sys.platform.startswith("win") else "bin" bindir = "Scripts" if sys.platform.startswith("win") else "bin"
testdir.tmpdir.ensure("virtual", bindir, fname) testdir.tmpdir.ensure("virtual", bindir, fname)
testfile = testdir.tmpdir.ensure("virtual", "test_invenv.py") testfile = testdir.tmpdir.ensure("virtual", "test_invenv.py")
testfile.write("def test_hello(): pass") testfile.write("def test_hello(): pass")
@ -147,7 +148,7 @@ class TestCollectFS(object):
("activate", "activate.csh", "activate.fish", ("activate", "activate.csh", "activate.fish",
"Activate", "Activate.bat", "Activate.ps1")) "Activate", "Activate.bat", "Activate.ps1"))
def test_ignored_virtualenvs_norecursedirs_precedence(self, testdir, fname): def test_ignored_virtualenvs_norecursedirs_precedence(self, testdir, fname):
bindir = "Scripts" if py.std.sys.platform.startswith("win") else "bin" bindir = "Scripts" if sys.platform.startswith("win") else "bin"
# norecursedirs takes priority # norecursedirs takes priority
testdir.tmpdir.ensure(".virtual", bindir, fname) testdir.tmpdir.ensure(".virtual", bindir, fname)
testfile = testdir.tmpdir.ensure(".virtual", "test_invenv.py") testfile = testdir.tmpdir.ensure(".virtual", "test_invenv.py")
@ -163,7 +164,7 @@ class TestCollectFS(object):
"Activate", "Activate.bat", "Activate.ps1")) "Activate", "Activate.bat", "Activate.ps1"))
def test__in_venv(self, testdir, fname): def test__in_venv(self, testdir, fname):
"""Directly test the virtual env detection function""" """Directly test the virtual env detection function"""
bindir = "Scripts" if py.std.sys.platform.startswith("win") else "bin" bindir = "Scripts" if sys.platform.startswith("win") else "bin"
# no bin/activate, not a virtualenv # no bin/activate, not a virtualenv
base_path = testdir.tmpdir.mkdir('venv') base_path = testdir.tmpdir.mkdir('venv')
assert _in_venv(base_path) is False assert _in_venv(base_path) is False
@ -436,7 +437,7 @@ class TestSession(object):
assert item.name == "test_func" assert item.name == "test_func"
newid = item.nodeid newid = item.nodeid
assert newid == id assert newid == id
py.std.pprint.pprint(hookrec.calls) pprint.pprint(hookrec.calls)
topdir = testdir.tmpdir # noqa topdir = testdir.tmpdir # noqa
hookrec.assert_contains([ hookrec.assert_contains([
("pytest_collectstart", "collector.fspath == topdir"), ("pytest_collectstart", "collector.fspath == topdir"),
@ -486,7 +487,7 @@ class TestSession(object):
id = p.basename id = p.basename
items, hookrec = testdir.inline_genitems(id) items, hookrec = testdir.inline_genitems(id)
py.std.pprint.pprint(hookrec.calls) pprint.pprint(hookrec.calls)
assert len(items) == 2 assert len(items) == 2
hookrec.assert_contains([ hookrec.assert_contains([
("pytest_collectstart", ("pytest_collectstart",
@ -508,7 +509,7 @@ class TestSession(object):
items, hookrec = testdir.inline_genitems() items, hookrec = testdir.inline_genitems()
assert len(items) == 1 assert len(items) == 1
py.std.pprint.pprint(hookrec.calls) pprint.pprint(hookrec.calls)
hookrec.assert_contains([ hookrec.assert_contains([
("pytest_collectstart", "collector.fspath == test_aaa"), ("pytest_collectstart", "collector.fspath == test_aaa"),
("pytest_pycollect_makeitem", "name == 'test_func'"), ("pytest_pycollect_makeitem", "name == 'test_func'"),
@ -529,7 +530,7 @@ class TestSession(object):
items, hookrec = testdir.inline_genitems(id) items, hookrec = testdir.inline_genitems(id)
assert len(items) == 2 assert len(items) == 2
py.std.pprint.pprint(hookrec.calls) pprint.pprint(hookrec.calls)
hookrec.assert_contains([ hookrec.assert_contains([
("pytest_collectstart", "collector.fspath == test_aaa"), ("pytest_collectstart", "collector.fspath == test_aaa"),
("pytest_pycollect_makeitem", "name == 'test_func'"), ("pytest_pycollect_makeitem", "name == 'test_func'"),

View File

@ -1,6 +1,6 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import sys import sys
import py import textwrap
import pytest import pytest
import _pytest._code import _pytest._code
@ -57,7 +57,7 @@ class TestParseIni(object):
('pytest', 'pytest.ini')], ('pytest', 'pytest.ini')],
) )
def test_ini_names(self, testdir, name, section): def test_ini_names(self, testdir, name, section):
testdir.tmpdir.join(name).write(py.std.textwrap.dedent(""" testdir.tmpdir.join(name).write(textwrap.dedent("""
[{section}] [{section}]
minversion = 1.0 minversion = 1.0
""".format(section=section))) """.format(section=section)))
@ -66,11 +66,11 @@ class TestParseIni(object):
def test_toxini_before_lower_pytestini(self, testdir): def test_toxini_before_lower_pytestini(self, testdir):
sub = testdir.tmpdir.mkdir("sub") sub = testdir.tmpdir.mkdir("sub")
sub.join("tox.ini").write(py.std.textwrap.dedent(""" sub.join("tox.ini").write(textwrap.dedent("""
[pytest] [pytest]
minversion = 2.0 minversion = 2.0
""")) """))
testdir.tmpdir.join("pytest.ini").write(py.std.textwrap.dedent(""" testdir.tmpdir.join("pytest.ini").write(textwrap.dedent("""
[pytest] [pytest]
minversion = 1.5 minversion = 1.5
""")) """))
@ -731,7 +731,7 @@ class TestRootdir(object):
class TestOverrideIniArgs(object): class TestOverrideIniArgs(object):
@pytest.mark.parametrize("name", "setup.cfg tox.ini pytest.ini".split()) @pytest.mark.parametrize("name", "setup.cfg tox.ini pytest.ini".split())
def test_override_ini_names(self, testdir, name): def test_override_ini_names(self, testdir, name):
testdir.tmpdir.join(name).write(py.std.textwrap.dedent(""" testdir.tmpdir.join(name).write(textwrap.dedent("""
[pytest] [pytest]
custom = 1.0""")) custom = 1.0"""))
testdir.makeconftest(""" testdir.makeconftest("""

View File

@ -232,7 +232,7 @@ def test_fixture_dependency(testdir, monkeypatch):
ct1.write("") ct1.write("")
sub = testdir.mkdir("sub") sub = testdir.mkdir("sub")
sub.join("__init__.py").write("") sub.join("__init__.py").write("")
sub.join("conftest.py").write(py.std.textwrap.dedent(""" sub.join("conftest.py").write(dedent("""
import pytest import pytest
@pytest.fixture @pytest.fixture
@ -249,7 +249,7 @@ def test_fixture_dependency(testdir, monkeypatch):
""")) """))
subsub = sub.mkdir("subsub") subsub = sub.mkdir("subsub")
subsub.join("__init__.py").write("") subsub.join("__init__.py").write("")
subsub.join("test_bar.py").write(py.std.textwrap.dedent(""" subsub.join("test_bar.py").write(dedent("""
import pytest import pytest
@pytest.fixture @pytest.fixture
@ -265,7 +265,7 @@ def test_fixture_dependency(testdir, monkeypatch):
def test_conftest_found_with_double_dash(testdir): def test_conftest_found_with_double_dash(testdir):
sub = testdir.mkdir("sub") sub = testdir.mkdir("sub")
sub.join("conftest.py").write(py.std.textwrap.dedent(""" sub.join("conftest.py").write(dedent("""
def pytest_addoption(parser): def pytest_addoption(parser):
parser.addoption("--hello-world", action="store_true") parser.addoption("--hello-world", action="store_true")
""")) """))

View File

@ -1,4 +1,5 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import argparse
import sys import sys
import os import os
import py import py
@ -189,7 +190,7 @@ class TestParser(object):
assert option.no is False assert option.no is False
def test_drop_short_helper(self): def test_drop_short_helper(self):
parser = py.std.argparse.ArgumentParser(formatter_class=parseopt.DropShorterLongHelpFormatter) parser = argparse.ArgumentParser(formatter_class=parseopt.DropShorterLongHelpFormatter)
parser.add_argument('-t', '--twoword', '--duo', '--two-word', '--two', parser.add_argument('-t', '--twoword', '--duo', '--two-word', '--two',
help='foo').map_long_option = {'two': 'two-word'} help='foo').map_long_option = {'two': 'two-word'}
# throws error on --deux only! # throws error on --deux only!

View File

@ -1,8 +1,10 @@
# encoding: UTF-8 # encoding: UTF-8
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import pytest import pytest
import py
import os import os
import re
import sys
import types
from _pytest.config import get_config, PytestPluginManager from _pytest.config import get_config, PytestPluginManager
from _pytest.main import EXIT_NOTESTSCOLLECTED, Session from _pytest.main import EXIT_NOTESTSCOLLECTED, Session
@ -208,14 +210,14 @@ def test_importplugin_error_message(testdir, pytestpm):
expected_message = '.*Error importing plugin "qwe": Not possible to import: .' expected_message = '.*Error importing plugin "qwe": Not possible to import: .'
expected_traceback = ".*in test_traceback" expected_traceback = ".*in test_traceback"
assert py.std.re.match(expected_message, str(excinfo.value)) assert re.match(expected_message, str(excinfo.value))
assert py.std.re.match(expected_traceback, str(excinfo.traceback[-1])) assert re.match(expected_traceback, str(excinfo.traceback[-1]))
class TestPytestPluginManager(object): class TestPytestPluginManager(object):
def test_register_imported_modules(self): def test_register_imported_modules(self):
pm = PytestPluginManager() pm = PytestPluginManager()
mod = py.std.types.ModuleType("x.y.pytest_hello") mod = types.ModuleType("x.y.pytest_hello")
pm.register(mod) pm.register(mod)
assert pm.is_registered(mod) assert pm.is_registered(mod)
values = pm.get_plugins() values = pm.get_plugins()
@ -226,8 +228,8 @@ class TestPytestPluginManager(object):
assert pm.get_plugins() == values assert pm.get_plugins() == values
def test_canonical_import(self, monkeypatch): def test_canonical_import(self, monkeypatch):
mod = py.std.types.ModuleType("pytest_xyz") mod = types.ModuleType("pytest_xyz")
monkeypatch.setitem(py.std.sys.modules, 'pytest_xyz', mod) monkeypatch.setitem(sys.modules, 'pytest_xyz', mod)
pm = PytestPluginManager() pm = PytestPluginManager()
pm.import_plugin('pytest_xyz') pm.import_plugin('pytest_xyz')
assert pm.get_plugin('pytest_xyz') == mod assert pm.get_plugin('pytest_xyz') == mod
@ -237,7 +239,7 @@ class TestPytestPluginManager(object):
testdir.syspathinsert() testdir.syspathinsert()
testdir.makepyfile(pytest_p1="#") testdir.makepyfile(pytest_p1="#")
testdir.makepyfile(pytest_p2="#") testdir.makepyfile(pytest_p2="#")
mod = py.std.types.ModuleType("temp") mod = types.ModuleType("temp")
mod.pytest_plugins = ["pytest_p1", "pytest_p2"] mod.pytest_plugins = ["pytest_p1", "pytest_p2"]
pytestpm.consider_module(mod) pytestpm.consider_module(mod)
assert pytestpm.get_plugin("pytest_p1").__name__ == "pytest_p1" assert pytestpm.get_plugin("pytest_p1").__name__ == "pytest_p1"
@ -245,12 +247,12 @@ class TestPytestPluginManager(object):
def test_consider_module_import_module(self, testdir): def test_consider_module_import_module(self, testdir):
pytestpm = get_config().pluginmanager pytestpm = get_config().pluginmanager
mod = py.std.types.ModuleType("x") mod = types.ModuleType("x")
mod.pytest_plugins = "pytest_a" mod.pytest_plugins = "pytest_a"
aplugin = testdir.makepyfile(pytest_a="#") aplugin = testdir.makepyfile(pytest_a="#")
reprec = testdir.make_hook_recorder(pytestpm) reprec = testdir.make_hook_recorder(pytestpm)
# syspath.prepend(aplugin.dirpath()) # syspath.prepend(aplugin.dirpath())
py.std.sys.path.insert(0, str(aplugin.dirpath())) sys.path.insert(0, str(aplugin.dirpath()))
pytestpm.consider_module(mod) pytestpm.consider_module(mod)
call = reprec.getcall(pytestpm.hook.pytest_plugin_registered.name) call = reprec.getcall(pytestpm.hook.pytest_plugin_registered.name)
assert call.plugin.__name__ == "pytest_a" assert call.plugin.__name__ == "pytest_a"

View File

@ -1,7 +1,6 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import warnings import warnings
import re import re
import py
import pytest import pytest
from _pytest.recwarn import WarningsRecorder from _pytest.recwarn import WarningsRecorder
@ -24,9 +23,9 @@ class TestWarningsRecorderChecker(object):
rec = WarningsRecorder() rec = WarningsRecorder()
with rec: with rec:
assert not rec.list assert not rec.list
py.std.warnings.warn_explicit("hello", UserWarning, "xyz", 13) warnings.warn_explicit("hello", UserWarning, "xyz", 13)
assert len(rec.list) == 1 assert len(rec.list) == 1
py.std.warnings.warn(DeprecationWarning("hello")) warnings.warn(DeprecationWarning("hello"))
assert len(rec.list) == 2 assert len(rec.list) == 2
warn = rec.pop() warn = rec.pop()
assert str(warn.message) == "hello" assert str(warn.message) == "hello"
@ -64,14 +63,14 @@ class TestDeprecatedCall(object):
def dep(self, i, j=None): def dep(self, i, j=None):
if i == 0: if i == 0:
py.std.warnings.warn("is deprecated", DeprecationWarning, warnings.warn("is deprecated", DeprecationWarning,
stacklevel=1) stacklevel=1)
return 42 return 42
def dep_explicit(self, i): def dep_explicit(self, i):
if i == 0: if i == 0:
py.std.warnings.warn_explicit("dep_explicit", category=DeprecationWarning, warnings.warn_explicit("dep_explicit", category=DeprecationWarning,
filename="hello", lineno=3) filename="hello", lineno=3)
def test_deprecated_call_raises(self): def test_deprecated_call_raises(self):
with pytest.raises(AssertionError) as excinfo: with pytest.raises(AssertionError) as excinfo:
@ -86,16 +85,16 @@ class TestDeprecatedCall(object):
assert ret == 42 assert ret == 42
def test_deprecated_call_preserves(self): def test_deprecated_call_preserves(self):
onceregistry = py.std.warnings.onceregistry.copy() onceregistry = warnings.onceregistry.copy()
filters = py.std.warnings.filters[:] filters = warnings.filters[:]
warn = py.std.warnings.warn warn = warnings.warn
warn_explicit = py.std.warnings.warn_explicit warn_explicit = warnings.warn_explicit
self.test_deprecated_call_raises() self.test_deprecated_call_raises()
self.test_deprecated_call() self.test_deprecated_call()
assert onceregistry == py.std.warnings.onceregistry assert onceregistry == warnings.onceregistry
assert filters == py.std.warnings.filters assert filters == warnings.filters
assert warn is py.std.warnings.warn assert warn is warnings.warn
assert warn_explicit is py.std.warnings.warn_explicit assert warn_explicit is warnings.warn_explicit
def test_deprecated_explicit_call_raises(self): def test_deprecated_explicit_call_raises(self):
with pytest.raises(AssertionError): with pytest.raises(AssertionError):

View File

@ -2,10 +2,12 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
import _pytest._code import _pytest._code
import inspect
import os import os
import py import py
import pytest import pytest
import sys import sys
import types
from _pytest import runner, main, outcomes from _pytest import runner, main, outcomes
@ -392,10 +394,10 @@ reporttypes = [
@pytest.mark.parametrize('reporttype', reporttypes, ids=[x.__name__ for x in reporttypes]) @pytest.mark.parametrize('reporttype', reporttypes, ids=[x.__name__ for x in reporttypes])
def test_report_extra_parameters(reporttype): def test_report_extra_parameters(reporttype):
if hasattr(py.std.inspect, 'signature'): if hasattr(inspect, 'signature'):
args = list(py.std.inspect.signature(reporttype.__init__).parameters.keys())[1:] args = list(inspect.signature(reporttype.__init__).parameters.keys())[1:]
else: else:
args = py.std.inspect.getargspec(reporttype.__init__)[0][1:] args = inspect.getargspec(reporttype.__init__)[0][1:]
basekw = dict.fromkeys(args, []) basekw = dict.fromkeys(args, [])
report = reporttype(newthing=1, **basekw) report = reporttype(newthing=1, **basekw)
assert report.newthing == 1 assert report.newthing == 1
@ -564,10 +566,10 @@ def test_importorskip(monkeypatch):
importorskip("asdlkj") importorskip("asdlkj")
try: try:
sys = importorskip("sys") sysmod = importorskip("sys")
assert sys == py.std.sys assert sysmod is sys
# path = pytest.importorskip("os.path") # path = pytest.importorskip("os.path")
# assert path == py.std.os.path # assert path == os.path
excinfo = pytest.raises(pytest.skip.Exception, f) excinfo = pytest.raises(pytest.skip.Exception, f)
path = py.path.local(excinfo.getrepr().reprcrash.path) path = py.path.local(excinfo.getrepr().reprcrash.path)
# check that importorskip reports the actual call # check that importorskip reports the actual call
@ -575,7 +577,7 @@ def test_importorskip(monkeypatch):
assert path.purebasename == "test_runner" assert path.purebasename == "test_runner"
pytest.raises(SyntaxError, "pytest.importorskip('x y z')") pytest.raises(SyntaxError, "pytest.importorskip('x y z')")
pytest.raises(SyntaxError, "pytest.importorskip('x=y')") pytest.raises(SyntaxError, "pytest.importorskip('x=y')")
mod = py.std.types.ModuleType("hello123") mod = types.ModuleType("hello123")
mod.__version__ = "1.3" mod.__version__ = "1.3"
monkeypatch.setitem(sys.modules, "hello123", mod) monkeypatch.setitem(sys.modules, "hello123", mod)
pytest.raises(pytest.skip.Exception, """ pytest.raises(pytest.skip.Exception, """
@ -595,7 +597,7 @@ def test_importorskip_imports_last_module_part():
def test_importorskip_dev_module(monkeypatch): def test_importorskip_dev_module(monkeypatch):
try: try:
mod = py.std.types.ModuleType("mockmodule") mod = types.ModuleType("mockmodule")
mod.__version__ = '0.13.0.dev-43290' mod.__version__ = '0.13.0.dev-43290'
monkeypatch.setitem(sys.modules, 'mockmodule', mod) monkeypatch.setitem(sys.modules, 'mockmodule', mod)
mod2 = pytest.importorskip('mockmodule', minversion='0.12.0') mod2 = pytest.importorskip('mockmodule', minversion='0.12.0')

View File

@ -326,7 +326,7 @@ def test_repr_python_version(monkeypatch):
try: try:
monkeypatch.setattr(sys, 'version_info', (2, 5, 1, 'final', 0)) monkeypatch.setattr(sys, 'version_info', (2, 5, 1, 'final', 0))
assert repr_pythonversion() == "2.5.1-final-0" assert repr_pythonversion() == "2.5.1-final-0"
py.std.sys.version_info = x = (2, 3) sys.version_info = x = (2, 3)
assert repr_pythonversion() == str(x) assert repr_pythonversion() == str(x)
finally: finally:
monkeypatch.undo() # do this early as pytest can get confused monkeypatch.undo() # do this early as pytest can get confused
@ -475,11 +475,11 @@ class TestTerminalFunctional(object):
pass pass
""") """)
result = testdir.runpytest() result = testdir.runpytest()
verinfo = ".".join(map(str, py.std.sys.version_info[:3])) verinfo = ".".join(map(str, sys.version_info[:3]))
result.stdout.fnmatch_lines([ result.stdout.fnmatch_lines([
"*===== test session starts ====*", "*===== test session starts ====*",
"platform %s -- Python %s*pytest-%s*py-%s*pluggy-%s" % ( "platform %s -- Python %s*pytest-%s*py-%s*pluggy-%s" % (
py.std.sys.platform, verinfo, sys.platform, verinfo,
pytest.__version__, py.__version__, pluggy.__version__), pytest.__version__, py.__version__, pluggy.__version__),
"*test_header_trailer_info.py .*", "*test_header_trailer_info.py .*",
"=* 1 passed*in *.[0-9][0-9] seconds *=", "=* 1 passed*in *.[0-9][0-9] seconds *=",