Skip to content

Commit 8cb7fa1

Browse files
committed
build: even more unit test for core + bug fixing
- fix awful type cast on ValueFactory - fix duration parsing precision
1 parent 964dea4 commit 8cb7fa1

7 files changed

Lines changed: 800 additions & 693 deletions

File tree

jooby/src/main/java/io/jooby/value/StandardConverter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,8 @@ public Object convert(Type type, Value value, ConversionHint hint) {
216216
try {
217217
return java.time.Duration.parse(value.value());
218218
} catch (DateTimeParseException x) {
219-
var millis = MILLISECONDS.convert(parseDuration(value.value()), NANOSECONDS);
220-
return java.time.Duration.ofMillis(millis);
219+
var nanos = parseDuration(value.value());
220+
return java.time.Duration.ofNanos(nanos);
221221
}
222222
}
223223

jooby/src/main/java/io/jooby/value/ValueFactory.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,28 @@ private <T> T convertInternal(Type type, Value value, ConversionHint hint) {
175175
return (T) converter.convert(type, value, hint);
176176
}
177177
var rawType = $Types.getRawType(type);
178+
178179
// Is it a container?
179180
if (List.class.isAssignableFrom(rawType)) {
180-
return (T) List.of(convert($Types.parameterizedType0(type), value));
181+
Object element = convert($Types.parameterizedType0(type), value);
182+
return (T)
183+
(element == null
184+
? java.util.Collections.emptyList()
185+
: java.util.Collections.singletonList(element));
186+
181187
} else if (Set.class.isAssignableFrom(rawType)) {
182-
return (T) Set.of(convert($Types.parameterizedType0(type), value));
188+
Object element = convert($Types.parameterizedType0(type), value);
189+
return (T)
190+
(element == null
191+
? java.util.Collections.emptySet()
192+
: java.util.Collections.singleton(element));
193+
183194
} else if (Optional.class.isAssignableFrom(rawType)) {
184-
return (T) Optional.of(convert($Types.parameterizedType0(type), value));
195+
if (value.isMissing()) {
196+
return (T) Optional.empty();
197+
}
198+
Object element = convert($Types.parameterizedType0(type), value);
199+
return (T) Optional.ofNullable(element);
185200
} else {
186201
// dynamic conversion
187202
if (Enum.class.isAssignableFrom(rawType)) {

0 commit comments

Comments
 (0)