test_imageshow coverage tool

This commit is contained in:
Duru 2024-06-13 23:59:02 +02:00
parent 914d6b981e
commit b6a7243654
649 changed files with 146600 additions and 146554 deletions

View File

@ -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

View File

@ -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")