2016-11-21 18:26:43 +08:00
|
|
|
import pytest
|
|
|
|
|
|
|
|
|
2017-02-25 23:02:48 +08:00
|
|
|
WARNINGS_SUMMARY_HEADER = 'warnings summary'
|
|
|
|
|
2016-11-21 18:26:43 +08:00
|
|
|
@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):
|
2017-02-18 22:57:26 +08:00
|
|
|
result = testdir.runpytest()
|
2016-11-21 18:26:43 +08:00
|
|
|
result.stdout.fnmatch_lines([
|
2017-02-25 23:02:48 +08:00
|
|
|
'*== %s ==*' % WARNINGS_SUMMARY_HEADER,
|
2016-11-21 18:26:43 +08:00
|
|
|
|
2017-02-25 23:02:48 +08:00
|
|
|
'*test_normal_flow.py:3: PendingDeprecationWarning: functionality is pending deprecation',
|
2016-11-21 18:26:43 +08:00
|
|
|
' warnings.warn(PendingDeprecationWarning("functionality is pending deprecation"))',
|
|
|
|
|
2017-02-25 23:02:48 +08:00
|
|
|
'*test_normal_flow.py:4: DeprecationWarning: functionality is deprecated',
|
2016-11-21 18:26:43 +08:00
|
|
|
' warnings.warn(DeprecationWarning("functionality is deprecated"))',
|
2017-02-25 23:02:48 +08:00
|
|
|
'* 1 passed, 2 warnings*',
|
2016-11-21 18:26:43 +08:00
|
|
|
])
|
|
|
|
|
|
|
|
|
2017-03-05 03:07:37 +08:00
|
|
|
def test_setup_teardown_warnings(testdir, pyfile_with_warnings):
|
|
|
|
testdir.makepyfile('''
|
|
|
|
import warnings
|
|
|
|
import pytest
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def fix():
|
|
|
|
warnings.warn(UserWarning("warning during setup"))
|
|
|
|
yield
|
|
|
|
warnings.warn(UserWarning("warning during teardown"))
|
|
|
|
|
|
|
|
def test_func(fix):
|
|
|
|
pass
|
|
|
|
''')
|
|
|
|
result = testdir.runpytest()
|
|
|
|
result.stdout.fnmatch_lines([
|
|
|
|
'*== %s ==*' % WARNINGS_SUMMARY_HEADER,
|
|
|
|
|
|
|
|
'*test_setup_teardown_warnings.py:6: UserWarning: warning during setup',
|
|
|
|
' warnings.warn(UserWarning("warning during setup"))',
|
|
|
|
|
|
|
|
'*test_setup_teardown_warnings.py:8: UserWarning: warning during teardown',
|
|
|
|
' warnings.warn(UserWarning("warning during teardown"))',
|
|
|
|
'* 1 passed, 2 warnings*',
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-11-21 18:26:43 +08:00
|
|
|
@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
|
|
|
|
''')
|
2017-02-18 22:57:26 +08:00
|
|
|
result = testdir.runpytest(*args)
|
2016-11-21 18:26:43 +08:00
|
|
|
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
|
|
|
|
''')
|
|
|
|
|
2017-02-18 22:57:26 +08:00
|
|
|
result = testdir.runpytest(*args)
|
2016-11-21 18:26:43 +08:00
|
|
|
result.stdout.fnmatch_lines([
|
|
|
|
'* 1 passed in *',
|
|
|
|
])
|
2017-02-25 23:02:48 +08:00
|
|
|
assert WARNINGS_SUMMARY_HEADER not in result.stdout.str()
|
2016-11-21 18:26:43 +08:00
|
|
|
|