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