From 2e6b22fa2ef077b630edb36292e002823a54cfab Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Sun, 1 Jan 2012 15:57:29 +0000 Subject: [PATCH] Test that GraphAdapterBuilder works with multiple entity types. --- .../gson/graph/GraphAdapterBuilderTest.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java b/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java index 9b69e03e..8a1d7cdb 100644 --- a/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java +++ b/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java @@ -130,6 +130,45 @@ public final class GraphAdapterBuilderTest extends TestCase { assertEquals(Collections.emptyList(), listOfLists.get(1)); } + public void testSerializationWithMultipleTypes() { + Company google = new Company("Google"); + new Employee("Jesse", google); + new Employee("Joel", google); + + GsonBuilder gsonBuilder = new GsonBuilder(); + new GraphAdapterBuilder() + .addType(Company.class) + .addType(Employee.class) + .registerOn(gsonBuilder); + Gson gson = gsonBuilder.create(); + + assertEquals("{'0x1':{'name':'Google','employees':['0x2','0x3']}," + + "'0x2':{'name':'Jesse','company':'0x1'}," + + "'0x3':{'name':'Joel','company':'0x1'}}", + gson.toJson(google).replace('"', '\'')); + } + + public void testDeserializationWithMultipleTypes() { + GsonBuilder gsonBuilder = new GsonBuilder(); + new GraphAdapterBuilder() + .addType(Company.class) + .addType(Employee.class) + .registerOn(gsonBuilder); + Gson gson = gsonBuilder.create(); + + String json = "{'0x1':{'name':'Google','employees':['0x2','0x3']}," + + "'0x2':{'name':'Jesse','company':'0x1'}," + + "'0x3':{'name':'Joel','company':'0x1'}}"; + Company company = gson.fromJson(json, Company.class); + assertEquals("Google", company.name); + Employee jesse = company.employees.get(0); + assertEquals("Jesse", jesse.name); + assertEquals(company, jesse.company); + Employee joel = company.employees.get(1); + assertEquals("Joel", joel.name); + assertEquals(company, joel.company); + } + static class Roshambo { String name; Roshambo beats; @@ -137,4 +176,22 @@ public final class GraphAdapterBuilderTest extends TestCase { this.name = name; } } + + static class Employee { + final String name; + final Company company; + Employee(String name, Company company) { + this.name = name; + this.company = company; + this.company.employees.add(this); + } + } + + static class Company { + final String name; + final List employees = new ArrayList(); + Company(String name) { + this.name = name; + } + } }