LCOV - code coverage report
Current view: top level - tests - conftest.py (source / functions) Coverage Total Hit
Test: coverage.info Lines: 95.7 % 47 45
Test Date: 2026-11-02 09:44:19 Functions: 100.0 % 8 8

            Line data    Source code
       1              : # SPDX-FileCopyrightText: 2024 PairInteraction Developers
       2              : # SPDX-License-Identifier: LGPL-3.0-or-later
       3              : 
       4            1 : from __future__ import annotations
       5              : 
       6            1 : import os
       7            1 : from typing import TYPE_CHECKING
       8              : 
       9            1 : import pytest
      10            1 : from pint import UnitRegistry
      11              : 
      12              : if TYPE_CHECKING:
      13              :     from _pytest.config import Config
      14              :     from _pytest.config.argparsing import Parser
      15              :     from pairinteraction.green_tensor.green_tensor_interpolator import GreenTensorInterpolator
      16              :     from pairinteraction_gui.app import Application
      17              : 
      18              :     from .utils import PairinteractionModule
      19              : 
      20              : 
      21            1 : def pytest_addoption(parser: Parser) -> None:
      22            1 :     parser.addoption("--generate-reference", action="store_true", default=False, help="Generate reference data")
      23            1 :     parser.addoption(
      24              :         "--database-dir",
      25              :         action="store",
      26              :         default=None,
      27              :         help="Path to the database directory",
      28              :     )
      29            1 :     parser.addoption("--download-missing", action="store_true", default=False, help="Download missing database files")
      30              : 
      31              : 
      32            1 : @pytest.fixture(scope="session")
      33            1 : def generate_reference(pytestconfig: Config) -> bool:
      34            1 :     return pytestconfig.getoption("--generate-reference")  # type: ignore [no-any-return]
      35              : 
      36              : 
      37            1 : @pytest.fixture(scope="session")
      38            1 : def ureg() -> UnitRegistry:
      39              :     """Create and return a UnitRegistry with atomic units."""
      40            1 :     return UnitRegistry(system="atomic")
      41              : 
      42              : 
      43            1 : def pytest_sessionstart(session: pytest.Session) -> None:
      44              :     """Initialize everything before the tests are run."""
      45            1 :     download_missing: bool = session.config.getoption("--download-missing")
      46            1 :     database_dir: str | None = session.config.getoption("--database-dir")
      47              : 
      48              :     # Disable the test mode of PairInteraction that would call _setup_test_mode
      49              :     # automatically. This would be necessary for testing the jupyter notebooks
      50              :     # but we want to call _setup_test_mode manually.
      51            1 :     test_mode = os.environ.get("PAIRINTERACTION_TEST_MODE", "1")
      52            1 :     os.environ["PAIRINTERACTION_TEST_MODE"] = "0"
      53              : 
      54              :     # Call _setup_test_mode manually with the given options
      55            1 :     from pairinteraction import _setup_test_mode
      56              : 
      57            1 :     _setup_test_mode(download_missing, database_dir)
      58              : 
      59              :     # Set the test mode environment variables, so they can be used by subprocesses
      60            1 :     os.environ["PAIRINTERACTION_TEST_MODE"] = test_mode
      61            1 :     if database_dir is not None:
      62            0 :         os.environ["PAIRINTERACTION_TEST_DOWNLOAD_MISSING"] = str(int(download_missing))
      63            0 :         os.environ["PAIRINTERACTION_TEST_DATABASE_DIR"] = database_dir
      64              : 
      65              : 
      66            1 : @pytest.fixture(scope="session")
      67            1 : def qapp_cls() -> type[Application]:
      68              :     """Let the qapp and qtbot fixtures use our custom Application class."""
      69            1 :     from pairinteraction_gui.app import Application
      70              : 
      71            1 :     return Application
      72              : 
      73              : 
      74            1 : @pytest.fixture(params=["real", "complex"])
      75            1 : def use_real(request: pytest.FixtureRequest) -> bool:
      76              :     """Import and return the pairinteraction module, either real or complex version."""
      77            1 :     return bool(request.param == "real")
      78              : 
      79              : 
      80            1 : @pytest.fixture
      81            1 : def pi_module(use_real: bool) -> PairinteractionModule:
      82              :     """Import and return the pairinteraction module, either real or complex version."""
      83            1 :     if use_real:
      84            1 :         import pairinteraction.real as pi_real
      85              : 
      86            1 :         return pi_real  # type: ignore [return-value]
      87              : 
      88            1 :     import pairinteraction as pi_complex
      89              : 
      90            1 :     return pi_complex
      91              : 
      92              : 
      93            1 : @pytest.fixture
      94            1 : def green_tensor_interpolator_class(use_real: bool) -> type[GreenTensorInterpolator]:
      95              :     """Import and return the GreenTensorInterpolator class, either real or complex version."""
      96            1 :     if use_real:
      97            1 :         from pairinteraction.green_tensor.green_tensor_interpolator import GreenTensorInterpolatorReal as GTIClassReal
      98              : 
      99            1 :         return GTIClassReal
     100              : 
     101            1 :     from pairinteraction.green_tensor.green_tensor_interpolator import GreenTensorInterpolator as GTIClassComplex
     102              : 
     103            1 :     return GTIClassComplex
        

Generated by: LCOV version 2.0-1