Added complex map serialization tests in case the Map is defined with TypeVariables.

This commit is contained in:
Inderjeet Singh 2011-05-30 09:38:38 +00:00
parent 61b9a2cb17
commit 60e7c481fd

View File

@ -16,14 +16,17 @@
package com.google.gson.functional; package com.google.gson.functional;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import junit.framework.TestCase;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException; import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.LinkedHashMap;
import java.util.Map;
import junit.framework.TestCase;
public class MapAsArrayTypeAdapterTest extends TestCase { public class MapAsArrayTypeAdapterTest extends TestCase {
@ -95,6 +98,26 @@ public class MapAsArrayTypeAdapterTest extends TestCase {
assertEquals(original, gson.<Map<Point, String>>fromJson(json, type)); assertEquals(original, gson.<Map<Point, String>>fromJson(json, type));
} }
public void testMapWithTypeVariableSerialization() {
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
PointWithProperty<Point> map = new PointWithProperty<Point>();
map.map.put(new Point(2, 3), new Point(4, 5));
Type type = new TypeToken<PointWithProperty<Point>>(){}.getType();
String json = gson.toJson(map, type);
assertEquals("{\"map\":[[{\"x\":2,\"y\":3},{\"x\":4,\"y\":5}]]}", json);
}
public void testMapWithTypeVariableDeserialization() {
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
String json = "{map:[[{x:2,y:3},{x:4,y:5}]]}";
Type type = new TypeToken<PointWithProperty<Point>>(){}.getType();
PointWithProperty<Point> map = gson.fromJson(json, type);
Point key = map.map.keySet().iterator().next();
Point value = map.map.values().iterator().next();
assertEquals(new Point(2, 3), key);
assertEquals(new Point(4, 5), value);
}
static class Point { static class Point {
int x; int x;
int y; int y;
@ -113,4 +136,8 @@ public class MapAsArrayTypeAdapterTest extends TestCase {
return "(" + x + "," + y + ")"; return "(" + x + "," + y + ")";
} }
} }
static class PointWithProperty<T> {
Map<Point, T> map = new HashMap<Point, T>();
}
} }