Skip to content

Commit 32b9a12

Browse files
committed
Add tests to check that plugin works when the user's function fails
1 parent d9d380d commit 32b9a12

File tree

2 files changed

+113
-0
lines changed

2 files changed

+113
-0
lines changed

tests/conftest.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import pytest
2+
from packaging.version import Version
3+
4+
pytest_plugins = ["pytester"]
5+
6+
if Version(pytest.__version__) < Version("6.2.0"):
7+
@pytest.fixture
8+
def pytester(testdir):
9+
return testdir

tests/test_pytest_mpl.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,3 +566,107 @@ def test_class_fail(code, tmpdir):
566566
# If we don't use --mpl option, the test should succeed
567567
code = call_pytest([test_file])
568568
assert code == 0
569+
570+
571+
@pytest.mark.parametrize("runpytest_args", [(), ("--mpl",)])
572+
def test_user_fail(pytester, runpytest_args):
573+
pytester.makepyfile(
574+
"""
575+
import pytest
576+
@pytest.mark.mpl_image_compare
577+
def test_fail():
578+
pytest.fail("Manually failed by user.")
579+
"""
580+
)
581+
result = pytester.runpytest(*runpytest_args)
582+
result.assert_outcomes(failed=1)
583+
result.stdout.fnmatch_lines("FAILED*Manually failed by user.*")
584+
585+
586+
@pytest.mark.parametrize("runpytest_args", [(), ("--mpl",)])
587+
def test_user_skip(pytester, runpytest_args):
588+
pytester.makepyfile(
589+
"""
590+
import pytest
591+
@pytest.mark.mpl_image_compare
592+
def test_skip():
593+
pytest.skip("Manually skipped by user.")
594+
"""
595+
)
596+
result = pytester.runpytest(*runpytest_args)
597+
result.assert_outcomes(skipped=1)
598+
599+
600+
@pytest.mark.parametrize("runpytest_args", [(), ("--mpl",)])
601+
def test_user_importorskip(pytester, runpytest_args):
602+
pytester.makepyfile(
603+
"""
604+
import pytest
605+
@pytest.mark.mpl_image_compare
606+
def test_importorskip():
607+
pytest.importorskip("nonexistantmodule")
608+
"""
609+
)
610+
result = pytester.runpytest(*runpytest_args)
611+
result.assert_outcomes(skipped=1)
612+
613+
614+
@pytest.mark.parametrize("runpytest_args", [(), ("--mpl",)])
615+
def test_user_xfail(pytester, runpytest_args):
616+
pytester.makepyfile(
617+
"""
618+
import pytest
619+
@pytest.mark.mpl_image_compare
620+
def test_xfail():
621+
pytest.xfail()
622+
"""
623+
)
624+
result = pytester.runpytest(*runpytest_args)
625+
result.assert_outcomes(xfailed=1)
626+
627+
628+
@pytest.mark.parametrize("runpytest_args", [(), ("--mpl",)])
629+
def test_user_exit_success(pytester, runpytest_args):
630+
pytester.makepyfile(
631+
"""
632+
import pytest
633+
@pytest.mark.mpl_image_compare
634+
def test_exit_success():
635+
pytest.exit("Manually exited by user.", returncode=0)
636+
"""
637+
)
638+
result = pytester.runpytest(*runpytest_args)
639+
result.assert_outcomes()
640+
assert result.ret == 0
641+
result.stdout.fnmatch_lines("*Exit*Manually exited by user.*")
642+
643+
644+
@pytest.mark.parametrize("runpytest_args", [(), ("--mpl",)])
645+
def test_user_exit_failure(pytester, runpytest_args):
646+
pytester.makepyfile(
647+
"""
648+
import pytest
649+
@pytest.mark.mpl_image_compare
650+
def test_exit_fail():
651+
pytest.exit("Manually exited by user.", returncode=1)
652+
"""
653+
)
654+
result = pytester.runpytest(*runpytest_args)
655+
result.assert_outcomes()
656+
assert result.ret == 1
657+
result.stdout.fnmatch_lines("*Exit*Manually exited by user.*")
658+
659+
660+
@pytest.mark.parametrize("runpytest_args", [(), ("--mpl",)])
661+
def test_user_function_raises(pytester, runpytest_args):
662+
pytester.makepyfile(
663+
"""
664+
import pytest
665+
@pytest.mark.mpl_image_compare
666+
def test_raises():
667+
raise ValueError("User code raised an exception.")
668+
"""
669+
)
670+
result = pytester.runpytest(*runpytest_args)
671+
result.assert_outcomes(failed=1)
672+
result.stdout.fnmatch_lines("FAILED*ValueError*User code*")

0 commit comments

Comments
 (0)