@@ -43,6 +43,7 @@ def create_dependency(
43
43
return dep
44
44
45
45
46
+ @pytest .mark .parametrize ("mixed_dynamic" , [False , True ])
46
47
@pytest .mark .parametrize (
47
48
(
48
49
"dependencies" ,
@@ -57,20 +58,20 @@ def create_dependency(
57
58
(
58
59
{Dependency ("foo" , "*" , optional = True )},
59
60
{Dependency ("bar" , "*" )},
60
- {"foo" , " bar" },
61
+ ( {"foo" }, { "foo" , " bar" }) ,
61
62
),
62
63
(
63
64
{Dependency ("foo" , "*" )},
64
65
{Dependency ("bar" , "*" , optional = True )},
65
- {"foo" , " bar" },
66
+ ( {"foo" }, { "foo" , " bar" }) ,
66
67
),
67
68
(
68
69
{
69
70
Dependency ("foo" , "*" , optional = True ),
70
71
Dependency ("baz" , "*" , optional = True ),
71
72
},
72
73
{Dependency ("bar" , "*" )},
73
- {"foo" , "bar" , "baz" },
74
+ ( {"foo" , "baz" }, { "foo" , " bar" , "baz" }) ,
74
75
),
75
76
(
76
77
{
@@ -83,20 +84,25 @@ def create_dependency(
83
84
(
84
85
{Dependency ("foo" , "*" , optional = True )},
85
86
{Dependency ("bar" , "*" ), Dependency ("baz" , "*" , optional = True )},
86
- {"foo" , " bar" },
87
+ ( {"foo" }, { "foo" , " bar" }) ,
87
88
),
88
89
],
89
90
)
90
91
def test_dependencies (
91
92
dependencies : set [Dependency ],
92
93
poetry_dependencies : set [Dependency ],
93
- expected_dependencies : set [str ],
94
+ mixed_dynamic : bool ,
95
+ expected_dependencies : set [str ] | tuple [set [str ], set [str ]],
94
96
) -> None :
95
- group = DependencyGroup (name = "group" )
97
+ group = DependencyGroup (name = "group" , mixed_dynamic = mixed_dynamic )
96
98
group ._dependencies = list (dependencies )
97
99
group ._poetry_dependencies = list (poetry_dependencies )
98
100
99
- assert {d .name for d in group .dependencies } == set (expected_dependencies )
101
+ if isinstance (expected_dependencies , tuple ):
102
+ expected_dependencies = (
103
+ expected_dependencies [1 ] if mixed_dynamic else expected_dependencies [0 ]
104
+ )
105
+ assert {d .name for d in group .dependencies } == expected_dependencies
100
106
101
107
102
108
@pytest .mark .parametrize (
@@ -147,6 +153,7 @@ def test_remove_dependency_removes_from_both_lists() -> None:
147
153
assert {d .name for d in group ._poetry_dependencies } == {"baz" }
148
154
149
155
156
+ @pytest .mark .parametrize ("mixed_dynamic" , [False , True ])
150
157
@pytest .mark .parametrize (
151
158
(
152
159
"dependencies" ,
@@ -164,12 +171,24 @@ def test_remove_dependency_removes_from_both_lists() -> None:
164
171
(
165
172
[create_dependency ("foo" , in_extras = ("extra1" ,))],
166
173
[create_dependency ("bar" )],
167
- [create_dependency ("foo" , in_extras = ("extra1" ,)), create_dependency ("bar" )],
174
+ (
175
+ [create_dependency ("foo" , in_extras = ("extra1" ,))],
176
+ [
177
+ create_dependency ("foo" , in_extras = ("extra1" ,)),
178
+ create_dependency ("bar" ),
179
+ ],
180
+ ),
168
181
),
169
182
(
170
183
[create_dependency ("foo" )],
171
184
[create_dependency ("bar" , in_extras = ("extra1" ,))],
172
- [create_dependency ("foo" ), create_dependency ("bar" , in_extras = ("extra1" ,))],
185
+ (
186
+ [create_dependency ("foo" )],
187
+ [
188
+ create_dependency ("foo" ),
189
+ create_dependency ("bar" , in_extras = ("extra1" ,)),
190
+ ],
191
+ ),
173
192
),
174
193
# refine constraint
175
194
(
@@ -311,6 +330,23 @@ def test_remove_dependency_removes_from_both_lists() -> None:
311
330
[create_dependency ("foo" , source_name = "src" , optional = True )],
312
331
[create_dependency ("foo" , source_name = "src" , marker = "extra == 'extra1'" )],
313
332
),
333
+ (
334
+ [Dependency .create_from_pep_508 ("foo;extra=='extra1'" )],
335
+ [create_dependency ("foo" , source_name = "src" )],
336
+ (
337
+ [
338
+ create_dependency (
339
+ "foo" , source_name = "src" , marker = "extra == 'extra1'"
340
+ )
341
+ ],
342
+ [
343
+ create_dependency (
344
+ "foo" , source_name = "src" , marker = "extra == 'extra1'"
345
+ ),
346
+ create_dependency ("foo" , source_name = "src" ),
347
+ ],
348
+ ),
349
+ ),
314
350
# extras - special
315
351
# root extras do not have an extra marker, they just have set _in_extras!
316
352
(
@@ -398,12 +434,18 @@ def test_remove_dependency_removes_from_both_lists() -> None:
398
434
def test_dependencies_for_locking (
399
435
dependencies : list [Dependency ],
400
436
poetry_dependencies : list [Dependency ],
401
- expected_dependencies : list [Dependency ],
437
+ mixed_dynamic : bool ,
438
+ expected_dependencies : list [Dependency ] | tuple [list [Dependency ], list [Dependency ]],
402
439
) -> None :
403
- group = DependencyGroup (name = "group" )
440
+ group = DependencyGroup (name = "group" , mixed_dynamic = mixed_dynamic )
404
441
group ._dependencies = dependencies
405
442
group ._poetry_dependencies = poetry_dependencies
406
443
444
+ if isinstance (expected_dependencies , tuple ):
445
+ expected_dependencies = (
446
+ expected_dependencies [1 ] if mixed_dynamic else expected_dependencies [0 ]
447
+ )
448
+
407
449
assert group .dependencies_for_locking == expected_dependencies
408
450
# explicitly check attributes that are not considered in __eq__
409
451
assert [d .allows_prereleases () for d in group .dependencies_for_locking ] == [
0 commit comments