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
|
from typing import Any
import pytest
from scikit_build_core.builder._load_provider import process_dynamic_metadata
from scikit_build_core.metadata import _process_dynamic_metadata
def test_template_basic() -> None:
pyproject = process_dynamic_metadata(
{
"name": "test",
"version": "0.1.0",
"dynamic": ["requires-python"],
},
{
"requires-python": {
"provider": "scikit_build_core.metadata.template",
"result": ">={project[version]}",
},
},
)
assert pyproject["requires-python"] == ">=0.1.0"
def test_template_needs() -> None:
# These are intentionally out of order to test the order of processing
pyproject = process_dynamic_metadata(
{
"name": "test",
"version": "0.1.0",
"dynamic": ["requires-python", "license", "readme"],
},
{
"license": {
"provider": "scikit_build_core.metadata.template",
"result": "{project[requires-python]}",
},
"readme": {
"provider": "scikit_build_core.metadata.template",
"result": {"file": "{project[license]}"},
},
"requires-python": {
"provider": "scikit_build_core.metadata.template",
"result": ">={project[version]}",
},
},
)
assert pyproject["requires-python"] == ">=0.1.0"
def test_regex() -> None:
pyproject = process_dynamic_metadata(
{
"name": "test",
"version": "0.1.0",
"dynamic": ["requires-python"],
},
{
"requires-python": {
"provider": "scikit_build_core.metadata.regex",
"input": "pyproject.toml",
"regex": r"name = \"(?P<name>.+)\"",
"result": ">={name}",
},
},
)
assert pyproject["requires-python"] == ">=scikit_build_core"
@pytest.mark.parametrize(
("field", "input", "output"),
[
pytest.param("version", "{sub}", "42", id="str"),
pytest.param("classifiers", ["a", "{sub}"], ["a", "42"], id="list-str"),
pytest.param(
"scripts",
{"a": "{sub}", "{sub}": "b"},
{"a": "42", "42": "b"},
id="dict-str",
),
pytest.param(
"authors", [{"name": "{sub}"}], [{"name": "42"}], id="list-dict-str"
),
pytest.param(
"optional-dependencies",
{"dev": ["{sub}"]},
{"dev": ["42"]},
id="dict-list-str",
),
pytest.param("readme", {"text": "{sub}"}, {"text": "42"}, id="readme"),
pytest.param(
"entry-points",
{"ep": {"{sub}": "{sub}"}},
{"ep": {"42": "42"}},
id="dict-dict-str",
),
],
)
def test_actions(field: str, input: Any, output: Any) -> None:
result = _process_dynamic_metadata(field, lambda x: x.format(sub=42), input)
assert output == result
|