|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
from pathlib import Path
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
390b971 |
import importlib.metadata
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
9d4e88e |
import packaging.version
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
import pytest
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
9d4e88e |
import setuptools
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
import yaml
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
from pyproject_buildrequires import generate_requires
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
9d4e88e |
SETUPTOOLS_VERSION = packaging.version.parse(setuptools.__version__)
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
9d4e88e |
SETUPTOOLS_60 = SETUPTOOLS_VERSION >= packaging.version.parse('60')
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
d262d90 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
testcases = {}
|
|
![](https://seccdn.libravatar.org/avatar/f80a9d291ffd30761fe7b91001a2ff8b2668108b6abfaaea527ed437f1b415ea?s=16&d=retro) |
2800b49 |
with Path(__file__).parent.joinpath('pyproject_buildrequires_testcases.yaml').open() as f:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
testcases = yaml.safe_load(f)
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
@pytest.mark.parametrize('case_name', testcases)
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
40f6765 |
def test_data(case_name, capfd, tmp_path, monkeypatch):
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
case = testcases[case_name]
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
cwd = tmp_path.joinpath('cwd')
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
cwd.mkdir()
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
monkeypatch.chdir(cwd)
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
40f6765 |
wheeldir = cwd.joinpath('wheeldir')
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
40f6765 |
wheeldir.mkdir()
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
4569036 |
output = tmp_path.joinpath('output.txt')
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aca2f6a |
if case.get('xfail'):
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aca2f6a |
pytest.xfail(case.get('xfail'))
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aca2f6a |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
9d4e88e |
if case.get('skipif') and eval(case.get('skipif')):
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
9d4e88e |
pytest.skip(case.get('skipif'))
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
9d4e88e |
|
|
![](https://seccdn.libravatar.org/avatar/a973da034e49a14259bb98d71a1c60082c29ebcb91c4d7c9c8cb567099bad334?s=16&d=retro) |
d6ad9a7 |
for filename in case:
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
9d4e88e |
file_types = ('.toml', '.py', '.in', '.ini', '.txt', '.cfg')
|
|
![](https://seccdn.libravatar.org/avatar/a973da034e49a14259bb98d71a1c60082c29ebcb91c4d7c9c8cb567099bad334?s=16&d=retro) |
d6ad9a7 |
if filename.endswith(file_types):
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
cwd.joinpath(filename).write_text(case[filename])
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
for name, value in case.get('environ', {}).items():
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
monkeypatch.setenv(name, value)
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
d262d90 |
def get_installed_version(dist_name):
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
d262d90 |
try:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
d262d90 |
return str(case['installed'][dist_name])
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
d262d90 |
except (KeyError, TypeError):
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
390b971 |
raise importlib.metadata.PackageNotFoundError(
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
d262d90 |
f'info not found for {dist_name}'
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
d262d90 |
)
|
|
![](https://seccdn.libravatar.org/avatar/a973da034e49a14259bb98d71a1c60082c29ebcb91c4d7c9c8cb567099bad334?s=16&d=retro) |
d6ad9a7 |
requirement_files = case.get('requirement_files', [])
|
|
![](https://seccdn.libravatar.org/avatar/a973da034e49a14259bb98d71a1c60082c29ebcb91c4d7c9c8cb567099bad334?s=16&d=retro) |
d6ad9a7 |
requirement_files = [open(f) for f in requirement_files]
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8c8afba |
use_build_system = case.get('use_build_system', True)
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
try:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
generate_requires(
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
d262d90 |
get_installed_version=get_installed_version,
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8c8afba |
include_runtime=case.get('include_runtime', use_build_system),
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
40f6765 |
build_wheel=case.get('build_wheel', False),
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
40f6765 |
wheeldir=str(wheeldir),
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
2ecbed7 |
extras=case.get('extras', []),
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8a60635 |
toxenv=case.get('toxenv', None),
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
a613e17 |
generate_extras=case.get('generate_extras', False),
|
|
![](https://seccdn.libravatar.org/avatar/a973da034e49a14259bb98d71a1c60082c29ebcb91c4d7c9c8cb567099bad334?s=16&d=retro) |
d6ad9a7 |
requirement_files=requirement_files,
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
8c8afba |
use_build_system=use_build_system,
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
4569036 |
output=output,
|
|
![](https://seccdn.libravatar.org/avatar/844f8c837ed6aa76734b561a03adc13f3582a12a4d758d2ed0ca5001a8dd1d5c?s=16&d=retro) |
156e2fc |
config_settings=case.get('config_settings'),
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
)
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
except SystemExit as e:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
assert e.code == case['result']
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
except Exception as e:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
bc156c4 |
if 'except' not in case:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
bc156c4 |
raise
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
assert type(e).__name__ == case['except']
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
else:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
assert 0 == case['result']
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
50645e1 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
ddaf2e9 |
# this prevents us from accidentally writing "empty" tests
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
ddaf2e9 |
# if we ever need to do that, we can remove the check or change it:
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
ddaf2e9 |
assert 'expected' in case or 'stderr_contains' in case
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
ddaf2e9 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
40f6765 |
out, err = capfd.readouterr()
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
4569036 |
dependencies = output.read_text()
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
ddaf2e9 |
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
ddaf2e9 |
if 'expected' in case:
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
d06c69a |
expected = case['expected']
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
d06c69a |
if isinstance(expected, list):
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
d06c69a |
# at least one of them needs to match
|
|
![](https://seccdn.libravatar.org/avatar/844f8c837ed6aa76734b561a03adc13f3582a12a4d758d2ed0ca5001a8dd1d5c?s=16&d=retro) |
ef9a286 |
assert dependencies in expected
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
d06c69a |
else:
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
4569036 |
assert dependencies == expected
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
# stderr_contains may be a string or list of strings
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
stderr_contains = case.get('stderr_contains')
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
if stderr_contains is not None:
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
if isinstance(stderr_contains, str):
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
stderr_contains = [stderr_contains]
|
|
![](https://seccdn.libravatar.org/avatar/46b4c9bf5302597e3a24dd27829c2ae9315b1f1ecdacf761f6b9ff14777f7b91?s=16&d=retro) |
aeb21f6 |
for expected_substring in stderr_contains:
|
|
![](https://seccdn.libravatar.org/avatar/3c06a168eac5e10baa83f960445b9b006df35865b76dcf7a899f6215ea86b54f?s=16&d=retro) |
40f6765 |
assert expected_substring.format(**locals()) in err
|
|
![](https://seccdn.libravatar.org/avatar/a973da034e49a14259bb98d71a1c60082c29ebcb91c4d7c9c8cb567099bad334?s=16&d=retro) |
d6ad9a7 |
finally:
|
|
![](https://seccdn.libravatar.org/avatar/a973da034e49a14259bb98d71a1c60082c29ebcb91c4d7c9c8cb567099bad334?s=16&d=retro) |
d6ad9a7 |
for req in requirement_files:
|
|
![](https://seccdn.libravatar.org/avatar/a973da034e49a14259bb98d71a1c60082c29ebcb91c4d7c9c8cb567099bad334?s=16&d=retro) |
d6ad9a7 |
req.close()
|