Blob Blame History Raw
from pathlib import Path
import io

import pytest
import yaml

from pyproject_buildrequires import generate_requires

testcases = {}
with Path(__file__).parent.joinpath('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'))

    if 'pyproject.toml' in case:
        cwd.joinpath('pyproject.toml').write_text(case['pyproject.toml'])

    if 'setup.py' in case:
        cwd.joinpath('setup.py').write_text(case['setup.py'])

    try:
        generate_requires(
            case['freeze_output'],
            include_runtime=case.get('include_runtime', False),
            extras=case.get('extras', ''),
        )
    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']