Commit a27d35eb by Randy Döring Committed by GitHub

tests: ensure forward compatibility with python-poetry/poetry-core#402 (#7852)

parent 1af8929a
...@@ -11,6 +11,8 @@ from poetry.utils.dependency_specification import RequirementsParser ...@@ -11,6 +11,8 @@ from poetry.utils.dependency_specification import RequirementsParser
if TYPE_CHECKING: if TYPE_CHECKING:
from collections.abc import Collection
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from poetry.utils.cache import ArtifactCache from poetry.utils.cache import ArtifactCache
...@@ -18,26 +20,39 @@ if TYPE_CHECKING: ...@@ -18,26 +20,39 @@ if TYPE_CHECKING:
@pytest.mark.parametrize( @pytest.mark.parametrize(
("requirement", "specification"), ("requirement", "expected_variants"),
[ [
( (
"git+https://github.com/demo/demo.git", "git+https://github.com/demo/demo.git",
{"git": "https://github.com/demo/demo.git", "name": "demo"}, ({"git": "https://github.com/demo/demo.git", "name": "demo"},),
), ),
( (
"git+ssh://github.com/demo/demo.git", "git+ssh://github.com/demo/demo.git",
{"git": "ssh://github.com/demo/demo.git", "name": "demo"}, ({"git": "ssh://github.com/demo/demo.git", "name": "demo"},),
), ),
( (
"git+https://github.com/demo/demo.git#main", "git+https://github.com/demo/demo.git#main",
{"git": "https://github.com/demo/demo.git", "name": "demo", "rev": "main"}, (
{
"git": "https://github.com/demo/demo.git",
"name": "demo",
"rev": "main",
},
),
), ),
( (
"git+https://github.com/demo/demo.git@main", "git+https://github.com/demo/demo.git@main",
{"git": "https://github.com/demo/demo.git", "name": "demo", "rev": "main"}, (
{
"git": "https://github.com/demo/demo.git",
"name": "demo",
"rev": "main",
},
),
), ),
( (
"git+https://github.com/demo/subdirectories.git@main#subdirectory=two", "git+https://github.com/demo/subdirectories.git@main#subdirectory=two",
(
{ {
"git": "https://github.com/demo/subdirectories.git", "git": "https://github.com/demo/subdirectories.git",
"name": "two", "name": "two",
...@@ -45,44 +60,77 @@ if TYPE_CHECKING: ...@@ -45,44 +60,77 @@ if TYPE_CHECKING:
"subdirectory": "two", "subdirectory": "two",
}, },
), ),
("demo", {"name": "demo"}), ),
("demo@1.0.0", {"name": "demo", "version": "1.0.0"}), ("demo", ({"name": "demo"},)),
("demo@^1.0.0", {"name": "demo", "version": "^1.0.0"}), ("demo@1.0.0", ({"name": "demo", "version": "1.0.0"},)),
("demo@==1.0.0", {"name": "demo", "version": "==1.0.0"}), ("demo@^1.0.0", ({"name": "demo", "version": "^1.0.0"},)),
("demo@!=1.0.0", {"name": "demo", "version": "!=1.0.0"}), ("demo@==1.0.0", ({"name": "demo", "version": "==1.0.0"},)),
("demo@~1.0.0", {"name": "demo", "version": "~1.0.0"}), ("demo@!=1.0.0", ({"name": "demo", "version": "!=1.0.0"},)),
("demo[a,b]@1.0.0", {"name": "demo", "version": "1.0.0", "extras": ["a", "b"]}), ("demo@~1.0.0", ({"name": "demo", "version": "~1.0.0"},)),
("demo[a,b]", {"name": "demo", "extras": ["a", "b"]}), (
("../demo", {"name": "demo", "path": "../demo"}), "demo[a,b]@1.0.0",
("../demo/demo.whl", {"name": "demo", "path": "../demo/demo.whl"}), ({"name": "demo", "version": "1.0.0", "extras": ["a", "b"]},),
),
("demo[a,b]", ({"name": "demo", "extras": ["a", "b"]},)),
("../demo", ({"name": "demo", "path": "../demo"},)),
("../demo/demo.whl", ({"name": "demo", "path": "../demo/demo.whl"},)),
( (
"https://example.com/distributions/demo-0.1.0.tar.gz", "https://example.com/distributions/demo-0.1.0.tar.gz",
(
{ {
"name": "demo", "name": "demo",
"url": "https://example.com/distributions/demo-0.1.0.tar.gz", "url": "https://example.com/distributions/demo-0.1.0.tar.gz",
}, },
), ),
),
# PEP 508 inputs # PEP 508 inputs
( (
"poetry-core (>=1.0.7,<1.1.0)", "poetry-core (>=1.0.7,<1.1.0)",
{"name": "poetry-core", "version": ">=1.0.7,<1.1.0"}, ({"name": "poetry-core", "version": ">=1.0.7,<1.1.0"},),
), ),
( (
'requests [security,tests] >= 2.8.1, == 2.8.* ; python_version < "2.7"', 'requests [security,tests] >= 2.8.1, == 2.8.* ; python_version < "2.7"',
( # allow several equivalent versions to make test more robust
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9",
"extras": ["security", "tests"],
},
{ {
"name": "requests", "name": "requests",
"markers": 'python_version < "2.7"', "markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9.0", "version": ">=2.8.1,<2.9.0",
"extras": ["security", "tests"], "extras": ["security", "tests"],
}, },
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9.dev0",
"extras": ["security", "tests"],
},
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9.0.dev0",
"extras": ["security", "tests"],
},
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,==2.8.*",
"extras": ["security", "tests"],
},
),
), ),
("name (>=3,<4)", {"name": "name", "version": ">=3,<4"}), ("name (>=3,<4)", ({"name": "name", "version": ">=3,<4"},)),
( (
"name@http://foo.com", "name@http://foo.com",
{"name": "name", "url": "http://foo.com"}, ({"name": "name", "url": "http://foo.com"},),
), ),
( (
"name [fred,bar] @ http://foo.com ; python_version=='2.7'", "name [fred,bar] @ http://foo.com ; python_version=='2.7'",
(
{ {
"name": "name", "name": "name",
"markers": 'python_version == "2.7"', "markers": 'python_version == "2.7"',
...@@ -90,11 +138,13 @@ if TYPE_CHECKING: ...@@ -90,11 +138,13 @@ if TYPE_CHECKING:
"extras": ["fred", "bar"], "extras": ["fred", "bar"],
}, },
), ),
),
( (
( (
'cachecontrol[filecache] (>=0.12.9,<0.13.0); python_version >= "3.6"' 'cachecontrol[filecache] (>=0.12.9,<0.13.0); python_version >= "3.6"'
' and python_version < "4.0"' ' and python_version < "4.0"'
), ),
(
{ {
"version": ">=0.12.9,<0.13.0", "version": ">=0.12.9,<0.13.0",
"markers": 'python_version >= "3.6" and python_version < "4.0"', "markers": 'python_version >= "3.6" and python_version < "4.0"',
...@@ -102,11 +152,12 @@ if TYPE_CHECKING: ...@@ -102,11 +152,12 @@ if TYPE_CHECKING:
"name": "cachecontrol", "name": "cachecontrol",
}, },
), ),
),
], ],
) )
def test_parse_dependency_specification( def test_parse_dependency_specification(
requirement: str, requirement: str,
specification: DependencySpec, expected_variants: Collection[DependencySpec],
mocker: MockerFixture, mocker: MockerFixture,
artifact_cache: ArtifactCache, artifact_cache: ArtifactCache,
) -> None: ) -> None:
...@@ -119,8 +170,11 @@ def test_parse_dependency_specification( ...@@ -119,8 +170,11 @@ def test_parse_dependency_specification(
mocker.patch("pathlib.Path.exists", _mock) mocker.patch("pathlib.Path.exists", _mock)
assert not DeepDiff( assert any(
not DeepDiff(
RequirementsParser(artifact_cache=artifact_cache).parse(requirement), RequirementsParser(artifact_cache=artifact_cache).parse(requirement),
specification, specification,
ignore_order=True, ignore_order=True,
) )
for specification in expected_variants
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment