-
Notifications
You must be signed in to change notification settings - Fork 126
/
Copy pathtest_self_packaging.py
119 lines (96 loc) · 2.68 KB
/
test_self_packaging.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# These tests check the sdist, path, and wheel of build to ensure that all are valid.
import subprocess
import sys
import tarfile
import zipfile
from pathlib import Path, PurePosixPath
import pytest
DIR = Path(__file__).parent.resolve()
MAIN_DIR = DIR.parent
sdist_files = {
'.dockerignore',
'.gitignore',
'CHANGELOG.rst',
'LICENSE',
'PKG-INFO',
'README.md',
'docs/conf.py',
'pyproject.toml',
'src/build/py.typed',
'tests/constraints.txt',
'tests/packages/test-cant-build-via-sdist/some-file-that-is-needed-for-build.txt',
'tests/packages/test-no-project/empty.txt',
'tests/packages/test-setuptools/MANIFEST.in',
'tox.ini',
}
sdist_patterns = {
'docs/*.rst',
'src/build/*.py',
'src/build/_compat/*.py',
'tests/*.py',
'tests/packages/*/*.py',
'tests/packages/*/*/*.py',
'tests/packages/*/pyproject.toml',
'tests/packages/*/setup.*',
}
sdist_files |= {str(PurePosixPath(p.relative_to(MAIN_DIR))) for path in sdist_patterns for p in MAIN_DIR.glob(path)}
wheel_files = {
'build/__init__.py',
'build/__main__.py',
'build/_builder.py',
'build/_compat/__init__.py',
'build/_compat/importlib.py',
'build/_compat/tarfile.py',
'build/_compat/tomllib.py',
'build/_ctx.py',
'build/_exceptions.py',
'build/_types.py',
'build/_util.py',
'build/env.py',
'build/py.typed',
'build/util.py',
'dist-info/licenses/LICENSE',
'dist-info/METADATA',
'dist-info/RECORD',
'dist-info/WHEEL',
'dist-info/entry_points.txt',
}
@pytest.mark.network
def test_build_sdist(monkeypatch, tmpdir):
monkeypatch.chdir(MAIN_DIR)
subprocess.run(
[
sys.executable,
'-m',
'build',
'--sdist',
'--outdir',
str(tmpdir),
],
check=True,
)
(sdist,) = tmpdir.visit('*.tar.gz')
with tarfile.open(str(sdist), 'r:gz') as tar:
simpler = {n.split('/', 1)[-1] for n in tar.getnames()}
assert simpler == sdist_files
@pytest.mark.network
@pytest.mark.parametrize('args', ((), ('--wheel',)), ids=('from_sdist', 'direct'))
def test_build_wheel(monkeypatch, tmpdir, args):
monkeypatch.chdir(MAIN_DIR)
subprocess.run(
[
sys.executable,
'-m',
'build',
*args,
'--outdir',
str(tmpdir),
],
check=True,
)
(wheel,) = tmpdir.visit('*.whl')
with zipfile.ZipFile(str(wheel)) as z:
names = z.namelist()
trimmed = {n for n in names if 'dist-info' not in n}
trimmed |= {f'dist-info/{n.split("/", 1)[-1]}' for n in names if 'dist-info' in n}
assert trimmed == wheel_files