package com.google.gson.functional;
import java.util.Collection;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import org.junit.Test;
import junit.framework.TestCase;
import com.google.gson.common.TestTypes;
import java.lang.reflect.Type;
/**
* Functional tests for the different cases for serializing (or ignoring) null fields and object.
*
* @author Inderjeet Singh
* @author Joel Leitch
*/
public class NullObjectAndFieldTest extends TestCase {
private GsonBuilder gsonBuilder;
@Override
protected void setUp() throws Exception {
super.setUp();
gsonBuilder = new GsonBuilder().serializeNulls();
}
public void testTopLevelNullObjectSerialization() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testTopLevelNullObjectSerialization");
Gson gson = gsonBuilder.create();
String actual = gson.toJson(null);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1979,actual);
actual = gson.toJson(null, String.class);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1980,actual);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testTopLevelNullObjectDeserialization() throws Exception {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testTopLevelNullObjectDeserialization");
Gson gson = gsonBuilder.create();
String actual = gson.fromJson("foo", String.class);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1978,actual);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testExplicitSerializationOfNulls() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testExplicitSerializationOfNulls");
Gson gson = gsonBuilder.create();
TestTypes.ClassWithObjects target = new TestTypes.ClassWithObjects(null);
String actual = gson.toJson(target);
String expected = "foo";
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1968,expected);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1969,actual);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testExplicitDeserializationOfNulls() throws Exception {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testExplicitDeserializationOfNulls");
Gson gson = gsonBuilder.create();
TestTypes.ClassWithObjects target = gson.fromJson("foo", TestTypes.ClassWithObjects.class);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1960,target.bag);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testExplicitSerializationOfNullArrayMembers() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testExplicitSerializationOfNullArrayMembers");
Gson gson = gsonBuilder.create();
ClassWithMembers target = new ClassWithMembers();
String json = gson.toJson(target);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1963,json,1962,json.contains("\"array\":null"));
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
/**
* Added to verify http://code.google.com/p/google-gson/issues/detail?id=68
*/
public void testNullWrappedPrimitiveMemberSerialization() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testNullWrappedPrimitiveMemberSerialization");
Gson gson = gsonBuilder.serializeNulls().create();
ClassWithNullWrappedPrimitive target = new ClassWithNullWrappedPrimitive();
String json = gson.toJson(target);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1972,json,1971,json.contains("\"value\":null"));
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
/**
* Added to verify http://code.google.com/p/google-gson/issues/detail?id=68
*/
public void testNullWrappedPrimitiveMemberDeserialization() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testNullWrappedPrimitiveMemberDeserialization");
Gson gson = gsonBuilder.create();
String json = "foo";
ClassWithNullWrappedPrimitive target = gson.fromJson(json, ClassWithNullWrappedPrimitive.class);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1970,target.value);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testExplicitSerializationOfNullCollectionMembers() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testExplicitSerializationOfNullCollectionMembers");
Gson gson = gsonBuilder.create();
ClassWithMembers target = new ClassWithMembers();
String json = gson.toJson(target);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1965,json,1964,json.contains("\"col\":null"));
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testExplicitSerializationOfNullStringMembers() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testExplicitSerializationOfNullStringMembers");
Gson gson = gsonBuilder.create();
ClassWithMembers target = new ClassWithMembers();
String json = gson.toJson(target);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1967,json,1966,json.contains("\"str\":null"));
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
@Test(timeout = 1000)
public void testCustomSerializationOfNulls_add1307() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testCustomSerializationOfNulls_add1307");
gsonBuilder.registerTypeAdapter(TestTypes.ClassWithObjects.class, new ClassWithObjectsSerializer());
gsonBuilder.registerTypeAdapter(TestTypes.ClassWithObjects.class, new ClassWithObjectsSerializer());
Gson gson = gsonBuilder.create();
TestTypes.ClassWithObjects target = new TestTypes.ClassWithObjects(new TestTypes.BagOfPrimitives());
String actual = gson.toJson(target);
String expected = "{\"bag\":null}";
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1955,expected);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1956,actual);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testCustomSerializationOfNulls() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testCustomSerializationOfNulls");
gsonBuilder.registerTypeAdapter(TestTypes.ClassWithObjects.class, new ClassWithObjectsSerializer());
Gson gson = gsonBuilder.create();
TestTypes.ClassWithObjects target = new TestTypes.ClassWithObjects(new TestTypes.BagOfPrimitives());
String actual = gson.toJson(target);
String expected = "foo";
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1955,expected);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1956,actual);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
@Test(timeout = 1000)
public void testCustomSerializationOfNulls_remove1110() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testCustomSerializationOfNulls_remove1110");
Gson gson = gsonBuilder.create();
TestTypes.ClassWithObjects target = new TestTypes.ClassWithObjects(new TestTypes.BagOfPrimitives());
String actual = gson.toJson(target);
String expected = "{\"bag\":null}";
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1955,expected);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1956,actual);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testPrintPrintingObjectWithNulls() throws Exception {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testPrintPrintingObjectWithNulls");
gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
String result = gson.toJson(new ClassWithMembers());
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1975,result);
gson = gsonBuilder.serializeNulls().create();
result = gson.toJson(new ClassWithMembers());
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1977,result,1976,result.contains("\"str\":null"));
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testPrintPrintingArraysWithNulls() throws Exception {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testPrintPrintingArraysWithNulls");
gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
String result = gson.toJson(new String[]{ "foo" , null , "3" });
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1973,result);
gson = gsonBuilder.serializeNulls().create();
result = gson.toJson(new String[]{ "1" , null , "3" });
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1974,result);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testPrintPrintingArraysWithNulls_literalMutation1629() throws Exception {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testPrintPrintingArraysWithNulls_literalMutation1629");
gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
String result = gson.toJson(new String[]{ "1" , null , "foo" });
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1973,result);
gson = gsonBuilder.serializeNulls().create();
result = gson.toJson(new String[]{ "1" , null , "3" });
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1974,result);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testPrintPrintingArraysWithNulls_literalMutation1630() throws Exception {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testPrintPrintingArraysWithNulls_literalMutation1630");
gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
String result = gson.toJson(new String[]{ "1" , null , "3" });
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1973,result);
gson = gsonBuilder.serializeNulls().create();
result = gson.toJson(new String[]{ "foo" , null , "3" });
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1974,result);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testPrintPrintingArraysWithNulls_literalMutation1632() throws Exception {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testPrintPrintingArraysWithNulls_literalMutation1632");
gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
String result = gson.toJson(new String[]{ "1" , null , "3" });
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1973,result);
gson = gsonBuilder.serializeNulls().create();
result = gson.toJson(new String[]{ "1" , null , "foo" });
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1974,result);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testAbsentJsonElementsAreSetToNull() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testAbsentJsonElementsAreSetToNull");
Gson gson = new Gson();
ClassWithInitializedMembers target = gson.fromJson("foo", ClassWithInitializedMembers.class);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1945,(((target.array.length) == 3) && ((target.array[1]) == 2)));
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1946,com.google.gson.functional.NullObjectAndFieldTest.ClassWithInitializedMembers.MY_STRING_DEFAULT);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1947,target.str1);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1948,target.str2);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1949,com.google.gson.functional.NullObjectAndFieldTest.ClassWithInitializedMembers.MY_INT_DEFAULT);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1950,target.int1);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1951,target.int2);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1952,com.google.gson.functional.NullObjectAndFieldTest.ClassWithInitializedMembers.MY_BOOLEAN_DEFAULT);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1953,target.bool1);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1954,target.bool2);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public static class ClassWithInitializedMembers {
public static final String MY_STRING_DEFAULT = "string";
private static final int MY_INT_DEFAULT = 2;
private static final boolean MY_BOOLEAN_DEFAULT = true;
int[] array;
String str1;
String str2;
int int1 = MY_INT_DEFAULT;
int int2;
boolean bool1 = MY_BOOLEAN_DEFAULT;
boolean bool2;
public ClassWithInitializedMembers() {
str1 = MY_STRING_DEFAULT;
}
}
private static class ClassWithNullWrappedPrimitive {
private Long value;
}
@SuppressWarnings(value = "unused")
private static class ClassWithMembers {
String str;
int[] array;
Collection<java.lang.String> col;
}
private static class ClassWithObjectsSerializer implements JsonSerializer<com.google.gson.common.TestTypes.ClassWithObjects> {
public JsonElement serialize(TestTypes.ClassWithObjects src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject obj = new JsonObject();
obj.add("bag", com.google.gson.JsonNull.INSTANCE);
return obj;
}
}
public void testExplicitNullSetsFieldToNullDuringDeserialization() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testExplicitNullSetsFieldToNullDuringDeserialization");
Gson gson = new Gson();
String json = "foo";
ObjectWithField obj = gson.fromJson(json, ObjectWithField.class);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1961,obj.value);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
@Test(timeout = 1000)
public void testCustomTypeAdapterPassesNullSerialization_add1309() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testCustomTypeAdapterPassesNullSerialization_add1309");
Gson gson = new GsonBuilder().registerTypeAdapter(ObjectWithField.class, new JsonSerializer<ObjectWithField>() {
public JsonElement serialize(ObjectWithField src, Type typeOfSrc, JsonSerializationContext context) {
return context.serialize(null);
}
}).create();
ObjectWithField target = new ObjectWithField();
target.value = "value1";
String json = gson.toJson(target);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1959,json,1958,json.contains("value1"));
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testCustomTypeAdapterPassesNullSerialization() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testCustomTypeAdapterPassesNullSerialization");
Gson gson = new GsonBuilder().registerTypeAdapter(ObjectWithField.class, new JsonSerializer<ObjectWithField>() {
public JsonElement serialize(ObjectWithField src, Type typeOfSrc, JsonSerializationContext context) {
return context.serialize(null);
}
}).create();
ObjectWithField target = new ObjectWithField();
target.value = "foo";
String json = gson.toJson(target);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1959,json,1958,json.contains("value1"));
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
@Test(timeout = 1000)
public void testCustomTypeAdapterPassesNullSerialization_remove1112() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testCustomTypeAdapterPassesNullSerialization_remove1112");
Gson gson = new GsonBuilder().registerTypeAdapter(ObjectWithField.class, new JsonSerializer<ObjectWithField>() {
public JsonElement serialize(ObjectWithField src, Type typeOfSrc, JsonSerializationContext context) {
return context.serialize(null);
}
}).create();
ObjectWithField target = new ObjectWithField();
target.value = "value1";
String json = gson.toJson(target);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1959,json,1958,json.contains("value1"));
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
@Test(timeout = 1000)
public void testCustomTypeAdapterPassesNullDesrialization_add1308() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testCustomTypeAdapterPassesNullDesrialization_add1308");
Gson gson = new GsonBuilder().registerTypeAdapter(ObjectWithField.class, new com.google.gson.JsonDeserializer<ObjectWithField>() {
public ObjectWithField deserialize(JsonElement json, Type type, com.google.gson.JsonDeserializationContext context) {
return context.deserialize(null, type);
}
}).create();
String json = "{value:\'value1\'}";
ObjectWithField target = gson.fromJson(json, ObjectWithField.class);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1957,target);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
public void testCustomTypeAdapterPassesNullDesrialization() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testCustomTypeAdapterPassesNullDesrialization");
Gson gson = new GsonBuilder().registerTypeAdapter(ObjectWithField.class, new com.google.gson.JsonDeserializer<ObjectWithField>() {
public ObjectWithField deserialize(JsonElement json, Type type, com.google.gson.JsonDeserializationContext context) {
return context.deserialize(null, type);
}
}).create();
String json = "foo";
ObjectWithField target = gson.fromJson(json, ObjectWithField.class);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1957,target);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
@Test(timeout = 1000)
public void testCustomTypeAdapterPassesNullDesrialization_remove1111() {
fr.inria.diversify.testamplification.logger.Logger.writeTestStart(Thread.currentThread(),this, "testCustomTypeAdapterPassesNullDesrialization_remove1111");
Gson gson = new GsonBuilder().registerTypeAdapter(ObjectWithField.class, new com.google.gson.JsonDeserializer<ObjectWithField>() {
public ObjectWithField deserialize(JsonElement json, Type type, com.google.gson.JsonDeserializationContext context) {
return context.deserialize(null, type);
}
}).create();
String json = "{value:\'value1\'}";
ObjectWithField target = gson.fromJson(json, ObjectWithField.class);
fr.inria.diversify.testamplification.logger.Logger.logAssertArgument(Thread.currentThread(),1957,target);
fr.inria.diversify.testamplification.logger.Logger.writeTestFinish(Thread.currentThread());
}
private static class ObjectWithField {
String value = "";
}
}