2
2
3
3
from typing import TYPE_CHECKING
4
4
5
+ import pytest
6
+
5
7
from packaging .utils import canonicalize_name
8
+ from poetry .core .constraints .version import parse_constraint
6
9
from poetry .core .packages .dependency import Dependency
7
10
from poetry .core .packages .package import Package
8
11
from poetry .core .version .markers import AnyMarker
@@ -378,7 +381,8 @@ def test_merge_override_packages_restricted(package: ProjectPackage) -> None:
378
381
)
379
382
},
380
383
),
381
- ]
384
+ ],
385
+ parse_constraint ("*" ),
382
386
)
383
387
assert len (packages ) == 1
384
388
assert packages [a ].groups == {"main" }
@@ -416,7 +420,8 @@ def test_merge_override_packages_extras(package: ProjectPackage) -> None:
416
420
)
417
421
},
418
422
),
419
- ]
423
+ ],
424
+ parse_constraint ("*" ),
420
425
)
421
426
assert len (packages ) == 1
422
427
assert packages [a ].groups == {"main" }
@@ -428,6 +433,43 @@ def test_merge_override_packages_extras(package: ProjectPackage) -> None:
428
433
}
429
434
430
435
436
+ @pytest .mark .parametrize (
437
+ ("python_constraint" , "expected" ),
438
+ [
439
+ (">=3.8" , 'python_version > "3.8" or sys_platform != "linux"' ),
440
+ (">=3.9" , "" ),
441
+ ],
442
+ )
443
+ def test_merge_override_packages_python_constraint (
444
+ package : ProjectPackage , python_constraint : str , expected : str
445
+ ) -> None :
446
+ """The resulting marker depends on the project's python constraint."""
447
+ a = Package ("a" , "1" )
448
+
449
+ packages = merge_override_packages (
450
+ [
451
+ (
452
+ {
453
+ package : {
454
+ "a" : dep (
455
+ "b" , "sys_platform == 'linux' and python_version > '3.8'"
456
+ )
457
+ }
458
+ },
459
+ {a : TransitivePackageInfo (0 , {"main" }, {"main" : AnyMarker ()})},
460
+ ),
461
+ (
462
+ {package : {"a" : dep ("b" , "sys_platform != 'linux'" )}},
463
+ {a : TransitivePackageInfo (0 , {"main" }, {"main" : AnyMarker ()})},
464
+ ),
465
+ ],
466
+ parse_constraint (python_constraint ),
467
+ )
468
+ assert len (packages ) == 1
469
+ assert packages [a ].groups == {"main" }
470
+ assert tm (packages [a ]) == {"main" : expected }
471
+
472
+
431
473
def test_merge_override_packages_multiple_deps (package : ProjectPackage ) -> None :
432
474
"""All override markers should be intersected."""
433
475
a = Package ("a" , "1" )
@@ -444,7 +486,8 @@ def test_merge_override_packages_multiple_deps(package: ProjectPackage) -> None:
444
486
},
445
487
{a : TransitivePackageInfo (0 , {"main" }, {"main" : AnyMarker ()})},
446
488
),
447
- ]
489
+ ],
490
+ parse_constraint ("*" ),
448
491
)
449
492
450
493
assert len (packages ) == 1
@@ -492,7 +535,8 @@ def test_merge_override_packages_groups(package: ProjectPackage) -> None:
492
535
),
493
536
},
494
537
),
495
- ]
538
+ ],
539
+ parse_constraint ("*" ),
496
540
)
497
541
assert len (packages ) == 2
498
542
assert packages [a ].groups == {"main" , "dev" }
@@ -552,7 +596,8 @@ def test_merge_override_packages_shortcut(package: ProjectPackage) -> None:
552
596
)
553
597
},
554
598
),
555
- ]
599
+ ],
600
+ parse_constraint ("*" ),
556
601
)
557
602
assert len (packages ) == 1
558
603
assert packages [a ].groups == {"main" }
0 commit comments