pyproject-rpm-macros/test_pyproject_buildrequires.py
DistroBaker 795a9b3332 Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/pyproject-rpm-macros.git#26bb3cb4d123a7f57df5ec56b17ccbf3d415c505
2021-02-04 13:32:12 +00:00

58 lines
1.6 KiB
Python

from pathlib import Path
import importlib.metadata
import io
import pytest
import yaml
from pyproject_buildrequires import generate_requires
testcases = {}
with Path(__file__).parent.joinpath('pyproject_buildrequires_testcases.yaml').open() as f:
testcases = yaml.safe_load(f)
@pytest.mark.parametrize('case_name', testcases)
def test_data(case_name, capsys, tmp_path, monkeypatch):
case = testcases[case_name]
cwd = tmp_path.joinpath('cwd')
cwd.mkdir()
monkeypatch.chdir(cwd)
if case.get('xfail'):
pytest.xfail(case.get('xfail'))
for filename in 'pyproject.toml', 'setup.py', 'tox.ini':
if filename in case:
cwd.joinpath(filename).write_text(case[filename])
def get_installed_version(dist_name):
try:
return str(case['installed'][dist_name])
except (KeyError, TypeError):
raise importlib.metadata.PackageNotFoundError(
f'info not found for {dist_name}'
)
try:
generate_requires(
get_installed_version=get_installed_version,
include_runtime=case.get('include_runtime', False),
extras=case.get('extras', []),
toxenv=case.get('toxenv', None),
generate_extras=case.get('generate_extras', False),
)
except SystemExit as e:
assert e.code == case['result']
except Exception as e:
if 'except' not in case:
raise
assert type(e).__name__ == case['except']
else:
assert 0 == case['result']
captured = capsys.readouterr()
assert captured.out == case['expected']