forked from python-poetry/poetry
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_dependency_specification.py
106 lines (94 loc) · 3.6 KB
/
test_dependency_specification.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
from __future__ import annotations
from pathlib import Path
from typing import TYPE_CHECKING
import pytest
from deepdiff import DeepDiff
from poetry.utils.dependency_specification import parse_dependency_specification
if TYPE_CHECKING:
from pytest_mock import MockerFixture
from poetry.utils.dependency_specification import DependencySpec
@pytest.mark.parametrize(
("requirement", "specification"),
[
(
"git+https://github.com/demo/demo.git",
{"git": "https://github.com/demo/demo.git", "name": "demo"},
),
(
"git+ssh://github.com/demo/demo.git",
{"git": "ssh://github.com/demo/demo.git", "name": "demo"},
),
(
"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@main",
{"git": "https://github.com/demo/demo.git", "name": "demo", "rev": "main"},
),
("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[a,b]@1.0.0", {"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/packages/demo-0.1.0.tar.gz",
{"name": "demo", "url": "https://example.com/packages/demo-0.1.0.tar.gz"},
),
# PEP 508 inputs
(
"poetry-core (>=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"',
{
"name": "requests",
"markers": 'python_version < "2.7"',
"version": ">=2.8.1,<2.9.0",
"extras": ["security", "tests"],
},
),
("name (>=3,<4)", {"name": "name", "version": ">=3,<4"}),
(
"name@http://foo.com",
{"name": "name", "url": "http://foo.com"},
),
(
"name [fred,bar] @ http://foo.com ; python_version=='2.7'",
{
"name": "name",
"markers": 'python_version == "2.7"',
"url": "http://foo.com",
"extras": ["fred", "bar"],
},
),
(
'cachecontrol[filecache] (>=0.12.9,<0.13.0); python_version >= "3.6" and'
' python_version < "4.0"',
{
"version": ">=0.12.9,<0.13.0",
"markers": 'python_version >= "3.6" and python_version < "4.0"',
"extras": ["filecache"],
"name": "cachecontrol",
},
),
],
)
def test_parse_dependency_specification(
requirement: str, specification: DependencySpec, mocker: MockerFixture
) -> None:
original = Path.exists
def _mock(self: Path) -> bool:
if "/" in requirement and self == Path.cwd().joinpath(requirement):
return True
return original(self)
mocker.patch("pathlib.Path.exists", _mock)
assert not DeepDiff(
parse_dependency_specification(requirement), specification, ignore_order=True
)