Skip to content

Commit 8d7e20e

Browse files
committed
fix tests
1 parent 67a78a0 commit 8d7e20e

File tree

2 files changed

+103
-140
lines changed

2 files changed

+103
-140
lines changed

src/main/java/org/scijava/links/Links.java

Lines changed: 0 additions & 83 deletions
This file was deleted.

src/test/java/org/scijava/links/LinksTest.java

Lines changed: 103 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -31,66 +31,112 @@
3131

3232
import org.junit.Test;
3333

34-
import java.net.URI;
35-
import java.net.URISyntaxException;
36-
import java.util.HashMap;
34+
3735
import java.util.Map;
3836

39-
import static org.junit.Assert.assertArrayEquals;
4037
import static org.junit.Assert.assertEquals;
38+
import static org.junit.Assert.assertNotNull;
39+
import static org.junit.Assert.assertNull;
40+
import static org.junit.Assert.assertThrows;
41+
import static org.junit.Assert.assertTrue;
42+
4143

42-
/**
43-
* Tests {@link Links}.
44-
*
45-
* @author Curtis Rueden
46-
*/
4744
public class LinksTest {
4845

49-
private static final URI TEST_URI;
50-
51-
static {
52-
try {
53-
TEST_URI = new URI(
54-
"scijava://user:[email protected]:8080/op/sub/resource?" +
55-
"fruit=apple&veggie=beans#section"
56-
);
57-
}
58-
catch (URISyntaxException e) {
59-
throw new RuntimeException(e);
60-
}
61-
}
62-
63-
@Test
64-
public void testPath() {
65-
var actual = Links.path(TEST_URI);
66-
assertEquals("op/sub/resource", actual);
67-
}
68-
69-
@Test
70-
public void testOperation() {
71-
var actual = Links.operation(TEST_URI);
72-
assertEquals("op", actual);
73-
}
74-
75-
@Test
76-
public void testPathFragments() {
77-
String[] expected = {"op", "sub", "resource"};
78-
var actual = Links.pathFragments(TEST_URI);
79-
assertArrayEquals(expected, actual);
80-
}
81-
82-
@Test
83-
public void testSubPath() {
84-
var actual = Links.subPath(TEST_URI);
85-
assertEquals("sub/resource", actual);
86-
}
87-
88-
@Test
89-
public void testQuery() {
90-
Map<String, String> expected = new HashMap<>();
91-
expected.put("fruit", "apple");
92-
expected.put("veggie", "beans");
93-
var actual = Links.query(TEST_URI);
94-
assertEquals(expected, actual);
95-
}
96-
}
46+
@Test
47+
public void parsesPluginSubAndQuery() {
48+
FijiURILink link = FijiURILink.parse("fiji://BDV/open?source=s3&bucket=data");
49+
assertEquals("BDV", link.getPlugin());
50+
assertEquals("open", link.getSubPlugin());
51+
assertEquals("source=s3&bucket=data", link.getQuery());
52+
assertEquals("source=s3&bucket=data", link.getRawQuery()); // identical here
53+
}
54+
55+
@Test
56+
public void parsesPluginOnly() {
57+
FijiURILink link = FijiURILink.parse("fiji://BDV");
58+
assertEquals("BDV", link.getPlugin());
59+
assertNull(link.getSubPlugin());
60+
assertNull(link.getQuery());
61+
assertNull(link.getRawQuery());
62+
}
63+
64+
@Test
65+
public void parsesPluginAndEmptyPathSlash() {
66+
FijiURILink link = FijiURILink.parse("fiji://BDV/?q=hello");
67+
assertEquals("BDV", link.getPlugin());
68+
assertNull(link.getSubPlugin()); // "/"" becomes no subplugin
69+
assertEquals("q=hello", link.getQuery());
70+
assertEquals("q=hello", link.getRawQuery());
71+
}
72+
73+
@Test
74+
public void percentEncodedQuery_isPreservedInRawQuery() {
75+
String u = "fiji://bdv?file=%2Ftmp%2Fdata.xml&flag";
76+
FijiURILink link = FijiURILink.parse(u);
77+
assertEquals("bdv", link.getPlugin());
78+
assertNull(link.getSubPlugin());
79+
80+
// getQuery() returns decoded or not? Your class uses uri.getQuery() (decoded)
81+
// and uri.getRawQuery() (raw). JDK behavior: getQuery() is decoded.
82+
assertEquals("file=/tmp/data.xml&flag", link.getQuery());
83+
assertEquals("file=%2Ftmp%2Fdata.xml&flag", link.getRawQuery());
84+
}
85+
86+
@Test
87+
public void parsedQueryToMap_handlesMissingValues() {
88+
FijiURILink link = FijiURILink.parse("fiji://BDV/open?a=1&b=2&flag");
89+
Map<String, String> map = link.getParsedQuery();
90+
assertEquals(3, map.size());
91+
assertEquals("1", map.get("a"));
92+
assertEquals("2", map.get("b"));
93+
assertNull(map.get("flag")); // key present with no value
94+
}
95+
96+
@Test
97+
public void toString_roundTrips_reasonably() {
98+
String u = "fiji://BDV/open?x=1&y=2";
99+
FijiURILink link = FijiURILink.parse(u);
100+
assertEquals(u, link.toString());
101+
}
102+
103+
104+
@Test
105+
public void rejectsWrongScheme() {
106+
IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
107+
() -> FijiURILink.parse("http://BDV/open?x=1"));
108+
assertTrue(ex.getMessage().contains("Scheme must be fiji://"));
109+
}
110+
111+
@Test
112+
public void rejectsMissingPlugin() {
113+
IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
114+
() -> FijiURILink.parse("fiji:///open?x=1"));
115+
assertTrue(ex.getMessage().contains("Missing plugin name"));
116+
}
117+
118+
@Test
119+
public void rejectsInvalidUriSyntax() {
120+
assertThrows(IllegalArgumentException.class,
121+
() -> FijiURILink.parse("fiji://BDV/open?bad|query"));
122+
}
123+
124+
125+
126+
@Test
127+
public void returnsNullOnError() {
128+
assertNull(FijiURILink.tryParse("not-a-uri"));
129+
assertNull(FijiURILink.tryParse("http://BDV")); // wrong scheme
130+
assertNull(FijiURILink.tryParse("fiji:///"));
131+
}
132+
133+
@Test
134+
public void returnsObjectOnSuccess() {
135+
FijiURILink ok = FijiURILink.tryParse("fiji://BDV/open?q=ok");
136+
assertNotNull(ok);
137+
assertEquals("BDV", ok.getPlugin());
138+
assertEquals("open", ok.getSubPlugin());
139+
assertEquals("q=ok", ok.getQuery());
140+
}
141+
}
142+

0 commit comments

Comments
 (0)