mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-08-05 21:10:11 +03:00
test_imageshow coverage tool
This commit is contained in:
parent
914d6b981e
commit
b6a7243654
|
@ -4,6 +4,8 @@ from typing import Any
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from conftest import branch_coverage2
|
||||||
|
|
||||||
from PIL import Image, ImageShow
|
from PIL import Image, ImageShow
|
||||||
|
|
||||||
from .helper import hopper, is_win32, on_ci
|
from .helper import hopper, is_win32, on_ci
|
||||||
|
@ -30,6 +32,7 @@ def test_viewer_show(order: int) -> None:
|
||||||
class TestViewer(ImageShow.Viewer):
|
class TestViewer(ImageShow.Viewer):
|
||||||
def show_image(self, image: Image.Image, **options: Any) -> bool:
|
def show_image(self, image: Image.Image, **options: Any) -> bool:
|
||||||
self.methodCalled = True
|
self.methodCalled = True
|
||||||
|
branch_coverage2["1"] = True
|
||||||
return True
|
return True
|
||||||
|
|
||||||
viewer = TestViewer()
|
viewer = TestViewer()
|
||||||
|
@ -39,11 +42,12 @@ def test_viewer_show(order: int) -> None:
|
||||||
viewer.methodCalled = False
|
viewer.methodCalled = False
|
||||||
with hopper(mode) as im:
|
with hopper(mode) as im:
|
||||||
assert ImageShow.show(im)
|
assert ImageShow.show(im)
|
||||||
|
branch_coverage2["2"] = True
|
||||||
assert viewer.methodCalled
|
assert viewer.methodCalled
|
||||||
|
|
||||||
# Restore original state
|
# Restore original state
|
||||||
ImageShow._viewers.pop(0)
|
ImageShow._viewers.pop(0)
|
||||||
|
branch_coverage2["3"] = True
|
||||||
|
|
||||||
@pytest.mark.skipif(
|
@pytest.mark.skipif(
|
||||||
not on_ci() or is_win32(),
|
not on_ci() or is_win32(),
|
||||||
|
@ -88,12 +92,16 @@ def test_ipythonviewer() -> None:
|
||||||
for viewer in ImageShow._viewers:
|
for viewer in ImageShow._viewers:
|
||||||
if isinstance(viewer, ImageShow.IPythonViewer):
|
if isinstance(viewer, ImageShow.IPythonViewer):
|
||||||
test_viewer = viewer
|
test_viewer = viewer
|
||||||
|
branch_coverage2["4"] = True
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
|
branch_coverage2["5"] = True
|
||||||
pytest.fail()
|
pytest.fail()
|
||||||
|
|
||||||
im = hopper()
|
im = hopper()
|
||||||
assert test_viewer.show(im) == 1
|
assert test_viewer.show(im) == 1
|
||||||
|
|
||||||
|
|
||||||
def test_viewer_exceptions() -> None:
|
def test_viewer_exceptions() -> None:
|
||||||
class TestViewerException(ImageShow.Viewer):
|
class TestViewerException(ImageShow.Viewer):
|
||||||
pass
|
pass
|
||||||
|
|
50
conftest.py
50
conftest.py
|
@ -1,7 +1,10 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
import pytest
|
import pytest
|
||||||
|
import sys
|
||||||
|
|
||||||
pytest_plugins = ["Tests.helper"]
|
pytest_plugins = ["Tests.helper"]
|
||||||
|
test_name = None
|
||||||
|
|
||||||
|
|
||||||
branch_coverage1 = {
|
branch_coverage1 = {
|
||||||
"1": False,
|
"1": False,
|
||||||
|
@ -9,15 +12,50 @@ branch_coverage1 = {
|
||||||
"3": False,
|
"3": False,
|
||||||
}
|
}
|
||||||
|
|
||||||
def calculate_coverage():
|
branch_coverage2 = {
|
||||||
num_branches = len(branch_coverage1)
|
"1": False,
|
||||||
covered_branches = sum(value is True for value in branch_coverage1.values())
|
"2": False,
|
||||||
|
"3": False,
|
||||||
|
"4": False,
|
||||||
|
"5": False,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def calculate_coverage(test_name):
|
||||||
|
coverage_data = {
|
||||||
|
"test_image_rotate": branch_coverage1,
|
||||||
|
"test_imageshow": branch_coverage2,
|
||||||
|
}
|
||||||
|
|
||||||
|
if test_name not in coverage_data:
|
||||||
|
print(f"No coverage data for test {test_name}")
|
||||||
|
return
|
||||||
|
|
||||||
|
num_branches = len(coverage_data[test_name])
|
||||||
|
covered_branches = sum(value is True for value in coverage_data[test_name].values())
|
||||||
|
|
||||||
coverage = (covered_branches/num_branches) * 100
|
coverage = (covered_branches/num_branches) * 100
|
||||||
|
print(f"\nbranches for {test_name}:", num_branches, "\n")
|
||||||
|
print(f"\nbranches covered for {test_name}:", covered_branches, "\n")
|
||||||
return coverage
|
return coverage
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.hookimpl(tryfirst=True)
|
||||||
|
def pytest_runtest_protocol(item, nextitem):
|
||||||
|
global test_name
|
||||||
|
|
||||||
|
last_arg = sys.argv[-1]
|
||||||
|
|
||||||
|
test_name = last_arg.split('/')[-1].split('::')[-1]
|
||||||
|
|
||||||
|
test_name = test_name.rstrip('.py')
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
@pytest.hookimpl(tryfirst=True)
|
@pytest.hookimpl(tryfirst=True)
|
||||||
def pytest_sessionfinish(session, exitstatus):
|
def pytest_sessionfinish(session, exitstatus):
|
||||||
coverage = calculate_coverage()
|
global test_name
|
||||||
print("\nBRANCH COVERAGE:", coverage, "%\n")
|
|
||||||
|
coverage = calculate_coverage(test_name)
|
||||||
|
print("\nBRANCH COVERAGE for", test_name, ":", coverage, "%\n")
|
Loading…
Reference in New Issue
Block a user