Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,6 @@
import java.lang.reflect.Array;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class TypeJsonDeserializer extends JsonDeserializer<Type> {
Expand Down Expand Up @@ -243,8 +242,8 @@ private static List<Type> parse(final ClassLoader loader, final String type, fin
if (ch == '<') {
Type owner = BytecodeRouteParser.loadType(loader, singleType.toString());
List<Type> parameters = parse(loader, type, i + 1);
return Arrays.asList(
Types.newParameterizedType(owner, parameters.toArray(new Type[parameters.size()])));
types.add(Types.newParameterizedType(owner, parameters.toArray(new Type[parameters.size()])));
return types;
} else if (ch == ',') {
Type element = BytecodeRouteParser.loadType(loader, singleType.toString());
types.add(element);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package org.jooby.internal.apitool;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.util.Types;
import org.junit.Test;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.UUID;

import static org.junit.Assert.assertEquals;

public class ComplexMapTypesTest {

public static class TypeWrapper {
private Type type;

public Type getType() {
return type;
}

public void setType(Type type) {
this.type = type;
}
}

@Test
public void shouldDeserializeMapWithListProperly() throws Exception {
ObjectMapper mapper = BytecodeRouteParser.mapper;
TypeWrapper expected = new TypeWrapper();
ParameterizedType type = Types.mapOf(UUID.class, Types.listOf(Integer.class));
expected.setType(type);
String json = mapper.writeValueAsString(expected);
TypeWrapper actual = mapper.readValue(json, TypeWrapper.class);
assertEquals(expected.getType(), actual.getType());
}

@Test
public void shouldDeserializeMapWithMapWithListProperly() throws Exception {
ObjectMapper mapper = BytecodeRouteParser.mapper;
TypeWrapper expected = new TypeWrapper();
ParameterizedType type = Types.mapOf(UUID.class, Types.mapOf(UUID.class, Types.listOf(Integer.class)));
expected.setType(type);
String json = mapper.writeValueAsString(expected);
TypeWrapper actual = mapper.readValue(json, TypeWrapper.class);
assertEquals(expected.getType(), actual.getType());
}

@Test
public void shouldDeserializeListWithMapWithListProperly() throws Exception {
ObjectMapper mapper = BytecodeRouteParser.mapper;
TypeWrapper expected = new TypeWrapper();
ParameterizedType type = Types.listOf(Types.mapOf(UUID.class, Types.mapOf(UUID.class, Types.listOf(Integer.class))));
expected.setType(type);
String json = mapper.writeValueAsString(expected);
TypeWrapper actual = mapper.readValue(json, TypeWrapper.class);
assertEquals(expected.getType(), actual.getType());
}

}