Lekr0's picture
Add files using upload-large-folder tool
a402b9b verified
"""Shared fixtures for source_patcher tests.
The sample module is defined as an inline string and written to a temp file
at test time, avoiding CI complaints about fixture files without test registration.
"""
import importlib.util
import sys
import tempfile
from pathlib import Path
from types import ModuleType
import pytest
SAMPLE_MODULE_NAME = "_source_patcher_test_fixtures.sample_module"
SAMPLE_MODULE_SOURCE = '''\
GLOBAL_VAR = "global_value"
class HelperClass:
"""Utility class referenced by SampleClass to test cross-class calls."""
@staticmethod
def format_value(value: str) -> str:
return f"[{value}]"
class SampleClass:
def greet(self, name: str) -> str:
greeting = f"hello {name}"
return greeting
def compute(self, x: int) -> int:
result = x * 2 + 1
return result
def uses_global(self) -> str:
return f"value={GLOBAL_VAR}"
def uses_helper(self, value: str) -> str:
return HelperClass.format_value(value)
def standalone_function(a: int, b: int) -> int:
return a + b
'''
@pytest.fixture(scope="session")
def sample_module() -> ModuleType:
"""Load the sample module from a temp file and register it in sys.modules."""
if SAMPLE_MODULE_NAME in sys.modules:
return sys.modules[SAMPLE_MODULE_NAME]
tmpdir = tempfile.mkdtemp(prefix="source_patcher_fixtures_")
module_path = Path(tmpdir) / "sample_module.py"
module_path.write_text(SAMPLE_MODULE_SOURCE)
spec = importlib.util.spec_from_file_location(SAMPLE_MODULE_NAME, module_path)
assert spec is not None
assert spec.loader is not None
module = importlib.util.module_from_spec(spec)
sys.modules[SAMPLE_MODULE_NAME] = module
spec.loader.exec_module(module)
return module