@@ -792,6 +792,87 @@ def _versions(*args: typing.Any, **kwds: typing.Any) -> list[tuple[str, str]]:
792792 assert provider .cache_key
793793
794794
795+ def test_resolve_versionmap () -> None :
796+ from fromager .versionmap import VersionMap
797+
798+ version_map = VersionMap (
799+ {
800+ "1.2" : "https://example.com/pkg-1.2.tar.gz" ,
801+ "1.3" : "https://example.com/pkg-1.3.tar.gz" ,
802+ "1.4.1" : "https://example.com/pkg-1.4.1.tar.gz" ,
803+ }
804+ )
805+
806+ provider = resolver .VersionMapProvider (
807+ version_map = version_map , package_name = "testpkg"
808+ )
809+ reporter : resolvelib .BaseReporter = resolvelib .BaseReporter ()
810+ rslvr = resolvelib .Resolver (provider , reporter )
811+
812+ result = rslvr .resolve ([Requirement ("testpkg" )])
813+ assert "testpkg" in result .mapping
814+
815+ candidate = result .mapping ["testpkg" ]
816+ assert str (candidate .version ) == "1.4.1"
817+ assert candidate .url == "https://example.com/pkg-1.4.1.tar.gz"
818+
819+ # VersionMapProvider uses resolver cache by default
820+ cache = resolver .BaseProvider .resolver_cache
821+ assert "testpkg" in cache
822+ cached_candidates = cache ["testpkg" ][
823+ (resolver .VersionMapProvider , "versionmap:testpkg" )
824+ ]
825+ assert len (cached_candidates ) == 3
826+
827+
828+ def test_resolve_versionmap_with_constraint () -> None :
829+ from fromager .versionmap import VersionMap
830+
831+ version_map = VersionMap (
832+ {
833+ "1.2" : "https://example.com/pkg-1.2.tar.gz" ,
834+ "1.3" : "https://example.com/pkg-1.3.tar.gz" ,
835+ "1.4.1" : "https://example.com/pkg-1.4.1.tar.gz" ,
836+ }
837+ )
838+
839+ c = constraints .Constraints ()
840+ c .add_constraint ("testpkg<1.4" )
841+
842+ provider = resolver .VersionMapProvider (
843+ version_map = version_map , package_name = "testpkg" , constraints = c
844+ )
845+ reporter : resolvelib .BaseReporter = resolvelib .BaseReporter ()
846+ rslvr = resolvelib .Resolver (provider , reporter )
847+
848+ result = rslvr .resolve ([Requirement ("testpkg" )])
849+ assert "testpkg" in result .mapping
850+
851+ candidate = result .mapping ["testpkg" ]
852+ assert str (candidate .version ) == "1.3"
853+ assert candidate .url == "https://example.com/pkg-1.3.tar.gz"
854+
855+
856+ def test_resolve_versionmap_no_match () -> None :
857+ from fromager .versionmap import VersionMap
858+
859+ version_map = VersionMap (
860+ {
861+ "1.2" : "https://example.com/pkg-1.2.tar.gz" ,
862+ "1.3" : "https://example.com/pkg-1.3.tar.gz" ,
863+ }
864+ )
865+
866+ provider = resolver .VersionMapProvider (
867+ version_map = version_map , package_name = "testpkg"
868+ )
869+ reporter : resolvelib .BaseReporter = resolvelib .BaseReporter ()
870+ rslvr = resolvelib .Resolver (provider , reporter )
871+
872+ with pytest .raises (resolvelib .resolvers .ResolverException ):
873+ rslvr .resolve ([Requirement ("testpkg>=2.0" )])
874+
875+
795876_gitlab_submodlib_repo_response = """
796877[
797878 {
0 commit comments