@@ -686,6 +686,53 @@ def test_solver_returns_extras_only_requested_nested(
686
686
assert ops [0 ].package .marker .is_any ()
687
687
688
688
689
+ def test_solver_finds_extras_next_to_non_extras (
690
+ solver : Solver , repo : Repository , package : ProjectPackage
691
+ ):
692
+ # Root depends on A[foo]
693
+ package .add_dependency (
694
+ Factory .create_dependency ("A" , {"version" : "*" , "extras" : ["foo" ]})
695
+ )
696
+
697
+ package_a = get_package ("A" , "1.0" )
698
+ package_b = get_package ("B" , "1.0" )
699
+ package_c = get_package ("C" , "1.0" )
700
+ package_d = get_package ("D" , "1.0" )
701
+
702
+ # A depends on B; A[foo] depends on B[bar].
703
+ package_a .add_dependency (Factory .create_dependency ("B" , "*" ))
704
+ package_a .add_dependency (
705
+ Factory .create_dependency (
706
+ "B" , {"version" : "*" , "extras" : ["bar" ], "markers" : "extra == 'foo'" }
707
+ )
708
+ )
709
+ package_a .extras = {"foo" : [get_dependency ("B" , "*" )]}
710
+
711
+ # B depends on C; B[bar] depends on D.
712
+ package_b .add_dependency (Factory .create_dependency ("C" , "*" ))
713
+ package_b .add_dependency (
714
+ Factory .create_dependency ("D" , {"version" : "*" , "markers" : 'extra == "bar"' })
715
+ )
716
+ package_b .extras = {"bar" : [get_dependency ("D" , "*" )]}
717
+
718
+ repo .add_package (package_a )
719
+ repo .add_package (package_b )
720
+ repo .add_package (package_c )
721
+ repo .add_package (package_d )
722
+
723
+ transaction = solver .solve ()
724
+
725
+ check_solver_result (
726
+ transaction ,
727
+ [
728
+ {"job" : "install" , "package" : package_c },
729
+ {"job" : "install" , "package" : package_d },
730
+ {"job" : "install" , "package" : package_b },
731
+ {"job" : "install" , "package" : package_a },
732
+ ],
733
+ )
734
+
735
+
689
736
def test_solver_returns_prereleases_if_requested (
690
737
solver : Solver , repo : Repository , package : ProjectPackage
691
738
):
0 commit comments