diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 64daa0ef..1d5f0e34 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -60,14 +60,6 @@ jobs: coverage report coverage xml -o coverage-unit.xml - - name: Upload test artifacts - uses: actions/upload-artifact@v4 - if: failure() - with: - name: image-references - path: bec_widgets/tests/reference_failures/ - if-no-files-found: ignore - - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 with: diff --git a/.gitignore b/.gitignore index 085f2a72..4e73bfe2 100644 --- a/.gitignore +++ b/.gitignore @@ -65,9 +65,6 @@ coverage.xml .pytest_cache/ cover/ -# Output from end2end testing -tests/reference_failures/ - # Translations *.mo *.pot diff --git a/AGENTS.md b/AGENTS.md index 45dc580f..d1b6bf0b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -51,7 +51,6 @@ Main package and test areas: - `bec_widgets/tests/` — packaged test helpers for downstream plugin repos - `tests/unit_tests/` — main test suite - `tests/end-2-end/` — tests against a real BEC deployment -- `tests/reference_failures/` — failed image-comparison output collected in CI Console scripts declared in `pyproject.toml`: diff --git a/bec_widgets/utils/reference_utils.py b/bec_widgets/utils/reference_utils.py deleted file mode 100644 index dc4ef78e..00000000 --- a/bec_widgets/utils/reference_utils.py +++ /dev/null @@ -1,93 +0,0 @@ -import os -import sys -from typing import Any - -from PIL import Image, ImageChops -from qtpy.QtGui import QPixmap - -import bec_widgets - -REFERENCE_DIR = os.path.join( - os.path.dirname(os.path.dirname(bec_widgets.__file__)), "tests/references" -) -REFERENCE_DIR_FAILURES = os.path.join( - os.path.dirname(os.path.dirname(bec_widgets.__file__)), "tests/reference_failures" -) - - -def compare_images(image1_path: str, reference_image_path: str): - """ - Load two images and compare them pixel by pixel - - Args: - image1_path(str): The path to the first image - reference_image_path(str): The path to the reference image - - Raises: - ValueError: If the images are different - """ - image1 = Image.open(image1_path) - image2 = Image.open(reference_image_path) - if image1.size != image2.size: - raise ValueError("Image size has changed") - diff = ImageChops.difference(image1, image2) - if diff.getbbox(): - # copy image1 to the reference directory to upload as artifact - os.makedirs(REFERENCE_DIR_FAILURES, exist_ok=True) - image_name = os.path.join(REFERENCE_DIR_FAILURES, os.path.basename(image1_path)) - image1.save(image_name) - print(f"Image saved to {image_name}") - - raise ValueError("Images are different") - - -def snap_and_compare(widget: Any, output_directory: str, suffix: str = ""): - """ - Save a rendering of a widget and compare it to a reference image - - Args: - widget(any): The widget to render - output_directory(str): The directory to save the image to - suffix(str): A suffix to append to the image name - - Raises: - ValueError: If the images are different - - Examples: - snap_and_compare(widget, tmpdir, suffix="started") - - """ - - if not isinstance(output_directory, str): - output_directory = str(output_directory) - - os_suffix = sys.platform - - name = ( - f"{widget.__class__.__name__}_{suffix}_{os_suffix}.png" - if suffix - else f"{widget.__class__.__name__}_{os_suffix}.png" - ) - - # Save the widget to a pixmap - test_image_path = os.path.join(output_directory, name) - pixmap = QPixmap(widget.size()) - widget.render(pixmap) - pixmap.save(test_image_path) - - try: - reference_path = os.path.join(REFERENCE_DIR, f"{widget.__class__.__name__}") - reference_image_path = os.path.join(reference_path, name) - - if not os.path.exists(reference_image_path): - raise ValueError(f"Reference image not found: {reference_image_path}") - - compare_images(test_image_path, reference_image_path) - - except ValueError: - image = Image.open(test_image_path) - os.makedirs(REFERENCE_DIR_FAILURES, exist_ok=True) - image_name = os.path.join(REFERENCE_DIR_FAILURES, name) - image.save(image_name) - print(f"Image saved to {image_name}") - raise