@@ -686,6 +686,53 @@ def test_solver_returns_extras_only_requested_nested(
686686 assert ops [0 ].package .marker .is_any ()
687687
688688
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+
689736def test_solver_returns_prereleases_if_requested (
690737 solver : Solver , repo : Repository , package : ProjectPackage
691738):
0 commit comments