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