Skip to content

Commit e89ac80

Browse files
committed
Add DidUrl.toUri() and DidUrl.toUrl() tests
1 parent 785c0e5 commit e89ac80

2 files changed

Lines changed: 73 additions & 59 deletions

File tree

src/main/java/com/apicatalog/did/DidUrl.java

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -40,31 +40,8 @@ public static DidUrl from(final URI uri) {
4040
if (didParts.length != 2) {
4141
throw new IllegalArgumentException("The URI [" + uri + "] is not valid DID, must be in form 'did:method:method-specific-id'.");
4242
}
43-
44-
return from(uri, didParts[0], didParts[1], uri.getFragment());
45-
}
46-
47-
protected static DidUrl from(Object uri, final String method, final String rest, final String fragment) {
48-
String specificId = rest;
49-
50-
String path = null;
51-
String query = null;
52-
53-
int urlPartIndex = specificId.indexOf('?');
54-
if (urlPartIndex != -1) {
55-
query = specificId.substring(urlPartIndex + 1);
56-
specificId = specificId.substring(0, urlPartIndex);
57-
}
5843

59-
urlPartIndex = specificId.indexOf('/');
60-
if (urlPartIndex != -1) {
61-
path = specificId.substring(urlPartIndex);
62-
specificId = specificId.substring(0, urlPartIndex);
63-
}
64-
65-
Did did = from(uri, method, specificId);
66-
67-
return new DidUrl(did, path, query, fragment);
44+
return from(uri, didParts[0], didParts[1], uri.getFragment());
6845
}
6946

