File: test_self_packaging.py

package info (click to toggle)
python-build 1.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 516 kB
  • sloc: python: 2,994; makefile: 16
file content (121 lines) | stat: -rw-r--r-- 2,784 bytes parent folder | download
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
120
121
# These tests check the sdist, path, and wheel of build to ensure that all are valid.

from __future__ import annotations

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