Skip to content

Commit ed7d6cf

Browse files
committed
Added couple of tests for url parser
1 parent f268ab5 commit ed7d6cf

File tree

3 files changed

+37
-28
lines changed

3 files changed

+37
-28
lines changed

jooby/src/main/java/io/jooby/internal/UrlParser.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.nio.charset.CharsetDecoder;
1616
import java.nio.charset.CoderResult;
1717
import java.nio.charset.StandardCharsets;
18+
import java.util.Arrays;
1819

1920
public final class UrlParser {
2021
private static final QueryStringValue NO_QUERY_STRING = new QueryStringValue("");
@@ -87,7 +88,12 @@ private static boolean addParam(HashValue root, String s, int nameStart, int val
8788
}
8889
String name = decodeComponent(s, nameStart, valueStart - 1, charset, false);
8990
String value = decodeComponent(s, valueStart, valueEnd, charset, false);
90-
root.put(name, value);
91+
int comma = value.indexOf(',');
92+
if (comma > 0) {
93+
root.put(name, Arrays.asList(value.split(",")));
94+
} else {
95+
root.put(name, value);
96+
}
9197
return true;
9298
}
9399

jooby/src/test/java/io/jooby/ValueTest.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import java.math.BigDecimal;
88
import java.util.Arrays;
99
import java.util.Collections;
10+
import java.util.HashMap;
1011
import java.util.LinkedHashSet;
12+
import java.util.Map;
1113
import java.util.Optional;
1214
import java.util.function.Consumer;
1315

@@ -217,7 +219,8 @@ public void valueToMap() {
217219
public void verifyIllegalAccess() {
218220
/** Object: */
219221
queryString("foo=bar", queryString -> {
220-
assertThrows(MissingValueException.class, () -> queryString.get("a").get("a").get("a").value());
222+
assertThrows(MissingValueException.class,
223+
() -> queryString.get("a").get("a").get("a").value());
221224
assertThrows(MissingValueException.class, () -> queryString.get("missing").value());
222225
assertThrows(MissingValueException.class, () -> queryString.get(0).value());
223226
assertEquals("missing", queryString.get("missing").value("missing"));
@@ -236,13 +239,15 @@ public void verifyIllegalAccess() {
236239

237240
/** Single Property: */
238241
queryString("foo=bar", queryString -> {
239-
assertThrows(MissingValueException.class, () -> queryString.get("foo").get("missing").value());
242+
assertThrows(MissingValueException.class,
243+
() -> queryString.get("foo").get("missing").value());
240244
assertEquals("bar", queryString.get("foo").get(0).value());
241245
});
242246

243247
/** Missing Property: */
244248
queryString("", queryString -> {
245-
assertThrows(MissingValueException.class, () -> queryString.get("foo").get("missing").value());
249+
assertThrows(MissingValueException.class,
250+
() -> queryString.get("foo").get("missing").value());
246251
assertThrows(MissingValueException.class, () -> queryString.get("foo").get(0).value());
247252
});
248253
}
@@ -267,7 +272,20 @@ public void decode() {
267272
queryString("tail=a%20%2B", queryString -> {
268273
assertEquals("a +", queryString.get("tail").value());
269274
});
275+
}
270276

277+
@Test
278+
public void empty() {
279+
queryString("n&x=&&", queryString -> {
280+
assertEquals("", queryString.get("n").value());
281+
assertEquals("", queryString.get("x").value());
282+
assertEquals(Collections.singletonList(""), queryString.get("n").toList());
283+
assertEquals(Collections.singletonList(""), queryString.get("x").toList());
284+
Map<String, String> map = new HashMap<>();
285+
map.put("n", "");
286+
map.put("x", "");
287+
assertEquals(map, queryString.toMap());
288+
});
271289
}
272290

273291
@Test
@@ -281,11 +299,17 @@ public void customMapper() {
281299
@Test
282300
public void toCollection() {
283301
/** Array: */
302+
queryString("a=1,2,1", queryString -> {
303+
assertEquals(Arrays.asList("1", "2", "1"), queryString.get("a").toList());
304+
305+
assertEquals(new LinkedHashSet<>(Arrays.asList("1", "2")), queryString.get("a").toSet());
306+
});
284307
queryString("a=1;a=2;a=1", queryString -> {
285308
assertEquals(Arrays.asList("1", "2", "1"), queryString.get("a").toList());
286309

287310
assertEquals(new LinkedHashSet<>(Arrays.asList("1", "2")), queryString.get("a").toSet());
288311
});
312+
289313
queryString("a=1", queryString -> {
290314
assertEquals(Arrays.asList("1"), queryString.get("a").toList());
291315
});
@@ -310,7 +334,7 @@ public void toOptional() {
310334
}
311335

312336
enum Letter {
313-
A, B;
337+
A, B
314338
}
315339

316340
@Test
@@ -352,7 +376,8 @@ public void verifyExceptionMessage() {
352376
"Missing value: 'a[3]'");
353377
assertMessage(MissingValueException.class, () -> queryString.get("a").get("b").value(),
354378
"Missing value: 'a.b'");
355-
assertMessage(MissingValueException.class, () -> queryString.get("a").get("b").get(3).longValue(),
379+
assertMessage(MissingValueException.class,
380+
() -> queryString.get("a").get("b").get(3).longValue(),
356381
"Missing value: 'a.b[3]'");
357382
});
358383

tests/index.html

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

0 commit comments

Comments
 (0)