7047
public static DidUrl from(final String uri) {
@@ -85,7 +62,7 @@ public static DidUrl from(final String uri) {
8562

8663
String rest = parts[2];
8764
String fragment = null;
88-
65+
8966
int fragmentIndex = rest.indexOf('#');
9067
if (fragmentIndex != -1) {
9168
fragment = rest.substring(fragmentIndex + 1);
@@ -95,19 +72,48 @@ public static DidUrl from(final String uri) {
9572
return from(uri, parts[1], rest, fragment);
9673
}
9774

75+
protected static DidUrl from(Object uri, final String method, final String rest, final String fragment) {
76+
String specificId = rest;
77+
78+
String path = null;
79+
String query = null;
80+
81+
int urlPartIndex = specificId.indexOf('?');
82+
if (urlPartIndex != -1) {
83+
query = specificId.substring(urlPartIndex + 1);
84+
specificId = specificId.substring(0, urlPartIndex);
85+
}
86+
87+
urlPartIndex = specificId.indexOf('/');
88+
if (urlPartIndex != -1) {
89+
path = specificId.substring(urlPartIndex);
90+
specificId = specificId.substring(0, urlPartIndex);
91+
}
92+
93+
Did did = from(uri, method, specificId);
94+
95+
return new DidUrl(did, path, query, fragment);
96+
}
97+
9898
public static boolean isDidUrl(final URI uri) {
9999
return Did.SCHEME.equals(uri.getScheme());
100100
}
101101

102102
public static boolean isDidUrl(final String uri) {
103-
if (Did.isBlank(uri)) {
103+
if (uri == null) {
104104
return false;
105105
}
106106

107-
final String[] parts = uri.split(":");
107+
final String[] parts = uri.split(":", 3);
108+
109+
return parts.length == 3
110+
&& Did.SCHEME.equalsIgnoreCase(parts[0])
111+
&& parts[1].length() > 0
112+
&& parts[2].length() > 0
113+
&& parts[1].codePoints().allMatch(METHOD_CHAR)
114+
// FIXME does not validate pct-encoded correctly
115+
&& parts[2].codePoints().allMatch(ID_CHAR.or(ch -> ch == ':' || ch == '%'));
108116

109-
return (parts.length == 3 || parts.length == 4)
110-
&& Did.SCHEME.equalsIgnoreCase(parts[0]);
111117
}
112118

113119
@Override

src/test/java/com/apicatalog/did/DidUrlTest.java

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import static org.junit.jupiter.api.Assertions.assertTrue;
66
import static org.junit.jupiter.api.Assertions.fail;
77

8+
import java.net.MalformedURLException;
89
import java.net.URI;
10+
import java.net.URL;
911
import java.util.Arrays;
1012
import java.util.stream.Stream;
1113

@@ -23,46 +25,52 @@ class DidUrlTest {
2325
@ParameterizedTest(name = "{0}")
2426
@MethodSource({ "validVectors" })
2527
void fromString(String uri, String method, String specificId, String path, String query, String fragment) {
26-
try {
27-
28-
final DidUrl didUrl = DidUrl.from(uri);
29-
30-
assertNotNull(didUrl);
31-
assertTrue(didUrl.isDidUrl());
32-
assertEquals(method, didUrl.getMethod());
33-
assertEquals(specificId, didUrl.getMethodSpecificId());
34-
assertEquals(path, didUrl.getPath());
35-
assertEquals(query, didUrl.getQuery());
36-
assertEquals(fragment, didUrl.getFragment());
37-
38-
} catch (IllegalArgumentException | NullPointerException e) {
39-
e.printStackTrace();
40-
fail(e);
41-
}
28+
final DidUrl didUrl = DidUrl.from(uri);
29+
30+
assertNotNull(didUrl);
31+
assertTrue(didUrl.isDidUrl());
32+
assertEquals(method, didUrl.getMethod());
33+
assertEquals(specificId, didUrl.getMethodSpecificId());
34+
assertEquals(path, didUrl.getPath());
35+
assertEquals(query, didUrl.getQuery());
36+
assertEquals(fragment, didUrl.getFragment());
4237
}
4338

4439
@DisplayName("from(URI)")
4540
@ParameterizedTest(name = "{0}")
4641
@MethodSource({ "validVectors" })
4742
void fromUri(String input, String method, String specificId, String path, String query, String fragment) {
48-
try {
49-
50-
final DidUrl didUrl = DidUrl.from(URI.create(input));
43+
final DidUrl didUrl = DidUrl.from(URI.create(input));
44+
45+
assertNotNull(didUrl);
46+
assertTrue(didUrl.isDidUrl());
47+
assertEquals(method, didUrl.getMethod());
48+
assertEquals(specificId, didUrl.getMethodSpecificId());
49+
assertEquals(path, didUrl.getPath());
50+
assertEquals(query, didUrl.getQuery());
51+
assertEquals(fragment, didUrl.getFragment());
52+
}
5153

52-
assertNotNull(didUrl);
53-
assertTrue(didUrl.isDidUrl());
54-
assertEquals(method, didUrl.getMethod());
55-
assertEquals(specificId, didUrl.getMethodSpecificId());
56-
assertEquals(path, didUrl.getPath());
57-
assertEquals(query, didUrl.getQuery());
58-
assertEquals(fragment, didUrl.getFragment());
54+
@DisplayName("toUri()")
55+
@ParameterizedTest(name = "{0}")
56+
@MethodSource({ "validVectors" })
57+
void toUri(String input, String method, String specificId, String path, String query, String fragment) {
58+
final DidUrl didUrl = DidUrl.from(URI.create(input));
5959

60-
} catch (IllegalArgumentException | NullPointerException e) {
61-
e.printStackTrace();
62-
fail(e);
63-
}
60+
assertNotNull(didUrl);
61+
assertEquals(URI.create(input), didUrl.toUri());
6462
}
6563

64+
@DisplayName("toUrl()")
65+
@ParameterizedTest(name = "{0}")
66+
@MethodSource({ "validVectors" })
67+
void toUrl(String input, String method, String specificId, String path, String query, String fragment) throws MalformedURLException {
68+
final DidUrl didUrl = DidUrl.from(URI.create(input));
69+
70+
assertNotNull(didUrl);
71+
assertEquals(new URL(input), didUrl.toUrl());
72+
}
73+
6674
@DisplayName("isDidUrl(String)")
6775
@ParameterizedTest(name = "{0}")
6876
@MethodSource({ "validVectors" })

0 commit comments

Comments
 (0)