@@ -330,3 +330,47 @@ def test_to_dict_custom_empty_value(self):
330330def test_purl_is_hashable ():
331331 s = {PackageURL (name = "hashable" , type = "pypi" )}
332332 assert len (s ) == 1
333+
334+
335+ def test_colons_in_name_are_handled_correctly () -> None :
336+ p = PackageURL .from_string (
337+ "pkg:nuget/libiconv:%20character%20set%20conversion%[email protected] ?package-id=e11a609df352e292" 338+ )
339+
340+ assert p .type == "nuget"
341+ assert p .namespace is None
342+ assert p .name == "libiconv: character set conversion library"
343+ assert p .version == "1.9"
344+ assert p .qualifiers == {"package-id" : "e11a609df352e292" }
345+ assert p .subpath is None
346+
347+ assert PackageURL .from_string (p .to_string ()).to_string () == p .to_string ()
348+
349+
350+ def test_colons_in_namespace_are_handled_correctly () -> None :
351+ p = PackageURL .from_string (
352+ "pkg:nuget/an:odd:space/libiconv:%20character%20set%20conversion%[email protected] ?package-id=e11a609df352e292" 353+ )
354+
355+ assert p .type == "nuget"
356+ assert p .namespace == "an:odd:space"
357+ assert p .name == "libiconv: character set conversion library"
358+ assert p .version == "1.9"
359+ assert p .qualifiers == {"package-id" : "e11a609df352e292" }
360+ assert p .subpath is None
361+
362+ assert PackageURL .from_string (p .to_string ()).to_string () == p .to_string ()
363+
364+
365+ def test_encoding_stuff_with_colons_correctly () -> None :
366+ p = PackageURL (
367+ type = "nuget" ,
368+ namespace = "an:odd:space" ,
369+ name = "libiconv: character set conversion library" ,
370+ version = "1.9" ,
371+ qualifiers = {"package-id" : "e11a609df352e292" },
372+ )
373+ assert (
374+ p .to_string ()
375+ == "pkg:nuget/an:odd:space/libiconv:%20character%20set%20conversion%[email protected] ?package-id=e11a609df352e292" 376+ )
0 commit comments