2626import org .junit .Test ;
2727import org .junit .rules .ExpectedException ;
2828
29+ import java .util .Map ;
30+
2931import static org .junit .Assert .*;
3032
3133public class PackageURLBuilderTest {
@@ -94,6 +96,7 @@ public void testPackageURLBuilder() throws MalformedPackageURLException {
9496 @ Test
9597 public void testPackageURLBuilderException1 () throws MalformedPackageURLException {
9698 exception .expect (MalformedPackageURLException .class );
99+ exception .expectMessage ("contains a qualifier key with an empty or null" );
97100 PackageURL purl = PackageURLBuilder .aPackageURL ()
98101 .withType ("type" )
99102 .withName ("name" )
@@ -102,6 +105,18 @@ public void testPackageURLBuilderException1() throws MalformedPackageURLExceptio
102105 Assert .fail ("Build should fail due to invalid qualifier (empty value)" );
103106 }
104107
108+ @ Test
109+ public void testPackageURLBuilderException1Null () throws MalformedPackageURLException {
110+ exception .expect (MalformedPackageURLException .class );
111+ exception .expectMessage ("contains a qualifier key with an empty or null" );
112+ PackageURLBuilder .aPackageURL ()
113+ .withType ("type" )
114+ .withName ("name" )
115+ .withQualifier ("key" ,null )
116+ .build ();
117+ Assert .fail ("Build should fail due to invalid qualifier (null value)" );
118+ }
119+
105120 @ Test
106121 public void testPackageURLBuilderException2 () throws MalformedPackageURLException {
107122 exception .expect (MalformedPackageURLException .class );
@@ -156,4 +171,49 @@ public void testPackageURLBuilderException6() throws MalformedPackageURLExceptio
156171 Assert .fail ("Build should fail due to invalid qualifier key" );
157172 }
158173
174+ @ Test
175+ public void testEditBuilder1 () throws MalformedPackageURLException {
176+
177+ PackageURL p = new PackageURL ("pkg:generic/namespace/name@1.0.0?k=v#s" );
178+ PackageURLBuilder b = p .toBuilder ();
179+ assertBuilderMatch (p , b );
180+
181+ assertBuilderMatch (new PackageURL ("pkg:generic/namespace/name@1.0.0#s" ), b .withNoQualifiers ());
182+ b .withType ("maven" )
183+ .withNamespace ("org.junit" )
184+ .withName ("junit5" )
185+ .withVersion ("3.1.2" )
186+ .withSubpath ("sub" )
187+ .withQualifier ("repo" , "maven" )
188+ .withQualifier ("dark" , "matter" )
189+ .withQualifier ("ping" , "pong" )
190+ .withoutQualifier ("dark" );
191+
192+ assertBuilderMatch (new PackageURL ("pkg:maven/org.junit/junit5@3.1.2?repo=maven&ping=pong#sub" ), b );
193+
194+ }
195+
196+ private void assertBuilderMatch (PackageURL expected , PackageURLBuilder actual ) throws MalformedPackageURLException {
197+
198+ Assert .assertEquals (expected .toString (), actual .build ().toString ());
199+ Assert .assertEquals (expected .getType (), actual .getType ());
200+ Assert .assertEquals (expected .getNamespace (), actual .getNamespace ());
201+ Assert .assertEquals (expected .getName (), actual .getName ());
202+ Assert .assertEquals (expected .getVersion (), actual .getVersion ());
203+ Assert .assertEquals (expected .getSubpath (), actual .getSubpath ());
204+
205+ Map <String , String > eQualifiers = expected .getQualifiers ();
206+ Map <String , String > aQualifiers = actual .getQualifiers ();
207+
208+ if (eQualifiers != null ) {
209+ eQualifiers .forEach ((k ,v )-> {
210+ Assert .assertEquals (v , aQualifiers .remove (k ));
211+ Assert .assertEquals (v , actual .getQualifier (k ));
212+ });
213+ }
214+
215+ Assert .assertTrue (aQualifiers .isEmpty ());
216+
217+ }
218+
159219}
0 commit comments