diff --git a/_pytest/config.py b/_pytest/config.py index 5df198e21..04ebfec03 100644 --- a/_pytest/config.py +++ b/_pytest/config.py @@ -74,7 +74,7 @@ default_plugins = ( "mark main terminal runner python fixtures debugging unittest capture skipping " "tmpdir monkeypatch recwarn pastebin helpconfig nose assertion " "junitxml resultlog doctest cacheprovider freeze_support " - "setuponly setupplan").split() + "setuponly setupplan warnings").split() builtin_plugins = set(default_plugins) builtin_plugins.add("pytester") diff --git a/testing/test_warnings.py b/testing/test_warnings.py new file mode 100644 index 000000000..34badaee8 --- /dev/null +++ b/testing/test_warnings.py @@ -0,0 +1,60 @@ +import pytest + + +@pytest.fixture +def pyfile_with_warnings(testdir): + testdir.makepyfile(''' + import warnings + def test_func(): + warnings.warn(PendingDeprecationWarning("functionality is pending deprecation")) + warnings.warn(DeprecationWarning("functionality is deprecated")) + ''') + + +def test_normal_flow(testdir, pyfile_with_warnings): + result = testdir.runpytest_subprocess() + result.stdout.fnmatch_lines([ + '*== pytest-warning summary ==*', + + 'WW0 in *test_normal_flow.py:1 the following warning was recorded:', + ' test_normal_flow.py:3: PendingDeprecationWarning: functionality is pending deprecation', + ' warnings.warn(PendingDeprecationWarning("functionality is pending deprecation"))', + + 'WW0 in *test_normal_flow.py:1 the following warning was recorded:', + ' test_normal_flow.py:4: DeprecationWarning: functionality is deprecated', + ' warnings.warn(DeprecationWarning("functionality is deprecated"))', + '* 1 passed, 2 pytest-warnings*', + ]) + + +@pytest.mark.parametrize('method', ['cmdline', 'ini']) +def test_as_errors(testdir, pyfile_with_warnings, method): + args = ('-W', 'error') if method == 'cmdline' else () + if method == 'ini': + testdir.makeini(''' + [pytest] + filterwarnings= error + ''') + result = testdir.runpytest_subprocess(*args) + result.stdout.fnmatch_lines([ + 'E PendingDeprecationWarning: functionality is pending deprecation', + 'test_as_errors.py:3: PendingDeprecationWarning', + '* 1 failed in *', + ]) + + +@pytest.mark.parametrize('method', ['cmdline', 'ini']) +def test_ignore(testdir, pyfile_with_warnings, method): + args = ('-W', 'ignore') if method == 'cmdline' else () + if method == 'ini': + testdir.makeini(''' + [pytest] + filterwarnings= ignore + ''') + + result = testdir.runpytest_subprocess(*args) + result.stdout.fnmatch_lines([ + '* 1 passed in *', + ]) + assert 'pytest-warning summary' not in result.stdout.str() +