diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index 5d6baf121..52879f15c 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -2,11 +2,11 @@ from __future__ import absolute_import, division, print_function import os import sys +import textwrap import types import six -import _pytest._code import py import pytest from _pytest.main import EXIT_NOTESTSCOLLECTED, EXIT_USAGEERROR @@ -201,16 +201,16 @@ class TestGeneralUsage(object): testdir.tmpdir.join("py").mksymlinkto(py._pydir) p = testdir.tmpdir.join("main.py") p.write( - _pytest._code.Source( + textwrap.dedent( + """\ + import sys, os + sys.path.insert(0, '') + import py + print(py.__file__) + print(py.__path__) + os.chdir(os.path.dirname(os.getcwd())) + print(py.log) """ - import sys, os - sys.path.insert(0, '') - import py - print (py.__file__) - print (py.__path__) - os.chdir(os.path.dirname(os.getcwd())) - print (py.log) - """ ) ) result = testdir.runpython(p) diff --git a/testing/code/test_code.py b/testing/code/test_code.py index 27916d64f..f7a8a4dbd 100644 --- a/testing/code/test_code.py +++ b/testing/code/test_code.py @@ -4,6 +4,7 @@ import sys import _pytest._code import pytest +import mock from test_excinfo import TWMock from six import text_type @@ -67,12 +68,8 @@ def test_getstatement_empty_fullsource(): f = func() f = _pytest._code.Frame(f) - prop = f.code.__class__.fullsource - try: - f.code.__class__.fullsource = None - assert f.statement == _pytest._code.Source("") - finally: - f.code.__class__.fullsource = prop + with mock.patch.object(f.code.__class__, "fullsource", None): + assert f.statement == "" def test_code_from_func(): diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py index f8bf25b68..52cad6a3e 100644 --- a/testing/code/test_excinfo.py +++ b/testing/code/test_excinfo.py @@ -149,7 +149,7 @@ class TestTraceback_f_g_h(object): except somenoname: pass xyz() - """ + """ ) try: exec(source.compile()) @@ -426,7 +426,7 @@ class TestFormattedExcinfo(object): @pytest.fixture def importasmod(self, request): def importasmod(source): - source = _pytest._code.Source(source) + source = textwrap.dedent(source) tmpdir = request.getfixturevalue("tmpdir") modpath = tmpdir.join("mod.py") tmpdir.ensure("__init__.py") @@ -450,10 +450,10 @@ class TestFormattedExcinfo(object): def test_repr_source(self): pr = FormattedExcinfo() source = _pytest._code.Source( - """ + """\ def f(x): pass - """ + """ ).strip() pr.flow_marker = "|" lines = pr.get_source(source, 0) diff --git a/testing/python/collect.py b/testing/python/collect.py index c040cc09e..b3b19802a 100644 --- a/testing/python/collect.py +++ b/testing/python/collect.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import os import sys -from textwrap import dedent +import textwrap import _pytest._code import pytest @@ -47,13 +47,14 @@ class TestModule(object): p = root2.join("test_x456.py") monkeypatch.syspath_prepend(str(root1)) p.write( - dedent( + textwrap.dedent( """\ - import x456 - def test(): - assert x456.__file__.startswith(%r) - """ - % str(root2) + import x456 + def test(): + assert x456.__file__.startswith({!r}) + """.format( + str(root2) + ) ) ) with root2.as_cwd(): @@ -929,23 +930,23 @@ class TestConftestCustomization(object): def test_customized_pymakemodule_issue205_subdir(self, testdir): b = testdir.mkdir("a").mkdir("b") b.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + @pytest.hookimpl(hookwrapper=True) + def pytest_pycollect_makemodule(): + outcome = yield + mod = outcome.get_result() + mod.obj.hello = "world" """ - import pytest - @pytest.hookimpl(hookwrapper=True) - def pytest_pycollect_makemodule(): - outcome = yield - mod = outcome.get_result() - mod.obj.hello = "world" - """ ) ) b.join("test_module.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def test_hello(): + assert hello == "world" """ - def test_hello(): - assert hello == "world" - """ ) ) reprec = testdir.inline_run() @@ -954,31 +955,31 @@ class TestConftestCustomization(object): def test_customized_pymakeitem(self, testdir): b = testdir.mkdir("a").mkdir("b") b.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + @pytest.hookimpl(hookwrapper=True) + def pytest_pycollect_makeitem(): + outcome = yield + if outcome.excinfo is None: + result = outcome.get_result() + if result: + for func in result: + func._some123 = "world" """ - import pytest - @pytest.hookimpl(hookwrapper=True) - def pytest_pycollect_makeitem(): - outcome = yield - if outcome.excinfo is None: - result = outcome.get_result() - if result: - for func in result: - func._some123 = "world" - """ ) ) b.join("test_module.py").write( - _pytest._code.Source( - """ - import pytest + textwrap.dedent( + """\ + import pytest - @pytest.fixture() - def obj(request): - return request.node._some123 - def test_hello(obj): - assert obj == "world" - """ + @pytest.fixture() + def obj(request): + return request.node._some123 + def test_hello(obj): + assert obj == "world" + """ ) ) reprec = testdir.inline_run() @@ -1033,7 +1034,7 @@ class TestConftestCustomization(object): ) testdir.makefile( ".narf", - """ + """\ def test_something(): assert 1 + 1 == 2""", ) @@ -1046,29 +1047,29 @@ def test_setup_only_available_in_subdir(testdir): sub1 = testdir.mkpydir("sub1") sub2 = testdir.mkpydir("sub2") sub1.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + def pytest_runtest_setup(item): + assert item.fspath.purebasename == "test_in_sub1" + def pytest_runtest_call(item): + assert item.fspath.purebasename == "test_in_sub1" + def pytest_runtest_teardown(item): + assert item.fspath.purebasename == "test_in_sub1" """ - import pytest - def pytest_runtest_setup(item): - assert item.fspath.purebasename == "test_in_sub1" - def pytest_runtest_call(item): - assert item.fspath.purebasename == "test_in_sub1" - def pytest_runtest_teardown(item): - assert item.fspath.purebasename == "test_in_sub1" - """ ) ) sub2.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + def pytest_runtest_setup(item): + assert item.fspath.purebasename == "test_in_sub2" + def pytest_runtest_call(item): + assert item.fspath.purebasename == "test_in_sub2" + def pytest_runtest_teardown(item): + assert item.fspath.purebasename == "test_in_sub2" """ - import pytest - def pytest_runtest_setup(item): - assert item.fspath.purebasename == "test_in_sub2" - def pytest_runtest_call(item): - assert item.fspath.purebasename == "test_in_sub2" - def pytest_runtest_teardown(item): - assert item.fspath.purebasename == "test_in_sub2" - """ ) ) sub1.join("test_in_sub1.py").write("def test_1(): pass") @@ -1547,12 +1548,12 @@ def test_skip_duplicates_by_default(testdir): a = testdir.mkdir("a") fh = a.join("test_a.py") fh.write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + def test_real(): + pass """ - import pytest - def test_real(): - pass - """ ) ) result = testdir.runpytest(a.strpath, a.strpath) @@ -1567,12 +1568,12 @@ def test_keep_duplicates(testdir): a = testdir.mkdir("a") fh = a.join("test_a.py") fh.write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + def test_real(): + pass """ - import pytest - def test_real(): - pass - """ ) ) result = testdir.runpytest("--keep-duplicates", a.strpath, a.strpath) diff --git a/testing/python/fixture.py b/testing/python/fixture.py index bbfcf775b..47be7800c 100644 --- a/testing/python/fixture.py +++ b/testing/python/fixture.py @@ -1,6 +1,5 @@ -from textwrap import dedent +import textwrap -import _pytest._code import pytest from _pytest.pytester import get_public_names from _pytest.fixtures import FixtureLookupError, FixtureRequest @@ -208,23 +207,23 @@ class TestFillFixtures(object): ) subdir = testdir.mkpydir("subdir") subdir.join("conftest.py").write( - _pytest._code.Source( - """ - import pytest + textwrap.dedent( + """\ + import pytest - @pytest.fixture - def spam(): - return 'spam' - """ + @pytest.fixture + def spam(): + return 'spam' + """ ) ) testfile = subdir.join("test_spam.py") testfile.write( - _pytest._code.Source( + textwrap.dedent( + """\ + def test_spam(spam): + assert spam == "spam" """ - def test_spam(spam): - assert spam == "spam" - """ ) ) result = testdir.runpytest() @@ -276,26 +275,26 @@ class TestFillFixtures(object): ) subdir = testdir.mkpydir("subdir") subdir.join("conftest.py").write( - _pytest._code.Source( - """ - import pytest + textwrap.dedent( + """\ + import pytest - @pytest.fixture(params=[1, 2, 3]) - def spam(request): - return request.param - """ + @pytest.fixture(params=[1, 2, 3]) + def spam(request): + return request.param + """ ) ) testfile = subdir.join("test_spam.py") testfile.write( - _pytest._code.Source( - """ - params = {'spam': 1} + textwrap.dedent( + """\ + params = {'spam': 1} - def test_spam(spam): - assert spam == params['spam'] - params['spam'] += 1 - """ + def test_spam(spam): + assert spam == params['spam'] + params['spam'] += 1 + """ ) ) result = testdir.runpytest() @@ -320,26 +319,26 @@ class TestFillFixtures(object): ) subdir = testdir.mkpydir("subdir") subdir.join("conftest.py").write( - _pytest._code.Source( - """ - import pytest + textwrap.dedent( + """\ + import pytest - @pytest.fixture(params=[1, 2, 3]) - def spam(request): - return request.param - """ + @pytest.fixture(params=[1, 2, 3]) + def spam(request): + return request.param + """ ) ) testfile = subdir.join("test_spam.py") testfile.write( - _pytest._code.Source( - """ - params = {'spam': 1} + textwrap.dedent( + """\ + params = {'spam': 1} - def test_spam(spam): - assert spam == params['spam'] - params['spam'] += 1 - """ + def test_spam(spam): + assert spam == params['spam'] + params['spam'] += 1 + """ ) ) result = testdir.runpytest() @@ -807,13 +806,13 @@ class TestRequestBasic(object): # this tests that normalization of nodeids takes place b = testdir.mkdir("tests").mkdir("unit") b.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + @pytest.fixture + def arg1(): + pass """ - import pytest - @pytest.fixture - def arg1(): - pass - """ ) ) p = b.join("test_module.py") @@ -1484,41 +1483,41 @@ class TestFixtureManagerParseFactories(object): runner = testdir.mkdir("runner") package = testdir.mkdir("package") package.join("conftest.py").write( - dedent( + textwrap.dedent( """\ import pytest @pytest.fixture def one(): return 1 - """ + """ ) ) package.join("test_x.py").write( - dedent( + textwrap.dedent( """\ - def test_x(one): - assert one == 1 - """ + def test_x(one): + assert one == 1 + """ ) ) sub = package.mkdir("sub") sub.join("__init__.py").ensure() sub.join("conftest.py").write( - dedent( + textwrap.dedent( """\ - import pytest - @pytest.fixture - def one(): - return 2 - """ + import pytest + @pytest.fixture + def one(): + return 2 + """ ) ) sub.join("test_y.py").write( - dedent( + textwrap.dedent( """\ - def test_x(one): - assert one == 2 - """ + def test_x(one): + assert one == 2 + """ ) ) reprec = testdir.inline_run() @@ -1535,44 +1534,44 @@ class TestFixtureManagerParseFactories(object): ) package = testdir.mkdir("package") package.join("__init__.py").write( - dedent( + textwrap.dedent( """\ - from .. import values - def setup_module(): - values.append("package") - def teardown_module(): - values[:] = [] - """ + from .. import values + def setup_module(): + values.append("package") + def teardown_module(): + values[:] = [] + """ ) ) package.join("test_x.py").write( - dedent( + textwrap.dedent( """\ - from .. import values - def test_x(): - assert values == ["package"] - """ + from .. import values + def test_x(): + assert values == ["package"] + """ ) ) package = testdir.mkdir("package2") package.join("__init__.py").write( - dedent( + textwrap.dedent( """\ - from .. import values - def setup_module(): - values.append("package2") - def teardown_module(): - values[:] = [] - """ + from .. import values + def setup_module(): + values.append("package2") + def teardown_module(): + values[:] = [] + """ ) ) package.join("test_x.py").write( - dedent( + textwrap.dedent( """\ - from .. import values - def test_x(): - assert values == ["package2"] - """ + from .. import values + def test_x(): + assert values == ["package2"] + """ ) ) reprec = testdir.inline_run() @@ -1587,32 +1586,32 @@ class TestFixtureManagerParseFactories(object): package = testdir.mkdir("package") package.join("__init__.py").write("") package.join("conftest.py").write( - dedent( + textwrap.dedent( """\ - import pytest - from .. import values - @pytest.fixture(scope="package") - def one(): - values.append("package") - yield values - values.pop() - @pytest.fixture(scope="package", autouse=True) - def two(): - values.append("package-auto") - yield values - values.pop() - """ + import pytest + from .. import values + @pytest.fixture(scope="package") + def one(): + values.append("package") + yield values + values.pop() + @pytest.fixture(scope="package", autouse=True) + def two(): + values.append("package-auto") + yield values + values.pop() + """ ) ) package.join("test_x.py").write( - dedent( + textwrap.dedent( """\ - from .. import values - def test_package_autouse(): - assert values == ["package-auto"] - def test_package(one): - assert values == ["package-auto", "package"] - """ + from .. import values + def test_package_autouse(): + assert values == ["package-auto"] + def test_package(one): + assert values == ["package-auto", "package"] + """ ) ) reprec = testdir.inline_run() @@ -1804,24 +1803,24 @@ class TestAutouseManagement(object): def test_autouse_conftest_mid_directory(self, testdir): pkgdir = testdir.mkpydir("xyz123") pkgdir.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + @pytest.fixture(autouse=True) + def app(): + import sys + sys._myapp = "hello" """ - import pytest - @pytest.fixture(autouse=True) - def app(): - import sys - sys._myapp = "hello" - """ ) ) t = pkgdir.ensure("tests", "test_app.py") t.write( - _pytest._code.Source( + textwrap.dedent( + """\ + import sys + def test_app(): + assert sys._myapp == "hello" """ - import sys - def test_app(): - assert sys._myapp == "hello" - """ ) ) reprec = testdir.inline_run("-s") @@ -2715,17 +2714,17 @@ class TestFixtureMarker(object): ) b = testdir.mkdir("subdir") b.join("test_overridden_fixture_finalizer.py").write( - dedent( - """ - import pytest - @pytest.fixture - def browser(browser): - browser['visited'] = True - return browser + textwrap.dedent( + """\ + import pytest + @pytest.fixture + def browser(browser): + browser['visited'] = True + return browser - def test_browser(browser): - assert browser['visited'] is True - """ + def test_browser(browser): + assert browser['visited'] is True + """ ) ) reprec = testdir.runpytest("-s") @@ -3217,120 +3216,119 @@ class TestShowFixtures(object): def test_show_fixtures_trimmed_doc(self, testdir): p = testdir.makepyfile( - dedent( + textwrap.dedent( + '''\ + import pytest + @pytest.fixture + def arg1(): + """ + line1 + line2 + + """ + @pytest.fixture + def arg2(): + """ + line1 + line2 + + """ ''' - import pytest - @pytest.fixture - def arg1(): - """ - line1 - line2 - - """ - @pytest.fixture - def arg2(): - """ - line1 - line2 - - """ - ''' ) ) result = testdir.runpytest("--fixtures", p) result.stdout.fnmatch_lines( - dedent( + textwrap.dedent( + """\ + * fixtures defined from test_show_fixtures_trimmed_doc * + arg2 + line1 + line2 + arg1 + line1 + line2 """ - * fixtures defined from test_show_fixtures_trimmed_doc * - arg2 - line1 - line2 - arg1 - line1 - line2 - - """ ) ) def test_show_fixtures_indented_doc(self, testdir): p = testdir.makepyfile( - dedent( + textwrap.dedent( + '''\ + import pytest + @pytest.fixture + def fixture1(): + """ + line1 + indented line + """ ''' - import pytest - @pytest.fixture - def fixture1(): - """ - line1 - indented line - """ - ''' ) ) result = testdir.runpytest("--fixtures", p) result.stdout.fnmatch_lines( - dedent( + textwrap.dedent( + """\ + * fixtures defined from test_show_fixtures_indented_doc * + fixture1 + line1 + indented line """ - * fixtures defined from test_show_fixtures_indented_doc * - fixture1 - line1 - indented line - """ ) ) def test_show_fixtures_indented_doc_first_line_unindented(self, testdir): p = testdir.makepyfile( - dedent( + textwrap.dedent( + '''\ + import pytest + @pytest.fixture + def fixture1(): + """line1 + line2 + indented line + """ ''' - import pytest - @pytest.fixture - def fixture1(): - """line1 - line2 - indented line - """ - ''' ) ) result = testdir.runpytest("--fixtures", p) result.stdout.fnmatch_lines( - dedent( + textwrap.dedent( + """\ + * fixtures defined from test_show_fixtures_indented_doc_first_line_unindented * + fixture1 + line1 + line2 + indented line """ - * fixtures defined from test_show_fixtures_indented_doc_first_line_unindented * - fixture1 - line1 - line2 - indented line - """ ) ) def test_show_fixtures_indented_in_class(self, testdir): p = testdir.makepyfile( - dedent( + textwrap.dedent( + '''\ + import pytest + class TestClass(object): + @pytest.fixture + def fixture1(self): + """line1 + line2 + indented line + """ ''' - import pytest - class TestClass(object): - @pytest.fixture - def fixture1(self): - """line1 - line2 - indented line - """ - ''' ) ) result = testdir.runpytest("--fixtures", p) result.stdout.fnmatch_lines( - dedent( + textwrap.dedent( + """\ + * fixtures defined from test_show_fixtures_indented_in_class * + fixture1 + line1 + line2 + indented line """ - * fixtures defined from test_show_fixtures_indented_in_class * - fixture1 - line1 - line2 - indented line - """ ) ) @@ -3667,26 +3665,26 @@ class TestParameterizedSubRequest(object): fixdir = testdir.mkdir("fixtures") fixfile = fixdir.join("fix.py") fixfile.write( - _pytest._code.Source( - """ - import pytest + textwrap.dedent( + """\ + import pytest - @pytest.fixture(params=[0, 1, 2]) - def fix_with_param(request): - return request.param - """ + @pytest.fixture(params=[0, 1, 2]) + def fix_with_param(request): + return request.param + """ ) ) testfile = tests_dir.join("test_foos.py") testfile.write( - _pytest._code.Source( - """ - from fix import fix_with_param + textwrap.dedent( + """\ + from fix import fix_with_param - def test_foo(request): - request.getfixturevalue('fix_with_param') - """ + def test_foo(request): + request.getfixturevalue('fix_with_param') + """ ) ) @@ -3698,9 +3696,9 @@ class TestParameterizedSubRequest(object): E*Failed: The requested fixture has no parameter defined for the current test. E* E*Requested fixture 'fix_with_param' defined in: - E*fix.py:5 + E*fix.py:4 E*Requested here: - E*test_foos.py:5 + E*test_foos.py:4 *1 failed* """ ) diff --git a/testing/python/metafunc.py b/testing/python/metafunc.py index db1cd77c5..f5d839f08 100644 --- a/testing/python/metafunc.py +++ b/testing/python/metafunc.py @@ -2,7 +2,7 @@ import re import sys import attr -import _pytest._code +import textwrap import pytest from _pytest import python, fixtures @@ -1271,19 +1271,19 @@ class TestMetafuncFunctional(object): sub1 = testdir.mkpydir("sub1") sub2 = testdir.mkpydir("sub2") sub1.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def pytest_generate_tests(metafunc): + assert metafunc.function.__name__ == "test_1" """ - def pytest_generate_tests(metafunc): - assert metafunc.function.__name__ == "test_1" - """ ) ) sub2.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def pytest_generate_tests(metafunc): + assert metafunc.function.__name__ == "test_2" """ - def pytest_generate_tests(metafunc): - assert metafunc.function.__name__ == "test_2" - """ ) ) sub1.join("test_in_sub1.py").write("def test_1(): pass") diff --git a/testing/test_assertrewrite.py b/testing/test_assertrewrite.py index 1ba3f9473..4074b80dc 100644 --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -1039,14 +1039,14 @@ class TestAssertionRewriteHookDetails(object): """ path = testdir.mkpydir("foo") path.join("test_foo.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + class Test(object): + def test_foo(self): + import pkgutil + data = pkgutil.get_data('foo.test_foo', 'data.txt') + assert data == b'Hey' """ - class Test(object): - def test_foo(self): - import pkgutil - data = pkgutil.get_data('foo.test_foo', 'data.txt') - assert data == b'Hey' - """ ) ) path.join("data.txt").write("Hey") diff --git a/testing/test_cacheprovider.py b/testing/test_cacheprovider.py index 7ec73ec63..cfeb4a0cf 100644 --- a/testing/test_cacheprovider.py +++ b/testing/test_cacheprovider.py @@ -1,9 +1,9 @@ from __future__ import absolute_import, division, print_function import sys +import textwrap import py -import _pytest import pytest import os import shutil @@ -224,17 +224,17 @@ class TestLastFailed(object): result = testdir.runpytest() result.stdout.fnmatch_lines(["*2 failed*"]) p.write( - _pytest._code.Source( + textwrap.dedent( + """\ + def test_1(): + assert 1 + + def test_2(): + assert 1 + + def test_3(): + assert 0 """ - def test_1(): - assert 1 - - def test_2(): - assert 1 - - def test_3(): - assert 0 - """ ) ) result = testdir.runpytest("--lf") @@ -252,19 +252,19 @@ class TestLastFailed(object): def test_failedfirst_order(self, testdir): testdir.tmpdir.join("test_a.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def test_always_passes(): + assert 1 """ - def test_always_passes(): - assert 1 - """ ) ) testdir.tmpdir.join("test_b.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def test_always_fails(): + assert 0 """ - def test_always_fails(): - assert 0 - """ ) ) result = testdir.runpytest() @@ -277,14 +277,14 @@ class TestLastFailed(object): def test_lastfailed_failedfirst_order(self, testdir): testdir.makepyfile( **{ - "test_a.py": """ + "test_a.py": """\ def test_always_passes(): assert 1 - """, - "test_b.py": """ + """, + "test_b.py": """\ def test_always_fails(): assert 0 - """, + """, } ) result = testdir.runpytest() @@ -298,16 +298,16 @@ class TestLastFailed(object): def test_lastfailed_difference_invocations(self, testdir, monkeypatch): monkeypatch.setenv("PYTHONDONTWRITEBYTECODE", 1) testdir.makepyfile( - test_a=""" + test_a="""\ def test_a1(): assert 0 def test_a2(): assert 1 - """, - test_b=""" + """, + test_b="""\ def test_b1(): assert 0 - """, + """, ) p = testdir.tmpdir.join("test_a.py") p2 = testdir.tmpdir.join("test_b.py") @@ -317,11 +317,11 @@ class TestLastFailed(object): result = testdir.runpytest("--lf", p2) result.stdout.fnmatch_lines(["*1 failed*"]) p2.write( - _pytest._code.Source( + textwrap.dedent( + """\ + def test_b1(): + assert 1 """ - def test_b1(): - assert 1 - """ ) ) result = testdir.runpytest("--lf", p2) @@ -332,18 +332,18 @@ class TestLastFailed(object): def test_lastfailed_usecase_splice(self, testdir, monkeypatch): monkeypatch.setenv("PYTHONDONTWRITEBYTECODE", 1) testdir.makepyfile( - """ + """\ def test_1(): assert 0 - """ + """ ) p2 = testdir.tmpdir.join("test_something.py") p2.write( - _pytest._code.Source( + textwrap.dedent( + """\ + def test_2(): + assert 0 """ - def test_2(): - assert 0 - """ ) ) result = testdir.runpytest() diff --git a/testing/test_capture.py b/testing/test_capture.py index 475f61924..ec08f235f 100644 --- a/testing/test_capture.py +++ b/testing/test_capture.py @@ -6,9 +6,9 @@ from __future__ import absolute_import, division, print_function import pickle import os import sys +import textwrap from io import UnsupportedOperation -import _pytest._code import py import pytest import contextlib @@ -269,7 +269,7 @@ class TestPerTestCapturing(object): def test_capturing_outerr(self, testdir): p1 = testdir.makepyfile( - """ + """\ import sys def test_capturing(): print (42) @@ -278,7 +278,7 @@ class TestPerTestCapturing(object): print (1) sys.stderr.write(str(2)) raise ValueError - """ + """ ) result = testdir.runpytest(p1) result.stdout.fnmatch_lines( @@ -298,21 +298,21 @@ class TestPerTestCapturing(object): class TestLoggingInteraction(object): def test_logging_stream_ownership(self, testdir): p = testdir.makepyfile( - """ + """\ def test_logging(): import logging import pytest stream = capture.CaptureIO() logging.basicConfig(stream=stream) stream.close() # to free memory/release resources - """ + """ ) result = testdir.runpytest_subprocess(p) assert result.stderr.str().find("atexit") == -1 def test_logging_and_immediate_setupteardown(self, testdir): p = testdir.makepyfile( - """ + """\ import logging def setup_function(function): logging.warn("hello1") @@ -324,7 +324,7 @@ class TestLoggingInteraction(object): def teardown_function(function): logging.warn("hello3") assert 0 - """ + """ ) for optargs in (("--capture=sys",), ("--capture=fd",)): print(optargs) @@ -338,7 +338,7 @@ class TestLoggingInteraction(object): def test_logging_and_crossscope_fixtures(self, testdir): p = testdir.makepyfile( - """ + """\ import logging def setup_module(function): logging.warn("hello1") @@ -350,7 +350,7 @@ class TestLoggingInteraction(object): def teardown_module(function): logging.warn("hello3") assert 0 - """ + """ ) for optargs in (("--capture=sys",), ("--capture=fd",)): print(optargs) @@ -364,11 +364,11 @@ class TestLoggingInteraction(object): def test_conftestlogging_is_shown(self, testdir): testdir.makeconftest( - """ + """\ import logging logging.basicConfig() logging.warn("hello435") - """ + """ ) # make sure that logging is still captured in tests result = testdir.runpytest_subprocess("-s", "-p", "no:capturelog") @@ -378,19 +378,19 @@ class TestLoggingInteraction(object): def test_conftestlogging_and_test_logging(self, testdir): testdir.makeconftest( - """ + """\ import logging logging.basicConfig() - """ + """ ) # make sure that logging is still captured in tests p = testdir.makepyfile( - """ + """\ def test_hello(): import logging logging.warn("hello433") assert 0 - """ + """ ) result = testdir.runpytest_subprocess(p, "-p", "no:capturelog") assert result.ret != 0 @@ -403,24 +403,24 @@ class TestCaptureFixture(object): @pytest.mark.parametrize("opt", [[], ["-s"]]) def test_std_functional(self, testdir, opt): reprec = testdir.inline_runsource( - """ + """\ def test_hello(capsys): print (42) out, err = capsys.readouterr() assert out.startswith("42") - """, + """, *opt ) reprec.assertoutcome(passed=1) def test_capsyscapfd(self, testdir): p = testdir.makepyfile( - """ + """\ def test_one(capsys, capfd): pass def test_two(capfd, capsys): pass - """ + """ ) result = testdir.runpytest(p) result.stdout.fnmatch_lines( @@ -438,12 +438,12 @@ class TestCaptureFixture(object): in the same test is an error. """ testdir.makepyfile( - """ + """\ def test_one(capsys, request): request.getfixturevalue("capfd") def test_two(capfd, request): request.getfixturevalue("capsys") - """ + """ ) result = testdir.runpytest() result.stdout.fnmatch_lines( @@ -458,10 +458,10 @@ class TestCaptureFixture(object): def test_capsyscapfdbinary(self, testdir): p = testdir.makepyfile( - """ + """\ def test_one(capsys, capfdbinary): pass - """ + """ ) result = testdir.runpytest(p) result.stdout.fnmatch_lines( @@ -471,12 +471,13 @@ class TestCaptureFixture(object): @pytest.mark.parametrize("method", ["sys", "fd"]) def test_capture_is_represented_on_failure_issue128(self, testdir, method): p = testdir.makepyfile( - """ - def test_hello(cap%s): + """\ + def test_hello(cap{}): print ("xxx42xxx") assert 0 - """ - % method + """.format( + method + ) ) result = testdir.runpytest(p) result.stdout.fnmatch_lines(["xxx42xxx"]) @@ -484,21 +485,21 @@ class TestCaptureFixture(object): @needsosdup def test_stdfd_functional(self, testdir): reprec = testdir.inline_runsource( - """ + """\ def test_hello(capfd): import os os.write(1, "42".encode('ascii')) out, err = capfd.readouterr() assert out.startswith("42") capfd.close() - """ + """ ) reprec.assertoutcome(passed=1) @needsosdup def test_capfdbinary(self, testdir): reprec = testdir.inline_runsource( - """ + """\ def test_hello(capfdbinary): import os # some likely un-decodable bytes @@ -506,7 +507,7 @@ class TestCaptureFixture(object): out, err = capfdbinary.readouterr() assert out == b'\\xfe\\x98\\x20' assert err == b'' - """ + """ ) reprec.assertoutcome(passed=1) @@ -515,7 +516,7 @@ class TestCaptureFixture(object): ) def test_capsysbinary(self, testdir): reprec = testdir.inline_runsource( - """ + """\ def test_hello(capsysbinary): import sys # some likely un-decodable bytes @@ -523,7 +524,7 @@ class TestCaptureFixture(object): out, err = capsysbinary.readouterr() assert out == b'\\xfe\\x98\\x20' assert err == b'' - """ + """ ) reprec.assertoutcome(passed=1) @@ -532,10 +533,10 @@ class TestCaptureFixture(object): ) def test_capsysbinary_forbidden_in_python2(self, testdir): testdir.makepyfile( - """ + """\ def test_hello(capsysbinary): pass - """ + """ ) result = testdir.runpytest() result.stdout.fnmatch_lines( @@ -548,10 +549,10 @@ class TestCaptureFixture(object): def test_partial_setup_failure(self, testdir): p = testdir.makepyfile( - """ + """\ def test_hello(capsys, missingarg): pass - """ + """ ) result = testdir.runpytest(p) result.stdout.fnmatch_lines(["*test_partial_setup_failure*", "*1 error*"]) @@ -559,12 +560,12 @@ class TestCaptureFixture(object): @needsosdup def test_keyboardinterrupt_disables_capturing(self, testdir): p = testdir.makepyfile( - """ + """\ def test_hello(capfd): import os os.write(1, str(42).encode('ascii')) raise KeyboardInterrupt() - """ + """ ) result = testdir.runpytest_subprocess(p) result.stdout.fnmatch_lines(["*KeyboardInterrupt*"]) @@ -573,7 +574,7 @@ class TestCaptureFixture(object): @pytest.mark.issue14 def test_capture_and_logging(self, testdir): p = testdir.makepyfile( - """ + """\ import logging def test_log(capsys): logging.error('x') @@ -586,7 +587,7 @@ class TestCaptureFixture(object): @pytest.mark.parametrize("no_capture", [True, False]) def test_disabled_capture_fixture(self, testdir, fixture, no_capture): testdir.makepyfile( - """ + """\ def test_disabled({fixture}): print('captured before') with {fixture}.disabled(): @@ -620,7 +621,7 @@ class TestCaptureFixture(object): Ensure that capsys and capfd can be used by other fixtures during setup and teardown. """ testdir.makepyfile( - """ + """\ from __future__ import print_function import sys import pytest @@ -656,7 +657,7 @@ class TestCaptureFixture(object): def test_fixture_use_by_other_fixtures_teardown(self, testdir, cap): """Ensure we can access setup and teardown buffers from teardown when using capsys/capfd (##3033)""" testdir.makepyfile( - """ + """\ import sys import pytest import os @@ -684,11 +685,11 @@ class TestCaptureFixture(object): def test_setup_failure_does_not_kill_capturing(testdir): sub1 = testdir.mkpydir("sub1") sub1.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def pytest_runtest_setup(item): + raise ValueError(42) """ - def pytest_runtest_setup(item): - raise ValueError(42) - """ ) ) sub1.join("test_mod.py").write("def test_func1(): pass") diff --git a/testing/test_collection.py b/testing/test_collection.py index 5b494ba31..ce0e3a920 100644 --- a/testing/test_collection.py +++ b/testing/test_collection.py @@ -1,9 +1,9 @@ from __future__ import absolute_import, division, print_function import pprint import sys +import textwrap import pytest -import _pytest._code from _pytest.main import Session, EXIT_NOTESTSCOLLECTED, _in_venv @@ -913,13 +913,13 @@ def test_fixture_scope_sibling_conftests(testdir): """Regression test case for https://github.com/pytest-dev/pytest/issues/2836""" foo_path = testdir.mkdir("foo") foo_path.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + @pytest.fixture + def fix(): + return 1 """ - import pytest - @pytest.fixture - def fix(): - return 1 - """ ) ) foo_path.join("test_foo.py").write("def test_foo(fix): assert fix == 1") diff --git a/testing/test_config.py b/testing/test_config.py index ef9dacd9c..756b51de4 100644 --- a/testing/test_config.py +++ b/testing/test_config.py @@ -17,11 +17,11 @@ class TestParseIni(object): sub = tmpdir.mkdir("sub") sub.chdir() tmpdir.join(filename).write( - _pytest._code.Source( - """ - [{section}] - name = value - """.format( + textwrap.dedent( + """\ + [{section}] + name = value + """.format( section=section ) ) @@ -38,11 +38,11 @@ class TestParseIni(object): def test_append_parse_args(self, testdir, tmpdir, monkeypatch): monkeypatch.setenv("PYTEST_ADDOPTS", '--color no -rs --tb="short"') tmpdir.join("pytest.ini").write( - _pytest._code.Source( + textwrap.dedent( + """\ + [pytest] + addopts = --verbose """ - [pytest] - addopts = --verbose - """ ) ) config = testdir.parseconfig(tmpdir) @@ -438,11 +438,11 @@ class TestConfigFromdictargs(object): def test_inifilename(self, tmpdir): tmpdir.join("foo/bar.ini").ensure().write( - _pytest._code.Source( + textwrap.dedent( + """\ + [pytest] + name = value """ - [pytest] - name = value - """ ) ) @@ -453,12 +453,12 @@ class TestConfigFromdictargs(object): cwd = tmpdir.join("a/b") cwd.join("pytest.ini").ensure().write( - _pytest._code.Source( + textwrap.dedent( + """\ + [pytest] + name = wrong-value + should_not_be_set = true """ - [pytest] - name = wrong-value - should_not_be_set = true - """ ) ) with cwd.ensure(dir=True).as_cwd(): diff --git a/testing/test_conftest.py b/testing/test_conftest.py index 449ef5281..f3b5bac38 100644 --- a/testing/test_conftest.py +++ b/testing/test_conftest.py @@ -1,7 +1,6 @@ from __future__ import absolute_import, division, print_function -from textwrap import dedent +import textwrap -import _pytest._code import py import pytest from _pytest.config import PytestPluginManager @@ -174,11 +173,11 @@ def test_conftest_confcutdir(testdir): testdir.makeconftest("assert 0") x = testdir.mkdir("x") x.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def pytest_addoption(parser): + parser.addoption("--xyz", action="store_true") """ - def pytest_addoption(parser): - parser.addoption("--xyz", action="store_true") - """ ) ) result = testdir.runpytest("-h", "--confcutdir=%s" % x, x) @@ -198,11 +197,11 @@ def test_no_conftest(testdir): def test_conftest_existing_resultlog(testdir): x = testdir.mkdir("tests") x.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def pytest_addoption(parser): + parser.addoption("--xyz", action="store_true") """ - def pytest_addoption(parser): - parser.addoption("--xyz", action="store_true") - """ ) ) testdir.makefile(ext=".log", result="") # Writes result.log @@ -213,11 +212,11 @@ def test_conftest_existing_resultlog(testdir): def test_conftest_existing_junitxml(testdir): x = testdir.mkdir("tests") x.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def pytest_addoption(parser): + parser.addoption("--xyz", action="store_true") """ - def pytest_addoption(parser): - parser.addoption("--xyz", action="store_true") - """ ) ) testdir.makefile(ext=".xml", junit="") # Writes junit.xml @@ -247,38 +246,38 @@ def test_fixture_dependency(testdir, monkeypatch): sub = testdir.mkdir("sub") sub.join("__init__.py").write("") sub.join("conftest.py").write( - dedent( + textwrap.dedent( + """\ + import pytest + + @pytest.fixture + def not_needed(): + assert False, "Should not be called!" + + @pytest.fixture + def foo(): + assert False, "Should not be called!" + + @pytest.fixture + def bar(foo): + return 'bar' """ - import pytest - - @pytest.fixture - def not_needed(): - assert False, "Should not be called!" - - @pytest.fixture - def foo(): - assert False, "Should not be called!" - - @pytest.fixture - def bar(foo): - return 'bar' - """ ) ) subsub = sub.mkdir("subsub") subsub.join("__init__.py").write("") subsub.join("test_bar.py").write( - dedent( + textwrap.dedent( + """\ + import pytest + + @pytest.fixture + def bar(): + return 'sub bar' + + def test_event_fixture(bar): + assert bar == 'sub bar' """ - import pytest - - @pytest.fixture - def bar(): - return 'sub bar' - - def test_event_fixture(bar): - assert bar == 'sub bar' - """ ) ) result = testdir.runpytest("sub") @@ -288,11 +287,11 @@ def test_fixture_dependency(testdir, monkeypatch): def test_conftest_found_with_double_dash(testdir): sub = testdir.mkdir("sub") sub.join("conftest.py").write( - dedent( + textwrap.dedent( + """\ + def pytest_addoption(parser): + parser.addoption("--hello-world", action="store_true") """ - def pytest_addoption(parser): - parser.addoption("--hello-world", action="store_true") - """ ) ) p = sub.join("test_hello.py") @@ -313,56 +312,54 @@ class TestConftestVisibility(object): package = testdir.mkdir("package") package.join("conftest.py").write( - dedent( + textwrap.dedent( """\ - import pytest - @pytest.fixture - def fxtr(): - return "from-package" - """ + import pytest + @pytest.fixture + def fxtr(): + return "from-package" + """ ) ) package.join("test_pkgroot.py").write( - dedent( + textwrap.dedent( """\ - def test_pkgroot(fxtr): - assert fxtr == "from-package" - """ + def test_pkgroot(fxtr): + assert fxtr == "from-package" + """ ) ) swc = package.mkdir("swc") swc.join("__init__.py").ensure() swc.join("conftest.py").write( - dedent( + textwrap.dedent( """\ - import pytest - @pytest.fixture - def fxtr(): - return "from-swc" - """ + import pytest + @pytest.fixture + def fxtr(): + return "from-swc" + """ ) ) swc.join("test_with_conftest.py").write( - dedent( + textwrap.dedent( """\ - def test_with_conftest(fxtr): - assert fxtr == "from-swc" - - """ + def test_with_conftest(fxtr): + assert fxtr == "from-swc" + """ ) ) snc = package.mkdir("snc") snc.join("__init__.py").ensure() snc.join("test_no_conftest.py").write( - dedent( + textwrap.dedent( """\ - def test_no_conftest(fxtr): - assert fxtr == "from-package" # No local conftest.py, so should - # use value from parent dir's - - """ + def test_no_conftest(fxtr): + assert fxtr == "from-package" # No local conftest.py, so should + # use value from parent dir's + """ ) ) print("created directory structure:") @@ -422,31 +419,31 @@ def test_search_conftest_up_to_inifile(testdir, confcutdir, passed, error): src = root.join("src").ensure(dir=1) src.join("pytest.ini").write("[pytest]") src.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + @pytest.fixture + def fix1(): pass """ - import pytest - @pytest.fixture - def fix1(): pass - """ ) ) src.join("test_foo.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def test_1(fix1): + pass + def test_2(out_of_reach): + pass """ - def test_1(fix1): - pass - def test_2(out_of_reach): - pass - """ ) ) root.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import pytest + @pytest.fixture + def out_of_reach(): pass """ - import pytest - @pytest.fixture - def out_of_reach(): pass - """ ) ) @@ -464,19 +461,19 @@ def test_search_conftest_up_to_inifile(testdir, confcutdir, passed, error): def test_issue1073_conftest_special_objects(testdir): testdir.makeconftest( - """ + """\ class DontTouchMe(object): def __getattr__(self, x): raise Exception('cant touch me') x = DontTouchMe() - """ + """ ) testdir.makepyfile( - """ + """\ def test_some(): pass - """ + """ ) res = testdir.runpytest() assert res.ret == 0 @@ -484,15 +481,15 @@ def test_issue1073_conftest_special_objects(testdir): def test_conftest_exception_handling(testdir): testdir.makeconftest( - """ + """\ raise ValueError() - """ + """ ) testdir.makepyfile( - """ + """\ def test_some(): pass - """ + """ ) res = testdir.runpytest() assert res.ret == 4 @@ -507,7 +504,7 @@ def test_hook_proxy(testdir): **{ "root/demo-0/test_foo1.py": "def test1(): pass", "root/demo-a/test_foo2.py": "def test1(): pass", - "root/demo-a/conftest.py": """ + "root/demo-a/conftest.py": """\ def pytest_ignore_collect(path, config): return True """, @@ -525,11 +522,11 @@ def test_required_option_help(testdir): testdir.makeconftest("assert 0") x = testdir.mkdir("x") x.join("conftest.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def pytest_addoption(parser): + parser.addoption("--xyz", action="store_true", required=True) """ - def pytest_addoption(parser): - parser.addoption("--xyz", action="store_true", required=True) - """ ) ) result = testdir.runpytest("-h", x) diff --git a/testing/test_doctest.py b/testing/test_doctest.py index 6a84c5feb..d7815b1cf 100644 --- a/testing/test_doctest.py +++ b/testing/test_doctest.py @@ -1,7 +1,7 @@ # encoding: utf-8 from __future__ import absolute_import, division, print_function import sys -import _pytest._code +import textwrap from _pytest.compat import MODULE_NOT_FOUND_ERROR from _pytest.doctest import DoctestItem, DoctestModule, DoctestTextfile import pytest @@ -258,16 +258,16 @@ class TestDoctests(object): def test_doctest_linedata_missing(self, testdir): testdir.tmpdir.join("hello.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + class Fun(object): + @property + def test(self): + ''' + >>> a = 1 + >>> 1/0 + ''' """ - class Fun(object): - @property - def test(self): - ''' - >>> a = 1 - >>> 1/0 - ''' - """ ) ) result = testdir.runpytest("--doctest-modules") @@ -300,10 +300,10 @@ class TestDoctests(object): def test_doctest_unex_importerror_with_module(self, testdir): testdir.tmpdir.join("hello.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + import asdalsdkjaslkdjasd """ - import asdalsdkjaslkdjasd - """ ) ) testdir.maketxtfile( @@ -339,27 +339,27 @@ class TestDoctests(object): def test_doctestmodule_external_and_issue116(self, testdir): p = testdir.mkpydir("hello") p.join("__init__.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + def somefunc(): + ''' + >>> i = 0 + >>> i + 1 + 2 + ''' """ - def somefunc(): - ''' - >>> i = 0 - >>> i + 1 - 2 - ''' - """ ) ) result = testdir.runpytest(p, "--doctest-modules") result.stdout.fnmatch_lines( [ - "004 *>>> i = 0", - "005 *>>> i + 1", + "003 *>>> i = 0", + "004 *>>> i + 1", "*Expected:", "* 2", "*Got:", "* 1", - "*:5: DocTestFailure", + "*:4: DocTestFailure", ] ) diff --git a/testing/test_terminal.py b/testing/test_terminal.py index 88e5287e8..0f674a34f 100644 --- a/testing/test_terminal.py +++ b/testing/test_terminal.py @@ -4,9 +4,9 @@ terminal reporting of the full testing process. from __future__ import absolute_import, division, print_function import collections import sys +import textwrap import pluggy -import _pytest._code import py import pytest from _pytest.main import EXIT_NOTESTSCOLLECTED @@ -161,12 +161,12 @@ class TestTerminal(object): def test_itemreport_directclasses_not_shown_as_subclasses(self, testdir): a = testdir.mkpydir("a123") a.join("test_hello123.py").write( - _pytest._code.Source( + textwrap.dedent( + """\ + class TestClass(object): + def test_method(self): + pass """ - class TestClass(object): - def test_method(self): - pass - """ ) ) result = testdir.runpytest("-v") @@ -312,13 +312,13 @@ class TestCollectonly(object): result = testdir.runpytest("--collect-only", p) assert result.ret == 2 result.stdout.fnmatch_lines( - _pytest._code.Source( + textwrap.dedent( + """\ + *ERROR* + *ImportError* + *No module named *Errlk* + *1 error* """ - *ERROR* - *ImportError* - *No module named *Errlk* - *1 error* - """ ).strip() )