From d798d6210082fec706c12fde07311a9e270a797e Mon Sep 17 00:00:00 2001 From: Maicol <79454487+MaicolAntali@users.noreply.github.com> Date: Thu, 22 Dec 2022 15:04:16 +0100 Subject: [PATCH] Port tests from JUnit 3 to JUnit 4 (#2294) * Port tests from JUnit 3 to JUnit 4 * Port tests from JUnit 3 to JUnit 4 * Add `@Test` above `@Ignore` --- .../gson/interceptors/InterceptorTest.java | 19 +- .../PostConstructAdapterFactoryTest.java | 13 +- .../RuntimeTypeAdapterFactoryTest.java | 23 +- .../typeadapters/UtcDateTypeAdapterTest.java | 13 +- .../java/com/google/gson/CommentsTest.java | 7 +- .../DefaultInetAddressTypeAdapterTest.java | 14 +- .../gson/DefaultMapJsonSerializerTest.java | 9 +- ...ExposeAnnotationExclusionStrategyTest.java | 15 +- .../com/google/gson/FieldAttributesTest.java | 20 +- .../com/google/gson/GenericArrayTypeTest.java | 17 +- .../com/google/gson/GsonTypeAdapterTest.java | 19 +- .../gson/InnerClassExclusionStrategyTest.java | 11 +- .../google/gson/JavaSerializationTest.java | 15 +- .../java/com/google/gson/JsonNullTest.java | 8 +- .../java/com/google/gson/JsonParserTest.java | 27 ++- .../com/google/gson/JsonPrimitiveTest.java | 36 ++- .../gson/LongSerializationPolicyTest.java | 14 +- .../java/com/google/gson/MixedStreamTest.java | 21 +- .../google/gson/ObjectTypeAdapterTest.java | 13 +- .../gson/OverrideCoreTypeAdaptersTest.java | 9 +- .../google/gson/ParameterizedTypeTest.java | 18 +- .../com/google/gson/ToNumberPolicyTest.java | 18 +- .../com/google/gson/functional/ArrayTest.java | 44 +++- .../functional/CircularReferenceTest.java | 27 ++- .../gson/functional/CollectionTest.java | 42 +++- .../gson/functional/ConcurrencyTest.java | 45 ++-- .../functional/CustomDeserializerTest.java | 22 +- .../gson/functional/CustomSerializerTest.java | 24 +- .../functional/CustomTypeAdaptersTest.java | 39 +++- .../functional/DefaultTypeAdaptersTest.java | 78 ++++++- .../functional/DelegateTypeAdapterTest.java | 20 +- .../com/google/gson/functional/EnumTest.java | 30 ++- .../functional/EnumWithObfuscatedTest.java | 15 +- .../google/gson/functional/EscapingTest.java | 19 +- .../ExclusionStrategyFunctionalTest.java | 24 +- .../gson/functional/ExposeFieldsTest.java | 25 ++- .../gson/functional/FieldExclusionTest.java | 16 +- .../gson/functional/FieldNamingTest.java | 11 +- .../GsonVersionDiagnosticsTest.java | 16 +- .../gson/functional/InheritanceTest.java | 30 ++- .../gson/functional/InstanceCreatorTest.java | 13 +- .../google/gson/functional/InterfaceTest.java | 15 +- .../functional/InternationalizationTest.java | 18 +- .../JavaUtilConcurrentAtomicTest.java | 28 ++- .../google/gson/functional/JavaUtilTest.java | 20 +- .../JsonAdapterAnnotationOnClassesTest.java | 18 +- .../JsonAdapterAnnotationOnFieldsTest.java | 24 +- ...JsonAdapterSerializerDeserializerTest.java | 14 +- .../gson/functional/JsonParserTest.java | 23 +- .../google/gson/functional/JsonTreeTest.java | 19 +- .../google/gson/functional/LeniencyTest.java | 16 +- .../functional/MapAsArrayTypeAdapterTest.java | 15 +- .../com/google/gson/functional/MapTest.java | 64 +++++- .../MoreSpecificTypeSerializationTest.java | 23 +- .../gson/functional/NamingPolicyTest.java | 31 ++- .../functional/NullObjectAndFieldTest.java | 37 +++- .../google/gson/functional/ObjectTest.java | 72 +++++- .../gson/functional/PrettyPrintingTest.java | 33 ++- .../functional/PrimitiveCharacterTest.java | 13 +- .../google/gson/functional/PrimitiveTest.java | 158 +++++++++++-- .../gson/functional/PrintFormattingTest.java | 16 +- .../gson/functional/RawSerializationTest.java | 21 +- .../gson/functional/ReadersWritersTest.java | 27 ++- ...ntimeTypeAdapterFactoryFunctionalTest.java | 13 +- .../google/gson/functional/SecurityTest.java | 19 +- .../gson/functional/SerializedNameTest.java | 10 +- .../functional/StreamingTypeAdaptersTest.java | 32 ++- .../google/gson/functional/StringTest.java | 31 ++- .../ToNumberPolicyFunctionalTest.java | 26 ++- .../gson/functional/TreeTypeAdaptersTest.java | 14 +- .../functional/TypeAdapterPrecedenceTest.java | 14 +- .../functional/TypeHierarchyAdapterTest.java | 9 +- .../gson/functional/TypeVariableTest.java | 9 +- .../gson/functional/UncategorizedTest.java | 25 ++- .../google/gson/internal/GsonTypesTest.java | 11 +- .../gson/internal/LazilyParsedNumberTest.java | 11 +- .../gson/internal/LinkedTreeMapTest.java | 26 ++- .../UnsafeAllocatorInstantiationTest.java | 11 +- .../bind/DefaultDateTypeAdapterTest.java | 32 ++- .../internal/bind/JsonElementReaderTest.java | 34 ++- .../internal/bind/JsonTreeReaderTest.java | 17 +- .../internal/bind/JsonTreeWriterTest.java | 26 ++- .../bind/RecursiveTypesResolveTest.java | 14 +- .../internal/bind/util/ISO8601UtilsTest.java | 36 +-- .../gson/internal/sql/SqlTypesGsonTest.java | 37 ++-- .../internal/sql/SqlTypesSupportTest.java | 8 +- .../google/gson/metrics/PerformanceTest.java | 43 +++- .../google/gson/reflect/TypeTokenTest.java | 19 +- .../regression/JsonAdapterNullSafeTest.java | 9 +- .../com/google/gson/regression/OSGiTest.java | 16 +- .../google/gson/stream/JsonReaderTest.java | 209 +++++++++++++++--- .../google/gson/stream/JsonWriterTest.java | 51 ++++- .../test/resources/testcases-proguard.conf | 2 +- .../functional/ProtosWithAnnotationsTest.java | 15 +- ...rotosWithComplexAndRepeatedFieldsTest.java | 17 +- .../ProtosWithPrimitiveTypesTest.java | 19 +- 96 files changed, 1916 insertions(+), 553 deletions(-) diff --git a/extras/src/test/java/com/google/gson/interceptors/InterceptorTest.java b/extras/src/test/java/com/google/gson/interceptors/InterceptorTest.java index 39d618a527..ee475c8e2f 100644 --- a/extras/src/test/java/com/google/gson/interceptors/InterceptorTest.java +++ b/extras/src/test/java/com/google/gson/interceptors/InterceptorTest.java @@ -15,6 +15,9 @@ */ package com.google.gson.interceptors; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; @@ -29,26 +32,27 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Unit tests for {@link Intercept} and {@link JsonPostDeserializer}. * * @author Inderjeet Singh */ -public final class InterceptorTest extends TestCase { +public final class InterceptorTest { private Gson gson; - @Override + @Before public void setUp() throws Exception { - super.setUp(); this.gson = new GsonBuilder() .registerTypeAdapterFactory(new InterceptorFactory()) .enableComplexMapKeySerialization() .create(); } + @Test public void testExceptionsPropagated() { try { gson.fromJson("{}", User.class); @@ -56,23 +60,27 @@ public void testExceptionsPropagated() { } catch (JsonParseException expected) {} } + @Test public void testTopLevelClass() { User user = gson.fromJson("{name:'bob',password:'pwd'}", User.class); assertEquals(User.DEFAULT_EMAIL, user.email); } + @Test public void testList() { List list = gson.fromJson("[{name:'bob',password:'pwd'}]", new TypeToken>(){}.getType()); User user = list.get(0); assertEquals(User.DEFAULT_EMAIL, user.email); } + @Test public void testCollection() { Collection list = gson.fromJson("[{name:'bob',password:'pwd'}]", new TypeToken>(){}.getType()); User user = list.iterator().next(); assertEquals(User.DEFAULT_EMAIL, user.email); } + @Test public void testMapKeyAndValues() { Type mapType = new TypeToken>(){}.getType(); try { @@ -86,11 +94,13 @@ public void testMapKeyAndValues() { assertEquals(Address.DEFAULT_FIRST_LINE, entry.getValue().firstLine); } + @Test public void testField() { UserGroup userGroup = gson.fromJson("{user:{name:'bob',password:'pwd'}}", UserGroup.class); assertEquals(User.DEFAULT_EMAIL, userGroup.user.email); } + @Test public void testCustomTypeAdapter() { Gson gson = new GsonBuilder() .registerTypeAdapter(User.class, new TypeAdapter() { @@ -114,6 +124,7 @@ public void testCustomTypeAdapter() { assertEquals(User.DEFAULT_EMAIL, userGroup.user.email); } + @Test public void testDirectInvocationOfTypeAdapter() throws Exception { TypeAdapter adapter = gson.getAdapter(UserGroup.class); UserGroup userGroup = adapter.fromJson("{\"user\":{\"name\":\"bob\",\"password\":\"pwd\"}}"); diff --git a/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java b/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java index 4ade154fec..65053bacbf 100644 --- a/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java +++ b/extras/src/test/java/com/google/gson/typeadapters/PostConstructAdapterFactoryTest.java @@ -16,15 +16,19 @@ package com.google.gson.typeadapters; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.util.Arrays; import java.util.List; import javax.annotation.PostConstruct; -import junit.framework.TestCase; +import org.junit.Test; -public class PostConstructAdapterFactoryTest extends TestCase { - public void test() throws Exception { +public class PostConstructAdapterFactoryTest { + @Test + public void test() throws Exception { Gson gson = new GsonBuilder() .registerTypeAdapterFactory(new PostConstructAdapterFactory()) .create(); @@ -37,7 +41,8 @@ public void test() throws Exception { } } - public void testList() { + @Test + public void testList() { MultipleSandwiches sandwiches = new MultipleSandwiches(Arrays.asList( new Sandwich("white", "cheddar"), new Sandwich("whole wheat", "swiss"))); diff --git a/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactoryTest.java b/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactoryTest.java index 5159001c97..1221b47bcc 100644 --- a/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactoryTest.java +++ b/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactoryTest.java @@ -16,14 +16,20 @@ package com.google.gson.typeadapters; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; import com.google.gson.TypeAdapterFactory; -import junit.framework.TestCase; +import org.junit.Test; -public final class RuntimeTypeAdapterFactoryTest extends TestCase { +public final class RuntimeTypeAdapterFactoryTest { + @Test public void testRuntimeTypeAdapter() { RuntimeTypeAdapterFactory rta = RuntimeTypeAdapterFactory.of( BillingInstrument.class) @@ -41,6 +47,7 @@ public void testRuntimeTypeAdapter() { assertTrue(deserialized instanceof CreditCard); } + @Test public void testRuntimeTypeAdapterRecognizeSubtypes() { // We don't have an explicit factory for CreditCard.class, but we do have one for // BillingInstrument.class that has recognizeSubtypes(). So it should recognize CreditCard, and @@ -62,6 +69,7 @@ public void testRuntimeTypeAdapterRecognizeSubtypes() { assertTrue(deserialized instanceof CreditCard); } + @Test public void testRuntimeTypeIsBaseType() { TypeAdapterFactory rta = RuntimeTypeAdapterFactory.of( BillingInstrument.class) @@ -78,6 +86,7 @@ public void testRuntimeTypeIsBaseType() { assertEquals("Jesse", deserialized.ownerName); } + @Test public void testNullBaseType() { try { RuntimeTypeAdapterFactory.of(null); @@ -86,6 +95,7 @@ public void testNullBaseType() { } } + @Test public void testNullTypeFieldName() { try { RuntimeTypeAdapterFactory.of(BillingInstrument.class, null); @@ -94,6 +104,7 @@ public void testNullTypeFieldName() { } } + @Test public void testNullSubtype() { RuntimeTypeAdapterFactory rta = RuntimeTypeAdapterFactory.of( BillingInstrument.class); @@ -104,6 +115,7 @@ public void testNullSubtype() { } } + @Test public void testNullLabel() { RuntimeTypeAdapterFactory rta = RuntimeTypeAdapterFactory.of( BillingInstrument.class); @@ -114,6 +126,7 @@ public void testNullLabel() { } } + @Test public void testDuplicateSubtype() { RuntimeTypeAdapterFactory rta = RuntimeTypeAdapterFactory.of( BillingInstrument.class); @@ -125,6 +138,7 @@ public void testDuplicateSubtype() { } } + @Test public void testDuplicateLabel() { RuntimeTypeAdapterFactory rta = RuntimeTypeAdapterFactory.of( BillingInstrument.class); @@ -136,6 +150,7 @@ public void testDuplicateLabel() { } } + @Test public void testDeserializeMissingTypeField() { TypeAdapterFactory billingAdapter = RuntimeTypeAdapterFactory.of(BillingInstrument.class) .registerSubtype(CreditCard.class); @@ -149,6 +164,7 @@ public void testDeserializeMissingTypeField() { } } + @Test public void testDeserializeMissingSubtype() { TypeAdapterFactory billingAdapter = RuntimeTypeAdapterFactory.of(BillingInstrument.class) .registerSubtype(BankTransfer.class); @@ -162,6 +178,7 @@ public void testDeserializeMissingSubtype() { } } + @Test public void testSerializeMissingSubtype() { TypeAdapterFactory billingAdapter = RuntimeTypeAdapterFactory.of(BillingInstrument.class) .registerSubtype(BankTransfer.class); @@ -175,6 +192,7 @@ public void testSerializeMissingSubtype() { } } + @Test public void testSerializeCollidingTypeFieldName() { TypeAdapterFactory billingAdapter = RuntimeTypeAdapterFactory.of(BillingInstrument.class, "cvv") .registerSubtype(CreditCard.class); @@ -188,6 +206,7 @@ public void testSerializeCollidingTypeFieldName() { } } + @Test public void testSerializeWrappedNullValue() { TypeAdapterFactory billingAdapter = RuntimeTypeAdapterFactory.of(BillingInstrument.class) .registerSubtype(CreditCard.class) diff --git a/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java b/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java index fe4104fb1c..b520183528 100644 --- a/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java +++ b/extras/src/test/java/com/google/gson/typeadapters/UtcDateTypeAdapterTest.java @@ -16,6 +16,9 @@ package com.google.gson.typeadapters; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; @@ -24,13 +27,14 @@ import java.util.Date; import java.util.Locale; import java.util.TimeZone; -import junit.framework.TestCase; +import org.junit.Test; -public final class UtcDateTypeAdapterTest extends TestCase { +public final class UtcDateTypeAdapterTest { private final Gson gson = new GsonBuilder() .registerTypeAdapter(Date.class, new UtcDateTypeAdapter()) .create(); + @Test public void testLocalTimeZone() { Date expected = new Date(); String json = gson.toJson(expected); @@ -38,6 +42,7 @@ public void testLocalTimeZone() { assertEquals(expected.getTime(), actual.getTime()); } + @Test public void testDifferentTimeZones() { for (String timeZone : TimeZone.getAvailableIDs()) { Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(timeZone)); @@ -53,6 +58,7 @@ public void testDifferentTimeZones() { * JDK 1.7 introduced support for XXX format to indicate UTC date. But Android is older JDK. * We want to make sure that this date is parseable in Android. */ + @Test public void testUtcDatesOnJdkBefore1_7() { Gson gson = new GsonBuilder() .registerTypeAdapter(Date.class, new UtcDateTypeAdapter()) @@ -60,6 +66,7 @@ public void testUtcDatesOnJdkBefore1_7() { gson.fromJson("'2014-12-05T04:00:00.000Z'", Date.class); } + @Test public void testUtcWithJdk7Default() { Date expected = new Date(); SimpleDateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.US); @@ -71,11 +78,13 @@ public void testUtcWithJdk7Default() { assertEquals(expected.getTime(), actual.getTime()); } + @Test public void testNullDateSerialization() { String json = gson.toJson(null, Date.class); assertEquals("null", json); } + @Test public void testWellFormedParseException() { try { gson.fromJson("2017-06-20T14:32:30", Date.class); diff --git a/gson/src/test/java/com/google/gson/CommentsTest.java b/gson/src/test/java/com/google/gson/CommentsTest.java index 306e5aff33..777cbea66e 100644 --- a/gson/src/test/java/com/google/gson/CommentsTest.java +++ b/gson/src/test/java/com/google/gson/CommentsTest.java @@ -16,19 +16,22 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; + import com.google.gson.reflect.TypeToken; import java.util.Arrays; import java.util.List; -import junit.framework.TestCase; +import org.junit.Test; /** * @author Jesse Wilson */ -public final class CommentsTest extends TestCase { +public final class CommentsTest { /** * Test for issue 212. */ + @Test public void testParseComments() { String json = "[\n" + " // this is a comment\n" diff --git a/gson/src/test/java/com/google/gson/DefaultInetAddressTypeAdapterTest.java b/gson/src/test/java/com/google/gson/DefaultInetAddressTypeAdapterTest.java index 6b853f5de8..ed8220f630 100644 --- a/gson/src/test/java/com/google/gson/DefaultInetAddressTypeAdapterTest.java +++ b/gson/src/test/java/com/google/gson/DefaultInetAddressTypeAdapterTest.java @@ -16,24 +16,26 @@ package com.google.gson; -import java.net.InetAddress; +import static org.junit.Assert.assertEquals; -import junit.framework.TestCase; +import java.net.InetAddress; +import org.junit.Before; +import org.junit.Test; /** * Unit tests for the default serializer/deserializer for the {@code InetAddress} type. * * @author Joel Leitch */ -public class DefaultInetAddressTypeAdapterTest extends TestCase { +public class DefaultInetAddressTypeAdapterTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testInetAddressSerializationAndDeserialization() throws Exception { InetAddress address = InetAddress.getByName("8.8.8.8"); String jsonAddress = gson.toJson(address); diff --git a/gson/src/test/java/com/google/gson/DefaultMapJsonSerializerTest.java b/gson/src/test/java/com/google/gson/DefaultMapJsonSerializerTest.java index 624b8637c0..cb0739fef9 100644 --- a/gson/src/test/java/com/google/gson/DefaultMapJsonSerializerTest.java +++ b/gson/src/test/java/com/google/gson/DefaultMapJsonSerializerTest.java @@ -16,11 +16,13 @@ package com.google.gson; +import static org.junit.Assert.assertTrue; + import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; -import junit.framework.TestCase; +import org.junit.Test; /** * Unit test for the default JSON map serialization object located in the @@ -28,9 +30,10 @@ * * @author Joel Leitch */ -public class DefaultMapJsonSerializerTest extends TestCase { +public class DefaultMapJsonSerializerTest { private Gson gson = new Gson(); + @Test public void testEmptyMapNoTypeSerialization() { Map emptyMap = new HashMap<>(); JsonElement element = gson.toJsonTree(emptyMap, emptyMap.getClass()); @@ -39,6 +42,7 @@ public void testEmptyMapNoTypeSerialization() { assertTrue(emptyMapJsonObject.entrySet().isEmpty()); } + @Test public void testEmptyMapSerialization() { Type mapType = new TypeToken>() { }.getType(); Map emptyMap = new HashMap<>(); @@ -49,6 +53,7 @@ public void testEmptyMapSerialization() { assertTrue(emptyMapJsonObject.entrySet().isEmpty()); } + @Test public void testNonEmptyMapSerialization() { Type mapType = new TypeToken>() { }.getType(); Map myMap = new HashMap<>(); diff --git a/gson/src/test/java/com/google/gson/ExposeAnnotationExclusionStrategyTest.java b/gson/src/test/java/com/google/gson/ExposeAnnotationExclusionStrategyTest.java index dd8a7a926b..fccda63a9b 100644 --- a/gson/src/test/java/com/google/gson/ExposeAnnotationExclusionStrategyTest.java +++ b/gson/src/test/java/com/google/gson/ExposeAnnotationExclusionStrategyTest.java @@ -16,50 +16,57 @@ package com.google.gson; -import com.google.gson.annotations.Expose; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import com.google.gson.annotations.Expose; import com.google.gson.internal.Excluder; -import junit.framework.TestCase; - import java.lang.reflect.Field; +import org.junit.Test; /** * Unit tests for GsonBuilder.REQUIRE_EXPOSE_DESERIALIZE. * * @author Joel Leitch */ -public class ExposeAnnotationExclusionStrategyTest extends TestCase { +public class ExposeAnnotationExclusionStrategyTest { private Excluder excluder = Excluder.DEFAULT.excludeFieldsWithoutExposeAnnotation(); + @Test public void testNeverSkipClasses() throws Exception { assertFalse(excluder.excludeClass(MockObject.class, true)); assertFalse(excluder.excludeClass(MockObject.class, false)); } + @Test public void testSkipNonAnnotatedFields() throws Exception { Field f = createFieldAttributes("hiddenField"); assertTrue(excluder.excludeField(f, true)); assertTrue(excluder.excludeField(f, false)); } + @Test public void testSkipExplicitlySkippedFields() throws Exception { Field f = createFieldAttributes("explicitlyHiddenField"); assertTrue(excluder.excludeField(f, true)); assertTrue(excluder.excludeField(f, false)); } + @Test public void testNeverSkipExposedAnnotatedFields() throws Exception { Field f = createFieldAttributes("exposedField"); assertFalse(excluder.excludeField(f, true)); assertFalse(excluder.excludeField(f, false)); } + @Test public void testNeverSkipExplicitlyExposedAnnotatedFields() throws Exception { Field f = createFieldAttributes("explicitlyExposedField"); assertFalse(excluder.excludeField(f, true)); assertFalse(excluder.excludeField(f, false)); } + @Test public void testDifferentSerializeAndDeserializeField() throws Exception { Field f = createFieldAttributes("explicitlyDifferentModeField"); assertFalse(excluder.excludeField(f, true)); diff --git a/gson/src/test/java/com/google/gson/FieldAttributesTest.java b/gson/src/test/java/com/google/gson/FieldAttributesTest.java index 31be3e286b..2cc362d249 100644 --- a/gson/src/test/java/com/google/gson/FieldAttributesTest.java +++ b/gson/src/test/java/com/google/gson/FieldAttributesTest.java @@ -16,11 +16,17 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.google.gson.reflect.TypeToken; import java.lang.reflect.Modifier; import java.lang.reflect.Type; import java.util.List; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Unit tests for the {@link FieldAttributes} class. @@ -28,16 +34,16 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class FieldAttributesTest extends TestCase { +public class FieldAttributesTest { private FieldAttributes fieldAttributes; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { fieldAttributes = new FieldAttributes(Foo.class.getField("bar")); } @SuppressWarnings("unused") + @Test public void testNullField() throws Exception { try { new FieldAttributes(null); @@ -45,10 +51,12 @@ public void testNullField() throws Exception { } catch (NullPointerException expected) { } } + @Test public void testDeclaringClass() throws Exception { assertEquals(Foo.class, fieldAttributes.getDeclaringClass()); } + @Test public void testModifiers() throws Exception { assertFalse(fieldAttributes.hasModifier(Modifier.STATIC)); assertFalse(fieldAttributes.hasModifier(Modifier.FINAL)); @@ -60,10 +68,12 @@ public void testModifiers() throws Exception { assertTrue(fieldAttributes.hasModifier(Modifier.TRANSIENT)); } + @Test public void testName() throws Exception { assertEquals("bar", fieldAttributes.getName()); } + @Test public void testDeclaredTypeAndClass() throws Exception { Type expectedType = new TypeToken>() {}.getType(); assertEquals(expectedType, fieldAttributes.getDeclaredType()); diff --git a/gson/src/test/java/com/google/gson/GenericArrayTypeTest.java b/gson/src/test/java/com/google/gson/GenericArrayTypeTest.java index 42acb8a2d9..58185486bd 100644 --- a/gson/src/test/java/com/google/gson/GenericArrayTypeTest.java +++ b/gson/src/test/java/com/google/gson/GenericArrayTypeTest.java @@ -16,14 +16,16 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + import com.google.gson.internal.$Gson$Types; import com.google.gson.reflect.TypeToken; - -import junit.framework.TestCase; - import java.lang.reflect.GenericArrayType; import java.lang.reflect.Type; import java.util.List; +import org.junit.Before; +import org.junit.Test; /** * Unit tests for the {@code GenericArrayType}s created by the {@link $Gson$Types} class. @@ -31,15 +33,15 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class GenericArrayTypeTest extends TestCase { +public class GenericArrayTypeTest { private GenericArrayType ourType; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { ourType = $Gson$Types.arrayOf($Gson$Types.newParameterizedTypeWithOwner(null, List.class, String.class)); } + @Test public void testOurTypeFunctionality() throws Exception { Type parameterizedType = new TypeToken>() {}.getType(); Type genericArrayType = new TypeToken[]>() {}.getType(); @@ -49,6 +51,7 @@ public void testOurTypeFunctionality() throws Exception { assertEquals(genericArrayType.hashCode(), ourType.hashCode()); } + @Test public void testNotEquals() throws Exception { Type differentGenericArrayType = new TypeToken[][]>() {}.getType(); assertFalse(differentGenericArrayType.equals(ourType)); diff --git a/gson/src/test/java/com/google/gson/GsonTypeAdapterTest.java b/gson/src/test/java/com/google/gson/GsonTypeAdapterTest.java index d92994fa48..0955d73f2f 100644 --- a/gson/src/test/java/com/google/gson/GsonTypeAdapterTest.java +++ b/gson/src/test/java/com/google/gson/GsonTypeAdapterTest.java @@ -16,11 +16,16 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; + import java.lang.reflect.Type; import java.math.BigInteger; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Contains numerous tests involving registered type converters with a Gson instance. @@ -28,18 +33,18 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class GsonTypeAdapterTest extends TestCase { +public class GsonTypeAdapterTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new GsonBuilder() .registerTypeAdapter(AtomicLong.class, new ExceptionTypeAdapter()) .registerTypeAdapter(AtomicInteger.class, new AtomicIntegerTypeAdapter()) .create(); } + @Test public void testDefaultTypeAdapterThrowsParseException() throws Exception { try { gson.fromJson("{\"abc\":123}", BigInteger.class); @@ -47,6 +52,7 @@ public void testDefaultTypeAdapterThrowsParseException() throws Exception { } catch (JsonParseException expected) { } } + @Test public void testTypeAdapterThrowsException() throws Exception { try { gson.toJson(new AtomicLong(0)); @@ -65,6 +71,7 @@ public void testTypeAdapterThrowsException() throws Exception { assertNull(gson.fromJson(JsonNull.INSTANCE, AtomicLong.class)); } + @Test public void testTypeAdapterProperlyConvertsTypes() throws Exception { int intialValue = 1; AtomicInteger atomicInt = new AtomicInteger(intialValue); @@ -75,6 +82,7 @@ public void testTypeAdapterProperlyConvertsTypes() throws Exception { assertEquals(intialValue, atomicInt.get()); } + @Test public void testTypeAdapterDoesNotAffectNonAdaptedTypes() throws Exception { String expected = "blah"; String actual = gson.toJson(expected); @@ -119,6 +127,7 @@ static class Concrete extends Abstract { } // https://groups.google.com/d/topic/google-gson/EBmOCa8kJPE/discussion + @Test public void testDeserializerForAbstractClass() { Concrete instance = new Concrete(); instance.a = "android"; diff --git a/gson/src/test/java/com/google/gson/InnerClassExclusionStrategyTest.java b/gson/src/test/java/com/google/gson/InnerClassExclusionStrategyTest.java index 86f7a62247..291abbf0c6 100644 --- a/gson/src/test/java/com/google/gson/InnerClassExclusionStrategyTest.java +++ b/gson/src/test/java/com/google/gson/InnerClassExclusionStrategyTest.java @@ -16,35 +16,42 @@ package com.google.gson; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import com.google.gson.internal.Excluder; import java.lang.reflect.Field; -import junit.framework.TestCase; +import org.junit.Test; /** * Unit test for GsonBuilder.EXCLUDE_INNER_CLASSES. * * @author Joel Leitch */ -public class InnerClassExclusionStrategyTest extends TestCase { +public class InnerClassExclusionStrategyTest { public InnerClass innerClass = new InnerClass(); public StaticNestedClass staticNestedClass = new StaticNestedClass(); private Excluder excluder = Excluder.DEFAULT.disableInnerClassSerialization(); + @Test public void testExcludeInnerClassObject() throws Exception { Class clazz = innerClass.getClass(); assertTrue(excluder.excludeClass(clazz, true)); } + @Test public void testExcludeInnerClassField() throws Exception { Field f = getClass().getField("innerClass"); assertTrue(excluder.excludeField(f, true)); } + @Test public void testIncludeStaticNestedClassObject() throws Exception { Class clazz = staticNestedClass.getClass(); assertFalse(excluder.excludeClass(clazz, true)); } + @Test public void testIncludeStaticNestedClassField() throws Exception { Field f = getClass().getField("staticNestedClass"); assertFalse(excluder.excludeField(f, true)); diff --git a/gson/src/test/java/com/google/gson/JavaSerializationTest.java b/gson/src/test/java/com/google/gson/JavaSerializationTest.java index 90da3e8572..9d6ce5880e 100644 --- a/gson/src/test/java/com/google/gson/JavaSerializationTest.java +++ b/gson/src/test/java/com/google/gson/JavaSerializationTest.java @@ -16,6 +16,8 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; + import com.google.gson.reflect.TypeToken; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -27,16 +29,17 @@ import java.util.Arrays; import java.util.List; import java.util.Map; -import junit.framework.TestCase; +import org.junit.Test; /** * Check that Gson doesn't return non-serializable data types. * * @author Jesse Wilson */ -public final class JavaSerializationTest extends TestCase { +public final class JavaSerializationTest { private final Gson gson = new Gson(); + @Test public void testMapIsSerializable() throws Exception { Type type = new TypeToken>() {}.getType(); Map map = gson.fromJson("{\"b\":1,\"c\":2,\"a\":3}", type); @@ -46,6 +49,7 @@ public void testMapIsSerializable() throws Exception { assertEquals(Arrays.asList("b", "c", "a"), new ArrayList<>(serialized.keySet())); } + @Test public void testListIsSerializable() throws Exception { Type type = new TypeToken>() {}.getType(); List list = gson.fromJson("[\"a\",\"b\",\"c\"]", type); @@ -53,13 +57,14 @@ public void testListIsSerializable() throws Exception { assertEquals(list, serialized); } + @Test public void testNumberIsSerializable() throws Exception { Type type = new TypeToken>() {}.getType(); List list = gson.fromJson("[1,3.14,6.673e-11]", type); List serialized = serializedCopy(list); - assertEquals(1.0, serialized.get(0).doubleValue()); - assertEquals(3.14, serialized.get(1).doubleValue()); - assertEquals(6.673e-11, serialized.get(2).doubleValue()); + assertEquals(1.0, serialized.get(0).doubleValue(), 0); + assertEquals(3.14, serialized.get(1).doubleValue(), 0); + assertEquals(6.673e-11, serialized.get(2).doubleValue(), 0); } @SuppressWarnings("unchecked") // Serialization promises to return the same type. diff --git a/gson/src/test/java/com/google/gson/JsonNullTest.java b/gson/src/test/java/com/google/gson/JsonNullTest.java index 6157e38765..7027798d04 100644 --- a/gson/src/test/java/com/google/gson/JsonNullTest.java +++ b/gson/src/test/java/com/google/gson/JsonNullTest.java @@ -16,21 +16,25 @@ package com.google.gson; +import static org.junit.Assert.assertSame; + import com.google.gson.common.MoreAsserts; -import junit.framework.TestCase; +import org.junit.Test; /** * @author Jesse Wilson */ -public final class JsonNullTest extends TestCase { +public final class JsonNullTest { @SuppressWarnings("deprecation") + @Test public void testEqualsAndHashcode() { MoreAsserts.assertEqualsAndHashCode(new JsonNull(), new JsonNull()); MoreAsserts.assertEqualsAndHashCode(new JsonNull(), JsonNull.INSTANCE); MoreAsserts.assertEqualsAndHashCode(JsonNull.INSTANCE, JsonNull.INSTANCE); } + @Test public void testDeepCopy() { @SuppressWarnings("deprecation") JsonNull a = new JsonNull(); diff --git a/gson/src/test/java/com/google/gson/JsonParserTest.java b/gson/src/test/java/com/google/gson/JsonParserTest.java index a05aa32296..1c7fe29bcf 100644 --- a/gson/src/test/java/com/google/gson/JsonParserTest.java +++ b/gson/src/test/java/com/google/gson/JsonParserTest.java @@ -16,23 +16,27 @@ package com.google.gson; -import java.io.CharArrayReader; -import java.io.CharArrayWriter; -import java.io.IOException; -import java.io.StringReader; -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import com.google.gson.common.TestTypes.BagOfPrimitives; import com.google.gson.internal.Streams; import com.google.gson.stream.JsonReader; +import java.io.CharArrayReader; +import java.io.CharArrayWriter; +import java.io.IOException; +import java.io.StringReader; +import org.junit.Test; /** * Unit test for {@link JsonParser} * * @author Inderjeet Singh */ -public class JsonParserTest extends TestCase { +public class JsonParserTest { + @Test public void testParseInvalidJson() { try { JsonParser.parseString("[[]"); @@ -40,6 +44,7 @@ public void testParseInvalidJson() { } catch (JsonSyntaxException expected) { } } + @Test public void testParseUnquotedStringArrayFails() { JsonElement element = JsonParser.parseString("[a,b,c]"); assertEquals("a", element.getAsJsonArray().get(0).getAsString()); @@ -48,6 +53,7 @@ public void testParseUnquotedStringArrayFails() { assertEquals(3, element.getAsJsonArray().size()); } + @Test public void testParseString() { String json = "{a:10,b:'c'}"; JsonElement e = JsonParser.parseString(json); @@ -56,21 +62,25 @@ public void testParseString() { assertEquals("c", e.getAsJsonObject().get("b").getAsString()); } + @Test public void testParseEmptyString() { JsonElement e = JsonParser.parseString("\" \""); assertTrue(e.isJsonPrimitive()); assertEquals(" ", e.getAsString()); } + @Test public void testParseEmptyWhitespaceInput() { JsonElement e = JsonParser.parseString(" "); assertTrue(e.isJsonNull()); } + @Test public void testParseUnquotedSingleWordStringFails() { assertEquals("Test", JsonParser.parseString("Test").getAsString()); } + @Test public void testParseUnquotedMultiWordStringFails() { String unquotedSentence = "Test is a test..blah blah"; try { @@ -79,6 +89,7 @@ public void testParseUnquotedMultiWordStringFails() { } catch (JsonSyntaxException expected) { } } + @Test public void testParseMixedArray() { String json = "[{},13,\"stringValue\"]"; JsonElement e = JsonParser.parseString(json); @@ -99,6 +110,7 @@ private static String repeat(String s, int times) { } /** Deeply nested JSON arrays should not cause {@link StackOverflowError} */ + @Test public void testParseDeeplyNestedArrays() throws IOException { int times = 10000; // [[[ ... ]]] @@ -118,6 +130,7 @@ public void testParseDeeplyNestedArrays() throws IOException { } /** Deeply nested JSON objects should not cause {@link StackOverflowError} */ + @Test public void testParseDeeplyNestedObjects() throws IOException { int times = 10000; // {"a":{"a": ... {"a":null} ... }} @@ -138,6 +151,7 @@ public void testParseDeeplyNestedObjects() throws IOException { assertEquals(times, actualTimes); } + @Test public void testParseReader() { StringReader reader = new StringReader("{a:10,b:'c'}"); JsonElement e = JsonParser.parseReader(reader); @@ -146,6 +160,7 @@ public void testParseReader() { assertEquals("c", e.getAsJsonObject().get("b").getAsString()); } + @Test public void testReadWriteTwoObjects() throws Exception { Gson gson = new Gson(); CharArrayWriter writer = new CharArrayWriter(); diff --git a/gson/src/test/java/com/google/gson/JsonPrimitiveTest.java b/gson/src/test/java/com/google/gson/JsonPrimitiveTest.java index ae2e0f2a8d..909bbc47e3 100644 --- a/gson/src/test/java/com/google/gson/JsonPrimitiveTest.java +++ b/gson/src/test/java/com/google/gson/JsonPrimitiveTest.java @@ -16,19 +16,26 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.google.gson.common.MoreAsserts; import java.math.BigDecimal; import java.math.BigInteger; -import junit.framework.TestCase; +import org.junit.Test; /** * Unit test for the {@link JsonPrimitive} class. * * @author Joel Leitch */ -public class JsonPrimitiveTest extends TestCase { +public class JsonPrimitiveTest { @SuppressWarnings("unused") + @Test public void testNulls() { try { new JsonPrimitive((Boolean) null); @@ -52,6 +59,7 @@ public void testNulls() { } } + @Test public void testBoolean() throws Exception { JsonPrimitive json = new JsonPrimitive(Boolean.TRUE); @@ -75,6 +83,7 @@ public void testBoolean() throws Exception { assertFalse(json.getAsBoolean()); } + @Test public void testParsingStringAsBoolean() throws Exception { JsonPrimitive json = new JsonPrimitive("true"); @@ -82,6 +91,7 @@ public void testParsingStringAsBoolean() throws Exception { assertTrue(json.getAsBoolean()); } + @Test public void testParsingStringAsNumber() throws Exception { JsonPrimitive json = new JsonPrimitive("1"); @@ -96,6 +106,7 @@ public void testParsingStringAsNumber() throws Exception { assertEquals(new BigDecimal("1"), json.getAsBigDecimal()); } + @Test public void testAsNumber_Boolean() { JsonPrimitive json = new JsonPrimitive(true); try { @@ -107,6 +118,7 @@ public void testAsNumber_Boolean() { } @SuppressWarnings("deprecation") + @Test public void testStringsAndChar() throws Exception { JsonPrimitive json = new JsonPrimitive("abc"); assertTrue(json.isString()); @@ -131,6 +143,7 @@ public void testStringsAndChar() throws Exception { } } + @Test public void testExponential() throws Exception { JsonPrimitive json = new JsonPrimitive("1E+7"); @@ -144,6 +157,7 @@ public void testExponential() throws Exception { } catch (NumberFormatException expected) { } } + @Test public void testByteEqualsShort() { JsonPrimitive p1 = new JsonPrimitive(Byte.valueOf((byte)10)); JsonPrimitive p2 = new JsonPrimitive(Short.valueOf((short)10)); @@ -151,6 +165,7 @@ public void testByteEqualsShort() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testByteEqualsInteger() { JsonPrimitive p1 = new JsonPrimitive(Byte.valueOf((byte)10)); JsonPrimitive p2 = new JsonPrimitive(Integer.valueOf(10)); @@ -158,6 +173,7 @@ public void testByteEqualsInteger() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testByteEqualsLong() { JsonPrimitive p1 = new JsonPrimitive(Byte.valueOf((byte)10)); JsonPrimitive p2 = new JsonPrimitive(Long.valueOf(10L)); @@ -165,6 +181,7 @@ public void testByteEqualsLong() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testByteEqualsBigInteger() { JsonPrimitive p1 = new JsonPrimitive(Byte.valueOf((byte)10)); JsonPrimitive p2 = new JsonPrimitive(new BigInteger("10")); @@ -172,6 +189,7 @@ public void testByteEqualsBigInteger() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testShortEqualsInteger() { JsonPrimitive p1 = new JsonPrimitive(Short.valueOf((short)10)); JsonPrimitive p2 = new JsonPrimitive(Integer.valueOf(10)); @@ -179,6 +197,7 @@ public void testShortEqualsInteger() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testShortEqualsLong() { JsonPrimitive p1 = new JsonPrimitive(Short.valueOf((short)10)); JsonPrimitive p2 = new JsonPrimitive(Long.valueOf(10)); @@ -186,6 +205,7 @@ public void testShortEqualsLong() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testShortEqualsBigInteger() { JsonPrimitive p1 = new JsonPrimitive(Short.valueOf((short)10)); JsonPrimitive p2 = new JsonPrimitive(new BigInteger("10")); @@ -193,6 +213,7 @@ public void testShortEqualsBigInteger() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testIntegerEqualsLong() { JsonPrimitive p1 = new JsonPrimitive(Integer.valueOf(10)); JsonPrimitive p2 = new JsonPrimitive(Long.valueOf(10L)); @@ -200,6 +221,7 @@ public void testIntegerEqualsLong() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testIntegerEqualsBigInteger() { JsonPrimitive p1 = new JsonPrimitive(Integer.valueOf(10)); JsonPrimitive p2 = new JsonPrimitive(new BigInteger("10")); @@ -207,6 +229,7 @@ public void testIntegerEqualsBigInteger() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testLongEqualsBigInteger() { JsonPrimitive p1 = new JsonPrimitive(Long.valueOf(10L)); JsonPrimitive p2 = new JsonPrimitive(new BigInteger("10")); @@ -214,6 +237,7 @@ public void testLongEqualsBigInteger() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testFloatEqualsDouble() { JsonPrimitive p1 = new JsonPrimitive(Float.valueOf(10.25F)); JsonPrimitive p2 = new JsonPrimitive(Double.valueOf(10.25D)); @@ -221,6 +245,7 @@ public void testFloatEqualsDouble() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testFloatEqualsBigDecimal() { JsonPrimitive p1 = new JsonPrimitive(Float.valueOf(10.25F)); JsonPrimitive p2 = new JsonPrimitive(new BigDecimal("10.25")); @@ -228,6 +253,7 @@ public void testFloatEqualsBigDecimal() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testDoubleEqualsBigDecimal() { JsonPrimitive p1 = new JsonPrimitive(Double.valueOf(10.25D)); JsonPrimitive p2 = new JsonPrimitive(new BigDecimal("10.25")); @@ -235,6 +261,7 @@ public void testDoubleEqualsBigDecimal() { assertEquals(p1.hashCode(), p2.hashCode()); } + @Test public void testValidJsonOnToString() throws Exception { JsonPrimitive json = new JsonPrimitive("Some\nEscaped\nValue"); assertEquals("\"Some\\nEscaped\\nValue\"", json.toString()); @@ -243,6 +270,7 @@ public void testValidJsonOnToString() throws Exception { assertEquals("1.333", json.toString()); } + @Test public void testEquals() { MoreAsserts.assertEqualsAndHashCode(new JsonPrimitive("A"), new JsonPrimitive("A")); MoreAsserts.assertEqualsAndHashCode(new JsonPrimitive(true), new JsonPrimitive(true)); @@ -263,6 +291,7 @@ public void testEquals() { assertFalse(new JsonPrimitive(0).equals(new JsonPrimitive(1))); } + @Test public void testEqualsAcrossTypes() { MoreAsserts.assertEqualsAndHashCode(new JsonPrimitive("a"), new JsonPrimitive('a')); MoreAsserts.assertEqualsAndHashCode(new JsonPrimitive(new BigInteger("0")), new JsonPrimitive(0)); @@ -271,6 +300,7 @@ public void testEqualsAcrossTypes() { MoreAsserts.assertEqualsAndHashCode(new JsonPrimitive(Float.NaN), new JsonPrimitive(Double.NaN)); } + @Test public void testEqualsIntegerAndBigInteger() { JsonPrimitive a = new JsonPrimitive(5L); JsonPrimitive b = new JsonPrimitive(new BigInteger("18446744073709551621")); // 2^64 + 5 @@ -279,12 +309,14 @@ public void testEqualsIntegerAndBigInteger() { assertTrue(a + " equals " + b, a.equals(b)); } + @Test public void testEqualsDoesNotEquateStringAndNonStringTypes() { assertFalse(new JsonPrimitive("true").equals(new JsonPrimitive(true))); assertFalse(new JsonPrimitive("0").equals(new JsonPrimitive(0))); assertFalse(new JsonPrimitive("NaN").equals(new JsonPrimitive(Float.NaN))); } + @Test public void testDeepCopy() { JsonPrimitive a = new JsonPrimitive("a"); assertSame(a, a.deepCopy()); // Primitives are immutable! diff --git a/gson/src/test/java/com/google/gson/LongSerializationPolicyTest.java b/gson/src/test/java/com/google/gson/LongSerializationPolicyTest.java index a4ad8f1423..2b349f3f39 100644 --- a/gson/src/test/java/com/google/gson/LongSerializationPolicyTest.java +++ b/gson/src/test/java/com/google/gson/LongSerializationPolicyTest.java @@ -16,7 +16,11 @@ package com.google.gson; -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; /** * Unit test for the {@link LongSerializationPolicy} class. @@ -24,8 +28,9 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class LongSerializationPolicyTest extends TestCase { +public class LongSerializationPolicyTest { + @Test public void testDefaultLongSerialization() throws Exception { JsonElement element = LongSerializationPolicy.DEFAULT.serialize(1556L); assertTrue(element.isJsonPrimitive()); @@ -36,6 +41,7 @@ public void testDefaultLongSerialization() throws Exception { assertEquals(1556L, element.getAsLong()); } + @Test public void testDefaultLongSerializationIntegration() { Gson gson = new GsonBuilder() .setLongSerializationPolicy(LongSerializationPolicy.DEFAULT) @@ -44,6 +50,7 @@ public void testDefaultLongSerializationIntegration() { assertEquals("[1]", gson.toJson(new Long[] { 1L }, Long[].class)); } + @Test public void testDefaultLongSerializationNull() { LongSerializationPolicy policy = LongSerializationPolicy.DEFAULT; assertTrue(policy.serialize(null).isJsonNull()); @@ -54,6 +61,7 @@ public void testDefaultLongSerializationNull() { assertEquals("null", gson.toJson(null, Long.class)); } + @Test public void testStringLongSerialization() throws Exception { JsonElement element = LongSerializationPolicy.STRING.serialize(1556L); assertTrue(element.isJsonPrimitive()); @@ -64,6 +72,7 @@ public void testStringLongSerialization() throws Exception { assertEquals("1556", element.getAsString()); } + @Test public void testStringLongSerializationIntegration() { Gson gson = new GsonBuilder() .setLongSerializationPolicy(LongSerializationPolicy.STRING) @@ -72,6 +81,7 @@ public void testStringLongSerializationIntegration() { assertEquals("[\"1\"]", gson.toJson(new Long[] { 1L }, Long[].class)); } + @Test public void testStringLongSerializationNull() { LongSerializationPolicy policy = LongSerializationPolicy.STRING; assertTrue(policy.serialize(null).isJsonNull()); diff --git a/gson/src/test/java/com/google/gson/MixedStreamTest.java b/gson/src/test/java/com/google/gson/MixedStreamTest.java index fa16659f0d..9f835b162f 100644 --- a/gson/src/test/java/com/google/gson/MixedStreamTest.java +++ b/gson/src/test/java/com/google/gson/MixedStreamTest.java @@ -16,6 +16,11 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; @@ -25,9 +30,9 @@ import java.lang.reflect.Type; import java.util.Arrays; import java.util.List; -import junit.framework.TestCase; +import org.junit.Test; -public final class MixedStreamTest extends TestCase { +public final class MixedStreamTest { private static final Car BLUE_MUSTANG = new Car("mustang", 0x0000FF); private static final Car BLACK_BMW = new Car("bmw", 0x000000); @@ -47,6 +52,7 @@ public final class MixedStreamTest extends TestCase { + " }\n" + "]"; + @Test public void testWriteMixedStreamed() throws IOException { Gson gson = new Gson(); StringWriter stringWriter = new StringWriter(); @@ -62,6 +68,7 @@ public void testWriteMixedStreamed() throws IOException { assertEquals(CARS_JSON, stringWriter.toString()); } + @Test public void testReadMixedStreamed() throws IOException { Gson gson = new Gson(); StringReader stringReader = new StringReader(CARS_JSON); @@ -74,6 +81,7 @@ public void testReadMixedStreamed() throws IOException { jsonReader.endArray(); } + @Test public void testReaderDoesNotMutateState() throws IOException { Gson gson = new Gson(); JsonReader jsonReader = new JsonReader(new StringReader(CARS_JSON)); @@ -88,6 +96,7 @@ public void testReaderDoesNotMutateState() throws IOException { assertTrue(jsonReader.isLenient()); } + @Test public void testWriteDoesNotMutateState() throws IOException { Gson gson = new Gson(); JsonWriter jsonWriter = new JsonWriter(new StringWriter()); @@ -106,6 +115,7 @@ public void testWriteDoesNotMutateState() throws IOException { assertFalse(jsonWriter.isLenient()); } + @Test public void testReadInvalidState() throws IOException { Gson gson = new Gson(); JsonReader jsonReader = new JsonReader(new StringReader(CARS_JSON)); @@ -118,6 +128,7 @@ public void testReadInvalidState() throws IOException { } } + @Test public void testReadClosed() throws IOException { Gson gson = new Gson(); JsonReader jsonReader = new JsonReader(new StringReader(CARS_JSON)); @@ -129,6 +140,7 @@ public void testReadClosed() throws IOException { } } + @Test public void testWriteInvalidState() throws IOException { Gson gson = new Gson(); JsonWriter jsonWriter = new JsonWriter(new StringWriter()); @@ -140,6 +152,7 @@ public void testWriteInvalidState() throws IOException { } } + @Test public void testWriteClosed() throws IOException { Gson gson = new Gson(); JsonWriter jsonWriter = new JsonWriter(new StringWriter()); @@ -153,6 +166,7 @@ public void testWriteClosed() throws IOException { } } + @Test public void testWriteNulls() { Gson gson = new Gson(); try { @@ -166,6 +180,7 @@ public void testWriteNulls() { assertEquals("null", stringWriter.toString()); } + @Test public void testReadNulls() { Gson gson = new Gson(); try { @@ -180,6 +195,7 @@ public void testReadNulls() { } } + @Test public void testWriteHtmlSafe() { List contents = Arrays.asList("<", ">", "&", "=", "'"); Type type = new TypeToken>() {}.getType(); @@ -196,6 +212,7 @@ public void testWriteHtmlSafe() { writer.toString()); } + @Test public void testWriteLenient() { List doubles = Arrays.asList(Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, -0.0d, 0.5d, 0.0d); diff --git a/gson/src/test/java/com/google/gson/ObjectTypeAdapterTest.java b/gson/src/test/java/com/google/gson/ObjectTypeAdapterTest.java index 534c398d50..1cff909eec 100644 --- a/gson/src/test/java/com/google/gson/ObjectTypeAdapterTest.java +++ b/gson/src/test/java/com/google/gson/ObjectTypeAdapterTest.java @@ -16,18 +16,21 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; + import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import junit.framework.TestCase; +import org.junit.Test; -public final class ObjectTypeAdapterTest extends TestCase { +public final class ObjectTypeAdapterTest { private final Gson gson = new GsonBuilder().create(); private final TypeAdapter adapter = gson.getAdapter(Object.class); + @Test public void testDeserialize() throws Exception { Map map = (Map) adapter.fromJson("{\"a\":5,\"b\":[1,2,null],\"c\":{\"x\":\"y\"}}"); assertEquals(5.0, map.get("a")); @@ -36,23 +39,27 @@ public void testDeserialize() throws Exception { assertEquals(3, map.size()); } + @Test public void testSerialize() throws Exception { Object object = new RuntimeType(); assertEquals("{'a':5,'b':[1,2,null]}", adapter.toJson(object).replace("\"", "'")); } + @Test public void testSerializeNullValue() throws Exception { Map map = new LinkedHashMap<>(); map.put("a", null); assertEquals("{'a':null}", adapter.toJson(map).replace('"', '\'')); } + @Test public void testDeserializeNullValue() throws Exception { Map map = new LinkedHashMap<>(); map.put("a", null); assertEquals(map, adapter.fromJson("{\"a\":null}")); } + @Test public void testSerializeObject() throws Exception { assertEquals("{}", adapter.toJson(new Object())); } @@ -67,6 +74,7 @@ private static String repeat(String s, int times) { /** Deeply nested JSON arrays should not cause {@link StackOverflowError} */ @SuppressWarnings("unchecked") + @Test public void testDeserializeDeeplyNestedArrays() throws IOException { int times = 10000; // [[[ ... ]]] @@ -87,6 +95,7 @@ public void testDeserializeDeeplyNestedArrays() throws IOException { /** Deeply nested JSON objects should not cause {@link StackOverflowError} */ @SuppressWarnings("unchecked") + @Test public void testDeserializeDeeplyNestedObjects() throws IOException { int times = 10000; // {"a":{"a": ... {"a":null} ... }} diff --git a/gson/src/test/java/com/google/gson/OverrideCoreTypeAdaptersTest.java b/gson/src/test/java/com/google/gson/OverrideCoreTypeAdaptersTest.java index 79ae1698f9..a5309c82fb 100644 --- a/gson/src/test/java/com/google/gson/OverrideCoreTypeAdaptersTest.java +++ b/gson/src/test/java/com/google/gson/OverrideCoreTypeAdaptersTest.java @@ -16,16 +16,18 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; + import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import java.io.IOException; import java.util.Locale; -import junit.framework.TestCase; +import org.junit.Test; /** * @author Jesse Wilson */ -public class OverrideCoreTypeAdaptersTest extends TestCase { +public class OverrideCoreTypeAdaptersTest { private static final TypeAdapter booleanAsIntAdapter = new TypeAdapter() { @Override public void write(JsonWriter out, Boolean value) throws IOException { out.value(value ? 1 : 0); @@ -45,6 +47,7 @@ public class OverrideCoreTypeAdaptersTest extends TestCase { } }; + @Test public void testOverrideWrapperBooleanAdapter() { Gson gson = new GsonBuilder() .registerTypeAdapter(Boolean.class, booleanAsIntAdapter) @@ -56,6 +59,7 @@ public void testOverrideWrapperBooleanAdapter() { assertEquals(Boolean.FALSE, gson.fromJson("0", Boolean.class)); } + @Test public void testOverridePrimitiveBooleanAdapter() { Gson gson = new GsonBuilder() .registerTypeAdapter(boolean.class, booleanAsIntAdapter) @@ -67,6 +71,7 @@ public void testOverridePrimitiveBooleanAdapter() { assertEquals("0", gson.toJson(false, boolean.class)); } + @Test public void testOverrideStringAdapter() { Gson gson = new GsonBuilder() .registerTypeAdapter(String.class, swapCaseStringAdapter) diff --git a/gson/src/test/java/com/google/gson/ParameterizedTypeTest.java b/gson/src/test/java/com/google/gson/ParameterizedTypeTest.java index 24d78e89d8..06ed630e83 100644 --- a/gson/src/test/java/com/google/gson/ParameterizedTypeTest.java +++ b/gson/src/test/java/com/google/gson/ParameterizedTypeTest.java @@ -16,14 +16,17 @@ package com.google.gson; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; + import com.google.gson.internal.$Gson$Types; import com.google.gson.reflect.TypeToken; - -import junit.framework.TestCase; - import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; +import org.junit.Before; +import org.junit.Test; /** * Unit tests for {@code ParameterizedType}s created by the {@link $Gson$Types} class. @@ -31,15 +34,15 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class ParameterizedTypeTest extends TestCase { +public class ParameterizedTypeTest { private ParameterizedType ourType; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { ourType = $Gson$Types.newParameterizedTypeWithOwner(null, List.class, String.class); } + @Test public void testOurTypeFunctionality() throws Exception { Type parameterizedType = new TypeToken>() {}.getType(); assertNull(ourType.getOwnerType()); @@ -49,6 +52,7 @@ public void testOurTypeFunctionality() throws Exception { assertEquals(parameterizedType.hashCode(), ourType.hashCode()); } + @Test public void testNotEquals() throws Exception { Type differentParameterizedType = new TypeToken>() {}.getType(); assertFalse(differentParameterizedType.equals(ourType)); diff --git a/gson/src/test/java/com/google/gson/ToNumberPolicyTest.java b/gson/src/test/java/com/google/gson/ToNumberPolicyTest.java index db9898d47d..688887a337 100644 --- a/gson/src/test/java/com/google/gson/ToNumberPolicyTest.java +++ b/gson/src/test/java/com/google/gson/ToNumberPolicyTest.java @@ -16,15 +16,19 @@ package com.google.gson; -import java.io.IOException; -import java.io.StringReader; -import java.math.BigDecimal; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import com.google.gson.internal.LazilyParsedNumber; import com.google.gson.stream.JsonReader; import com.google.gson.stream.MalformedJsonException; -import junit.framework.TestCase; +import java.io.IOException; +import java.io.StringReader; +import java.math.BigDecimal; +import org.junit.Test; -public class ToNumberPolicyTest extends TestCase { +public class ToNumberPolicyTest { + @Test public void testDouble() throws IOException { ToNumberStrategy strategy = ToNumberPolicy.DOUBLE; assertEquals(10.1, strategy.readNumber(fromString("10.1"))); @@ -42,6 +46,7 @@ public void testDouble() throws IOException { } } + @Test public void testLazilyParsedNumber() throws IOException { ToNumberStrategy strategy = ToNumberPolicy.LAZILY_PARSED_NUMBER; assertEquals(new LazilyParsedNumber("10.1"), strategy.readNumber(fromString("10.1"))); @@ -49,6 +54,7 @@ public void testLazilyParsedNumber() throws IOException { assertEquals(new LazilyParsedNumber("1e400"), strategy.readNumber(fromString("1e400"))); } + @Test public void testLongOrDouble() throws IOException { ToNumberStrategy strategy = ToNumberPolicy.LONG_OR_DOUBLE; assertEquals(10L, strategy.readNumber(fromString("10"))); @@ -90,6 +96,7 @@ public void testLongOrDouble() throws IOException { } } + @Test public void testBigDecimal() throws IOException { ToNumberStrategy strategy = ToNumberPolicy.BIG_DECIMAL; assertEquals(new BigDecimal("10.1"), strategy.readNumber(fromString("10.1"))); @@ -104,6 +111,7 @@ public void testBigDecimal() throws IOException { } } + @Test public void testNullsAreNeverExpected() throws IOException { try { ToNumberPolicy.DOUBLE.readNumber(fromString("null")); diff --git a/gson/src/test/java/com/google/gson/functional/ArrayTest.java b/gson/src/test/java/com/google/gson/functional/ArrayTest.java index 9d0f89adbb..e1a8c02e74 100644 --- a/gson/src/test/java/com/google/gson/functional/ArrayTest.java +++ b/gson/src/test/java/com/google/gson/functional/ArrayTest.java @@ -17,6 +17,10 @@ package com.google.gson.functional; import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -28,33 +32,36 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for Json serialization and deserialization of arrays. * * @author Inderjeet Singh * @author Joel Leitch */ -public class ArrayTest extends TestCase { +public class ArrayTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testTopLevelArrayOfIntsSerialization() { int[] target = {1, 2, 3, 4, 5, 6, 7, 8, 9}; assertEquals("[1,2,3,4,5,6,7,8,9]", gson.toJson(target)); } + @Test public void testTopLevelArrayOfIntsDeserialization() { int[] expected = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int[] actual = gson.fromJson("[1,2,3,4,5,6,7,8,9]", int[].class); assertArrayEquals(expected, actual); } + @Test public void testInvalidArrayDeserialization() { String json = "[1, 2 3, 4, 5]"; try { @@ -64,11 +71,13 @@ public void testInvalidArrayDeserialization() { } } + @Test public void testEmptyArraySerialization() { int[] target = {}; assertEquals("[]", gson.toJson(target)); } + @Test public void testEmptyArrayDeserialization() { int[] actualObject = gson.fromJson("[]", int[].class); assertTrue(actualObject.length == 0); @@ -80,6 +89,7 @@ public void testEmptyArrayDeserialization() { assertTrue(actualObject.length == 0); } + @Test public void testNullsInArraySerialization() { String[] array = {"foo", null, "bar"}; String expected = "[\"foo\",null,\"bar\"]"; @@ -87,6 +97,7 @@ public void testNullsInArraySerialization() { assertEquals(expected, json); } + @Test public void testNullsInArrayDeserialization() { String json = "[\"foo\",null,\"bar\"]"; String[] expected = {"foo", null, "bar"}; @@ -96,6 +107,7 @@ public void testNullsInArrayDeserialization() { } } + @Test public void testSingleNullInArraySerialization() { BagOfPrimitives[] array = new BagOfPrimitives[1]; array[0] = null; @@ -103,11 +115,13 @@ public void testSingleNullInArraySerialization() { assertEquals("[null]", json); } + @Test public void testSingleNullInArrayDeserialization() { BagOfPrimitives[] array = gson.fromJson("[null]", BagOfPrimitives[].class); assertNull(array[0]); } + @Test public void testNullsInArrayWithSerializeNullPropertySetSerialization() { gson = new GsonBuilder().serializeNulls().create(); String[] array = {"foo", null, "bar"}; @@ -116,11 +130,13 @@ public void testNullsInArrayWithSerializeNullPropertySetSerialization() { assertEquals(expected, json); } + @Test public void testArrayOfStringsSerialization() { String[] target = {"Hello", "World"}; assertEquals("[\"Hello\",\"World\"]", gson.toJson(target)); } + @Test public void testArrayOfStringsDeserialization() { String json = "[\"Hello\",\"World\"]"; String[] target = gson.fromJson(json, String[].class); @@ -128,12 +144,14 @@ public void testArrayOfStringsDeserialization() { assertEquals("World", target[1]); } + @Test public void testSingleStringArraySerialization() throws Exception { String[] s = { "hello" }; String output = gson.toJson(s); assertEquals("[\"hello\"]", output); } + @Test public void testSingleStringArrayDeserialization() throws Exception { String json = "[\"hello\"]"; String[] arrayType = gson.fromJson(json, String[].class); @@ -141,6 +159,7 @@ public void testSingleStringArrayDeserialization() throws Exception { assertEquals("hello", arrayType[0]); } + @Test public void testArrayOfCollectionSerialization() throws Exception { StringBuilder sb = new StringBuilder("["); int arraySize = 3; @@ -166,6 +185,7 @@ public void testArrayOfCollectionSerialization() throws Exception { assertEquals(sb.toString(), json); } + @Test public void testArrayOfCollectionDeserialization() throws Exception { String json = "[[1,2],[3,4]]"; Type type = new TypeToken[]>() {}.getType(); @@ -176,6 +196,7 @@ public void testArrayOfCollectionDeserialization() throws Exception { assertArrayEquals(new Integer[] {3, 4}, target[1].toArray(new Integer[0])); } + @Test public void testArrayOfPrimitivesAsObjectsSerialization() throws Exception { Object[] objs = new Object[] {1, "abc", 0.3f, 5L}; String json = gson.toJson(objs); @@ -184,16 +205,18 @@ public void testArrayOfPrimitivesAsObjectsSerialization() throws Exception { assertTrue(json.contains("5")); } + @Test public void testArrayOfPrimitivesAsObjectsDeserialization() throws Exception { String json = "[1,'abc',0.3,1.1,5]"; Object[] objs = gson.fromJson(json, Object[].class); assertEquals(1, ((Number)objs[0]).intValue()); assertEquals("abc", objs[1]); - assertEquals(0.3, ((Number)objs[2]).doubleValue()); + assertEquals(0.3, ((Number)objs[2]).doubleValue(), 0); assertEquals(new BigDecimal("1.1"), new BigDecimal(objs[3].toString())); assertEquals(5, ((Number)objs[4]).shortValue()); } + @Test public void testObjectArrayWithNonPrimitivesSerialization() throws Exception { ClassWithObjects classWithObjects = new ClassWithObjects(); BagOfPrimitives bagOfPrimitives = new BagOfPrimitives(); @@ -207,12 +230,14 @@ public void testObjectArrayWithNonPrimitivesSerialization() throws Exception { assertTrue(json.contains(bagOfPrimitivesJson)); } + @Test public void testArrayOfNullSerialization() { Object[] array = {null}; String json = gson.toJson(array); assertEquals("[null]", json); } + @Test public void testArrayOfNullDeserialization() { String[] values = gson.fromJson("[null]", String[].class); assertNull(values[0]); @@ -221,6 +246,7 @@ public void testArrayOfNullDeserialization() { /** * Regression tests for Issue 272 */ + @Test public void testMultidimensionalArraysSerialization() { String[][] items = { {"3m Co", "71.72", "0.02", "0.03", "4/2 12:00am", "Manufacturing"}, @@ -231,11 +257,13 @@ public void testMultidimensionalArraysSerialization() { assertTrue(json.contains("Manufacturing\"]]")); } + @Test public void testMultidimensionalObjectArraysSerialization() { Object[][] array = {new Object[] { 1, 2 }}; assertEquals("[[1,2]]", gson.toJson(array)); } + @Test public void testMultidimensionalPrimitiveArraysSerialization() { int[][] array = {{1, 2}, {3, 4}}; assertEquals("[[1,2],[3,4]]", gson.toJson(array)); @@ -244,6 +272,7 @@ public void testMultidimensionalPrimitiveArraysSerialization() { /** * Regression test for Issue 205 */ + @Test public void testMixingTypesInObjectArraySerialization() { Object[] array = {1, 2, new Object[] {"one", "two", 3}}; assertEquals("[1,2,[\"one\",\"two\",3]]", gson.toJson(array)); @@ -252,6 +281,7 @@ public void testMixingTypesInObjectArraySerialization() { /** * Regression tests for Issue 272 */ + @Test public void testMultidimensionalArraysDeserialization() { String json = "[['3m Co','71.72','0.02','0.03','4/2 12:00am','Manufacturing']," + "['Alcoa Inc','29.01','0.42','1.47','4/1 12:00am','Manufacturing']]"; @@ -260,6 +290,7 @@ public void testMultidimensionalArraysDeserialization() { assertEquals("Manufacturing", items[1][5]); } + @Test public void testMultidimensionalPrimitiveArraysDeserialization() { String json = "[[1,2],[3,4]]"; int[][] expected = {{1, 2}, {3, 4}}; @@ -267,6 +298,7 @@ public void testMultidimensionalPrimitiveArraysDeserialization() { } /** http://code.google.com/p/google-gson/issues/detail?id=342 */ + @Test public void testArrayElementsAreArrays() { Object[] stringArrays = { new String[] {"test1", "test2"}, diff --git a/gson/src/test/java/com/google/gson/functional/CircularReferenceTest.java b/gson/src/test/java/com/google/gson/functional/CircularReferenceTest.java index f4419551b3..053d8b46b4 100644 --- a/gson/src/test/java/com/google/gson/functional/CircularReferenceTest.java +++ b/gson/src/test/java/com/google/gson/functional/CircularReferenceTest.java @@ -15,11 +15,10 @@ */ package com.google.gson.functional; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Collection; - -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -28,6 +27,11 @@ import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import com.google.gson.common.TestTypes.ClassOverridingEquals; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Collection; +import org.junit.Before; +import org.junit.Test; /** * Functional tests related to circular reference detection and error reporting. @@ -35,15 +39,15 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class CircularReferenceTest extends TestCase { +public class CircularReferenceTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testCircularSerialization() throws Exception { ContainsReferenceToSelfType a = new ContainsReferenceToSelfType(); ContainsReferenceToSelfType b = new ContainsReferenceToSelfType(); @@ -56,6 +60,7 @@ public void testCircularSerialization() throws Exception { } } + @Test public void testSelfReferenceIgnoredInSerialization() throws Exception { ClassOverridingEquals objA = new ClassOverridingEquals(); objA.ref = objA; @@ -64,6 +69,7 @@ public void testSelfReferenceIgnoredInSerialization() throws Exception { assertFalse(json.contains("ref")); // self-reference is ignored } + @Test public void testSelfReferenceArrayFieldSerialization() throws Exception { ClassWithSelfReferenceArray objA = new ClassWithSelfReferenceArray(); objA.children = new ClassWithSelfReferenceArray[]{objA}; @@ -75,6 +81,7 @@ public void testSelfReferenceArrayFieldSerialization() throws Exception { } } + @Test public void testSelfReferenceCustomHandlerSerialization() throws Exception { ClassWithSelfReference obj = new ClassWithSelfReference(); obj.child = obj; @@ -94,6 +101,7 @@ public void testSelfReferenceCustomHandlerSerialization() throws Exception { } } + @Test public void testDirectedAcyclicGraphSerialization() throws Exception { ContainsReferenceToSelfType a = new ContainsReferenceToSelfType(); ContainsReferenceToSelfType b = new ContainsReferenceToSelfType(); @@ -104,6 +112,7 @@ public void testDirectedAcyclicGraphSerialization() throws Exception { assertNotNull(gson.toJson(a)); } + @Test public void testDirectedAcyclicGraphDeserialization() throws Exception { String json = "{\"children\":[{\"children\":[{\"children\":[]}]},{\"children\":[]}]}"; ContainsReferenceToSelfType target = gson.fromJson(json, ContainsReferenceToSelfType.class); diff --git a/gson/src/test/java/com/google/gson/functional/CollectionTest.java b/gson/src/test/java/com/google/gson/functional/CollectionTest.java index 44a655c8bc..e40afe24d0 100644 --- a/gson/src/test/java/com/google/gson/functional/CollectionTest.java +++ b/gson/src/test/java/com/google/gson/functional/CollectionTest.java @@ -17,6 +17,9 @@ package com.google.gson.functional; import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -40,7 +43,8 @@ import java.util.Set; import java.util.Stack; import java.util.Vector; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for Json serialization and deserialization of collections. @@ -48,15 +52,15 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class CollectionTest extends TestCase { +public class CollectionTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testTopLevelCollectionOfIntegersSerialization() { Collection target = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); Type targetType = new TypeToken>() {}.getType(); @@ -64,6 +68,7 @@ public void testTopLevelCollectionOfIntegersSerialization() { assertEquals("[1,2,3,4,5,6,7,8,9]", json); } + @Test public void testTopLevelCollectionOfIntegersDeserialization() { String json = "[0,1,2,3,4,5,6,7,8,9]"; Type collectionType = new TypeToken>() { }.getType(); @@ -72,6 +77,7 @@ public void testTopLevelCollectionOfIntegersDeserialization() { assertArrayEquals(expected, toIntArray(target)); } + @Test public void testTopLevelListOfIntegerCollectionsDeserialization() throws Exception { String json = "[[1,2,3],[4,5,6],[7,8,9]]"; Type collectionType = new TypeToken>>() {}.getType(); @@ -89,6 +95,7 @@ public void testTopLevelListOfIntegerCollectionsDeserialization() throws Excepti } } + @Test public void testLinkedListSerialization() { List list = new LinkedList<>(); list.add("a1"); @@ -99,6 +106,7 @@ public void testLinkedListSerialization() { assertTrue(json.contains("a2")); } + @Test public void testLinkedListDeserialization() { String json = "['a1','a2']"; Type linkedListType = new TypeToken>() {}.getType(); @@ -107,6 +115,7 @@ public void testLinkedListDeserialization() { assertEquals("a2", list.get(1)); } + @Test public void testQueueSerialization() { Queue queue = new LinkedList<>(); queue.add("a1"); @@ -117,6 +126,7 @@ public void testQueueSerialization() { assertTrue(json.contains("a2")); } + @Test public void testQueueDeserialization() { String json = "['a1','a2']"; Type queueType = new TypeToken>() {}.getType(); @@ -126,6 +136,7 @@ public void testQueueDeserialization() { assertEquals("a2", queue.element()); } + @Test public void testPriorityQueue() throws Exception { Type type = new TypeToken>(){}.getType(); PriorityQueue queue = gson.fromJson("[10, 20, 22]", type); @@ -137,6 +148,7 @@ public void testPriorityQueue() throws Exception { assertEquals("[10,20,22]", json); } + @Test public void testVector() { Type type = new TypeToken>(){}.getType(); Vector target = gson.fromJson("[10, 20, 31]", type); @@ -148,6 +160,7 @@ public void testVector() { assertEquals("[10,20,31]", json); } + @Test public void testStack() { Type type = new TypeToken>(){}.getType(); Stack target = gson.fromJson("[11, 13, 17]", type); @@ -159,6 +172,7 @@ public void testStack() { assertEquals("[11,13,17]", json); } + @Test public void testNullsInListSerialization() { List list = new ArrayList<>(); list.add("foo"); @@ -170,6 +184,7 @@ public void testNullsInListSerialization() { assertEquals(expected, json); } + @Test public void testNullsInListDeserialization() { List expected = new ArrayList<>(); expected.add("foo"); @@ -183,6 +198,7 @@ public void testNullsInListDeserialization() { } } + @Test public void testCollectionOfObjectSerialization() { List target = new ArrayList<>(); target.add("Hello"); @@ -193,6 +209,7 @@ public void testCollectionOfObjectSerialization() { assertEquals("[\"Hello\",\"World\"]", gson.toJson(target, type)); } + @Test public void testCollectionOfObjectWithNullSerialization() { List target = new ArrayList<>(); target.add("Hello"); @@ -204,6 +221,7 @@ public void testCollectionOfObjectWithNullSerialization() { assertEquals("[\"Hello\",null,\"World\"]", gson.toJson(target, type)); } + @Test public void testCollectionOfStringsSerialization() { List target = new ArrayList<>(); target.add("Hello"); @@ -211,6 +229,7 @@ public void testCollectionOfStringsSerialization() { assertEquals("[\"Hello\",\"World\"]", gson.toJson(target)); } + @Test public void testCollectionOfBagOfPrimitivesSerialization() { List target = new ArrayList<>(); BagOfPrimitives objA = new BagOfPrimitives(3L, 1, true, "blah"); @@ -226,6 +245,7 @@ public void testCollectionOfBagOfPrimitivesSerialization() { } } + @Test public void testCollectionOfStringsDeserialization() { String json = "[\"Hello\",\"World\"]"; Type collectionType = new TypeToken>() { }.getType(); @@ -235,11 +255,13 @@ public void testCollectionOfStringsDeserialization() { assertTrue(target.contains("World")); } + @Test public void testRawCollectionOfIntegersSerialization() { Collection target = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); assertEquals("[1,2,3,4,5,6,7,8,9]", gson.toJson(target)); } + @Test public void testObjectCollectionSerialization() { BagOfPrimitives bag1 = new BagOfPrimitives(); Collection target = Arrays.asList(bag1, bag1, "test"); @@ -247,6 +269,7 @@ public void testObjectCollectionSerialization() { assertTrue(json.contains(bag1.getExpectedJson())); } + @Test public void testRawCollectionDeserializationNotAlllowed() { String json = "[0,1,2,3,4,5,6,7,8,9]"; Collection integers = gson.fromJson(json, Collection.class); @@ -259,6 +282,7 @@ public void testRawCollectionDeserializationNotAlllowed() { assertTrue(strings.contains("World")); } + @Test public void testRawCollectionOfBagOfPrimitivesNotAllowed() { BagOfPrimitives bag = new BagOfPrimitives(10, 20, false, "stringValue"); String json = '[' + bag.getExpectedJson() + ',' + bag.getExpectedJson() + ']'; @@ -274,6 +298,7 @@ public void testRawCollectionOfBagOfPrimitivesNotAllowed() { } } + @Test public void testWildcardPrimitiveCollectionSerilaization() throws Exception { Collection target = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); Type collectionType = new TypeToken>() { }.getType(); @@ -284,6 +309,7 @@ public void testWildcardPrimitiveCollectionSerilaization() throws Exception { assertEquals("[1,2,3,4,5,6,7,8,9]", json); } + @Test public void testWildcardPrimitiveCollectionDeserilaization() throws Exception { String json = "[1,2,3,4,5,6,7,8,9]"; Type collectionType = new TypeToken>() { }.getType(); @@ -293,6 +319,7 @@ public void testWildcardPrimitiveCollectionDeserilaization() throws Exception { assertTrue(target.contains(9)); } + @Test public void testWildcardCollectionField() throws Exception { Collection collection = new ArrayList<>(); BagOfPrimitives objA = new BagOfPrimitives(3L, 1, true, "blah"); @@ -312,6 +339,7 @@ public void testWildcardCollectionField() throws Exception { assertTrue(deserializedCollection.contains(objB)); } + @Test public void testFieldIsArrayList() { HasArrayListField object = new HasArrayListField(); object.longs.add(1L); @@ -322,6 +350,7 @@ public void testFieldIsArrayList() { assertEquals(Arrays.asList(1L, 3L), copy.longs); } + @Test public void testUserCollectionTypeAdapter() { Type listOfString = new TypeToken>() {}.getType(); Object stringListSerializer = new JsonSerializer>() { @@ -372,6 +401,7 @@ private static class Entry { this.value = value; } } + @Test public void testSetSerialization() { Set set = new HashSet<>(); set.add(new Entry(1)); @@ -380,6 +410,7 @@ public void testSetSerialization() { assertTrue(json.contains("1")); assertTrue(json.contains("2")); } + @Test public void testSetDeserialization() { String json = "[{value:1},{value:2}]"; Type type = new TypeToken>() {}.getType(); @@ -394,6 +425,7 @@ private class BigClass { private Map> inBig; private class SmallClass { private String inSmall; } + @Test public void testIssue1107() { String json = "{\n" + " \"inBig\": {\n" + diff --git a/gson/src/test/java/com/google/gson/functional/ConcurrencyTest.java b/gson/src/test/java/com/google/gson/functional/ConcurrencyTest.java index 5b507f17e7..c0080b987c 100644 --- a/gson/src/test/java/com/google/gson/functional/ConcurrencyTest.java +++ b/gson/src/test/java/com/google/gson/functional/ConcurrencyTest.java @@ -18,28 +18,31 @@ */ package com.google.gson.functional; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; + import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; import com.google.gson.Gson; /** * Tests for ensuring Gson thread-safety. - * + * * @author Inderjeet Singh * @author Joel Leitch */ -public class ConcurrencyTest extends TestCase { +public class ConcurrencyTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } @@ -47,27 +50,30 @@ protected void setUp() throws Exception { * Source-code based on * http://groups.google.com/group/google-gson/browse_thread/thread/563bb51ee2495081 */ - public void testSingleThreadSerialization() { - MyObject myObj = new MyObject(); - for (int i = 0; i < 10; i++) { - gson.toJson(myObj); - } - } + @Test + public void testSingleThreadSerialization() { + MyObject myObj = new MyObject(); + for (int i = 0; i < 10; i++) { + gson.toJson(myObj); + } + } /** * Source-code based on * http://groups.google.com/group/google-gson/browse_thread/thread/563bb51ee2495081 */ - public void testSingleThreadDeserialization() { - for (int i = 0; i < 10; i++) { - gson.fromJson("{'a':'hello','b':'world','i':1}", MyObject.class); - } - } + @Test + public void testSingleThreadDeserialization() { + for (int i = 0; i < 10; i++) { + gson.fromJson("{'a':'hello','b':'world','i':1}", MyObject.class); + } + } /** * Source-code based on * http://groups.google.com/group/google-gson/browse_thread/thread/563bb51ee2495081 */ + @Test public void testMultiThreadSerialization() throws InterruptedException { final CountDownLatch startLatch = new CountDownLatch(1); final CountDownLatch finishedLatch = new CountDownLatch(10); @@ -99,6 +105,7 @@ public void testMultiThreadSerialization() throws InterruptedException { * Source-code based on * http://groups.google.com/group/google-gson/browse_thread/thread/563bb51ee2495081 */ + @Test public void testMultiThreadDeserialization() throws InterruptedException { final CountDownLatch startLatch = new CountDownLatch(1); final CountDownLatch finishedLatch = new CountDownLatch(10); @@ -110,7 +117,7 @@ public void testMultiThreadDeserialization() throws InterruptedException { try { startLatch.await(); for (int i = 0; i < 10; i++) { - gson.fromJson("{'a':'hello','b':'world','i':1}", MyObject.class); + gson.fromJson("{'a':'hello','b':'world','i':1}", MyObject.class); } } catch (Throwable t) { failed.set(true); @@ -160,7 +167,7 @@ public void run() { assertNull(throwable.get()); } } - + @SuppressWarnings("unused") private static class MyObject { String a; diff --git a/gson/src/test/java/com/google/gson/functional/CustomDeserializerTest.java b/gson/src/test/java/com/google/gson/functional/CustomDeserializerTest.java index 8134ae2d19..d5b0728547 100644 --- a/gson/src/test/java/com/google/gson/functional/CustomDeserializerTest.java +++ b/gson/src/test/java/com/google/gson/functional/CustomDeserializerTest.java @@ -16,6 +16,9 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; @@ -25,10 +28,9 @@ import com.google.gson.JsonParseException; import com.google.gson.common.TestTypes.Base; import com.google.gson.common.TestTypes.ClassWithBaseField; - -import junit.framework.TestCase; - import java.lang.reflect.Type; +import org.junit.Before; +import org.junit.Test; /** * Functional Test exercising custom deserialization only. When test applies to both @@ -36,18 +38,18 @@ * * @author Joel Leitch */ -public class CustomDeserializerTest extends TestCase { +public class CustomDeserializerTest { private static final String DEFAULT_VALUE = "test123"; private static final String SUFFIX = "blah"; private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new GsonBuilder().registerTypeAdapter(DataHolder.class, new DataHolderDeserializer()).create(); } + @Test public void testDefaultConstructorNotCalledOnObject() throws Exception { DataHolder data = new DataHolder(DEFAULT_VALUE); String json = gson.toJson(data); @@ -56,6 +58,7 @@ public void testDefaultConstructorNotCalledOnObject() throws Exception { assertEquals(DEFAULT_VALUE + SUFFIX, actual.getData()); } + @Test public void testDefaultConstructorNotCalledOnField() throws Exception { DataHolderWrapper dataWrapper = new DataHolderWrapper(new DataHolder(DEFAULT_VALUE)); String json = gson.toJson(dataWrapper); @@ -110,6 +113,7 @@ public DataHolder deserialize(JsonElement json, Type typeOfT, JsonDeserializatio } } + @Test public void testJsonTypeFieldBasedDeserialization() { String json = "{field1:'abc',field2:'def',__type__:'SUB_TYPE1'}"; Gson gson = new GsonBuilder().registerTypeAdapter(MyBase.class, new JsonDeserializer() { @@ -148,6 +152,7 @@ private static class SubType2 extends MyBase { String field2; } + @Test public void testCustomDeserializerReturnsNullForTopLevelObject() { Gson gson = new GsonBuilder() .registerTypeAdapter(Base.class, new JsonDeserializer() { @@ -162,6 +167,7 @@ public Base deserialize(JsonElement json, Type typeOfT, JsonDeserializationConte assertNull(target); } + @Test public void testCustomDeserializerReturnsNull() { Gson gson = new GsonBuilder() .registerTypeAdapter(Base.class, new JsonDeserializer() { @@ -176,6 +182,7 @@ public Base deserialize(JsonElement json, Type typeOfT, JsonDeserializationConte assertNull(target.base); } + @Test public void testCustomDeserializerReturnsNullForArrayElements() { Gson gson = new GsonBuilder() .registerTypeAdapter(Base.class, new JsonDeserializer() { @@ -191,6 +198,7 @@ public Base deserialize(JsonElement json, Type typeOfT, JsonDeserializationConte assertNull(target[1]); } + @Test public void testCustomDeserializerReturnsNullForArrayElementsForArrayField() { Gson gson = new GsonBuilder() .registerTypeAdapter(Base.class, new JsonDeserializer() { diff --git a/gson/src/test/java/com/google/gson/functional/CustomSerializerTest.java b/gson/src/test/java/com/google/gson/functional/CustomSerializerTest.java index e04cb67c5f..3e450ac90b 100644 --- a/gson/src/test/java/com/google/gson/functional/CustomSerializerTest.java +++ b/gson/src/test/java/com/google/gson/functional/CustomSerializerTest.java @@ -16,6 +16,9 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; @@ -29,10 +32,8 @@ import com.google.gson.common.TestTypes.ClassWithBaseField; import com.google.gson.common.TestTypes.Sub; import com.google.gson.common.TestTypes.SubSerializer; - -import junit.framework.TestCase; - import java.lang.reflect.Type; +import org.junit.Test; /** * Functional Test exercising custom serialization only. When test applies to both @@ -40,9 +41,10 @@ * * @author Inderjeet Singh */ -public class CustomSerializerTest extends TestCase { +public class CustomSerializerTest { - public void testBaseClassSerializerInvokedForBaseClassFields() { + @Test + public void testBaseClassSerializerInvokedForBaseClassFields() { Gson gson = new GsonBuilder() .registerTypeAdapter(Base.class, new BaseSerializer()) .registerTypeAdapter(Sub.class, new SubSerializer()) @@ -53,7 +55,8 @@ public void testBaseClassSerializerInvokedForBaseClassFields() { assertEquals(BaseSerializer.NAME, base.get(Base.SERIALIZER_KEY).getAsString()); } - public void testSubClassSerializerInvokedForBaseClassFieldsHoldingSubClassInstances() { + @Test + public void testSubClassSerializerInvokedForBaseClassFieldsHoldingSubClassInstances() { Gson gson = new GsonBuilder() .registerTypeAdapter(Base.class, new BaseSerializer()) .registerTypeAdapter(Sub.class, new SubSerializer()) @@ -64,7 +67,8 @@ public void testSubClassSerializerInvokedForBaseClassFieldsHoldingSubClassInstan assertEquals(SubSerializer.NAME, base.get(Base.SERIALIZER_KEY).getAsString()); } - public void testSubClassSerializerInvokedForBaseClassFieldsHoldingArrayOfSubClassInstances() { + @Test + public void testSubClassSerializerInvokedForBaseClassFieldsHoldingArrayOfSubClassInstances() { Gson gson = new GsonBuilder() .registerTypeAdapter(Base.class, new BaseSerializer()) .registerTypeAdapter(Sub.class, new SubSerializer()) @@ -78,7 +82,8 @@ public void testSubClassSerializerInvokedForBaseClassFieldsHoldingArrayOfSubClas } } - public void testBaseClassSerializerInvokedForBaseClassFieldsHoldingSubClassInstances() { + @Test + public void testBaseClassSerializerInvokedForBaseClassFieldsHoldingSubClassInstances() { Gson gson = new GsonBuilder() .registerTypeAdapter(Base.class, new BaseSerializer()) .create(); @@ -88,7 +93,8 @@ public void testBaseClassSerializerInvokedForBaseClassFieldsHoldingSubClassInsta assertEquals(BaseSerializer.NAME, base.get(Base.SERIALIZER_KEY).getAsString()); } - public void testSerializerReturnsNull() { + @Test + public void testSerializerReturnsNull() { Gson gson = new GsonBuilder() .registerTypeAdapter(Base.class, new JsonSerializer() { @Override public JsonElement serialize(Base src, Type typeOfSrc, JsonSerializationContext context) { diff --git a/gson/src/test/java/com/google/gson/functional/CustomTypeAdaptersTest.java b/gson/src/test/java/com/google/gson/functional/CustomTypeAdaptersTest.java index 1c38e6caea..3881f09685 100644 --- a/gson/src/test/java/com/google/gson/functional/CustomTypeAdaptersTest.java +++ b/gson/src/test/java/com/google/gson/functional/CustomTypeAdaptersTest.java @@ -15,6 +15,11 @@ */ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.InstanceCreator; @@ -35,7 +40,9 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; /** * Functional tests for the support of custom serializer and deserializers. @@ -43,15 +50,15 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class CustomTypeAdaptersTest extends TestCase { +public class CustomTypeAdaptersTest { private GsonBuilder builder; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { builder = new GsonBuilder(); } + @Test public void testCustomSerializers() { Gson gson = builder.registerTypeAdapter( ClassWithCustomTypeConverter.class, new JsonSerializer() { @@ -67,6 +74,7 @@ public void testCustomSerializers() { assertEquals("{\"bag\":5,\"value\":25}", gson.toJson(target)); } + @Test public void testCustomDeserializers() { Gson gson = new GsonBuilder().registerTypeAdapter( ClassWithCustomTypeConverter.class, new JsonDeserializer() { @@ -83,6 +91,8 @@ public void testCustomDeserializers() { assertEquals(5, target.getBag().getIntValue()); } + @Test + @Ignore public void disable_testCustomSerializersOfSelf() { Gson gson = createGsonObjectWithFooTypeAdapter(); Gson basicGson = new Gson(); @@ -93,6 +103,8 @@ public void disable_testCustomSerializersOfSelf() { assertEquals(jsonFromGson, jsonFromCustomSerializer); } + @Test + @Ignore public void disable_testCustomDeserializersOfSelf() { Gson gson = createGsonObjectWithFooTypeAdapter(); Gson basicGson = new Gson(); @@ -104,6 +116,7 @@ public void disable_testCustomDeserializersOfSelf() { assertEquals(expectedFoo.value, newFooObject.value); } + @Test public void testCustomNestedSerializers() { Gson gson = new GsonBuilder().registerTypeAdapter( BagOfPrimitives.class, new JsonSerializer() { @@ -116,6 +129,7 @@ public void testCustomNestedSerializers() { assertEquals("{\"bag\":6,\"value\":10}", gson.toJson(target)); } + @Test public void testCustomNestedDeserializers() { Gson gson = new GsonBuilder().registerTypeAdapter( BagOfPrimitives.class, new JsonDeserializer() { @@ -130,6 +144,7 @@ public void testCustomNestedDeserializers() { assertEquals(7, target.getBag().getIntValue()); } + @Test public void testCustomTypeAdapterDoesNotAppliesToSubClasses() { Gson gson = new GsonBuilder().registerTypeAdapter(Base.class, new JsonSerializer () { @Override @@ -147,6 +162,7 @@ public JsonElement serialize(Base src, Type typeOfSrc, JsonSerializationContext assertTrue(json.contains("derivedValue")); } + @Test public void testCustomTypeAdapterAppliesToSubClassesSerializedAsBaseClass() { Gson gson = new GsonBuilder().registerTypeAdapter(Base.class, new JsonSerializer () { @Override @@ -206,6 +222,7 @@ public JsonElement serialize(Foo src, Type typeOfSrc, JsonSerializationContext c } } + @Test public void testCustomSerializerInvokedForPrimitives() { Gson gson = new GsonBuilder() .registerTypeAdapter(boolean.class, new JsonSerializer() { @@ -218,6 +235,7 @@ public void testCustomSerializerInvokedForPrimitives() { assertEquals("true", gson.toJson(true, Boolean.class)); } + @Test public void testCustomDeserializerInvokedForPrimitives() { Gson gson = new GsonBuilder() .registerTypeAdapter(boolean.class, new JsonDeserializer() { @@ -231,6 +249,7 @@ public Boolean deserialize(JsonElement json, Type t, JsonDeserializationContext assertEquals(Boolean.TRUE, gson.fromJson("true", Boolean.class)); } + @Test public void testCustomByteArraySerializer() { Gson gson = new GsonBuilder().registerTypeAdapter(byte[].class, new JsonSerializer() { @Override @@ -247,6 +266,7 @@ public JsonElement serialize(byte[] src, Type typeOfSrc, JsonSerializationContex assertEquals("\"0123456789\"", json); } + @Test public void testCustomByteArrayDeserializerAndInstanceCreator() { GsonBuilder gsonBuilder = new GsonBuilder().registerTypeAdapter(byte[].class, new JsonDeserializer() { @@ -305,6 +325,7 @@ private static class StringHolderTypeAdapter implements JsonSerializer c assertEquals(null, gson.fromJson("null", c)); } + @Test public void testUuidSerialization() throws Exception { String uuidValue = "c237bec1-19ef-4858-a98e-521cf0aad4c0"; UUID uuid = UUID.fromString(uuidValue); assertEquals('"' + uuidValue + '"', gson.toJson(uuid)); } + @Test public void testUuidDeserialization() { String uuidValue = "c237bec1-19ef-4858-a98e-521cf0aad4c0"; String json = '"' + uuidValue + '"'; @@ -204,34 +220,40 @@ public void testUuidDeserialization() { assertEquals(uuidValue, target.toString()); } + @Test public void testLocaleSerializationWithLanguage() { Locale target = new Locale("en"); assertEquals("\"en\"", gson.toJson(target)); } + @Test public void testLocaleDeserializationWithLanguage() { String json = "\"en\""; Locale locale = gson.fromJson(json, Locale.class); assertEquals("en", locale.getLanguage()); } + @Test public void testLocaleSerializationWithLanguageCountry() { Locale target = Locale.CANADA_FRENCH; assertEquals("\"fr_CA\"", gson.toJson(target)); } + @Test public void testLocaleDeserializationWithLanguageCountry() { String json = "\"fr_CA\""; Locale locale = gson.fromJson(json, Locale.class); assertEquals(Locale.CANADA_FRENCH, locale); } + @Test public void testLocaleSerializationWithLanguageCountryVariant() { Locale target = new Locale("de", "DE", "EURO"); String json = gson.toJson(target); assertEquals("\"de_DE_EURO\"", json); } + @Test public void testLocaleDeserializationWithLanguageCountryVariant() { String json = "\"de_DE_EURO\""; Locale locale = gson.fromJson(json, Locale.class); @@ -240,6 +262,7 @@ public void testLocaleDeserializationWithLanguageCountryVariant() { assertEquals("EURO", locale.getVariant()); } + @Test public void testBigDecimalFieldSerialization() { ClassWithBigDecimal target = new ClassWithBigDecimal("-122.01e-21"); String json = gson.toJson(target); @@ -247,6 +270,7 @@ public void testBigDecimalFieldSerialization() { assertEquals(target.value, new BigDecimal(actual)); } + @Test public void testBigDecimalFieldDeserialization() { ClassWithBigDecimal expected = new ClassWithBigDecimal("-122.01e-21"); String json = expected.getExpectedJson(); @@ -254,6 +278,7 @@ public void testBigDecimalFieldDeserialization() { assertEquals(expected.value, actual.value); } + @Test public void testBadValueForBigDecimalDeserialization() { try { gson.fromJson("{\"value\"=1.5e-1.0031}", ClassWithBigDecimal.class); @@ -261,12 +286,14 @@ public void testBadValueForBigDecimalDeserialization() { } catch (JsonParseException expected) { } } + @Test public void testBigIntegerFieldSerialization() { ClassWithBigInteger target = new ClassWithBigInteger("23232323215323234234324324324324324324"); String json = gson.toJson(target); assertEquals(target.getExpectedJson(), json); } + @Test public void testBigIntegerFieldDeserialization() { ClassWithBigInteger expected = new ClassWithBigInteger("879697697697697697697697697697697697"); String json = expected.getExpectedJson(); @@ -274,6 +301,7 @@ public void testBigIntegerFieldDeserialization() { assertEquals(expected.value, actual.value); } + @Test public void testOverrideBigIntegerTypeAdapter() throws Exception { gson = new GsonBuilder() .registerTypeAdapter(BigInteger.class, new NumberAsStringAdapter(BigInteger.class)) @@ -282,6 +310,7 @@ public void testOverrideBigIntegerTypeAdapter() throws Exception { assertEquals(new BigInteger("123"), gson.fromJson("\"123\"", BigInteger.class)); } + @Test public void testOverrideBigDecimalTypeAdapter() throws Exception { gson = new GsonBuilder() .registerTypeAdapter(BigDecimal.class, new NumberAsStringAdapter(BigDecimal.class)) @@ -290,6 +319,7 @@ public void testOverrideBigDecimalTypeAdapter() throws Exception { assertEquals(new BigDecimal("1.1"), gson.fromJson("\"1.1\"", BigDecimal.class)); } + @Test public void testSetSerialization() throws Exception { Gson gson = new Gson(); HashSet s = new HashSet<>(); @@ -301,6 +331,7 @@ public void testSetSerialization() throws Exception { assertEquals("[\"blah\"]", json); } + @Test public void testBitSetSerialization() throws Exception { Gson gson = new Gson(); BitSet bits = new BitSet(); @@ -311,6 +342,7 @@ public void testBitSetSerialization() throws Exception { assertEquals("[0,1,0,1,1,1,0,0,0,1]", json); } + @Test public void testBitSetDeserialization() throws Exception { BitSet expected = new BitSet(); expected.set(0); @@ -345,6 +377,7 @@ public void testBitSetDeserialization() throws Exception { } } + @Test public void testDefaultDateSerialization() { Date now = new Date(1315806903103L); String json = gson.toJson(now); @@ -355,6 +388,7 @@ public void testDefaultDateSerialization() { } } + @Test public void testDefaultDateDeserialization() { String json = "'Dec 13, 2009 07:18:02 AM'"; Date extracted = gson.fromJson(json, Date.class); @@ -378,6 +412,7 @@ public static void assertEqualsTime(Date date, int hours, int minutes, int secon assertEquals(seconds, date.getSeconds()); } + @Test public void testDefaultDateSerializationUsingBuilder() throws Exception { Gson gson = new GsonBuilder().create(); Date now = new Date(1315806903103L); @@ -389,6 +424,7 @@ public void testDefaultDateSerializationUsingBuilder() throws Exception { } } + @Test public void testDefaultDateDeserializationUsingBuilder() throws Exception { Gson gson = new GsonBuilder().create(); Date now = new Date(1315806903103L); @@ -397,6 +433,7 @@ public void testDefaultDateDeserializationUsingBuilder() throws Exception { assertEquals(now.toString(), extracted.toString()); } + @Test public void testDefaultCalendarSerialization() throws Exception { Gson gson = new GsonBuilder().create(); String json = gson.toJson(Calendar.getInstance()); @@ -408,6 +445,7 @@ public void testDefaultCalendarSerialization() throws Exception { assertTrue(json.contains("second")); } + @Test public void testDefaultCalendarDeserialization() throws Exception { Gson gson = new GsonBuilder().create(); String json = "{year:2009,month:2,dayOfMonth:11,hourOfDay:14,minute:29,second:23}"; @@ -420,6 +458,7 @@ public void testDefaultCalendarDeserialization() throws Exception { assertEquals(23, cal.get(Calendar.SECOND)); } + @Test public void testDefaultGregorianCalendarSerialization() throws Exception { Gson gson = new GsonBuilder().create(); GregorianCalendar cal = new GregorianCalendar(); @@ -432,6 +471,7 @@ public void testDefaultGregorianCalendarSerialization() throws Exception { assertTrue(json.contains("second")); } + @Test public void testDefaultGregorianCalendarDeserialization() throws Exception { Gson gson = new GsonBuilder().create(); String json = "{year:2009,month:2,dayOfMonth:11,hourOfDay:14,minute:29,second:23}"; @@ -444,6 +484,7 @@ public void testDefaultGregorianCalendarDeserialization() throws Exception { assertEquals(23, cal.get(Calendar.SECOND)); } + @Test public void testDateSerializationWithPattern() throws Exception { String pattern = "yyyy-MM-dd"; Gson gson = new GsonBuilder().setDateFormat(DateFormat.FULL).setDateFormat(pattern).create(); @@ -453,6 +494,7 @@ public void testDateSerializationWithPattern() throws Exception { } @SuppressWarnings("deprecation") + @Test public void testDateDeserializationWithPattern() throws Exception { String pattern = "yyyy-MM-dd"; Gson gson = new GsonBuilder().setDateFormat(DateFormat.FULL).setDateFormat(pattern).create(); @@ -464,6 +506,7 @@ public void testDateDeserializationWithPattern() throws Exception { assertEquals(now.getDay(), extracted.getDay()); } + @Test public void testDateSerializationWithPatternNotOverridenByTypeAdapter() throws Exception { String pattern = "yyyy-MM-dd"; Gson gson = new GsonBuilder() @@ -483,6 +526,7 @@ public void testDateSerializationWithPatternNotOverridenByTypeAdapter() throws E } // http://code.google.com/p/google-gson/issues/detail?id=230 + @Test public void testDateSerializationInCollection() throws Exception { Type listOfDates = new TypeToken>() {}.getType(); TimeZone defaultTimeZone = TimeZone.getDefault(); @@ -501,6 +545,7 @@ public void testDateSerializationInCollection() throws Exception { } } + @Test public void testJsonPrimitiveSerialization() { assertEquals("5", gson.toJson(new JsonPrimitive(5), JsonElement.class)); assertEquals("true", gson.toJson(new JsonPrimitive(true), JsonElement.class)); @@ -508,6 +553,7 @@ public void testJsonPrimitiveSerialization() { assertEquals("\"a\"", gson.toJson(new JsonPrimitive('a'), JsonElement.class)); } + @Test public void testJsonPrimitiveDeserialization() { assertEquals(new JsonPrimitive(5), gson.fromJson("5", JsonElement.class)); assertEquals(new JsonPrimitive(5), gson.fromJson("5", JsonPrimitive.class)); @@ -519,16 +565,19 @@ public void testJsonPrimitiveDeserialization() { assertEquals(new JsonPrimitive('a'), gson.fromJson("\"a\"", JsonPrimitive.class)); } + @Test public void testJsonNullSerialization() { assertEquals("null", gson.toJson(JsonNull.INSTANCE, JsonElement.class)); assertEquals("null", gson.toJson(JsonNull.INSTANCE, JsonNull.class)); } + @Test public void testNullJsonElementSerialization() { assertEquals("null", gson.toJson(null, JsonElement.class)); assertEquals("null", gson.toJson(null, JsonNull.class)); } + @Test public void testJsonArraySerialization() { JsonArray array = new JsonArray(); array.add(new JsonPrimitive(1)); @@ -537,6 +586,7 @@ public void testJsonArraySerialization() { assertEquals("[1,2,3]", gson.toJson(array, JsonElement.class)); } + @Test public void testJsonArrayDeserialization() { JsonArray array = new JsonArray(); array.add(new JsonPrimitive(1)); @@ -548,6 +598,7 @@ public void testJsonArrayDeserialization() { assertEquals(array, gson.fromJson(json, JsonArray.class)); } + @Test public void testJsonObjectSerialization() { JsonObject object = new JsonObject(); object.add("foo", new JsonPrimitive(1)); @@ -555,6 +606,7 @@ public void testJsonObjectSerialization() { assertEquals("{\"foo\":1,\"bar\":2}", gson.toJson(object, JsonElement.class)); } + @Test public void testJsonObjectDeserialization() { JsonObject object = new JsonObject(); object.add("foo", new JsonPrimitive(1)); @@ -568,11 +620,13 @@ public void testJsonObjectDeserialization() { assertEquals(object, actualObj); } + @Test public void testJsonNullDeserialization() { assertEquals(JsonNull.INSTANCE, gson.fromJson("null", JsonElement.class)); assertEquals(JsonNull.INSTANCE, gson.fromJson("null", JsonNull.class)); } + @Test public void testJsonElementTypeMismatch() { try { gson.fromJson("\"abc\"", JsonObject.class); @@ -603,6 +657,7 @@ String getExpectedJson() { } } + @Test public void testPropertiesSerialization() { Properties props = new Properties(); props.setProperty("foo", "bar"); @@ -611,12 +666,14 @@ public void testPropertiesSerialization() { assertEquals(expected, json); } + @Test public void testPropertiesDeserialization() { String json = "{foo:'bar'}"; Properties props = gson.fromJson(json, Properties.class); assertEquals("bar", props.getProperty("foo")); } + @Test public void testTreeSetSerialization() { TreeSet treeSet = new TreeSet<>(); treeSet.add("Value1"); @@ -624,6 +681,7 @@ public void testTreeSetSerialization() { assertEquals("[\"Value1\"]", json); } + @Test public void testTreeSetDeserialization() { String json = "['Value1']"; Type type = new TypeToken>() {}.getType(); @@ -631,23 +689,27 @@ public void testTreeSetDeserialization() { assertTrue(treeSet.contains("Value1")); } + @Test public void testStringBuilderSerialization() { StringBuilder sb = new StringBuilder("abc"); String json = gson.toJson(sb); assertEquals("\"abc\"", json); } + @Test public void testStringBuilderDeserialization() { StringBuilder sb = gson.fromJson("'abc'", StringBuilder.class); assertEquals("abc", sb.toString()); } + @Test public void testStringBufferSerialization() { StringBuffer sb = new StringBuffer("abc"); String json = gson.toJson(sb); assertEquals("\"abc\"", json); } + @Test public void testStringBufferDeserialization() { StringBuffer sb = gson.fromJson("'abc'", StringBuffer.class); assertEquals("abc", sb.toString()); diff --git a/gson/src/test/java/com/google/gson/functional/DelegateTypeAdapterTest.java b/gson/src/test/java/com/google/gson/functional/DelegateTypeAdapterTest.java index 87ee81e57d..68e7c36321 100644 --- a/gson/src/test/java/com/google/gson/functional/DelegateTypeAdapterTest.java +++ b/gson/src/test/java/com/google/gson/functional/DelegateTypeAdapterTest.java @@ -15,11 +15,7 @@ */ package com.google.gson.functional; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -29,26 +25,31 @@ import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for {@link Gson#getDelegateAdapter(TypeAdapterFactory, TypeToken)} method. * * @author Inderjeet Singh */ -public class DelegateTypeAdapterTest extends TestCase { +public class DelegateTypeAdapterTest { private StatsTypeAdapterFactory stats; private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { stats = new StatsTypeAdapterFactory(); gson = new GsonBuilder() .registerTypeAdapterFactory(stats) .create(); } + @Test public void testDelegateInvoked() { List bags = new ArrayList<>(); for (int i = 0; i < 10; ++i) { @@ -61,6 +62,7 @@ public void testDelegateInvoked() { assertEquals(51, stats.numWrites); } + @Test public void testDelegateInvokedOnStrings() { String[] bags = {"1", "2", "3", "4"}; String json = gson.toJson(bags); diff --git a/gson/src/test/java/com/google/gson/functional/EnumTest.java b/gson/src/test/java/com/google/gson/functional/EnumTest.java index b46f80b86b..7bb306d04e 100644 --- a/gson/src/test/java/com/google/gson/functional/EnumTest.java +++ b/gson/src/test/java/com/google/gson/functional/EnumTest.java @@ -16,6 +16,11 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; @@ -36,7 +41,8 @@ import java.util.EnumSet; import java.util.Map; import java.util.Set; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for Java 5.0 enums. @@ -44,26 +50,28 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class EnumTest extends TestCase { +public class EnumTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testTopLevelEnumSerialization() throws Exception { String result = gson.toJson(MyEnum.VALUE1); assertEquals('"' + MyEnum.VALUE1.toString() + '"', result); } + @Test public void testTopLevelEnumDeserialization() throws Exception { MyEnum result = gson.fromJson('"' + MyEnum.VALUE1.toString() + '"', MyEnum.class); assertEquals(MyEnum.VALUE1, result); } + @Test public void testCollectionOfEnumsSerialization() { Type type = new TypeToken>() {}.getType(); Collection target = new ArrayList<>(); @@ -76,6 +84,7 @@ public void testCollectionOfEnumsSerialization() { assertEquals(expectedJson, actualJson); } + @Test public void testCollectionOfEnumsDeserialization() { Type type = new TypeToken>() {}.getType(); String json = "[\"VALUE1\",\"VALUE2\"]"; @@ -84,11 +93,13 @@ public void testCollectionOfEnumsDeserialization() { MoreAsserts.assertContains(target, MyEnum.VALUE2); } + @Test public void testClassWithEnumFieldSerialization() throws Exception { ClassWithEnumFields target = new ClassWithEnumFields(); assertEquals(target.getExpectedJson(), gson.toJson(target)); } + @Test public void testClassWithEnumFieldDeserialization() throws Exception { String json = "{value1:'VALUE1',value2:'VALUE2'}"; ClassWithEnumFields target = gson.fromJson(json, ClassWithEnumFields.class); @@ -111,6 +122,7 @@ public String getExpectedJson() { /** * Test for issue 226. */ + @Test public void testEnumSubclass() { assertFalse(Roshambo.class == Roshambo.ROCK.getClass()); assertEquals("\"ROCK\"", gson.toJson(Roshambo.ROCK)); @@ -120,6 +132,7 @@ public void testEnumSubclass() { gson.fromJson("[\"ROCK\",\"PAPER\",\"SCISSORS\"]", new TypeToken>() {}.getType())); } + @Test public void testEnumSubclassWithRegisteredTypeAdapter() { gson = new GsonBuilder() .registerTypeHierarchyAdapter(Roshambo.class, new MyEnumTypeAdapter()) @@ -132,6 +145,7 @@ public void testEnumSubclassWithRegisteredTypeAdapter() { gson.fromJson("[\"123ROCK\",\"123PAPER\",\"123SCISSORS\"]", new TypeToken>() {}.getType())); } + @Test public void testEnumSubclassAsParameterizedType() { Collection list = new ArrayList<>(); list.add(Roshambo.ROCK); @@ -146,11 +160,13 @@ public void testEnumSubclassAsParameterizedType() { MoreAsserts.assertContains(actualJsonList, Roshambo.PAPER); } + @Test public void testEnumCaseMapping() { assertEquals(Gender.MALE, gson.fromJson("\"boy\"", Gender.class)); assertEquals("\"boy\"", gson.toJson(Gender.MALE, Gender.class)); } + @Test public void testEnumSet() { EnumSet foo = EnumSet.of(Roshambo.ROCK, Roshambo.PAPER); String json = gson.toJson(foo); @@ -163,6 +179,7 @@ public void testEnumSet() { assertFalse(bar.contains(Roshambo.SCISSORS)); } + @Test public void testEnumMap() throws Exception { EnumMap map = new EnumMap<>(MyEnum.class); map.put(MyEnum.VALUE1, "test"); @@ -215,6 +232,7 @@ private enum Gender { FEMALE } + @Test public void testEnumClassWithFields() { assertEquals("\"RED\"", gson.toJson(Color.RED)); assertEquals("red", gson.fromJson("RED", Color.class).value); @@ -231,6 +249,7 @@ private Color(String value, int index) { } } + @Test public void testEnumToStringRead() { // Should still be able to read constant name assertEquals(CustomToString.A, gson.fromJson("\"A\"", CustomToString.class)); @@ -253,6 +272,7 @@ public String toString() { * Test that enum constant names have higher precedence than {@code toString()} * result. */ + @Test public void testEnumToStringReadInterchanged() { assertEquals(InterchangedToString.A, gson.fromJson("\"A\"", InterchangedToString.class)); assertEquals(InterchangedToString.B, gson.fromJson("\"B\"", InterchangedToString.class)); diff --git a/gson/src/test/java/com/google/gson/functional/EnumWithObfuscatedTest.java b/gson/src/test/java/com/google/gson/functional/EnumWithObfuscatedTest.java index 080b81fa77..373f0071b4 100644 --- a/gson/src/test/java/com/google/gson/functional/EnumWithObfuscatedTest.java +++ b/gson/src/test/java/com/google/gson/functional/EnumWithObfuscatedTest.java @@ -16,22 +16,24 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; - -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for enums with Proguard. * * @author Young Cha */ -public class EnumWithObfuscatedTest extends TestCase { +public class EnumWithObfuscatedTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } @@ -43,6 +45,7 @@ public enum Gender { FEMALE } + @Test public void testEnumClassWithObfuscated() { for (Gender enumConstant: Gender.class.getEnumConstants()) { try { diff --git a/gson/src/test/java/com/google/gson/functional/EscapingTest.java b/gson/src/test/java/com/google/gson/functional/EscapingTest.java index 053fd9a288..f8c6f4fe09 100644 --- a/gson/src/test/java/com/google/gson/functional/EscapingTest.java +++ b/gson/src/test/java/com/google/gson/functional/EscapingTest.java @@ -16,12 +16,17 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.common.TestTypes.BagOfPrimitives; import java.util.ArrayList; import java.util.List; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Performs some functional test involving JSON output escaping. @@ -29,15 +34,15 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class EscapingTest extends TestCase { +public class EscapingTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testEscapingQuotesInStringArray() throws Exception { String[] valueWithQuotes = { "beforeQuote\"afterQuote" }; String jsonRepresentation = gson.toJson(valueWithQuotes); @@ -46,6 +51,7 @@ public void testEscapingQuotesInStringArray() throws Exception { assertEquals(valueWithQuotes[0], target[0]); } + @Test public void testEscapeAllHtmlCharacters() { List strings = new ArrayList<>(); strings.add("<"); @@ -58,6 +64,7 @@ public void testEscapeAllHtmlCharacters() { gson.toJson(strings)); } + @Test public void testEscapingObjectFields() throws Exception { BagOfPrimitives objWithPrimitives = new BagOfPrimitives(1L, 1, true, "test with\" "; String result = gson.toJson(target); @@ -708,6 +787,7 @@ public void testHtmlCharacterSerialization() throws Exception { assertTrue(result.equals('"' + target + '"')); } + @Test public void testDeserializePrimitiveWrapperAsObjectField() { String json = "{i:10}"; ClassWithIntegerField target = gson.fromJson(json, ClassWithIntegerField.class); @@ -718,12 +798,14 @@ private static class ClassWithIntegerField { Integer i; } + @Test public void testPrimitiveClassLiteral() { assertEquals(1, gson.fromJson("1", int.class).intValue()); assertEquals(1, gson.fromJson(new StringReader("1"), int.class).intValue()); assertEquals(1, gson.fromJson(new JsonPrimitive(1), int.class).intValue()); } + @Test public void testDeserializeJsonObjectAsLongPrimitive() { try { gson.fromJson("{'abc':1}", long.class); @@ -731,6 +813,7 @@ public void testDeserializeJsonObjectAsLongPrimitive() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsLongWrapper() { try { gson.fromJson("[1,2,3]", Long.class); @@ -738,6 +821,7 @@ public void testDeserializeJsonArrayAsLongWrapper() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsInt() { try { gson.fromJson("[1, 2, 3, 4]", int.class); @@ -745,6 +829,7 @@ public void testDeserializeJsonArrayAsInt() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonObjectAsInteger() { try { gson.fromJson("{}", Integer.class); @@ -752,6 +837,7 @@ public void testDeserializeJsonObjectAsInteger() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonObjectAsShortPrimitive() { try { gson.fromJson("{'abc':1}", short.class); @@ -759,6 +845,7 @@ public void testDeserializeJsonObjectAsShortPrimitive() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsShortWrapper() { try { gson.fromJson("['a','b']", Short.class); @@ -766,6 +853,7 @@ public void testDeserializeJsonArrayAsShortWrapper() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsDoublePrimitive() { try { gson.fromJson("[1,2]", double.class); @@ -773,6 +861,7 @@ public void testDeserializeJsonArrayAsDoublePrimitive() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonObjectAsDoubleWrapper() { try { gson.fromJson("{'abc':1}", Double.class); @@ -780,6 +869,7 @@ public void testDeserializeJsonObjectAsDoubleWrapper() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonObjectAsFloatPrimitive() { try { gson.fromJson("{'abc':1}", float.class); @@ -787,6 +877,7 @@ public void testDeserializeJsonObjectAsFloatPrimitive() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsFloatWrapper() { try { gson.fromJson("[1,2,3]", Float.class); @@ -794,6 +885,7 @@ public void testDeserializeJsonArrayAsFloatWrapper() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonObjectAsBytePrimitive() { try { gson.fromJson("{'abc':1}", byte.class); @@ -801,6 +893,7 @@ public void testDeserializeJsonObjectAsBytePrimitive() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsByteWrapper() { try { gson.fromJson("[1,2,3,4]", Byte.class); @@ -808,6 +901,7 @@ public void testDeserializeJsonArrayAsByteWrapper() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonObjectAsBooleanPrimitive() { try { gson.fromJson("{'abc':1}", boolean.class); @@ -815,6 +909,7 @@ public void testDeserializeJsonObjectAsBooleanPrimitive() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsBooleanWrapper() { try { gson.fromJson("[1,2,3,4]", Boolean.class); @@ -822,6 +917,7 @@ public void testDeserializeJsonArrayAsBooleanWrapper() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsBigDecimal() { try { gson.fromJson("[1,2,3,4]", BigDecimal.class); @@ -829,6 +925,7 @@ public void testDeserializeJsonArrayAsBigDecimal() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonObjectAsBigDecimal() { try { gson.fromJson("{'a':1}", BigDecimal.class); @@ -836,6 +933,7 @@ public void testDeserializeJsonObjectAsBigDecimal() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsBigInteger() { try { gson.fromJson("[1,2,3,4]", BigInteger.class); @@ -843,6 +941,7 @@ public void testDeserializeJsonArrayAsBigInteger() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonObjectAsBigInteger() { try { gson.fromJson("{'c':2}", BigInteger.class); @@ -850,6 +949,7 @@ public void testDeserializeJsonObjectAsBigInteger() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonArrayAsNumber() { try { gson.fromJson("[1,2,3,4]", Number.class); @@ -857,6 +957,7 @@ public void testDeserializeJsonArrayAsNumber() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializeJsonObjectAsNumber() { try { gson.fromJson("{'c':2}", Number.class); @@ -864,10 +965,12 @@ public void testDeserializeJsonObjectAsNumber() { } catch (JsonSyntaxException expected) {} } + @Test public void testDeserializingDecimalPointValueZeroSucceeds() { assertEquals(1, (int) gson.fromJson("1.0", Integer.class)); } + @Test public void testDeserializingNonZeroDecimalPointValuesAsIntegerFails() { try { gson.fromJson("1.02", Byte.class); @@ -891,6 +994,7 @@ public void testDeserializingNonZeroDecimalPointValuesAsIntegerFails() { } } + @Test public void testDeserializingBigDecimalAsIntegerFails() { try { gson.fromJson("-122.08e-213", Integer.class); @@ -899,6 +1003,7 @@ public void testDeserializingBigDecimalAsIntegerFails() { } } + @Test public void testDeserializingBigIntegerAsInteger() { try { gson.fromJson("12121211243123245845384534687435634558945453489543985435", Integer.class); @@ -907,6 +1012,7 @@ public void testDeserializingBigIntegerAsInteger() { } } + @Test public void testDeserializingBigIntegerAsLong() { try { gson.fromJson("12121211243123245845384534687435634558945453489543985435", Long.class); @@ -915,29 +1021,33 @@ public void testDeserializingBigIntegerAsLong() { } } + @Test public void testValueVeryCloseToZeroIsZero() { assertEquals(0, (byte) gson.fromJson("-122.08e-2132", byte.class)); assertEquals(0, (short) gson.fromJson("-122.08e-2132", short.class)); assertEquals(0, (int) gson.fromJson("-122.08e-2132", int.class)); assertEquals(0, (long) gson.fromJson("-122.08e-2132", long.class)); - assertEquals(-0.0f, gson.fromJson("-122.08e-2132", float.class)); - assertEquals(-0.0, gson.fromJson("-122.08e-2132", double.class)); - assertEquals(0.0f, gson.fromJson("122.08e-2132", float.class)); - assertEquals(0.0, gson.fromJson("122.08e-2132", double.class)); + assertEquals(-0.0f, gson.fromJson("-122.08e-2132", float.class), 0); + assertEquals(-0.0, gson.fromJson("-122.08e-2132", double.class), 0); + assertEquals(0.0f, gson.fromJson("122.08e-2132", float.class), 0); + assertEquals(0.0, gson.fromJson("122.08e-2132", double.class), 0); } + @Test public void testDeserializingBigDecimalAsFloat() { String json = "-122.08e-2132332"; float actual = gson.fromJson(json, float.class); - assertEquals(-0.0f, actual); + assertEquals(-0.0f, actual, 0); } + @Test public void testDeserializingBigDecimalAsDouble() { String json = "-122.08e-2132332"; double actual = gson.fromJson(json, double.class); - assertEquals(-0.0d, actual); + assertEquals(-0.0d, actual, 0); } + @Test public void testDeserializingBigDecimalAsBigIntegerFails() { try { gson.fromJson("-122.08e-213", BigInteger.class); @@ -946,12 +1056,14 @@ public void testDeserializingBigDecimalAsBigIntegerFails() { } } + @Test public void testDeserializingBigIntegerAsBigDecimal() { BigDecimal actual = gson.fromJson("12121211243123245845384534687435634558945453489543985435", BigDecimal.class); assertEquals("12121211243123245845384534687435634558945453489543985435", actual.toPlainString()); } + @Test public void testStringsAsBooleans() { String json = "['true', 'false', 'TRUE', 'yes', '1']"; assertEquals(Arrays.asList(true, false, true, false, false), diff --git a/gson/src/test/java/com/google/gson/functional/PrintFormattingTest.java b/gson/src/test/java/com/google/gson/functional/PrintFormattingTest.java index 6801ba00ca..55d7606c60 100644 --- a/gson/src/test/java/com/google/gson/functional/PrintFormattingTest.java +++ b/gson/src/test/java/com/google/gson/functional/PrintFormattingTest.java @@ -16,6 +16,9 @@ package com.google.gson.functional; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; @@ -25,7 +28,8 @@ import com.google.gson.common.TestTypes.PrimitiveArray; import java.util.ArrayList; import java.util.List; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for print formatting. @@ -33,16 +37,16 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class PrintFormattingTest extends TestCase { +public class PrintFormattingTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testCompactFormattingLeavesNoWhiteSpace() { List list = new ArrayList<>(); list.add(new BagOfPrimitives()); @@ -54,6 +58,7 @@ public void testCompactFormattingLeavesNoWhiteSpace() { assertContainsNoWhiteSpace(json); } + @Test public void testJsonObjectWithNullValues() { JsonObject obj = new JsonObject(); obj.addProperty("field1", "value1"); @@ -63,6 +68,7 @@ public void testJsonObjectWithNullValues() { assertFalse(json.contains("field2")); } + @Test public void testJsonObjectWithNullValuesSerialized() { gson = new GsonBuilder().serializeNulls().create(); JsonObject obj = new JsonObject(); diff --git a/gson/src/test/java/com/google/gson/functional/RawSerializationTest.java b/gson/src/test/java/com/google/gson/functional/RawSerializationTest.java index 7876999d09..6e7ada6ecb 100644 --- a/gson/src/test/java/com/google/gson/functional/RawSerializationTest.java +++ b/gson/src/test/java/com/google/gson/functional/RawSerializationTest.java @@ -15,41 +15,44 @@ */ package com.google.gson.functional; -import java.util.Arrays; -import java.util.Collection; - -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import java.util.Arrays; +import java.util.Collection; +import org.junit.Before; +import org.junit.Test; /** * Unit tests to validate serialization of parameterized types without explicit types * * @author Inderjeet Singh */ -public class RawSerializationTest extends TestCase { +public class RawSerializationTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testCollectionOfPrimitives() { Collection ints = Arrays.asList(1, 2, 3, 4, 5); String json = gson.toJson(ints); assertEquals("[1,2,3,4,5]", json); } + @Test public void testCollectionOfObjects() { Collection foos = Arrays.asList(new Foo(1), new Foo(2)); String json = gson.toJson(foos); assertEquals("[{\"b\":1},{\"b\":2}]", json); } + @Test public void testParameterizedObject() { Bar bar = new Bar<>(new Foo(1)); String expectedJson = "{\"t\":{\"b\":1}}"; @@ -61,6 +64,7 @@ public void testParameterizedObject() { assertEquals(expectedJson, json); } + @Test public void testTwoLevelParameterizedObject() { Bar> bar = new Bar<>(new Bar<>(new Foo(1))); String expectedJson = "{\"t\":{\"t\":{\"b\":1}}}"; @@ -72,6 +76,7 @@ public void testTwoLevelParameterizedObject() { assertEquals(expectedJson, json); } + @Test public void testThreeLevelParameterizedObject() { Bar>> bar = new Bar<>(new Bar<>(new Bar<>(new Foo(1)))); String expectedJson = "{\"t\":{\"t\":{\"t\":{\"b\":1}}}}"; diff --git a/gson/src/test/java/com/google/gson/functional/ReadersWritersTest.java b/gson/src/test/java/com/google/gson/functional/ReadersWritersTest.java index a04723b576..4862cda465 100644 --- a/gson/src/test/java/com/google/gson/functional/ReadersWritersTest.java +++ b/gson/src/test/java/com/google/gson/functional/ReadersWritersTest.java @@ -15,6 +15,12 @@ */ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonStreamParser; @@ -30,7 +36,8 @@ import java.io.Writer; import java.util.Arrays; import java.util.Map; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for the support of {@link Reader}s and {@link Writer}s. @@ -38,15 +45,15 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class ReadersWritersTest extends TestCase { +public class ReadersWritersTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testWriterForSerialization() throws Exception { Writer writer = new StringWriter(); BagOfPrimitives src = new BagOfPrimitives(); @@ -54,6 +61,7 @@ public void testWriterForSerialization() throws Exception { assertEquals(src.getExpectedJson(), writer.toString()); } + @Test public void testReaderForDeserialization() throws Exception { BagOfPrimitives expected = new BagOfPrimitives(); Reader json = new StringReader(expected.getExpectedJson()); @@ -61,18 +69,21 @@ public void testReaderForDeserialization() throws Exception { assertEquals(expected, actual); } + @Test public void testTopLevelNullObjectSerializationWithWriter() { StringWriter writer = new StringWriter(); gson.toJson(null, writer); assertEquals("null", writer.toString()); } + @Test public void testTopLevelNullObjectDeserializationWithReader() { StringReader reader = new StringReader("null"); Integer nullIntObject = gson.fromJson(reader, Integer.class); assertNull(nullIntObject); } + @Test public void testTopLevelNullObjectSerializationWithWriterAndSerializeNulls() { Gson gson = new GsonBuilder().serializeNulls().create(); StringWriter writer = new StringWriter(); @@ -80,6 +91,7 @@ public void testTopLevelNullObjectSerializationWithWriterAndSerializeNulls() { assertEquals("null", writer.toString()); } + @Test public void testTopLevelNullObjectDeserializationWithReaderAndSerializeNulls() { Gson gson = new GsonBuilder().serializeNulls().create(); StringReader reader = new StringReader("null"); @@ -87,6 +99,7 @@ public void testTopLevelNullObjectDeserializationWithReaderAndSerializeNulls() { assertNull(nullIntObject); } + @Test public void testReadWriteTwoStrings() throws IOException { Gson gson = new Gson(); CharArrayWriter writer = new CharArrayWriter(); @@ -100,6 +113,7 @@ public void testReadWriteTwoStrings() throws IOException { assertEquals("two", actualTwo); } + @Test public void testReadWriteTwoObjects() throws IOException { Gson gson = new Gson(); CharArrayWriter writer = new CharArrayWriter(); @@ -116,6 +130,7 @@ public void testReadWriteTwoObjects() throws IOException { assertFalse(parser.hasNext()); } + @Test public void testTypeMismatchThrowsJsonSyntaxExceptionForStrings() { try { gson.fromJson("true", new TypeToken>() {}.getType()); @@ -124,6 +139,7 @@ public void testTypeMismatchThrowsJsonSyntaxExceptionForStrings() { } } + @Test public void testTypeMismatchThrowsJsonSyntaxExceptionForReaders() { try { gson.fromJson(new StringReader("true"), new TypeToken>() {}.getType()); @@ -136,6 +152,7 @@ public void testTypeMismatchThrowsJsonSyntaxExceptionForReaders() { * Verifies that passing an {@link Appendable} which is not an instance of {@link Writer} * to {@code Gson.toJson} works correctly. */ + @Test public void testToJsonAppendable() { class CustomAppendable implements Appendable { final StringBuilder stringBuilder = new StringBuilder(); diff --git a/gson/src/test/java/com/google/gson/functional/RuntimeTypeAdapterFactoryFunctionalTest.java b/gson/src/test/java/com/google/gson/functional/RuntimeTypeAdapterFactoryFunctionalTest.java index 0c6bd07a5a..c17cc54ae5 100644 --- a/gson/src/test/java/com/google/gson/functional/RuntimeTypeAdapterFactoryFunctionalTest.java +++ b/gson/src/test/java/com/google/gson/functional/RuntimeTypeAdapterFactoryFunctionalTest.java @@ -15,11 +15,7 @@ */ package com.google.gson.functional; -import java.io.IOException; -import java.util.LinkedHashMap; -import java.util.Map; - -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; import com.google.gson.Gson; import com.google.gson.JsonElement; @@ -33,11 +29,15 @@ import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; +import org.junit.Test; /** * Functional tests for the RuntimeTypeAdapterFactory feature in extras. */ -public final class RuntimeTypeAdapterFactoryFunctionalTest extends TestCase { +public final class RuntimeTypeAdapterFactoryFunctionalTest { private final Gson gson = new Gson(); @@ -45,6 +45,7 @@ public final class RuntimeTypeAdapterFactoryFunctionalTest extends TestCase { * This test also ensures that {@link TypeAdapterFactory} registered through {@link JsonAdapter} * work correctly for {@link Gson#getDelegateAdapter(TypeAdapterFactory, TypeToken)}. */ + @Test public void testSubclassesAutomaticallySerialized() throws Exception { Shape shape = new Circle(25); String json = gson.toJson(shape); diff --git a/gson/src/test/java/com/google/gson/functional/SecurityTest.java b/gson/src/test/java/com/google/gson/functional/SecurityTest.java index aa1c2d4517..9e9272e1ad 100644 --- a/gson/src/test/java/com/google/gson/functional/SecurityTest.java +++ b/gson/src/test/java/com/google/gson/functional/SecurityTest.java @@ -16,18 +16,21 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.common.TestTypes.BagOfPrimitives; - -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Tests for security-related aspects of Gson * * @author Inderjeet Singh */ -public class SecurityTest extends TestCase { +public class SecurityTest { /** * Keep this in sync with Gson.JSON_NON_EXECUTABLE_PREFIX */ @@ -35,18 +38,19 @@ public class SecurityTest extends TestCase { private GsonBuilder gsonBuilder; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gsonBuilder = new GsonBuilder(); } + @Test public void testNonExecutableJsonSerialization() { Gson gson = gsonBuilder.generateNonExecutableJson().create(); String json = gson.toJson(new BagOfPrimitives()); assertTrue(json.startsWith(JSON_NON_EXECUTABLE_PREFIX)); } + @Test public void testNonExecutableJsonDeserialization() { String json = JSON_NON_EXECUTABLE_PREFIX + "{longValue:1}"; Gson gson = gsonBuilder.create(); @@ -54,6 +58,7 @@ public void testNonExecutableJsonDeserialization() { assertEquals(1, target.longValue); } + @Test public void testJsonWithNonExectuableTokenSerialization() { Gson gson = gsonBuilder.generateNonExecutableJson().create(); String json = gson.toJson(JSON_NON_EXECUTABLE_PREFIX); @@ -64,6 +69,7 @@ public void testJsonWithNonExectuableTokenSerialization() { * Gson should be able to deserialize a stream with non-exectuable token even if it is created * without {@link GsonBuilder#generateNonExecutableJson()}. */ + @Test public void testJsonWithNonExectuableTokenWithRegularGsonDeserialization() { Gson gson = gsonBuilder.create(); String json = JSON_NON_EXECUTABLE_PREFIX + "{stringValue:')]}\\u0027\\n'}"; @@ -75,6 +81,7 @@ public void testJsonWithNonExectuableTokenWithRegularGsonDeserialization() { * Gson should be able to deserialize a stream with non-exectuable token if it is created * with {@link GsonBuilder#generateNonExecutableJson()}. */ + @Test public void testJsonWithNonExectuableTokenWithConfiguredGsonDeserialization() { // Gson should be able to deserialize a stream with non-exectuable token even if it is created Gson gson = gsonBuilder.generateNonExecutableJson().create(); diff --git a/gson/src/test/java/com/google/gson/functional/SerializedNameTest.java b/gson/src/test/java/com/google/gson/functional/SerializedNameTest.java index 0314ae0af7..a1633700a5 100644 --- a/gson/src/test/java/com/google/gson/functional/SerializedNameTest.java +++ b/gson/src/test/java/com/google/gson/functional/SerializedNameTest.java @@ -15,20 +15,23 @@ */ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; + import com.google.gson.Gson; import com.google.gson.annotations.SerializedName; +import org.junit.Test; -import junit.framework.TestCase; - -public final class SerializedNameTest extends TestCase { +public final class SerializedNameTest { private final Gson gson = new Gson(); + @Test public void testFirstNameIsChosenForSerialization() { MyClass target = new MyClass("v1", "v2"); // Ensure name1 occurs exactly once, and name2 and name3 don't appear assertEquals("{\"name\":\"v1\",\"name1\":\"v2\"}", gson.toJson(target)); } + @Test public void testMultipleNamesDeserializedCorrectly() { assertEquals("v1", gson.fromJson("{'name':'v1'}", MyClass.class).a); @@ -38,6 +41,7 @@ public void testMultipleNamesDeserializedCorrectly() { assertEquals("v3", gson.fromJson("{'name3':'v3'}", MyClass.class).b); } + @Test public void testMultipleNamesInTheSameString() { // The last value takes precedence assertEquals("v3", gson.fromJson("{'name1':'v1','name2':'v2','name3':'v3'}", MyClass.class).b); diff --git a/gson/src/test/java/com/google/gson/functional/StreamingTypeAdaptersTest.java b/gson/src/test/java/com/google/gson/functional/StreamingTypeAdaptersTest.java index 6884412074..ecd7dc35bd 100644 --- a/gson/src/test/java/com/google/gson/functional/StreamingTypeAdaptersTest.java +++ b/gson/src/test/java/com/google/gson/functional/StreamingTypeAdaptersTest.java @@ -16,6 +16,11 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; @@ -33,14 +38,15 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import junit.framework.TestCase; +import org.junit.Test; -public final class StreamingTypeAdaptersTest extends TestCase { +public final class StreamingTypeAdaptersTest { private Gson miniGson = new GsonBuilder().create(); private TypeAdapter truckAdapter = miniGson.getAdapter(Truck.class); private TypeAdapter> mapAdapter = miniGson.getAdapter(new TypeToken>() {}); + @Test public void testSerialize() { Truck truck = new Truck(); truck.passengers = Arrays.asList(new Person("Jesse", 29), new Person("Jodie", 29)); @@ -51,14 +57,16 @@ public void testSerialize() { truckAdapter.toJson(truck).replace('\"', '\'')); } + @Test public void testDeserialize() throws IOException { String json = "{'horsePower':300.0," + "'passengers':[{'age':29,'name':'Jesse'},{'age':29,'name':'Jodie'}]}"; Truck truck = truckAdapter.fromJson(json.replace('\'', '\"')); - assertEquals(300.0, truck.horsePower); + assertEquals(300.0, truck.horsePower, 0); assertEquals(Arrays.asList(new Person("Jesse", 29), new Person("Jodie", 29)), truck.passengers); } + @Test public void testSerializeNullField() { Truck truck = new Truck(); truck.passengers = null; @@ -66,11 +74,13 @@ public void testSerializeNullField() { truckAdapter.toJson(truck).replace('\"', '\'')); } + @Test public void testDeserializeNullField() throws IOException { Truck truck = truckAdapter.fromJson("{'horsePower':0.0,'passengers':null}".replace('\'', '\"')); assertNull(truck.passengers); } + @Test public void testSerializeNullObject() { Truck truck = new Truck(); truck.passengers = Arrays.asList((Person) null); @@ -78,11 +88,13 @@ public void testSerializeNullObject() { truckAdapter.toJson(truck).replace('\"', '\'')); } + @Test public void testDeserializeNullObject() throws IOException { Truck truck = truckAdapter.fromJson("{'horsePower':0.0,'passengers':[null]}".replace('\'', '\"')); assertEquals(Arrays.asList((Person) null), truck.passengers); } + @Test public void testSerializeWithCustomTypeAdapter() { usePersonNameAdapter(); Truck truck = new Truck(); @@ -91,6 +103,7 @@ public void testSerializeWithCustomTypeAdapter() { truckAdapter.toJson(truck).replace('\"', '\'')); } + @Test public void testDeserializeWithCustomTypeAdapter() throws IOException { usePersonNameAdapter(); Truck truck = truckAdapter.fromJson("{'horsePower':0.0,'passengers':['Jesse','Jodie']}".replace('\'', '\"')); @@ -111,6 +124,7 @@ private void usePersonNameAdapter() { truckAdapter = miniGson.getAdapter(Truck.class); } + @Test public void testSerializeMap() { Map map = new LinkedHashMap<>(); map.put("a", 5.0); @@ -118,6 +132,7 @@ public void testSerializeMap() { assertEquals("{'a':5.0,'b':10.0}", mapAdapter.toJson(map).replace('"', '\'')); } + @Test public void testDeserializeMap() throws IOException { Map map = new LinkedHashMap<>(); map.put("a", 5.0); @@ -125,23 +140,27 @@ public void testDeserializeMap() throws IOException { assertEquals(map, mapAdapter.fromJson("{'a':5.0,'b':10.0}".replace('\'', '\"'))); } + @Test public void testSerialize1dArray() { TypeAdapter arrayAdapter = miniGson.getAdapter(new TypeToken() {}); assertEquals("[1.0,2.0,3.0]", arrayAdapter.toJson(new double[]{ 1.0, 2.0, 3.0 })); } + @Test public void testDeserialize1dArray() throws IOException { TypeAdapter arrayAdapter = miniGson.getAdapter(new TypeToken() {}); double[] array = arrayAdapter.fromJson("[1.0,2.0,3.0]"); assertTrue(Arrays.toString(array), Arrays.equals(new double[]{1.0, 2.0, 3.0}, array)); } + @Test public void testSerialize2dArray() { TypeAdapter arrayAdapter = miniGson.getAdapter(new TypeToken() {}); double[][] array = { {1.0, 2.0 }, { 3.0 } }; assertEquals("[[1.0,2.0],[3.0]]", arrayAdapter.toJson(array)); } + @Test public void testDeserialize2dArray() throws IOException { TypeAdapter arrayAdapter = miniGson.getAdapter(new TypeToken() {}); double[][] array = arrayAdapter.fromJson("[[1.0,2.0],[3.0]]"); @@ -149,6 +168,7 @@ public void testDeserialize2dArray() throws IOException { assertTrue(Arrays.toString(array), Arrays.deepEquals(expected, array)); } + @Test public void testNullSafe() { TypeAdapter typeAdapter = new TypeAdapter() { @Override public Person read(JsonReader in) throws IOException { @@ -179,11 +199,12 @@ public void testNullSafe() { assertEquals("{\"horsePower\":1.0,\"passengers\":[null,\"jesse,30\"]}", gson.toJson(truck, Truck.class)); truck = gson.fromJson(json, Truck.class); - assertEquals(1.0D, truck.horsePower); + assertEquals(1.0D, truck.horsePower, 0); assertNull(truck.passengers.get(0)); assertEquals("jesse", truck.passengers.get(1).name); } + @Test public void testSerializeRecursive() { TypeAdapter nodeAdapter = miniGson.getAdapter(Node.class); Node root = new Node("root"); @@ -195,6 +216,7 @@ public void testSerializeRecursive() { nodeAdapter.toJson(root).replace('"', '\'')); } + @Test public void testFromJsonTree() { JsonObject truckObject = new JsonObject(); truckObject.add("horsePower", new JsonPrimitive(300)); @@ -206,7 +228,7 @@ public void testFromJsonTree() { truckObject.add("passengers", passengersArray); Truck truck = truckAdapter.fromJsonTree(truckObject); - assertEquals(300.0, truck.horsePower); + assertEquals(300.0, truck.horsePower, 0); assertEquals(Arrays.asList(new Person("Jesse", 30)), truck.passengers); } diff --git a/gson/src/test/java/com/google/gson/functional/StringTest.java b/gson/src/test/java/com/google/gson/functional/StringTest.java index 7dcf6f0f5d..80c7383145 100644 --- a/gson/src/test/java/com/google/gson/functional/StringTest.java +++ b/gson/src/test/java/com/google/gson/functional/StringTest.java @@ -1,8 +1,10 @@ package com.google.gson.functional; -import com.google.gson.Gson; +import static org.junit.Assert.assertEquals; -import junit.framework.TestCase; +import com.google.gson.Gson; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for Json serialization and deserialization of strings. @@ -10,73 +12,83 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class StringTest extends TestCase { +public class StringTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testStringValueSerialization() throws Exception { String value = "someRandomStringValue"; assertEquals('"' + value + '"', gson.toJson(value)); } + @Test public void testStringValueDeserialization() throws Exception { String value = "someRandomStringValue"; String actual = gson.fromJson("\"" + value + "\"", String.class); assertEquals(value, actual); } + @Test public void testSingleQuoteInStringSerialization() throws Exception { String valueWithQuotes = "beforeQuote'afterQuote"; String jsonRepresentation = gson.toJson(valueWithQuotes); assertEquals(valueWithQuotes, gson.fromJson(jsonRepresentation, String.class)); } + @Test public void testEscapedCtrlNInStringSerialization() throws Exception { String value = "a\nb"; String json = gson.toJson(value); assertEquals("\"a\\nb\"", json); } + @Test public void testEscapedCtrlNInStringDeserialization() throws Exception { String json = "'a\\nb'"; String actual = gson.fromJson(json, String.class); assertEquals("a\nb", actual); } + @Test public void testEscapedCtrlRInStringSerialization() throws Exception { String value = "a\rb"; String json = gson.toJson(value); assertEquals("\"a\\rb\"", json); } + @Test public void testEscapedCtrlRInStringDeserialization() throws Exception { String json = "'a\\rb'"; String actual = gson.fromJson(json, String.class); assertEquals("a\rb", actual); } + @Test public void testEscapedBackslashInStringSerialization() throws Exception { String value = "a\\b"; String json = gson.toJson(value); assertEquals("\"a\\\\b\"", json); } + @Test public void testEscapedBackslashInStringDeserialization() throws Exception { String actual = gson.fromJson("'a\\\\b'", String.class); assertEquals("a\\b", actual); } + @Test public void testSingleQuoteInStringDeserialization() throws Exception { String value = "beforeQuote'afterQuote"; String actual = gson.fromJson("\"" + value + "\"", String.class); assertEquals(value, actual); } + @Test public void testEscapingQuotesInStringSerialization() throws Exception { String valueWithQuotes = "beforeQuote\"afterQuote"; String jsonRepresentation = gson.toJson(valueWithQuotes); @@ -84,6 +96,7 @@ public void testEscapingQuotesInStringSerialization() throws Exception { assertEquals(valueWithQuotes, target); } + @Test public void testEscapingQuotesInStringDeserialization() throws Exception { String value = "beforeQuote\\\"afterQuote"; String actual = gson.fromJson("\"" + value + "\"", String.class); @@ -91,12 +104,14 @@ public void testEscapingQuotesInStringDeserialization() throws Exception { assertEquals(expected, actual); } + @Test public void testStringValueAsSingleElementArraySerialization() throws Exception { String[] target = {"abc"}; assertEquals("[\"abc\"]", gson.toJson(target)); assertEquals("[\"abc\"]", gson.toJson(target, String[].class)); } + @Test public void testStringWithEscapedSlashDeserialization() { String value = "/"; String json = "'\\/'"; @@ -107,6 +122,7 @@ public void testStringWithEscapedSlashDeserialization() { /** * Created in response to http://groups.google.com/group/google-gson/browse_thread/thread/2431d4a3d0d6cb23 */ + @Test public void testAssignmentCharSerialization() { String value = "abc="; String json = gson.toJson(value); @@ -116,6 +132,7 @@ public void testAssignmentCharSerialization() { /** * Created in response to http://groups.google.com/group/google-gson/browse_thread/thread/2431d4a3d0d6cb23 */ + @Test public void testAssignmentCharDeserialization() { String json = "\"abc=\""; String value = gson.fromJson(json, String.class); @@ -126,12 +143,14 @@ public void testAssignmentCharDeserialization() { assertEquals("abc=", value); } + @Test public void testJavascriptKeywordsInStringSerialization() { String value = "null true false function"; String json = gson.toJson(value); assertEquals("\"" + value + "\"", json); } + @Test public void testJavascriptKeywordsInStringDeserialization() { String json = "'null true false function'"; String value = gson.fromJson(json, String.class); diff --git a/gson/src/test/java/com/google/gson/functional/ToNumberPolicyFunctionalTest.java b/gson/src/test/java/com/google/gson/functional/ToNumberPolicyFunctionalTest.java index 3e261d5643..1e7728364f 100644 --- a/gson/src/test/java/com/google/gson/functional/ToNumberPolicyFunctionalTest.java +++ b/gson/src/test/java/com/google/gson/functional/ToNumberPolicyFunctionalTest.java @@ -16,12 +16,9 @@ package com.google.gson.functional; -import java.lang.reflect.Type; -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.ToNumberPolicy; @@ -29,9 +26,16 @@ import com.google.gson.internal.LazilyParsedNumber; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; -import junit.framework.TestCase; +import java.lang.reflect.Type; +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import org.junit.Test; -public class ToNumberPolicyFunctionalTest extends TestCase { +public class ToNumberPolicyFunctionalTest { + @Test public void testDefault() { Gson gson = new Gson(); assertEquals(null, gson.fromJson("null", Object.class)); @@ -40,6 +44,7 @@ public void testDefault() { assertEquals(new LazilyParsedNumber("10"), gson.fromJson("10", Number.class)); } + @Test public void testAsDoubles() { Gson gson = new GsonBuilder() .setObjectToNumberStrategy(ToNumberPolicy.DOUBLE) @@ -51,6 +56,7 @@ public void testAsDoubles() { assertEquals(10.0, gson.fromJson("10", Number.class)); } + @Test public void testAsLazilyParsedNumbers() { Gson gson = new GsonBuilder() .setObjectToNumberStrategy(ToNumberPolicy.LAZILY_PARSED_NUMBER) @@ -62,6 +68,7 @@ public void testAsLazilyParsedNumbers() { assertEquals(new LazilyParsedNumber("10"), gson.fromJson("10", Number.class)); } + @Test public void testAsLongsOrDoubles() { Gson gson = new GsonBuilder() .setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE) @@ -75,6 +82,7 @@ public void testAsLongsOrDoubles() { assertEquals(10.0, gson.fromJson("10.0", Number.class)); } + @Test public void testAsBigDecimals() { Gson gson = new GsonBuilder() .setObjectToNumberStrategy(ToNumberPolicy.BIG_DECIMAL) @@ -90,6 +98,7 @@ public void testAsBigDecimals() { assertEquals(new BigDecimal("1e400"), gson.fromJson("1e400", BigDecimal.class)); } + @Test public void testAsListOfLongsOrDoubles() { Gson gson = new GsonBuilder() .setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE) @@ -107,6 +116,7 @@ public void testAsListOfLongsOrDoubles() { assertEquals(expected, numbers); } + @Test public void testCustomStrategiesCannotAffectConcreteDeclaredNumbers() { ToNumberStrategy fail = new ToNumberStrategy() { @Override diff --git a/gson/src/test/java/com/google/gson/functional/TreeTypeAdaptersTest.java b/gson/src/test/java/com/google/gson/functional/TreeTypeAdaptersTest.java index 006c6ebde9..be079af035 100644 --- a/gson/src/test/java/com/google/gson/functional/TreeTypeAdaptersTest.java +++ b/gson/src/test/java/com/google/gson/functional/TreeTypeAdaptersTest.java @@ -16,6 +16,9 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; @@ -31,12 +34,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Collection of functional tests for DOM tree based type adapters. */ -public class TreeTypeAdaptersTest extends TestCase { +public class TreeTypeAdaptersTest { private static final Id STUDENT1_ID = new Id<>("5", Student.class); private static final Id STUDENT2_ID = new Id<>("6", Student.class); private static final Student STUDENT1 = new Student(STUDENT1_ID, "first"); @@ -49,8 +53,8 @@ public class TreeTypeAdaptersTest extends TestCase { private Gson gson; private Course course; - @Override - protected void setUp() { + @Before + public void setUp() { gson = new GsonBuilder() .registerTypeAdapter(Id.class, new IdTreeTypeAdapter()) .create(); @@ -58,6 +62,7 @@ protected void setUp() { new Assignment(null, null), Arrays.asList(STUDENT1, STUDENT2)); } + @Test public void testSerializeId() { String json = gson.toJson(course, TYPE_COURSE_HISTORY); assertTrue(json.contains(String.valueOf(COURSE_ID.getValue()))); @@ -65,6 +70,7 @@ public void testSerializeId() { assertTrue(json.contains(String.valueOf(STUDENT2_ID.getValue()))); } + @Test public void testDeserializeId() { String json = "{courseId:1,students:[{id:1,name:'first'},{id:6,name:'second'}]," + "numAssignments:4,assignment:{}}"; diff --git a/gson/src/test/java/com/google/gson/functional/TypeAdapterPrecedenceTest.java b/gson/src/test/java/com/google/gson/functional/TypeAdapterPrecedenceTest.java index 5f881530dc..28120bf3f9 100644 --- a/gson/src/test/java/com/google/gson/functional/TypeAdapterPrecedenceTest.java +++ b/gson/src/test/java/com/google/gson/functional/TypeAdapterPrecedenceTest.java @@ -16,6 +16,8 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; @@ -29,9 +31,10 @@ import com.google.gson.stream.JsonWriter; import java.io.IOException; import java.lang.reflect.Type; -import junit.framework.TestCase; +import org.junit.Test; -public final class TypeAdapterPrecedenceTest extends TestCase { +public final class TypeAdapterPrecedenceTest { + @Test public void testNonstreamingFollowedByNonstreaming() { Gson gson = new GsonBuilder() .registerTypeAdapter(Foo.class, newSerializer("serializer 1")) @@ -43,6 +46,7 @@ public void testNonstreamingFollowedByNonstreaming() { assertEquals("foo via deserializer 2", gson.fromJson("foo", Foo.class).name); } + @Test public void testStreamingFollowedByStreaming() { Gson gson = new GsonBuilder() .registerTypeAdapter(Foo.class, newTypeAdapter("type adapter 1")) @@ -52,6 +56,7 @@ public void testStreamingFollowedByStreaming() { assertEquals("foo via type adapter 2", gson.fromJson("foo", Foo.class).name); } + @Test public void testSerializeNonstreamingTypeAdapterFollowedByStreamingTypeAdapter() { Gson gson = new GsonBuilder() .registerTypeAdapter(Foo.class, newSerializer("serializer")) @@ -62,6 +67,7 @@ public void testSerializeNonstreamingTypeAdapterFollowedByStreamingTypeAdapter() assertEquals("foo via type adapter", gson.fromJson("foo", Foo.class).name); } + @Test public void testStreamingFollowedByNonstreaming() { Gson gson = new GsonBuilder() .registerTypeAdapter(Foo.class, newTypeAdapter("type adapter")) @@ -72,6 +78,7 @@ public void testStreamingFollowedByNonstreaming() { assertEquals("foo via deserializer", gson.fromJson("foo", Foo.class).name); } + @Test public void testStreamingHierarchicalFollowedByNonstreaming() { Gson gson = new GsonBuilder() .registerTypeHierarchyAdapter(Foo.class, newTypeAdapter("type adapter")) @@ -82,6 +89,7 @@ public void testStreamingHierarchicalFollowedByNonstreaming() { assertEquals("foo via deserializer", gson.fromJson("foo", Foo.class).name); } + @Test public void testStreamingFollowedByNonstreamingHierarchical() { Gson gson = new GsonBuilder() .registerTypeAdapter(Foo.class, newTypeAdapter("type adapter")) @@ -92,6 +100,7 @@ public void testStreamingFollowedByNonstreamingHierarchical() { assertEquals("foo via type adapter", gson.fromJson("foo", Foo.class).name); } + @Test public void testStreamingHierarchicalFollowedByNonstreamingHierarchical() { Gson gson = new GsonBuilder() .registerTypeHierarchyAdapter(Foo.class, newSerializer("serializer")) @@ -102,6 +111,7 @@ public void testStreamingHierarchicalFollowedByNonstreamingHierarchical() { assertEquals("foo via type adapter", gson.fromJson("foo", Foo.class).name); } + @Test public void testNonstreamingHierarchicalFollowedByNonstreaming() { Gson gson = new GsonBuilder() .registerTypeHierarchyAdapter(Foo.class, newSerializer("hierarchical")) diff --git a/gson/src/test/java/com/google/gson/functional/TypeHierarchyAdapterTest.java b/gson/src/test/java/com/google/gson/functional/TypeHierarchyAdapterTest.java index 25b9c34366..e43fa5f7f4 100644 --- a/gson/src/test/java/com/google/gson/functional/TypeHierarchyAdapterTest.java +++ b/gson/src/test/java/com/google/gson/functional/TypeHierarchyAdapterTest.java @@ -16,6 +16,8 @@ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; @@ -27,13 +29,14 @@ import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import java.lang.reflect.Type; -import junit.framework.TestCase; +import org.junit.Test; /** * Test that the hierarchy adapter works when subtypes are used. */ -public final class TypeHierarchyAdapterTest extends TestCase { +public final class TypeHierarchyAdapterTest { + @Test public void testTypeHierarchy() { Manager andy = new Manager(); andy.userid = "andy"; @@ -116,6 +119,7 @@ public void testTypeHierarchy() { ((Manager) company.ceo.minions[2]).minions[1].userid); } + @Test public void testRegisterSuperTypeFirst() { Gson gson = new GsonBuilder() .registerTypeHierarchyAdapter(Employee.class, new EmployeeAdapter()) @@ -132,6 +136,7 @@ public void testRegisterSuperTypeFirst() { } /** This behaviour changed in Gson 2.1; it used to throw. */ + @Test public void testRegisterSubTypeFirstAllowed() { new GsonBuilder() .registerTypeHierarchyAdapter(Manager.class, new ManagerAdapter()) diff --git a/gson/src/test/java/com/google/gson/functional/TypeVariableTest.java b/gson/src/test/java/com/google/gson/functional/TypeVariableTest.java index f9ef46b3d3..88b2d19d8e 100644 --- a/gson/src/test/java/com/google/gson/functional/TypeVariableTest.java +++ b/gson/src/test/java/com/google/gson/functional/TypeVariableTest.java @@ -15,6 +15,8 @@ */ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; + import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; @@ -23,7 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import junit.framework.TestCase; +import org.junit.Test; /** * Functional test for Gson serialization and deserialization of @@ -31,8 +33,9 @@ * * @author Joel Leitch */ -public class TypeVariableTest extends TestCase { +public class TypeVariableTest { + @Test public void testAdvancedTypeVariables() throws Exception { Gson gson = new Gson(); Bar bar1 = new Bar("someString", 1, true); @@ -48,6 +51,7 @@ public void testAdvancedTypeVariables() throws Exception { assertEquals(bar1, bar2); } + @Test public void testTypeVariablesViaTypeParameter() throws Exception { Gson gson = new Gson(); Foo original = new Foo<>("e", 5, false); @@ -59,6 +63,7 @@ public void testTypeVariablesViaTypeParameter() throws Exception { assertEquals(original, gson.>fromJson(json, type)); } + @Test public void testBasicTypeVariables() throws Exception { Gson gson = new Gson(); Blue blue1 = new Blue(true); diff --git a/gson/src/test/java/com/google/gson/functional/UncategorizedTest.java b/gson/src/test/java/com/google/gson/functional/UncategorizedTest.java index 0ac0380357..58171de0b7 100644 --- a/gson/src/test/java/com/google/gson/functional/UncategorizedTest.java +++ b/gson/src/test/java/com/google/gson/functional/UncategorizedTest.java @@ -15,6 +15,11 @@ */ package com.google.gson.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializationContext; @@ -23,13 +28,12 @@ import com.google.gson.JsonParseException; import com.google.gson.common.TestTypes.BagOfPrimitives; import com.google.gson.common.TestTypes.ClassOverridingEquals; - import com.google.gson.reflect.TypeToken; +import java.lang.reflect.Type; import java.util.Arrays; import java.util.List; -import junit.framework.TestCase; - -import java.lang.reflect.Type; +import org.junit.Before; +import org.junit.Test; /** * Functional tests that do not fall neatly into any of the existing classification. @@ -37,16 +41,16 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class UncategorizedTest extends TestCase { +public class UncategorizedTest { private Gson gson = null; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testInvalidJsonDeserializationFails() throws Exception { try { gson.fromJson("adfasdf1112,,,\":", BagOfPrimitives.class); @@ -59,6 +63,7 @@ public void testInvalidJsonDeserializationFails() throws Exception { } catch (JsonParseException expected) { } } + @Test public void testObjectEqualButNotSameSerialization() throws Exception { ClassOverridingEquals objA = new ClassOverridingEquals(); ClassOverridingEquals objB = new ClassOverridingEquals(); @@ -67,11 +72,13 @@ public void testObjectEqualButNotSameSerialization() throws Exception { assertEquals(objB.getExpectedJson(), json); } + @Test public void testStaticFieldsAreNotSerialized() { BagOfPrimitives target = new BagOfPrimitives(); assertFalse(gson.toJson(target).contains("DEFAULT_VALUE")); } + @Test public void testGsonInstanceReusableForSerializationAndDeserialization() { BagOfPrimitives bag = new BagOfPrimitives(); String json = gson.toJson(bag); @@ -84,6 +91,7 @@ public void testGsonInstanceReusableForSerializationAndDeserialization() { * base class object. For a motivation for this test, see Issue 37 and * http://groups.google.com/group/google-gson/browse_thread/thread/677d56e9976d7761 */ + @Test public void testReturningDerivedClassesDuringDeserialization() { Gson gson = new GsonBuilder().registerTypeAdapter(Base.class, new BaseTypeAdapter()).create(); String json = "{\"opType\":\"OP1\"}"; @@ -101,6 +109,7 @@ public void testReturningDerivedClassesDuringDeserialization() { * Test that trailing whitespace is ignored. * http://code.google.com/p/google-gson/issues/detail?id=302 */ + @Test public void testTrailingWhitespace() throws Exception { List integers = gson.fromJson("[1,2,3] \n\n ", new TypeToken>() {}.getType()); diff --git a/gson/src/test/java/com/google/gson/internal/GsonTypesTest.java b/gson/src/test/java/com/google/gson/internal/GsonTypesTest.java index c80700bde4..dd45e87f29 100644 --- a/gson/src/test/java/com/google/gson/internal/GsonTypesTest.java +++ b/gson/src/test/java/com/google/gson/internal/GsonTypesTest.java @@ -16,14 +16,18 @@ package com.google.gson.internal; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; + import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; +import org.junit.Test; -import junit.framework.TestCase; - -public final class GsonTypesTest extends TestCase { +public final class GsonTypesTest { + @Test public void testNewParameterizedTypeWithoutOwner() throws Exception { // List. List is a top-level class Type type = $Gson$Types.newParameterizedTypeWithOwner(null, List.class, A.class); @@ -46,6 +50,7 @@ final class D { assertEquals(D.class, getFirstTypeArgument(type)); } + @Test public void testGetFirstTypeArgument() throws Exception { assertNull(getFirstTypeArgument(A.class)); diff --git a/gson/src/test/java/com/google/gson/internal/LazilyParsedNumberTest.java b/gson/src/test/java/com/google/gson/internal/LazilyParsedNumberTest.java index 75e77bb55f..f4f207f26b 100644 --- a/gson/src/test/java/com/google/gson/internal/LazilyParsedNumberTest.java +++ b/gson/src/test/java/com/google/gson/internal/LazilyParsedNumberTest.java @@ -15,28 +15,33 @@ */ package com.google.gson.internal; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.math.BigDecimal; +import org.junit.Test; -import junit.framework.TestCase; - -public class LazilyParsedNumberTest extends TestCase { +public class LazilyParsedNumberTest { + @Test public void testHashCode() { LazilyParsedNumber n1 = new LazilyParsedNumber("1"); LazilyParsedNumber n1Another = new LazilyParsedNumber("1"); assertEquals(n1.hashCode(), n1Another.hashCode()); } + @Test public void testEquals() { LazilyParsedNumber n1 = new LazilyParsedNumber("1"); LazilyParsedNumber n1Another = new LazilyParsedNumber("1"); assertTrue(n1.equals(n1Another)); } + @Test public void testJavaSerialization() throws IOException, ClassNotFoundException { ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream objOut = new ObjectOutputStream(out); diff --git a/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java b/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java index 0b08d32eca..89154ae4bb 100644 --- a/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java +++ b/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java @@ -16,6 +16,12 @@ package com.google.gson.internal; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.google.gson.common.MoreAsserts; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -29,10 +35,11 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Random; -import junit.framework.TestCase; +import org.junit.Test; -public final class LinkedTreeMapTest extends TestCase { +public final class LinkedTreeMapTest { + @Test public void testIterationOrder() { LinkedTreeMap map = new LinkedTreeMap<>(); map.put("a", "android"); @@ -42,6 +49,7 @@ public void testIterationOrder() { assertIterationOrder(map.values(), "android", "cola", "bbq"); } + @Test public void testRemoveRootDoesNotDoubleUnlink() { LinkedTreeMap map = new LinkedTreeMap<>(); map.put("a", "android"); @@ -55,6 +63,7 @@ public void testRemoveRootDoesNotDoubleUnlink() { assertIterationOrder(map.keySet(), "a", "c"); } + @Test public void testPutNullKeyFails() { LinkedTreeMap map = new LinkedTreeMap<>(); try { @@ -64,6 +73,7 @@ public void testPutNullKeyFails() { } } + @Test public void testPutNonComparableKeyFails() { LinkedTreeMap map = new LinkedTreeMap<>(); try { @@ -72,6 +82,7 @@ public void testPutNonComparableKeyFails() { } catch (ClassCastException expected) {} } + @Test public void testPutNullValue() { LinkedTreeMap map = new LinkedTreeMap<>(); map.put("a", null); @@ -81,6 +92,7 @@ public void testPutNullValue() { assertNull(map.get("a")); } + @Test public void testPutNullValue_Forbidden() { LinkedTreeMap map = new LinkedTreeMap<>(false); try { @@ -94,6 +106,7 @@ public void testPutNullValue_Forbidden() { assertFalse(map.containsValue(null)); } + @Test public void testEntrySetValueNull() { LinkedTreeMap map = new LinkedTreeMap<>(); map.put("a", "1"); @@ -110,6 +123,7 @@ public void testEntrySetValueNull() { } + @Test public void testEntrySetValueNull_Forbidden() { LinkedTreeMap map = new LinkedTreeMap<>(false); map.put("a", "1"); @@ -125,12 +139,14 @@ public void testEntrySetValueNull_Forbidden() { assertFalse(map.containsValue(null)); } + @Test public void testContainsNonComparableKeyReturnsFalse() { LinkedTreeMap map = new LinkedTreeMap<>(); map.put("a", "android"); assertFalse(map.containsKey(new Object())); } + @Test public void testContainsNullKeyIsAlwaysFalse() { LinkedTreeMap map = new LinkedTreeMap<>(); assertFalse(map.containsKey(null)); @@ -138,6 +154,7 @@ public void testContainsNullKeyIsAlwaysFalse() { assertFalse(map.containsKey(null)); } + @Test public void testPutOverrides() throws Exception { LinkedTreeMap map = new LinkedTreeMap<>(); assertNull(map.put("d", "donut")); @@ -150,6 +167,7 @@ public void testPutOverrides() throws Exception { assertEquals(3, map.size()); } + @Test public void testEmptyStringValues() { LinkedTreeMap map = new LinkedTreeMap<>(); map.put("a", ""); @@ -157,6 +175,7 @@ public void testEmptyStringValues() { assertEquals("", map.get("a")); } + @Test public void testLargeSetOfRandomKeys() throws Exception { Random random = new Random(1367593214724L); LinkedTreeMap map = new LinkedTreeMap<>(); @@ -173,6 +192,7 @@ public void testLargeSetOfRandomKeys() throws Exception { } } + @Test public void testClear() { LinkedTreeMap map = new LinkedTreeMap<>(); map.put("a", "android"); @@ -183,6 +203,7 @@ public void testClear() { assertEquals(0, map.size()); } + @Test public void testEqualsAndHashCode() throws Exception { LinkedTreeMap map1 = new LinkedTreeMap<>(); map1.put("A", 1); @@ -199,6 +220,7 @@ public void testEqualsAndHashCode() throws Exception { MoreAsserts.assertEqualsAndHashCode(map1, map2); } + @Test public void testJavaSerialization() throws IOException, ClassNotFoundException { ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream objOut = new ObjectOutputStream(out); diff --git a/gson/src/test/java/com/google/gson/internal/UnsafeAllocatorInstantiationTest.java b/gson/src/test/java/com/google/gson/internal/UnsafeAllocatorInstantiationTest.java index 54d0a5064b..b8ab177d18 100644 --- a/gson/src/test/java/com/google/gson/internal/UnsafeAllocatorInstantiationTest.java +++ b/gson/src/test/java/com/google/gson/internal/UnsafeAllocatorInstantiationTest.java @@ -15,13 +15,17 @@ */ package com.google.gson.internal; -import junit.framework.TestCase; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import org.junit.Test; /** * Test unsafe allocator instantiation * @author Ugljesa Jovanovic */ -public final class UnsafeAllocatorInstantiationTest extends TestCase { +public final class UnsafeAllocatorInstantiationTest { public interface Interface { } @@ -36,6 +40,7 @@ public static class ConcreteClass { * Ensure that an {@link AssertionError} is thrown when trying * to instantiate an interface */ + @Test public void testInterfaceInstantiation() throws Exception { try { UnsafeAllocator.INSTANCE.newInstance(Interface.class); @@ -49,6 +54,7 @@ public void testInterfaceInstantiation() throws Exception { * Ensure that an {@link AssertionError} is thrown when trying * to instantiate an abstract class */ + @Test public void testAbstractClassInstantiation() throws Exception { try { UnsafeAllocator.INSTANCE.newInstance(AbstractClass.class); @@ -61,6 +67,7 @@ public void testAbstractClassInstantiation() throws Exception { /** * Ensure that no exception is thrown when trying to instantiate a concrete class */ + @Test public void testConcreteClassInstantiation() throws Exception { ConcreteClass instance = UnsafeAllocator.INSTANCE.newInstance(ConcreteClass.class); assertNotNull(instance); diff --git a/gson/src/test/java/com/google/gson/internal/bind/DefaultDateTypeAdapterTest.java b/gson/src/test/java/com/google/gson/internal/bind/DefaultDateTypeAdapterTest.java index 9c7130b851..00274c6844 100644 --- a/gson/src/test/java/com/google/gson/internal/bind/DefaultDateTypeAdapterTest.java +++ b/gson/src/test/java/com/google/gson/internal/bind/DefaultDateTypeAdapterTest.java @@ -19,31 +19,38 @@ package com.google.gson.internal.bind; -import java.io.IOException; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; -import java.util.TimeZone; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.fail; + import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapterFactory; import com.google.gson.internal.JavaVersion; import com.google.gson.internal.bind.DefaultDateTypeAdapter.DateType; import com.google.gson.reflect.TypeToken; -import junit.framework.TestCase; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; +import org.junit.Test; /** * A simple unit test for the {@link DefaultDateTypeAdapter} class. * * @author Joel Leitch */ -public class DefaultDateTypeAdapterTest extends TestCase { +public class DefaultDateTypeAdapterTest { + @Test public void testFormattingInEnUs() { assertFormattingAlwaysEmitsUsLocale(Locale.US); } + @Test public void testFormattingInFr() { assertFormattingAlwaysEmitsUsLocale(Locale.FRANCE); } @@ -76,6 +83,7 @@ private void assertFormattingAlwaysEmitsUsLocale(Locale locale) { } } + @Test public void testParsingDatesFormattedWithSystemLocale() throws Exception { TimeZone defaultTimeZone = TimeZone.getDefault(); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); @@ -113,6 +121,7 @@ public void testParsingDatesFormattedWithSystemLocale() throws Exception { } } + @Test public void testParsingDatesFormattedWithUsLocale() throws Exception { TimeZone defaultTimeZone = TimeZone.getDefault(); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); @@ -137,6 +146,7 @@ public void testParsingDatesFormattedWithUsLocale() throws Exception { } } + @Test public void testFormatUsesDefaultTimezone() throws Exception { TimeZone defaultTimeZone = TimeZone.getDefault(); TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles")); @@ -153,6 +163,7 @@ public void testFormatUsesDefaultTimezone() throws Exception { } } + @Test public void testDateDeserializationISO8601() throws Exception { TypeAdapterFactory adapterFactory = DateType.DATE.createDefaultsAdapterFactory(); assertParsed("1970-01-01T00:00:00.000Z", adapterFactory); @@ -162,6 +173,7 @@ public void testDateDeserializationISO8601() throws Exception { assertParsed("1970-01-01T01:00:00+01", adapterFactory); } + @Test public void testDateSerialization() throws Exception { int dateStyle = DateFormat.LONG; TypeAdapter dateTypeAdapter = dateAdapter(DateType.DATE.createAdapterFactory(dateStyle)); @@ -172,6 +184,7 @@ public void testDateSerialization() throws Exception { assertEquals(toLiteral(formatter.format(currentDate)), dateString); } + @Test public void testDatePattern() throws Exception { String pattern = "yyyy-MM-dd"; TypeAdapter dateTypeAdapter = dateAdapter(DateType.DATE.createAdapterFactory(pattern)); @@ -182,6 +195,7 @@ public void testDatePattern() throws Exception { assertEquals(toLiteral(formatter.format(currentDate)), dateString); } + @Test public void testInvalidDatePattern() throws Exception { try { DateType.DATE.createAdapterFactory("I am a bad Date pattern...."); @@ -189,12 +203,14 @@ public void testInvalidDatePattern() throws Exception { } catch (IllegalArgumentException expected) { } } + @Test public void testNullValue() throws Exception { TypeAdapter adapter = dateAdapter(DateType.DATE.createDefaultsAdapterFactory()); assertNull(adapter.fromJson("null")); assertEquals("null", adapter.toJson(null)); } + @Test public void testUnexpectedToken() throws Exception { try { TypeAdapter adapter = dateAdapter(DateType.DATE.createDefaultsAdapterFactory()); diff --git a/gson/src/test/java/com/google/gson/internal/bind/JsonElementReaderTest.java b/gson/src/test/java/com/google/gson/internal/bind/JsonElementReaderTest.java index b8e5f623ba..efdf7b63c5 100644 --- a/gson/src/test/java/com/google/gson/internal/bind/JsonElementReaderTest.java +++ b/gson/src/test/java/com/google/gson/internal/bind/JsonElementReaderTest.java @@ -16,38 +16,45 @@ package com.google.gson.internal.bind; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.gson.JsonPrimitive; import com.google.gson.stream.JsonToken; import com.google.gson.stream.MalformedJsonException; import java.io.IOException; -import junit.framework.TestCase; +import org.junit.Test; @SuppressWarnings("resource") -public final class JsonElementReaderTest extends TestCase { +public final class JsonElementReaderTest { + @Test public void testNumbers() throws IOException { JsonElement element = JsonParser.parseString("[1, 2, 3]"); JsonTreeReader reader = new JsonTreeReader(element); reader.beginArray(); assertEquals(1, reader.nextInt()); assertEquals(2L, reader.nextLong()); - assertEquals(3.0, reader.nextDouble()); + assertEquals(3.0, reader.nextDouble(), 0); reader.endArray(); } + @Test public void testLenientNansAndInfinities() throws IOException { JsonElement element = JsonParser.parseString("[NaN, -Infinity, Infinity]"); JsonTreeReader reader = new JsonTreeReader(element); reader.setLenient(true); reader.beginArray(); assertTrue(Double.isNaN(reader.nextDouble())); - assertEquals(Double.NEGATIVE_INFINITY, reader.nextDouble()); - assertEquals(Double.POSITIVE_INFINITY, reader.nextDouble()); + assertEquals(Double.NEGATIVE_INFINITY, reader.nextDouble(), 0); + assertEquals(Double.POSITIVE_INFINITY, reader.nextDouble(), 0); reader.endArray(); } + @Test public void testStrictNansAndInfinities() throws IOException { JsonElement element = JsonParser.parseString("[NaN, -Infinity, Infinity]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -77,16 +84,18 @@ public void testStrictNansAndInfinities() throws IOException { reader.endArray(); } + @Test public void testNumbersFromStrings() throws IOException { JsonElement element = JsonParser.parseString("[\"1\", \"2\", \"3\"]"); JsonTreeReader reader = new JsonTreeReader(element); reader.beginArray(); assertEquals(1, reader.nextInt()); assertEquals(2L, reader.nextLong()); - assertEquals(3.0, reader.nextDouble()); + assertEquals(3.0, reader.nextDouble(), 0); reader.endArray(); } + @Test public void testStringsFromNumbers() throws IOException { JsonElement element = JsonParser.parseString("[1]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -95,6 +104,7 @@ public void testStringsFromNumbers() throws IOException { reader.endArray(); } + @Test public void testBooleans() throws IOException { JsonElement element = JsonParser.parseString("[true, false]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -104,6 +114,7 @@ public void testBooleans() throws IOException { reader.endArray(); } + @Test public void testNulls() throws IOException { JsonElement element = JsonParser.parseString("[null,null]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -113,6 +124,7 @@ public void testNulls() throws IOException { reader.endArray(); } + @Test public void testStrings() throws IOException { JsonElement element = JsonParser.parseString("[\"A\",\"B\"]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -122,6 +134,7 @@ public void testStrings() throws IOException { reader.endArray(); } + @Test public void testArray() throws IOException { JsonElement element = JsonParser.parseString("[1, 2, 3]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -138,6 +151,7 @@ public void testArray() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testObject() throws IOException { JsonElement element = JsonParser.parseString("{\"A\": 1, \"B\": 2}"); JsonTreeReader reader = new JsonTreeReader(element); @@ -156,6 +170,7 @@ public void testObject() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testEmptyArray() throws IOException { JsonElement element = JsonParser.parseString("[]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -163,6 +178,7 @@ public void testEmptyArray() throws IOException { reader.endArray(); } + @Test public void testNestedArrays() throws IOException { JsonElement element = JsonParser.parseString("[[],[[]]]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -176,6 +192,7 @@ public void testNestedArrays() throws IOException { reader.endArray(); } + @Test public void testNestedObjects() throws IOException { JsonElement element = JsonParser.parseString("{\"A\":{},\"B\":{\"C\":{}}}"); JsonTreeReader reader = new JsonTreeReader(element); @@ -192,6 +209,7 @@ public void testNestedObjects() throws IOException { reader.endObject(); } + @Test public void testEmptyObject() throws IOException { JsonElement element = JsonParser.parseString("{}"); JsonTreeReader reader = new JsonTreeReader(element); @@ -199,6 +217,7 @@ public void testEmptyObject() throws IOException { reader.endObject(); } + @Test public void testSkipValue() throws IOException { JsonElement element = JsonParser.parseString("[\"A\",{\"B\":[[]]},\"C\",[[]],\"D\",null]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -212,6 +231,7 @@ public void testSkipValue() throws IOException { reader.endArray(); } + @Test public void testWrongType() throws IOException { JsonElement element = JsonParser.parseString("[[],\"A\"]"); JsonTreeReader reader = new JsonTreeReader(element); @@ -303,6 +323,7 @@ public void testWrongType() throws IOException { reader.endArray(); } + @Test public void testNextJsonElement() throws IOException { final JsonElement element = JsonParser.parseString("{\"A\": 1, \"B\" : {}, \"C\" : []}"); JsonTreeReader reader = new JsonTreeReader(element); @@ -338,6 +359,7 @@ public void testNextJsonElement() throws IOException { } } + @Test public void testEarlyClose() throws IOException { JsonElement element = JsonParser.parseString("[1, 2, 3]"); JsonTreeReader reader = new JsonTreeReader(element); diff --git a/gson/src/test/java/com/google/gson/internal/bind/JsonTreeReaderTest.java b/gson/src/test/java/com/google/gson/internal/bind/JsonTreeReaderTest.java index 767d63bda3..0d17e7c57d 100644 --- a/gson/src/test/java/com/google/gson/internal/bind/JsonTreeReaderTest.java +++ b/gson/src/test/java/com/google/gson/internal/bind/JsonTreeReaderTest.java @@ -15,6 +15,10 @@ */ package com.google.gson.internal.bind; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.fail; + import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonNull; @@ -27,10 +31,11 @@ import java.io.Reader; import java.util.Arrays; import java.util.List; -import junit.framework.TestCase; +import org.junit.Test; @SuppressWarnings("resource") -public class JsonTreeReaderTest extends TestCase { +public class JsonTreeReaderTest { + @Test public void testSkipValue_emptyJsonObject() throws IOException { JsonTreeReader in = new JsonTreeReader(new JsonObject()); in.skipValue(); @@ -38,6 +43,7 @@ public void testSkipValue_emptyJsonObject() throws IOException { assertEquals("$", in.getPath()); } + @Test public void testSkipValue_filledJsonObject() throws IOException { JsonObject jsonObject = new JsonObject(); JsonArray jsonArray = new JsonArray(); @@ -57,6 +63,7 @@ public void testSkipValue_filledJsonObject() throws IOException { assertEquals("$", in.getPath()); } + @Test public void testSkipValue_name() throws IOException { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("a", "value"); @@ -68,6 +75,7 @@ public void testSkipValue_name() throws IOException { assertEquals("value", in.nextString()); } + @Test public void testSkipValue_afterEndOfDocument() throws IOException { JsonTreeReader reader = new JsonTreeReader(new JsonObject()); reader.beginObject(); @@ -80,6 +88,7 @@ public void testSkipValue_afterEndOfDocument() throws IOException { assertEquals("$", reader.getPath()); } + @Test public void testSkipValue_atArrayEnd() throws IOException { JsonTreeReader reader = new JsonTreeReader(new JsonArray()); reader.beginArray(); @@ -88,6 +97,7 @@ public void testSkipValue_atArrayEnd() throws IOException { assertEquals("$", reader.getPath()); } + @Test public void testSkipValue_atObjectEnd() throws IOException { JsonTreeReader reader = new JsonTreeReader(new JsonObject()); reader.beginObject(); @@ -96,6 +106,7 @@ public void testSkipValue_atObjectEnd() throws IOException { assertEquals("$", reader.getPath()); } + @Test public void testHasNext_endOfDocument() throws IOException { JsonTreeReader reader = new JsonTreeReader(new JsonObject()); reader.beginObject(); @@ -103,6 +114,7 @@ public void testHasNext_endOfDocument() throws IOException { assertFalse(reader.hasNext()); } + @Test public void testCustomJsonElementSubclass() throws IOException { @SuppressWarnings("deprecation") // superclass constructor class CustomSubclass extends JsonElement { @@ -132,6 +144,7 @@ public JsonElement deepCopy() { * read from a {@link JsonElement} instead of a {@link Reader}. Therefore all relevant methods of * {@code JsonReader} must be overridden. */ + @Test public void testOverrides() { List ignoredMethods = Arrays.asList("setLenient(boolean)", "isLenient()"); MoreAsserts.assertOverridesMethods(JsonReader.class, JsonTreeReader.class, ignoredMethods); diff --git a/gson/src/test/java/com/google/gson/internal/bind/JsonTreeWriterTest.java b/gson/src/test/java/com/google/gson/internal/bind/JsonTreeWriterTest.java index ce91664ecf..4e2ed2409a 100644 --- a/gson/src/test/java/com/google/gson/internal/bind/JsonTreeWriterTest.java +++ b/gson/src/test/java/com/google/gson/internal/bind/JsonTreeWriterTest.java @@ -16,6 +16,9 @@ package com.google.gson.internal.bind; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import com.google.gson.JsonElement; import com.google.gson.JsonNull; import com.google.gson.common.MoreAsserts; @@ -24,10 +27,11 @@ import java.io.Writer; import java.util.Arrays; import java.util.List; -import junit.framework.TestCase; +import org.junit.Test; @SuppressWarnings("resource") -public final class JsonTreeWriterTest extends TestCase { +public final class JsonTreeWriterTest { + @Test public void testArray() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.beginArray(); @@ -38,6 +42,7 @@ public void testArray() throws IOException { assertEquals("[1,2,3]", writer.get().toString()); } + @Test public void testNestedArray() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.beginArray(); @@ -51,6 +56,7 @@ public void testNestedArray() throws IOException { assertEquals("[[],[[]]]", writer.get().toString()); } + @Test public void testObject() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.beginObject(); @@ -60,6 +66,7 @@ public void testObject() throws IOException { assertEquals("{\"A\":1,\"B\":2}", writer.get().toString()); } + @Test public void testNestedObject() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.beginObject(); @@ -76,6 +83,7 @@ public void testNestedObject() throws IOException { assertEquals("{\"A\":{\"B\":{}},\"C\":{}}", writer.get().toString()); } + @Test public void testWriteAfterClose() throws Exception { JsonTreeWriter writer = new JsonTreeWriter(); writer.setLenient(true); @@ -90,6 +98,7 @@ public void testWriteAfterClose() throws Exception { } } + @Test public void testPrematureClose() throws Exception { JsonTreeWriter writer = new JsonTreeWriter(); writer.setLenient(true); @@ -101,6 +110,7 @@ public void testPrematureClose() throws Exception { } } + @Test public void testSerializeNullsFalse() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.setSerializeNulls(false); @@ -111,6 +121,7 @@ public void testSerializeNullsFalse() throws IOException { assertEquals("{}", writer.get().toString()); } + @Test public void testSerializeNullsTrue() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.setSerializeNulls(true); @@ -121,39 +132,46 @@ public void testSerializeNullsTrue() throws IOException { assertEquals("{\"A\":null}", writer.get().toString()); } + @Test public void testEmptyWriter() { JsonTreeWriter writer = new JsonTreeWriter(); assertEquals(JsonNull.INSTANCE, writer.get()); } + @Test public void testBeginArray() throws Exception { JsonTreeWriter writer = new JsonTreeWriter(); assertEquals(writer, writer.beginArray()); } + @Test public void testBeginObject() throws Exception { JsonTreeWriter writer = new JsonTreeWriter(); assertEquals(writer, writer.beginObject()); } + @Test public void testValueString() throws Exception { JsonTreeWriter writer = new JsonTreeWriter(); String n = "as"; assertEquals(writer, writer.value(n)); } + @Test public void testBoolValue() throws Exception { JsonTreeWriter writer = new JsonTreeWriter(); boolean bool = true; assertEquals(writer, writer.value(bool)); } + @Test public void testBoolMaisValue() throws Exception { JsonTreeWriter writer = new JsonTreeWriter(); Boolean bool = true; assertEquals(writer, writer.value(bool)); } + @Test public void testLenientNansAndInfinities() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.setLenient(true); @@ -168,6 +186,7 @@ public void testLenientNansAndInfinities() throws IOException { assertEquals("[NaN,-Infinity,Infinity,NaN,-Infinity,Infinity]", writer.get().toString()); } + @Test public void testStrictNansAndInfinities() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.setLenient(false); @@ -204,6 +223,7 @@ public void testStrictNansAndInfinities() throws IOException { } } + @Test public void testStrictBoxedNansAndInfinities() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.setLenient(false); @@ -240,6 +260,7 @@ public void testStrictBoxedNansAndInfinities() throws IOException { } } + @Test public void testJsonValue() throws IOException { JsonTreeWriter writer = new JsonTreeWriter(); writer.beginArray(); @@ -255,6 +276,7 @@ public void testJsonValue() throws IOException { * create a {@link JsonElement} tree instead of writing to a {@link Writer}. Therefore all relevant * methods of {@code JsonWriter} must be overridden. */ + @Test public void testOverrides() { List ignoredMethods = Arrays.asList("setLenient(boolean)", "isLenient()", "setIndent(java.lang.String)", "setHtmlSafe(boolean)", "isHtmlSafe()", "setSerializeNulls(boolean)", "getSerializeNulls()"); diff --git a/gson/src/test/java/com/google/gson/internal/bind/RecursiveTypesResolveTest.java b/gson/src/test/java/com/google/gson/internal/bind/RecursiveTypesResolveTest.java index ca068df313..9959360d85 100644 --- a/gson/src/test/java/com/google/gson/internal/bind/RecursiveTypesResolveTest.java +++ b/gson/src/test/java/com/google/gson/internal/bind/RecursiveTypesResolveTest.java @@ -16,10 +16,13 @@ package com.google.gson.internal.bind; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.internal.$Gson$Types; -import junit.framework.TestCase; +import org.junit.Test; /** * Test fixes for infinite recursion on {@link $Gson$Types#resolve(java.lang.reflect.Type, Class, @@ -29,7 +32,7 @@ * These tests originally caused {@link StackOverflowError} because of infinite recursion on attempts to * resolve generics on types, with an intermediate types like 'Foo2<? extends ? super ? extends ... ? extends A>' */ -public class RecursiveTypesResolveTest extends TestCase { +public class RecursiveTypesResolveTest { @SuppressWarnings("unused") private static class Foo1 { @@ -44,6 +47,7 @@ private static class Foo2 { * Test simplest case of recursion. */ + @Test public void testRecursiveResolveSimple() { @SuppressWarnings("rawtypes") TypeAdapter adapter = new Gson().getAdapter(Foo1.class); @@ -54,21 +58,25 @@ public void testRecursiveResolveSimple() { * Tests belows check the behaviour of the methods changed for the fix. */ + @Test public void testDoubleSupertype() { assertEquals($Gson$Types.supertypeOf(Number.class), $Gson$Types.supertypeOf($Gson$Types.supertypeOf(Number.class))); } + @Test public void testDoubleSubtype() { assertEquals($Gson$Types.subtypeOf(Number.class), $Gson$Types.subtypeOf($Gson$Types.subtypeOf(Number.class))); } + @Test public void testSuperSubtype() { assertEquals($Gson$Types.subtypeOf(Object.class), $Gson$Types.supertypeOf($Gson$Types.subtypeOf(Number.class))); } + @Test public void testSubSupertype() { assertEquals($Gson$Types.subtypeOf(Object.class), $Gson$Types.subtypeOf($Gson$Types.supertypeOf(Number.class))); @@ -88,12 +96,14 @@ private static class TestType2 { TestType2 superReversedType; } + @Test public void testRecursiveTypeVariablesResolve1() throws Exception { @SuppressWarnings("rawtypes") TypeAdapter adapter = new Gson().getAdapter(TestType.class); assertNotNull(adapter); } + @Test public void testRecursiveTypeVariablesResolve12() throws Exception { @SuppressWarnings("rawtypes") TypeAdapter adapter = new Gson().getAdapter(TestType2.class); diff --git a/gson/src/test/java/com/google/gson/internal/bind/util/ISO8601UtilsTest.java b/gson/src/test/java/com/google/gson/internal/bind/util/ISO8601UtilsTest.java index 68db238aaf..4c162946fb 100644 --- a/gson/src/test/java/com/google/gson/internal/bind/util/ISO8601UtilsTest.java +++ b/gson/src/test/java/com/google/gson/internal/bind/util/ISO8601UtilsTest.java @@ -28,8 +28,8 @@ private static GregorianCalendar createUtcCalendar() { return calendar; } - @Test - public void testDateFormatString() { + @Test + public void testDateFormatString() { GregorianCalendar calendar = new GregorianCalendar(utcTimeZone(), Locale.US); // Calendar was created with current time, must clear it calendar.clear(); @@ -40,8 +40,8 @@ public void testDateFormatString() { assertEquals(expectedDate, dateStr.substring(0, expectedDate.length())); } - @Test - public void testDateFormatWithMilliseconds() { + @Test + public void testDateFormatWithMilliseconds() { long time = 1530209176870L; Date date = new Date(time); String dateStr = ISO8601Utils.format(date, true); @@ -49,8 +49,8 @@ public void testDateFormatWithMilliseconds() { assertEquals(expectedDate, dateStr); } - @Test - public void testDateFormatWithTimezone() { + @Test + public void testDateFormatWithTimezone() { long time = 1530209176870L; Date date = new Date(time); String dateStr = ISO8601Utils.format(date, true, TimeZone.getTimeZone("Brazil/East")); @@ -58,16 +58,16 @@ public void testDateFormatWithTimezone() { assertEquals(expectedDate, dateStr); } - @Test - public void testDateParseWithDefaultTimezone() throws ParseException { + @Test + public void testDateParseWithDefaultTimezone() throws ParseException { String dateStr = "2018-06-25"; Date date = ISO8601Utils.parse(dateStr, new ParsePosition(0)); Date expectedDate = new GregorianCalendar(2018, Calendar.JUNE, 25).getTime(); assertEquals(expectedDate, date); } - @Test - public void testDateParseInvalidDay() { + @Test + public void testDateParseInvalidDay() { String dateStr = "2022-12-33"; try { ISO8601Utils.parse(dateStr, new ParsePosition(0)); @@ -76,8 +76,8 @@ public void testDateParseInvalidDay() { } } - @Test - public void testDateParseInvalidMonth() { + @Test + public void testDateParseInvalidMonth() { String dateStr = "2022-14-30"; try { ISO8601Utils.parse(dateStr, new ParsePosition(0)); @@ -86,8 +86,8 @@ public void testDateParseInvalidMonth() { } } - @Test - public void testDateParseWithTimezone() throws ParseException { + @Test + public void testDateParseWithTimezone() throws ParseException { String dateStr = "2018-06-25T00:00:00-03:00"; Date date = ISO8601Utils.parse(dateStr, new ParsePosition(0)); GregorianCalendar calendar = createUtcCalendar(); @@ -96,8 +96,8 @@ public void testDateParseWithTimezone() throws ParseException { assertEquals(expectedDate, date); } - @Test - public void testDateParseSpecialTimezone() throws ParseException { + @Test + public void testDateParseSpecialTimezone() throws ParseException { String dateStr = "2018-06-25T00:02:00-02:58"; Date date = ISO8601Utils.parse(dateStr, new ParsePosition(0)); GregorianCalendar calendar = createUtcCalendar(); @@ -106,8 +106,8 @@ public void testDateParseSpecialTimezone() throws ParseException { assertEquals(expectedDate, date); } - @Test - public void testDateParseInvalidTime() throws ParseException { + @Test + public void testDateParseInvalidTime() throws ParseException { final String dateStr = "2018-06-25T61:60:62-03:00"; assertThrows(ParseException.class, new ThrowingRunnable() { @Override diff --git a/gson/src/test/java/com/google/gson/internal/sql/SqlTypesGsonTest.java b/gson/src/test/java/com/google/gson/internal/sql/SqlTypesGsonTest.java index 03e2185541..832e38ca8a 100644 --- a/gson/src/test/java/com/google/gson/internal/sql/SqlTypesGsonTest.java +++ b/gson/src/test/java/com/google/gson/internal/sql/SqlTypesGsonTest.java @@ -1,26 +1,27 @@ package com.google.gson.internal.sql; -import java.sql.Date; -import java.sql.Time; -import java.sql.Timestamp; -import java.util.Locale; -import java.util.TimeZone; +import static org.junit.Assert.assertEquals; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.functional.DefaultTypeAdaptersTest; import com.google.gson.internal.JavaVersion; +import java.sql.Date; +import java.sql.Time; +import java.sql.Timestamp; +import java.util.Locale; +import java.util.TimeZone; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; -import junit.framework.TestCase; - -public class SqlTypesGsonTest extends TestCase { +public class SqlTypesGsonTest { private Gson gson; private TimeZone oldTimeZone; private Locale oldLocale; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { this.oldTimeZone = TimeZone.getDefault(); TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles")); this.oldLocale = Locale.getDefault(); @@ -28,13 +29,13 @@ protected void setUp() throws Exception { gson = new Gson(); } - @Override - protected void tearDown() throws Exception { - super.tearDown(); + @After + public void tearDown() throws Exception { TimeZone.setDefault(oldTimeZone); Locale.setDefault(oldLocale); } + @Test public void testNullSerializationAndDeserialization() { testNullSerializationAndDeserialization(Date.class); testNullSerializationAndDeserialization(Time.class); @@ -45,12 +46,14 @@ private void testNullSerializationAndDeserialization(Class c) { DefaultTypeAdaptersTest.testNullSerializationAndDeserialization(gson, c); } + @Test public void testDefaultSqlDateSerialization() { java.sql.Date instant = new java.sql.Date(1259875082000L); String json = gson.toJson(instant); assertEquals("\"Dec 3, 2009\"", json); } + @Test public void testDefaultSqlDateDeserialization() { String json = "'Dec 3, 2009'"; java.sql.Date extracted = gson.fromJson(json, java.sql.Date.class); @@ -58,6 +61,7 @@ public void testDefaultSqlDateDeserialization() { } // http://code.google.com/p/google-gson/issues/detail?id=230 + @Test public void testSqlDateSerialization() throws Exception { TimeZone defaultTimeZone = TimeZone.getDefault(); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); @@ -75,18 +79,21 @@ public void testSqlDateSerialization() throws Exception { } } + @Test public void testDefaultSqlTimeSerialization() { Time now = new Time(1259875082000L); String json = gson.toJson(now); assertEquals("\"01:18:02 PM\"", json); } + @Test public void testDefaultSqlTimeDeserialization() { String json = "'1:18:02 PM'"; Time extracted = gson.fromJson(json, Time.class); DefaultTypeAdaptersTest.assertEqualsTime(extracted, 13, 18, 2); } + @Test public void testDefaultSqlTimestampSerialization() { Timestamp now = new java.sql.Timestamp(1259875082000L); String json = gson.toJson(now); @@ -97,6 +104,7 @@ public void testDefaultSqlTimestampSerialization() { } } + @Test public void testDefaultSqlTimestampDeserialization() { String json = "'Dec 3, 2009 1:18:02 PM'"; Timestamp extracted = gson.fromJson(json, Timestamp.class); @@ -105,6 +113,7 @@ public void testDefaultSqlTimestampDeserialization() { } // http://code.google.com/p/google-gson/issues/detail?id=230 + @Test public void testTimestampSerialization() throws Exception { TimeZone defaultTimeZone = TimeZone.getDefault(); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); diff --git a/gson/src/test/java/com/google/gson/internal/sql/SqlTypesSupportTest.java b/gson/src/test/java/com/google/gson/internal/sql/SqlTypesSupportTest.java index ea496f4ac9..51244283cb 100644 --- a/gson/src/test/java/com/google/gson/internal/sql/SqlTypesSupportTest.java +++ b/gson/src/test/java/com/google/gson/internal/sql/SqlTypesSupportTest.java @@ -1,8 +1,12 @@ package com.google.gson.internal.sql; -import junit.framework.TestCase; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; -public class SqlTypesSupportTest extends TestCase { +import org.junit.Test; + +public class SqlTypesSupportTest { + @Test public void testSupported() { assertTrue(SqlTypesSupport.SUPPORTS_SQL_TYPES); diff --git a/gson/src/test/java/com/google/gson/metrics/PerformanceTest.java b/gson/src/test/java/com/google/gson/metrics/PerformanceTest.java index e0ff065314..5670506b8d 100644 --- a/gson/src/test/java/com/google/gson/metrics/PerformanceTest.java +++ b/gson/src/test/java/com/google/gson/metrics/PerformanceTest.java @@ -16,19 +16,22 @@ package com.google.gson.metrics; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import com.google.gson.Gson; import com.google.gson.JsonParseException; import com.google.gson.annotations.Expose; import com.google.gson.reflect.TypeToken; - -import junit.framework.TestCase; - import java.io.StringWriter; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; /** * Tests to measure performance for Gson. All tests in this file will be disabled in code. To run @@ -37,23 +40,25 @@ * @author Inderjeet Singh * @author Joel Leitch */ -public class PerformanceTest extends TestCase { +public class PerformanceTest { private static final int COLLECTION_SIZE = 5000; private static final int NUM_ITERATIONS = 100; private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new Gson(); } + @Test public void testDummy() { // This is here to prevent Junit for complaining when we disable all tests. } + @Test + @Ignore public void disabled_testStringDeserialization() { StringBuilder sb = new StringBuilder(8096); sb.append("Error Yippie"); @@ -111,6 +116,8 @@ private CollectionEntry() { /** * Created in response to http://code.google.com/p/google-gson/issues/detail?id=96 */ + @Test + @Ignore public void disabled_testLargeCollectionSerialization() { int count = 1400000; List list = new ArrayList<>(count); @@ -123,6 +130,8 @@ public void disabled_testLargeCollectionSerialization() { /** * Created in response to http://code.google.com/p/google-gson/issues/detail?id=96 */ + @Test + @Ignore public void disabled_testLargeCollectionDeserialization() { StringBuilder sb = new StringBuilder(); int count = 87000; @@ -147,6 +156,8 @@ public void disabled_testLargeCollectionDeserialization() { * Created in response to http://code.google.com/p/google-gson/issues/detail?id=96 */ // Last I tested, Gson was able to serialize upto 14MB byte array + @Test + @Ignore public void disabled_testByteArraySerialization() { for (int size = 4145152; true; size += 1036288) { byte[] ba = new byte[size]; @@ -162,6 +173,8 @@ public void disabled_testByteArraySerialization() { * Created in response to http://code.google.com/p/google-gson/issues/detail?id=96 */ // Last I tested, Gson was able to deserialize a byte array of 11MB + @Test + @Ignore public void disabled_testByteArrayDeserialization() { for (int numElements = 10639296; true; numElements += 16384) { StringBuilder sb = new StringBuilder(numElements*2); @@ -190,7 +203,9 @@ public void disabled_testByteArrayDeserialization() { // Deserialized classes avg time: 70 ms // Serialize exposed classes avg time: 159 ms // Deserialized exposed classes avg time: 173 ms - + + @Test + @Ignore public void disabled_testSerializeClasses() { ClassWithList c = new ClassWithList("str"); for (int i = 0; i < COLLECTION_SIZE; ++i) { @@ -206,6 +221,8 @@ public void disabled_testSerializeClasses() { System.out.printf("Serialize classes avg time: %d ms\n", avg); } + @Test + @Ignore public void disabled_testDeserializeClasses() { String json = buildJsonForClassWithList(); ClassWithList[] target = new ClassWithList[NUM_ITERATIONS]; @@ -217,7 +234,9 @@ public void disabled_testDeserializeClasses() { long avg = (t2 - t1) / NUM_ITERATIONS; System.out.printf("Deserialize classes avg time: %d ms\n", avg); } - + + @Test + @Ignore public void disabled_testLargeObjectSerializationAndDeserialization() { Map largeObject = new HashMap<>(); for (long l = 0; l < 100000; l++) { @@ -236,6 +255,8 @@ public void disabled_testLargeObjectSerializationAndDeserialization() { } + @Test + @Ignore public void disabled_testSerializeExposedClasses() { ClassWithListOfObjects c1 = new ClassWithListOfObjects("str"); for (int i1 = 0; i1 < COLLECTION_SIZE; ++i1) { @@ -252,6 +273,8 @@ public void disabled_testSerializeExposedClasses() { System.out.printf("Serialize exposed classes avg time: %d ms\n", avg); } + @Test + @Ignore public void disabled_testDeserializeExposedClasses() { String json = buildJsonForClassWithList(); ClassWithListOfObjects[] target = new ClassWithListOfObjects[NUM_ITERATIONS]; @@ -264,6 +287,8 @@ public void disabled_testDeserializeExposedClasses() { System.out.printf("Deserialize exposed classes avg time: %d ms\n", avg); } + @Test + @Ignore public void disabled_testLargeGsonMapRoundTrip() throws Exception { Map original = new HashMap<>(); for (long i = 0; i < 1000000; i++) { diff --git a/gson/src/test/java/com/google/gson/reflect/TypeTokenTest.java b/gson/src/test/java/com/google/gson/reflect/TypeTokenTest.java index 55c2e82357..89c5c4c31f 100644 --- a/gson/src/test/java/com/google/gson/reflect/TypeTokenTest.java +++ b/gson/src/test/java/com/google/gson/reflect/TypeTokenTest.java @@ -16,6 +16,11 @@ package com.google.gson.reflect; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import java.lang.reflect.GenericArrayType; import java.lang.reflect.Type; import java.util.ArrayList; @@ -23,12 +28,12 @@ import java.util.Map; import java.util.RandomAccess; import java.util.Set; -import junit.framework.TestCase; +import org.junit.Test; /** * @author Jesse Wilson */ -public final class TypeTokenTest extends TestCase { +public final class TypeTokenTest { // These fields are accessed using reflection by the tests below List listOfInteger = null; List listOfNumber = null; @@ -38,6 +43,7 @@ public final class TypeTokenTest extends TestCase { List> listOfSetOfUnknown = null; @SuppressWarnings({"deprecation"}) + @Test public void testIsAssignableFromRawTypes() { assertTrue(TypeToken.get(Object.class).isAssignableFrom(String.class)); assertFalse(TypeToken.get(String.class).isAssignableFrom(Object.class)); @@ -46,6 +52,7 @@ public void testIsAssignableFromRawTypes() { } @SuppressWarnings({"deprecation"}) + @Test public void testIsAssignableFromWithTypeParameters() throws Exception { Type a = getClass().getDeclaredField("listOfInteger").getGenericType(); Type b = getClass().getDeclaredField("listOfNumber").getGenericType(); @@ -59,6 +66,7 @@ public void testIsAssignableFromWithTypeParameters() throws Exception { } @SuppressWarnings({"deprecation"}) + @Test public void testIsAssignableFromWithBasicWildcards() throws Exception { Type a = getClass().getDeclaredField("listOfString").getGenericType(); Type b = getClass().getDeclaredField("listOfUnknown").getGenericType(); @@ -73,6 +81,7 @@ public void testIsAssignableFromWithBasicWildcards() throws Exception { } @SuppressWarnings({"deprecation"}) + @Test public void testIsAssignableFromWithNestedWildcards() throws Exception { Type a = getClass().getDeclaredField("listOfSetOfString").getGenericType(); Type b = getClass().getDeclaredField("listOfSetOfUnknown").getGenericType(); @@ -85,6 +94,7 @@ public void testIsAssignableFromWithNestedWildcards() throws Exception { assertFalse(TypeToken.get(b).isAssignableFrom(a)); } + @Test public void testArrayFactory() { TypeToken expectedStringArray = new TypeToken() {}; assertEquals(expectedStringArray, TypeToken.getArray(String.class)); @@ -100,6 +110,7 @@ public void testArrayFactory() { } } + @Test public void testParameterizedFactory() { TypeToken expectedListOfString = new TypeToken>() {}; assertEquals(expectedListOfString, TypeToken.getParameterized(List.class, String.class)); @@ -122,6 +133,7 @@ public void testParameterizedFactory() { assertEquals(expectedSatisfyingTwoBounds, TypeToken.getParameterized(GenericWithMultiBound.class, ClassSatisfyingBounds.class)); } + @Test public void testParameterizedFactory_Invalid() { try { TypeToken.getParameterized(null, new Type[0]); @@ -207,6 +219,7 @@ public void testParameterizedFactory_Invalid() { private static class CustomTypeToken extends TypeToken { } + @Test public void testTypeTokenNonAnonymousSubclass() { TypeToken typeToken = new CustomTypeToken(); assertEquals(String.class, typeToken.getRawType()); @@ -217,6 +230,7 @@ public void testTypeTokenNonAnonymousSubclass() { * User must only create direct subclasses of TypeToken, but not subclasses * of subclasses (...) of TypeToken. */ + @Test public void testTypeTokenSubSubClass() { class SubTypeToken extends TypeToken {} class SubSubTypeToken1 extends SubTypeToken {} @@ -245,6 +259,7 @@ class SubSubTypeToken2 extends SubTypeToken {} } @SuppressWarnings("rawtypes") + @Test public void testTypeTokenRaw() { try { new TypeToken() {}; diff --git a/gson/src/test/java/com/google/gson/regression/JsonAdapterNullSafeTest.java b/gson/src/test/java/com/google/gson/regression/JsonAdapterNullSafeTest.java index e327895c43..a14faff3d1 100644 --- a/gson/src/test/java/com/google/gson/regression/JsonAdapterNullSafeTest.java +++ b/gson/src/test/java/com/google/gson/regression/JsonAdapterNullSafeTest.java @@ -15,22 +15,25 @@ */ package com.google.gson.regression; +import static org.junit.Assert.assertEquals; + import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapterFactory; import com.google.gson.annotations.JsonAdapter; import com.google.gson.reflect.TypeToken; +import org.junit.Test; -import junit.framework.TestCase; - -public class JsonAdapterNullSafeTest extends TestCase { +public class JsonAdapterNullSafeTest { private final Gson gson = new Gson(); + @Test public void testNullSafeBugSerialize() throws Exception { Device device = new Device("ec57803e"); gson.toJson(device); } + @Test public void testNullSafeBugDeserialize() throws Exception { Device device = gson.fromJson("{'id':'ec57803e2'}", Device.class); assertEquals("ec57803e2", device.id); diff --git a/gson/src/test/java/com/google/gson/regression/OSGiTest.java b/gson/src/test/java/com/google/gson/regression/OSGiTest.java index c41b12f465..9512241c79 100644 --- a/gson/src/test/java/com/google/gson/regression/OSGiTest.java +++ b/gson/src/test/java/com/google/gson/regression/OSGiTest.java @@ -15,25 +15,29 @@ */ package com.google.gson.regression; -import java.io.InputStream; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + import java.io.IOException; +import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.jar.Manifest; +import org.junit.Test; -import junit.framework.TestCase; - -public class OSGiTest extends TestCase { - public void testComGoogleGsonAnnotationsPackage() throws Exception { +public class OSGiTest { + @Test + public void testComGoogleGsonAnnotationsPackage() throws Exception { Manifest mf = findManifest("com.google.gson"); String importPkg = mf.getMainAttributes().getValue("Import-Package"); assertNotNull("Import-Package statement is there", importPkg); assertSubstring("There should be com.google.gson.annotations dependency", importPkg, "com.google.gson.annotations"); } - public void testSunMiscImportPackage() throws Exception { + @Test + public void testSunMiscImportPackage() throws Exception { Manifest mf = findManifest("com.google.gson"); String importPkg = mf.getMainAttributes().getValue("Import-Package"); assertNotNull("Import-Package statement is there", importPkg); diff --git a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java index faaa87a243..e4ce428a0c 100644 --- a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java +++ b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java @@ -25,16 +25,22 @@ import static com.google.gson.stream.JsonToken.NULL; import static com.google.gson.stream.JsonToken.NUMBER; import static com.google.gson.stream.JsonToken.STRING; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.io.EOFException; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.util.Arrays; -import junit.framework.TestCase; +import org.junit.Ignore; +import org.junit.Test; @SuppressWarnings("resource") -public final class JsonReaderTest extends TestCase { +public final class JsonReaderTest { + @Test public void testReadArray() throws IOException { JsonReader reader = new JsonReader(reader("[true, true]")); reader.beginArray(); @@ -44,6 +50,7 @@ public void testReadArray() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testReadEmptyArray() throws IOException { JsonReader reader = new JsonReader(reader("[]")); reader.beginArray(); @@ -52,6 +59,7 @@ public void testReadEmptyArray() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testReadObject() throws IOException { JsonReader reader = new JsonReader(reader( "{\"a\": \"android\", \"b\": \"banana\"}")); @@ -64,6 +72,7 @@ public void testReadObject() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testReadEmptyObject() throws IOException { JsonReader reader = new JsonReader(reader("{}")); reader.beginObject(); @@ -72,6 +81,7 @@ public void testReadEmptyObject() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testHasNextEndOfDocument() throws IOException { JsonReader reader = new JsonReader(reader("{}")); reader.beginObject(); @@ -79,6 +89,7 @@ public void testHasNextEndOfDocument() throws IOException { assertFalse(reader.hasNext()); } + @Test public void testSkipArray() throws IOException { JsonReader reader = new JsonReader(reader( "{\"a\": [\"one\", \"two\", \"three\"], \"b\": 123}")); @@ -91,6 +102,7 @@ public void testSkipArray() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testSkipArrayAfterPeek() throws Exception { JsonReader reader = new JsonReader(reader( "{\"a\": [\"one\", \"two\", \"three\"], \"b\": 123}")); @@ -104,6 +116,7 @@ public void testSkipArrayAfterPeek() throws Exception { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testSkipTopLevelObject() throws Exception { JsonReader reader = new JsonReader(reader( "{\"a\": [\"one\", \"two\", \"three\"], \"b\": 123}")); @@ -111,6 +124,7 @@ public void testSkipTopLevelObject() throws Exception { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testSkipObject() throws IOException { JsonReader reader = new JsonReader(reader( "{\"a\": { \"c\": [], \"d\": [true, true, {}] }, \"b\": \"banana\"}")); @@ -123,6 +137,7 @@ public void testSkipObject() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testSkipObjectAfterPeek() throws Exception { String json = "{" + " \"one\": { \"num\": 1 }" + ", \"two\": { \"num\": 2 }" + ", \"three\": { \"num\": 3 }" + "}"; @@ -140,6 +155,7 @@ public void testSkipObjectAfterPeek() throws Exception { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testSkipObjectName() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\": 1}")); reader.beginObject(); @@ -149,6 +165,7 @@ public void testSkipObjectName() throws IOException { assertEquals(1, reader.nextInt()); } + @Test public void testSkipObjectNameSingleQuoted() throws IOException { JsonReader reader = new JsonReader(reader("{'a': 1}")); reader.setLenient(true); @@ -159,6 +176,7 @@ public void testSkipObjectNameSingleQuoted() throws IOException { assertEquals(1, reader.nextInt()); } + @Test public void testSkipObjectNameUnquoted() throws IOException { JsonReader reader = new JsonReader(reader("{a: 1}")); reader.setLenient(true); @@ -169,6 +187,7 @@ public void testSkipObjectNameUnquoted() throws IOException { assertEquals(1, reader.nextInt()); } + @Test public void testSkipInteger() throws IOException { JsonReader reader = new JsonReader(reader( "{\"a\":123456789,\"b\":-123456789}")); @@ -181,6 +200,7 @@ public void testSkipInteger() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testSkipDouble() throws IOException { JsonReader reader = new JsonReader(reader( "{\"a\":-123.456e-789,\"b\":123456789.0}")); @@ -193,6 +213,7 @@ public void testSkipDouble() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testSkipValueAfterEndOfDocument() throws IOException { JsonReader reader = new JsonReader(reader("{}")); reader.beginObject(); @@ -205,6 +226,7 @@ public void testSkipValueAfterEndOfDocument() throws IOException { assertEquals("$", reader.getPath()); } + @Test public void testSkipValueAtArrayEnd() throws IOException { JsonReader reader = new JsonReader(reader("[]")); reader.beginArray(); @@ -213,6 +235,7 @@ public void testSkipValueAtArrayEnd() throws IOException { assertEquals("$", reader.getPath()); } + @Test public void testSkipValueAtObjectEnd() throws IOException { JsonReader reader = new JsonReader(reader("{}")); reader.beginObject(); @@ -221,6 +244,7 @@ public void testSkipValueAtObjectEnd() throws IOException { assertEquals("$", reader.getPath()); } + @Test public void testHelloWorld() throws IOException { String json = "{\n" + " \"hello\": true,\n" + @@ -238,6 +262,7 @@ public void testHelloWorld() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testInvalidJsonInput() throws IOException { String json = "{\n" + " \"h\\ello\": true,\n" @@ -254,6 +279,7 @@ public void testInvalidJsonInput() throws IOException { } @SuppressWarnings("unused") + @Test public void testNulls() { try { new JsonReader(null); @@ -262,6 +288,7 @@ public void testNulls() { } } + @Test public void testEmptyString() { try { new JsonReader(reader("")).beginArray(); @@ -275,6 +302,7 @@ public void testEmptyString() { } } + @Test public void testCharacterUnescaping() throws IOException { String json = "[\"a\"," + "\"a\\\"\"," @@ -321,6 +349,7 @@ public void testCharacterUnescaping() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testUnescapingInvalidCharacters() throws IOException { String json = "[\"\\u000g\"]"; JsonReader reader = new JsonReader(reader(json)); @@ -332,6 +361,7 @@ public void testUnescapingInvalidCharacters() throws IOException { } } + @Test public void testUnescapingTruncatedCharacters() throws IOException { String json = "[\"\\u000"; JsonReader reader = new JsonReader(reader(json)); @@ -343,6 +373,7 @@ public void testUnescapingTruncatedCharacters() throws IOException { } } + @Test public void testUnescapingTruncatedSequence() throws IOException { String json = "[\"\\"; JsonReader reader = new JsonReader(reader(json)); @@ -354,14 +385,16 @@ public void testUnescapingTruncatedSequence() throws IOException { } } + @Test public void testIntegersWithFractionalPartSpecified() throws IOException { JsonReader reader = new JsonReader(reader("[1.0,1.0,1.0]")); reader.beginArray(); - assertEquals(1.0, reader.nextDouble()); + assertEquals(1.0, reader.nextDouble(), 0); assertEquals(1, reader.nextInt()); assertEquals(1L, reader.nextLong()); } + @Test public void testDoubles() throws IOException { String json = "[-0.0," + "1.0," @@ -383,28 +416,29 @@ public void testDoubles() throws IOException { + "1e+1]"; JsonReader reader = new JsonReader(reader(json)); reader.beginArray(); - assertEquals(-0.0, reader.nextDouble()); - assertEquals(1.0, reader.nextDouble()); - assertEquals(1.7976931348623157E308, reader.nextDouble()); - assertEquals(4.9E-324, reader.nextDouble()); - assertEquals(0.0, reader.nextDouble()); - assertEquals(0.0, reader.nextDouble()); - assertEquals(-0.5, reader.nextDouble()); - assertEquals(2.2250738585072014E-308, reader.nextDouble()); - assertEquals(3.141592653589793, reader.nextDouble()); - assertEquals(2.718281828459045, reader.nextDouble()); - assertEquals(0.0, reader.nextDouble()); - assertEquals(0.01, reader.nextDouble()); - assertEquals(0.0, reader.nextDouble()); - assertEquals(1.0, reader.nextDouble()); - assertEquals(1.0, reader.nextDouble()); - assertEquals(1.0, reader.nextDouble()); - assertEquals(10.0, reader.nextDouble()); - assertEquals(10.0, reader.nextDouble()); + assertEquals(-0.0, reader.nextDouble(), 0); + assertEquals(1.0, reader.nextDouble(), 0); + assertEquals(1.7976931348623157E308, reader.nextDouble(), 0); + assertEquals(4.9E-324, reader.nextDouble(), 0); + assertEquals(0.0, reader.nextDouble(), 0); + assertEquals(0.0, reader.nextDouble(), 0); + assertEquals(-0.5, reader.nextDouble(), 0); + assertEquals(2.2250738585072014E-308, reader.nextDouble(), 0); + assertEquals(3.141592653589793, reader.nextDouble(), 0); + assertEquals(2.718281828459045, reader.nextDouble(), 0); + assertEquals(0.0, reader.nextDouble(), 0); + assertEquals(0.01, reader.nextDouble(), 0); + assertEquals(0.0, reader.nextDouble(), 0); + assertEquals(1.0, reader.nextDouble(), 0); + assertEquals(1.0, reader.nextDouble(), 0); + assertEquals(1.0, reader.nextDouble(), 0); + assertEquals(10.0, reader.nextDouble(), 0); + assertEquals(10.0, reader.nextDouble(), 0); reader.endArray(); assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testStrictNonFiniteDoubles() throws IOException { String json = "[NaN]"; JsonReader reader = new JsonReader(reader(json)); @@ -416,6 +450,7 @@ public void testStrictNonFiniteDoubles() throws IOException { } } + @Test public void testStrictQuotedNonFiniteDoubles() throws IOException { String json = "[\"NaN\"]"; JsonReader reader = new JsonReader(reader(json)); @@ -427,28 +462,31 @@ public void testStrictQuotedNonFiniteDoubles() throws IOException { } } + @Test public void testLenientNonFiniteDoubles() throws IOException { String json = "[NaN, -Infinity, Infinity]"; JsonReader reader = new JsonReader(reader(json)); reader.setLenient(true); reader.beginArray(); assertTrue(Double.isNaN(reader.nextDouble())); - assertEquals(Double.NEGATIVE_INFINITY, reader.nextDouble()); - assertEquals(Double.POSITIVE_INFINITY, reader.nextDouble()); + assertEquals(Double.NEGATIVE_INFINITY, reader.nextDouble(), 0); + assertEquals(Double.POSITIVE_INFINITY, reader.nextDouble(), 0); reader.endArray(); } + @Test public void testLenientQuotedNonFiniteDoubles() throws IOException { String json = "[\"NaN\", \"-Infinity\", \"Infinity\"]"; JsonReader reader = new JsonReader(reader(json)); reader.setLenient(true); reader.beginArray(); assertTrue(Double.isNaN(reader.nextDouble())); - assertEquals(Double.NEGATIVE_INFINITY, reader.nextDouble()); - assertEquals(Double.POSITIVE_INFINITY, reader.nextDouble()); + assertEquals(Double.NEGATIVE_INFINITY, reader.nextDouble(), 0); + assertEquals(Double.POSITIVE_INFINITY, reader.nextDouble(), 0); reader.endArray(); } + @Test public void testStrictNonFiniteDoublesWithSkipValue() throws IOException { String json = "[NaN]"; JsonReader reader = new JsonReader(reader(json)); @@ -460,6 +498,7 @@ public void testStrictNonFiniteDoublesWithSkipValue() throws IOException { } } + @Test public void testLongs() throws IOException { String json = "[0,0,0," + "1,1,1," @@ -470,13 +509,13 @@ public void testLongs() throws IOException { reader.beginArray(); assertEquals(0L, reader.nextLong()); assertEquals(0, reader.nextInt()); - assertEquals(0.0, reader.nextDouble()); + assertEquals(0.0, reader.nextDouble(), 0); assertEquals(1L, reader.nextLong()); assertEquals(1, reader.nextInt()); - assertEquals(1.0, reader.nextDouble()); + assertEquals(1.0, reader.nextDouble(), 0); assertEquals(-1L, reader.nextLong()); assertEquals(-1, reader.nextInt()); - assertEquals(-1.0, reader.nextDouble()); + assertEquals(-1.0, reader.nextDouble(), 0); try { reader.nextInt(); fail(); @@ -493,6 +532,8 @@ public void testLongs() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test + @Ignore public void disabled_testNumberWithOctalPrefix() throws IOException { String json = "[01]"; JsonReader reader = new JsonReader(reader(json)); @@ -522,6 +563,7 @@ public void disabled_testNumberWithOctalPrefix() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testBooleans() throws IOException { JsonReader reader = new JsonReader(reader("[true,false]")); reader.beginArray(); @@ -531,6 +573,7 @@ public void testBooleans() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testPeekingUnquotedStringsPrefixedWithBooleans() throws IOException { JsonReader reader = new JsonReader(reader("[truey]")); reader.setLenient(true); @@ -545,6 +588,7 @@ public void testPeekingUnquotedStringsPrefixedWithBooleans() throws IOException reader.endArray(); } + @Test public void testMalformedNumbers() throws IOException { assertNotANumber("-"); assertNotANumber("."); @@ -603,6 +647,7 @@ private void assertNotANumber(String s) throws IOException { } } + @Test public void testPeekingUnquotedStringsPrefixedWithIntegers() throws IOException { JsonReader reader = new JsonReader(reader("[12.34e5x]")); reader.setLenient(true); @@ -616,6 +661,7 @@ public void testPeekingUnquotedStringsPrefixedWithIntegers() throws IOException assertEquals("12.34e5x", reader.nextString()); } + @Test public void testPeekLongMinValue() throws IOException { JsonReader reader = new JsonReader(reader("[-9223372036854775808]")); reader.setLenient(true); @@ -624,6 +670,7 @@ public void testPeekLongMinValue() throws IOException { assertEquals(-9223372036854775808L, reader.nextLong()); } + @Test public void testPeekLongMaxValue() throws IOException { JsonReader reader = new JsonReader(reader("[9223372036854775807]")); reader.setLenient(true); @@ -632,6 +679,7 @@ public void testPeekLongMaxValue() throws IOException { assertEquals(9223372036854775807L, reader.nextLong()); } + @Test public void testLongLargerThanMaxLongThatWrapsAround() throws IOException { JsonReader reader = new JsonReader(reader("[22233720368547758070]")); reader.setLenient(true); @@ -644,6 +692,7 @@ public void testLongLargerThanMaxLongThatWrapsAround() throws IOException { } } + @Test public void testLongLargerThanMinLongThatWrapsAround() throws IOException { JsonReader reader = new JsonReader(reader("[-22233720368547758070]")); reader.setLenient(true); @@ -660,6 +709,7 @@ public void testLongLargerThanMinLongThatWrapsAround() throws IOException { * Issue 1053, negative zero. * @throws Exception */ + @Test public void testNegativeZero() throws Exception { JsonReader reader = new JsonReader(reader("[-0]")); reader.setLenient(false); @@ -672,6 +722,8 @@ public void testNegativeZero() throws Exception { * This test fails because there's no double for 9223372036854775808, and our * long parsing uses Double.parseDouble() for fractional values. */ + @Test + @Ignore public void disabled_testPeekLargerThanLongMaxValue() throws IOException { JsonReader reader = new JsonReader(reader("[9223372036854775808]")); reader.setLenient(true); @@ -688,6 +740,8 @@ public void disabled_testPeekLargerThanLongMaxValue() throws IOException { * This test fails because there's no double for -9223372036854775809, and our * long parsing uses Double.parseDouble() for fractional values. */ + @Test + @Ignore public void disabled_testPeekLargerThanLongMinValue() throws IOException { JsonReader reader = new JsonReader(reader("[-9223372036854775809]")); reader.setLenient(true); @@ -698,13 +752,15 @@ public void disabled_testPeekLargerThanLongMinValue() throws IOException { fail(); } catch (NumberFormatException expected) { } - assertEquals(-9223372036854775809d, reader.nextDouble()); + assertEquals(-9223372036854775809d, reader.nextDouble(), 0); } /** * This test fails because there's no double for 9223372036854775806, and * our long parsing uses Double.parseDouble() for fractional values. */ + @Test + @Ignore public void disabled_testHighPrecisionLong() throws IOException { String json = "[9223372036854775806.000]"; JsonReader reader = new JsonReader(reader(json)); @@ -713,6 +769,7 @@ public void disabled_testHighPrecisionLong() throws IOException { reader.endArray(); } + @Test public void testPeekMuchLargerThanLongMinValue() throws IOException { JsonReader reader = new JsonReader(reader("[-92233720368547758080]")); reader.setLenient(true); @@ -723,9 +780,10 @@ public void testPeekMuchLargerThanLongMinValue() throws IOException { fail(); } catch (NumberFormatException expected) { } - assertEquals(-92233720368547758080d, reader.nextDouble()); + assertEquals(-92233720368547758080d, reader.nextDouble(), 0); } + @Test public void testQuotedNumberWithEscape() throws IOException { JsonReader reader = new JsonReader(reader("[\"12\u00334\"]")); reader.setLenient(true); @@ -734,6 +792,7 @@ public void testQuotedNumberWithEscape() throws IOException { assertEquals(1234, reader.nextInt()); } + @Test public void testMixedCaseLiterals() throws IOException { JsonReader reader = new JsonReader(reader("[True,TruE,False,FALSE,NULL,nulL]")); reader.beginArray(); @@ -747,6 +806,7 @@ public void testMixedCaseLiterals() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testMissingValue() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\":}")); reader.beginObject(); @@ -758,6 +818,7 @@ public void testMissingValue() throws IOException { } } + @Test public void testPrematureEndOfInput() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\":true,")); reader.beginObject(); @@ -770,6 +831,7 @@ public void testPrematureEndOfInput() throws IOException { } } + @Test public void testPrematurelyClosed() throws IOException { try { JsonReader reader = new JsonReader(reader("{\"a\":[]}")); @@ -800,6 +862,7 @@ public void testPrematurelyClosed() throws IOException { } } + @Test public void testNextFailuresDoNotAdvance() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\":true}")); reader.beginObject(); @@ -860,6 +923,7 @@ public void testNextFailuresDoNotAdvance() throws IOException { reader.close(); } + @Test public void testIntegerMismatchFailuresDoNotAdvance() throws IOException { JsonReader reader = new JsonReader(reader("[1.5]")); reader.beginArray(); @@ -868,10 +932,11 @@ public void testIntegerMismatchFailuresDoNotAdvance() throws IOException { fail(); } catch (NumberFormatException expected) { } - assertEquals(1.5d, reader.nextDouble()); + assertEquals(1.5d, reader.nextDouble(), 0); reader.endArray(); } + @Test public void testStringNullIsNotNull() throws IOException { JsonReader reader = new JsonReader(reader("[\"null\"]")); reader.beginArray(); @@ -882,6 +947,7 @@ public void testStringNullIsNotNull() throws IOException { } } + @Test public void testNullLiteralIsNotAString() throws IOException { JsonReader reader = new JsonReader(reader("[null]")); reader.beginArray(); @@ -892,6 +958,7 @@ public void testNullLiteralIsNotAString() throws IOException { } } + @Test public void testStrictNameValueSeparator() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\"=true}")); reader.beginObject(); @@ -912,6 +979,7 @@ public void testStrictNameValueSeparator() throws IOException { } } + @Test public void testLenientNameValueSeparator() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\"=true}")); reader.setLenient(true); @@ -926,6 +994,7 @@ public void testLenientNameValueSeparator() throws IOException { assertEquals(true, reader.nextBoolean()); } + @Test public void testStrictNameValueSeparatorWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\"=true}")); reader.beginObject(); @@ -946,6 +1015,7 @@ public void testStrictNameValueSeparatorWithSkipValue() throws IOException { } } + @Test public void testCommentsInStringValue() throws Exception { JsonReader reader = new JsonReader(reader("[\"// comment\"]")); reader.beginArray(); @@ -965,6 +1035,7 @@ public void testCommentsInStringValue() throws Exception { reader.endObject(); } + @Test public void testStrictComments() throws IOException { JsonReader reader = new JsonReader(reader("[// comment \n true]")); reader.beginArray(); @@ -991,6 +1062,7 @@ public void testStrictComments() throws IOException { } } + @Test public void testLenientComments() throws IOException { JsonReader reader = new JsonReader(reader("[// comment \n true]")); reader.setLenient(true); @@ -1008,6 +1080,7 @@ public void testLenientComments() throws IOException { assertEquals(true, reader.nextBoolean()); } + @Test public void testStrictCommentsWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("[// comment \n true]")); reader.beginArray(); @@ -1034,6 +1107,7 @@ public void testStrictCommentsWithSkipValue() throws IOException { } } + @Test public void testStrictUnquotedNames() throws IOException { JsonReader reader = new JsonReader(reader("{a:true}")); reader.beginObject(); @@ -1044,6 +1118,7 @@ public void testStrictUnquotedNames() throws IOException { } } + @Test public void testLenientUnquotedNames() throws IOException { JsonReader reader = new JsonReader(reader("{a:true}")); reader.setLenient(true); @@ -1051,6 +1126,7 @@ public void testLenientUnquotedNames() throws IOException { assertEquals("a", reader.nextName()); } + @Test public void testStrictUnquotedNamesWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("{a:true}")); reader.beginObject(); @@ -1061,6 +1137,7 @@ public void testStrictUnquotedNamesWithSkipValue() throws IOException { } } + @Test public void testStrictSingleQuotedNames() throws IOException { JsonReader reader = new JsonReader(reader("{'a':true}")); reader.beginObject(); @@ -1071,6 +1148,7 @@ public void testStrictSingleQuotedNames() throws IOException { } } + @Test public void testLenientSingleQuotedNames() throws IOException { JsonReader reader = new JsonReader(reader("{'a':true}")); reader.setLenient(true); @@ -1078,6 +1156,7 @@ public void testLenientSingleQuotedNames() throws IOException { assertEquals("a", reader.nextName()); } + @Test public void testStrictSingleQuotedNamesWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("{'a':true}")); reader.beginObject(); @@ -1088,6 +1167,7 @@ public void testStrictSingleQuotedNamesWithSkipValue() throws IOException { } } + @Test public void testStrictUnquotedStrings() throws IOException { JsonReader reader = new JsonReader(reader("[a]")); reader.beginArray(); @@ -1098,6 +1178,7 @@ public void testStrictUnquotedStrings() throws IOException { } } + @Test public void testStrictUnquotedStringsWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("[a]")); reader.beginArray(); @@ -1108,6 +1189,7 @@ public void testStrictUnquotedStringsWithSkipValue() throws IOException { } } + @Test public void testLenientUnquotedStrings() throws IOException { JsonReader reader = new JsonReader(reader("[a]")); reader.setLenient(true); @@ -1115,6 +1197,7 @@ public void testLenientUnquotedStrings() throws IOException { assertEquals("a", reader.nextString()); } + @Test public void testStrictSingleQuotedStrings() throws IOException { JsonReader reader = new JsonReader(reader("['a']")); reader.beginArray(); @@ -1125,6 +1208,7 @@ public void testStrictSingleQuotedStrings() throws IOException { } } + @Test public void testLenientSingleQuotedStrings() throws IOException { JsonReader reader = new JsonReader(reader("['a']")); reader.setLenient(true); @@ -1132,6 +1216,7 @@ public void testLenientSingleQuotedStrings() throws IOException { assertEquals("a", reader.nextString()); } + @Test public void testStrictSingleQuotedStringsWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("['a']")); reader.beginArray(); @@ -1142,6 +1227,7 @@ public void testStrictSingleQuotedStringsWithSkipValue() throws IOException { } } + @Test public void testStrictSemicolonDelimitedArray() throws IOException { JsonReader reader = new JsonReader(reader("[true;true]")); reader.beginArray(); @@ -1153,6 +1239,7 @@ public void testStrictSemicolonDelimitedArray() throws IOException { } } + @Test public void testLenientSemicolonDelimitedArray() throws IOException { JsonReader reader = new JsonReader(reader("[true;true]")); reader.setLenient(true); @@ -1161,6 +1248,7 @@ public void testLenientSemicolonDelimitedArray() throws IOException { assertEquals(true, reader.nextBoolean()); } + @Test public void testStrictSemicolonDelimitedArrayWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("[true;true]")); reader.beginArray(); @@ -1172,6 +1260,7 @@ public void testStrictSemicolonDelimitedArrayWithSkipValue() throws IOException } } + @Test public void testStrictSemicolonDelimitedNameValuePair() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\":true;\"b\":true}")); reader.beginObject(); @@ -1184,6 +1273,7 @@ public void testStrictSemicolonDelimitedNameValuePair() throws IOException { } } + @Test public void testLenientSemicolonDelimitedNameValuePair() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\":true;\"b\":true}")); reader.setLenient(true); @@ -1193,6 +1283,7 @@ public void testLenientSemicolonDelimitedNameValuePair() throws IOException { assertEquals("b", reader.nextName()); } + @Test public void testStrictSemicolonDelimitedNameValuePairWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\":true;\"b\":true}")); reader.beginObject(); @@ -1205,6 +1296,7 @@ public void testStrictSemicolonDelimitedNameValuePairWithSkipValue() throws IOEx } } + @Test public void testStrictUnnecessaryArraySeparators() throws IOException { JsonReader reader = new JsonReader(reader("[true,,true]")); reader.beginArray(); @@ -1241,6 +1333,7 @@ public void testStrictUnnecessaryArraySeparators() throws IOException { } } + @Test public void testLenientUnnecessaryArraySeparators() throws IOException { JsonReader reader = new JsonReader(reader("[true,,true]")); reader.setLenient(true); @@ -1272,6 +1365,7 @@ public void testLenientUnnecessaryArraySeparators() throws IOException { reader.endArray(); } + @Test public void testStrictUnnecessaryArraySeparatorsWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("[true,,true]")); reader.beginArray(); @@ -1308,6 +1402,7 @@ public void testStrictUnnecessaryArraySeparatorsWithSkipValue() throws IOExcepti } } + @Test public void testStrictMultipleTopLevelValues() throws IOException { JsonReader reader = new JsonReader(reader("[] []")); reader.beginArray(); @@ -1319,6 +1414,7 @@ public void testStrictMultipleTopLevelValues() throws IOException { } } + @Test public void testLenientMultipleTopLevelValues() throws IOException { JsonReader reader = new JsonReader(reader("[] true {}")); reader.setLenient(true); @@ -1330,6 +1426,7 @@ public void testLenientMultipleTopLevelValues() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testStrictMultipleTopLevelValuesWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("[] []")); reader.beginArray(); @@ -1341,6 +1438,7 @@ public void testStrictMultipleTopLevelValuesWithSkipValue() throws IOException { } } + @Test public void testTopLevelValueTypes() throws IOException { JsonReader reader1 = new JsonReader(reader("true")); assertTrue(reader1.nextBoolean()); @@ -1360,7 +1458,7 @@ public void testTopLevelValueTypes() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader4.peek()); JsonReader reader5 = new JsonReader(reader("123.4")); - assertEquals(123.4, reader5.nextDouble()); + assertEquals(123.4, reader5.nextDouble(), 0); assertEquals(JsonToken.END_DOCUMENT, reader5.peek()); JsonReader reader6 = new JsonReader(reader("\"a\"")); @@ -1368,12 +1466,14 @@ public void testTopLevelValueTypes() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader6.peek()); } + @Test public void testTopLevelValueTypeWithSkipValue() throws IOException { JsonReader reader = new JsonReader(reader("true")); reader.skipValue(); assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testStrictNonExecutePrefix() { JsonReader reader = new JsonReader(reader(")]}'\n []")); try { @@ -1383,6 +1483,7 @@ public void testStrictNonExecutePrefix() { } } + @Test public void testStrictNonExecutePrefixWithSkipValue() { JsonReader reader = new JsonReader(reader(")]}'\n []")); try { @@ -1392,6 +1493,7 @@ public void testStrictNonExecutePrefixWithSkipValue() { } } + @Test public void testLenientNonExecutePrefix() throws IOException { JsonReader reader = new JsonReader(reader(")]}'\n []")); reader.setLenient(true); @@ -1400,6 +1502,7 @@ public void testLenientNonExecutePrefix() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testLenientNonExecutePrefixWithLeadingWhitespace() throws IOException { JsonReader reader = new JsonReader(reader("\r\n \t)]}'\n []")); reader.setLenient(true); @@ -1408,6 +1511,7 @@ public void testLenientNonExecutePrefixWithLeadingWhitespace() throws IOExceptio assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testLenientPartialNonExecutePrefix() { JsonReader reader = new JsonReader(reader(")]}' []")); reader.setLenient(true); @@ -1419,12 +1523,14 @@ public void testLenientPartialNonExecutePrefix() { } } + @Test public void testBomIgnoredAsFirstCharacterOfDocument() throws IOException { JsonReader reader = new JsonReader(reader("\ufeff[]")); reader.beginArray(); reader.endArray(); } + @Test public void testBomForbiddenAsOtherCharacterInDocument() throws IOException { JsonReader reader = new JsonReader(reader("[\ufeff]")); reader.beginArray(); @@ -1435,45 +1541,54 @@ public void testBomForbiddenAsOtherCharacterInDocument() throws IOException { } } + @Test public void testFailWithPosition() throws IOException { testFailWithPosition("Expected value at line 6 column 5 path $[1]", "[\n\n\n\n\n\"a\",}]"); } + @Test public void testFailWithPositionGreaterThanBufferSize() throws IOException { String spaces = repeat(' ', 8192); testFailWithPosition("Expected value at line 6 column 5 path $[1]", "[\n\n" + spaces + "\n\n\n\"a\",}]"); } + @Test public void testFailWithPositionOverSlashSlashEndOfLineComment() throws IOException { testFailWithPosition("Expected value at line 5 column 6 path $[1]", "\n// foo\n\n//bar\r\n[\"a\",}"); } + @Test public void testFailWithPositionOverHashEndOfLineComment() throws IOException { testFailWithPosition("Expected value at line 5 column 6 path $[1]", "\n# foo\n\n#bar\r\n[\"a\",}"); } + @Test public void testFailWithPositionOverCStyleComment() throws IOException { testFailWithPosition("Expected value at line 6 column 12 path $[1]", "\n\n/* foo\n*\n*\r\nbar */[\"a\",}"); } + @Test public void testFailWithPositionOverQuotedString() throws IOException { testFailWithPosition("Expected value at line 5 column 3 path $[1]", "[\"foo\nbar\r\nbaz\n\",\n }"); } + @Test public void testFailWithPositionOverUnquotedString() throws IOException { testFailWithPosition("Expected value at line 5 column 2 path $[1]", "[\n\nabcd\n\n,}"); } + @Test public void testFailWithEscapedNewlineCharacter() throws IOException { testFailWithPosition("Expected value at line 5 column 3 path $[1]", "[\n\n\"\\\n\n\",}"); } + @Test public void testFailWithPositionIsOffsetByBom() throws IOException { testFailWithPosition("Expected value at line 1 column 6 path $[1]", "\ufeff[\"a\",}]"); @@ -1505,6 +1620,7 @@ private void testFailWithPosition(String message, String json) throws IOExceptio } } + @Test public void testFailWithPositionDeepPath() throws IOException { JsonReader reader = new JsonReader(reader("[1,{\"a\":[2,3,}")); reader.beginArray(); @@ -1522,26 +1638,29 @@ public void testFailWithPositionDeepPath() throws IOException { } } + @Test public void testStrictVeryLongNumber() throws IOException { JsonReader reader = new JsonReader(reader("[0." + repeat('9', 8192) + "]")); reader.beginArray(); try { - assertEquals(1d, reader.nextDouble()); + assertEquals(1d, reader.nextDouble(), 0); fail(); } catch (MalformedJsonException expected) { } } + @Test public void testLenientVeryLongNumber() throws IOException { JsonReader reader = new JsonReader(reader("[0." + repeat('9', 8192) + "]")); reader.setLenient(true); reader.beginArray(); assertEquals(JsonToken.STRING, reader.peek()); - assertEquals(1d, reader.nextDouble()); + assertEquals(1d, reader.nextDouble(), 0); reader.endArray(); assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testVeryLongUnquotedLiteral() throws IOException { String literal = "a" + repeat('b', 8192) + "c"; JsonReader reader = new JsonReader(reader("[" + literal + "]")); @@ -1551,6 +1670,7 @@ public void testVeryLongUnquotedLiteral() throws IOException { reader.endArray(); } + @Test public void testDeeplyNestedArrays() throws IOException { // this is nested 40 levels deep; Gson is tuned for nesting is 30 levels deep or fewer JsonReader reader = new JsonReader(reader( @@ -1566,6 +1686,7 @@ public void testDeeplyNestedArrays() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testDeeplyNestedObjects() throws IOException { // Build a JSON document structured like {"a":{"a":{"a":{"a":true}}}}, but 40 levels deep String array = "{\"a\":%s}"; @@ -1589,6 +1710,7 @@ public void testDeeplyNestedObjects() throws IOException { } // http://code.google.com/p/google-gson/issues/detail?id=409 + @Test public void testStringEndingInSlash() throws IOException { JsonReader reader = new JsonReader(reader("/")); reader.setLenient(true); @@ -1599,6 +1721,7 @@ public void testStringEndingInSlash() throws IOException { } } + @Test public void testDocumentWithCommentEndingInSlash() throws IOException { JsonReader reader = new JsonReader(reader("/* foo *//")); reader.setLenient(true); @@ -1609,6 +1732,7 @@ public void testDocumentWithCommentEndingInSlash() throws IOException { } } + @Test public void testStringWithLeadingSlash() throws IOException { JsonReader reader = new JsonReader(reader("/x")); reader.setLenient(true); @@ -1619,6 +1743,7 @@ public void testStringWithLeadingSlash() throws IOException { } } + @Test public void testUnterminatedObject() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\":\"android\"x")); reader.setLenient(true); @@ -1632,6 +1757,7 @@ public void testUnterminatedObject() throws IOException { } } + @Test public void testVeryLongQuotedString() throws IOException { char[] stringChars = new char[1024 * 16]; Arrays.fill(stringChars, 'x'); @@ -1643,6 +1769,7 @@ public void testVeryLongQuotedString() throws IOException { reader.endArray(); } + @Test public void testVeryLongUnquotedString() throws IOException { char[] stringChars = new char[1024 * 16]; Arrays.fill(stringChars, 'x'); @@ -1655,6 +1782,7 @@ public void testVeryLongUnquotedString() throws IOException { reader.endArray(); } + @Test public void testVeryLongUnterminatedString() throws IOException { char[] stringChars = new char[1024 * 16]; Arrays.fill(stringChars, 'x'); @@ -1671,6 +1799,7 @@ public void testVeryLongUnterminatedString() throws IOException { } } + @Test public void testSkipVeryLongUnquotedString() throws IOException { JsonReader reader = new JsonReader(reader("[" + repeat('x', 8192) + "]")); reader.setLenient(true); @@ -1679,6 +1808,7 @@ public void testSkipVeryLongUnquotedString() throws IOException { reader.endArray(); } + @Test public void testSkipTopLevelUnquotedString() throws IOException { JsonReader reader = new JsonReader(reader(repeat('x', 8192))); reader.setLenient(true); @@ -1686,6 +1816,7 @@ public void testSkipTopLevelUnquotedString() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testSkipVeryLongQuotedString() throws IOException { JsonReader reader = new JsonReader(reader("[\"" + repeat('x', 8192) + "\"]")); reader.beginArray(); @@ -1693,6 +1824,7 @@ public void testSkipVeryLongQuotedString() throws IOException { reader.endArray(); } + @Test public void testSkipTopLevelQuotedString() throws IOException { JsonReader reader = new JsonReader(reader("\"" + repeat('x', 8192) + "\"")); reader.setLenient(true); @@ -1700,6 +1832,7 @@ public void testSkipTopLevelQuotedString() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testStringAsNumberWithTruncatedExponent() throws IOException { JsonReader reader = new JsonReader(reader("[123e]")); reader.setLenient(true); @@ -1707,6 +1840,7 @@ public void testStringAsNumberWithTruncatedExponent() throws IOException { assertEquals(STRING, reader.peek()); } + @Test public void testStringAsNumberWithDigitAndNonDigitExponent() throws IOException { JsonReader reader = new JsonReader(reader("[123e4b]")); reader.setLenient(true); @@ -1714,6 +1848,7 @@ public void testStringAsNumberWithDigitAndNonDigitExponent() throws IOException assertEquals(STRING, reader.peek()); } + @Test public void testStringAsNumberWithNonDigitExponent() throws IOException { JsonReader reader = new JsonReader(reader("[123eb]")); reader.setLenient(true); @@ -1721,6 +1856,7 @@ public void testStringAsNumberWithNonDigitExponent() throws IOException { assertEquals(STRING, reader.peek()); } + @Test public void testEmptyStringName() throws IOException { JsonReader reader = new JsonReader(reader("{\"\":true}")); reader.setLenient(true); @@ -1735,6 +1871,7 @@ public void testEmptyStringName() throws IOException { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void testStrictExtraCommasInMaps() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\":\"b\",}")); reader.beginObject(); @@ -1747,6 +1884,7 @@ public void testStrictExtraCommasInMaps() throws IOException { } } + @Test public void testLenientExtraCommasInMaps() throws IOException { JsonReader reader = new JsonReader(reader("{\"a\":\"b\",}")); reader.setLenient(true); @@ -1766,6 +1904,7 @@ private String repeat(char c, int count) { return new String(array); } + @Test public void testMalformedDocuments() throws IOException { assertDocument("{]", BEGIN_OBJECT, IOException.class); assertDocument("{,", BEGIN_OBJECT, IOException.class); @@ -1812,6 +1951,7 @@ public void testMalformedDocuments() throws IOException { * This test behave slightly differently in Gson 2.2 and earlier. It fails * during peek rather than during nextString(). */ + @Test public void testUnterminatedStringFailure() throws IOException { JsonReader reader = new JsonReader(reader("[\"string")); reader.setLenient(true); @@ -1827,6 +1967,7 @@ public void testUnterminatedStringFailure() throws IOException { /** * Regression test for an issue with buffer filling and consumeNonExecutePrefix. */ + @Test public void testReadAcrossBuffers() throws IOException { StringBuilder sb = new StringBuilder("#"); for (int i = 0; i < JsonReader.BUFFER_SIZE - 3; i++) { diff --git a/gson/src/test/java/com/google/gson/stream/JsonWriterTest.java b/gson/src/test/java/com/google/gson/stream/JsonWriterTest.java index 5c57fd1d82..20c4558c6c 100644 --- a/gson/src/test/java/com/google/gson/stream/JsonWriterTest.java +++ b/gson/src/test/java/com/google/gson/stream/JsonWriterTest.java @@ -16,16 +16,20 @@ package com.google.gson.stream; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + import com.google.gson.internal.LazilyParsedNumber; import java.io.IOException; import java.io.StringWriter; import java.math.BigDecimal; import java.math.BigInteger; -import junit.framework.TestCase; +import org.junit.Test; @SuppressWarnings("resource") -public final class JsonWriterTest extends TestCase { +public final class JsonWriterTest { + @Test public void testTopLevelValueTypes() throws IOException { StringWriter string1 = new StringWriter(); JsonWriter writer1 = new JsonWriter(string1); @@ -58,6 +62,7 @@ public void testTopLevelValueTypes() throws IOException { assertEquals("\"a\"", string5.toString()); } + @Test public void testInvalidTopLevelTypes() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -69,6 +74,7 @@ public void testInvalidTopLevelTypes() throws IOException { } } + @Test public void testTwoNames() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -81,6 +87,7 @@ public void testTwoNames() throws IOException { } } + @Test public void testNameWithoutValue() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -93,6 +100,7 @@ public void testNameWithoutValue() throws IOException { } } + @Test public void testValueWithoutName() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -104,6 +112,7 @@ public void testValueWithoutName() throws IOException { } } + @Test public void testMultipleTopLevelValues() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -115,6 +124,7 @@ public void testMultipleTopLevelValues() throws IOException { } } + @Test public void testBadNestingObject() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -127,6 +137,7 @@ public void testBadNestingObject() throws IOException { } } + @Test public void testBadNestingArray() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -139,6 +150,7 @@ public void testBadNestingArray() throws IOException { } } + @Test public void testNullName() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -150,6 +162,7 @@ public void testNullName() throws IOException { } } + @Test public void testNullStringValue() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -160,6 +173,7 @@ public void testNullStringValue() throws IOException { assertEquals("{\"a\":null}", stringWriter.toString()); } + @Test public void testJsonValue() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -172,6 +186,7 @@ public void testJsonValue() throws IOException { assertEquals("{\"a\":{\"b\":true},\"c\":1}", stringWriter.toString()); } + @Test public void testNonFiniteFloats() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -196,6 +211,7 @@ public void testNonFiniteFloats() throws IOException { } } + @Test public void testNonFiniteDoubles() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -220,6 +236,7 @@ public void testNonFiniteDoubles() throws IOException { } } + @Test public void testNonFiniteNumbers() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -250,6 +267,7 @@ public void testNonFiniteNumbers() throws IOException { } } + @Test public void testNonFiniteFloatsWhenLenient() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -262,6 +280,7 @@ public void testNonFiniteFloatsWhenLenient() throws IOException { assertEquals("[NaN,-Infinity,Infinity]", stringWriter.toString()); } + @Test public void testNonFiniteDoublesWhenLenient() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -274,6 +293,7 @@ public void testNonFiniteDoublesWhenLenient() throws IOException { assertEquals("[NaN,-Infinity,Infinity]", stringWriter.toString()); } + @Test public void testNonFiniteNumbersWhenLenient() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -287,6 +307,7 @@ public void testNonFiniteNumbersWhenLenient() throws IOException { assertEquals("[NaN,-Infinity,Infinity,Infinity]", stringWriter.toString()); } + @Test public void testFloats() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -317,6 +338,7 @@ public void testFloats() throws IOException { stringWriter.toString()); } + @Test public void testDoubles() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -343,6 +365,7 @@ public void testDoubles() throws IOException { + "2.718281828459045]", stringWriter.toString()); } + @Test public void testLongs() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -361,6 +384,7 @@ public void testLongs() throws IOException { + "9223372036854775807]", stringWriter.toString()); } + @Test public void testNumbers() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -380,6 +404,7 @@ public void testNumbers() throws IOException { /** * Tests writing {@code Number} instances which are not one of the standard JDK ones. */ + @Test public void testNumbersCustomClass() throws IOException { String[] validNumbers = { "-0.0", @@ -413,6 +438,7 @@ public void testNumbersCustomClass() throws IOException { } } + @Test public void testMalformedNumbers() throws IOException { String[] malformedNumbers = { "some text", @@ -452,6 +478,7 @@ public void testMalformedNumbers() throws IOException { } } + @Test public void testBooleans() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -462,6 +489,7 @@ public void testBooleans() throws IOException { assertEquals("[true,false]", stringWriter.toString()); } + @Test public void testBoxedBooleans() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -473,6 +501,7 @@ public void testBoxedBooleans() throws IOException { assertEquals("[true,false,null]", stringWriter.toString()); } + @Test public void testNulls() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -482,6 +511,7 @@ public void testNulls() throws IOException { assertEquals("[null]", stringWriter.toString()); } + @Test public void testStrings() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -525,6 +555,7 @@ public void testStrings() throws IOException { + "\"\\u0019\"]", stringWriter.toString()); } + @Test public void testUnicodeLineBreaksEscaped() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -534,6 +565,7 @@ public void testUnicodeLineBreaksEscaped() throws IOException { assertEquals("[\"\\u2028 \\u2029\"]", stringWriter.toString()); } + @Test public void testEmptyArray() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -542,6 +574,7 @@ public void testEmptyArray() throws IOException { assertEquals("[]", stringWriter.toString()); } + @Test public void testEmptyObject() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -550,6 +583,7 @@ public void testEmptyObject() throws IOException { assertEquals("{}", stringWriter.toString()); } + @Test public void testObjectsInArrays() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -567,6 +601,7 @@ public void testObjectsInArrays() throws IOException { + "{\"c\":6,\"d\":true}]", stringWriter.toString()); } + @Test public void testArraysInObjects() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -586,6 +621,7 @@ public void testArraysInObjects() throws IOException { + "\"b\":[6,true]}", stringWriter.toString()); } + @Test public void testDeepNestingArrays() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -598,6 +634,7 @@ public void testDeepNestingArrays() throws IOException { assertEquals("[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]", stringWriter.toString()); } + @Test public void testDeepNestingObjects() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -615,6 +652,7 @@ public void testDeepNestingObjects() throws IOException { + "}}}}}}}}}}}}}}}}}}}}}", stringWriter.toString()); } + @Test public void testRepeatedName() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -626,6 +664,7 @@ public void testRepeatedName() throws IOException { assertEquals("{\"a\":true,\"a\":false}", stringWriter.toString()); } + @Test public void testPrettyPrintObject() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -663,6 +702,7 @@ public void testPrettyPrintObject() throws IOException { assertEquals(expected, stringWriter.toString()); } + @Test public void testPrettyPrintArray() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter jsonWriter = new JsonWriter(stringWriter); @@ -700,6 +740,7 @@ public void testPrettyPrintArray() throws IOException { assertEquals(expected, stringWriter.toString()); } + @Test public void testLenientWriterPermitsMultipleTopLevelValues() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter writer = new JsonWriter(stringWriter); @@ -712,6 +753,7 @@ public void testLenientWriterPermitsMultipleTopLevelValues() throws IOException assertEquals("[][]", stringWriter.toString()); } + @Test public void testStrictWriterDoesNotPermitMultipleTopLevelValues() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter writer = new JsonWriter(stringWriter); @@ -724,6 +766,7 @@ public void testStrictWriterDoesNotPermitMultipleTopLevelValues() throws IOExcep } } + @Test public void testClosedWriterThrowsOnStructure() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter writer = new JsonWriter(stringWriter); @@ -752,6 +795,7 @@ public void testClosedWriterThrowsOnStructure() throws IOException { } } + @Test public void testClosedWriterThrowsOnName() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter writer = new JsonWriter(stringWriter); @@ -765,6 +809,7 @@ public void testClosedWriterThrowsOnName() throws IOException { } } + @Test public void testClosedWriterThrowsOnValue() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter writer = new JsonWriter(stringWriter); @@ -778,6 +823,7 @@ public void testClosedWriterThrowsOnValue() throws IOException { } } + @Test public void testClosedWriterThrowsOnFlush() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter writer = new JsonWriter(stringWriter); @@ -791,6 +837,7 @@ public void testClosedWriterThrowsOnFlush() throws IOException { } } + @Test public void testWriterCloseIsIdempotent() throws IOException { StringWriter stringWriter = new StringWriter(); JsonWriter writer = new JsonWriter(stringWriter); diff --git a/gson/src/test/resources/testcases-proguard.conf b/gson/src/test/resources/testcases-proguard.conf index 19def61b00..2f41bcf680 100644 --- a/gson/src/test/resources/testcases-proguard.conf +++ b/gson/src/test/resources/testcases-proguard.conf @@ -14,7 +14,7 @@ -keep enum com.google.gson.functional.EnumWithObfuscatedTest$Gender -keep class com.google.gson.functional.EnumWithObfuscatedTest { public void test*(); - protected void setUp(); + public void setUp(); } -dontwarn com.google.gson.functional.EnumWithObfuscatedTest diff --git a/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithAnnotationsTest.java b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithAnnotationsTest.java index 0a508f9d6d..7fb92e89b4 100644 --- a/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithAnnotationsTest.java +++ b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithAnnotationsTest.java @@ -31,21 +31,21 @@ import com.google.gson.protobuf.generated.Bag.ProtoWithAnnotations.InnerMessage.Data; import com.google.gson.protobuf.generated.Bag.ProtoWithAnnotations.InnerMessage.Type; import com.google.protobuf.GeneratedMessageV3; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for protocol buffers using annotations for field names and enum values. * * @author Emmanuel Cron */ -public class ProtosWithAnnotationsTest extends TestCase { +public class ProtosWithAnnotationsTest { private Gson gson; private Gson gsonWithEnumNumbers; private Gson gsonWithLowerHyphen; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { ProtoTypeAdapter.Builder protoTypeAdapter = ProtoTypeAdapter.newBuilder() .setEnumSerialization(EnumSerialization.NAME) .addSerializedNameExtension(Annotations.serializedName) @@ -65,6 +65,7 @@ protected void setUp() throws Exception { .create(); } + @Test public void testProtoWithAnnotations_deserialize() { String json = String.format("{ %n" + " \"id\":\"41e5e7fd6065d101b97018a465ffff01\",%n" @@ -142,6 +143,7 @@ public void testProtoWithAnnotations_deserialize() { + "}]}}"); } + @Test public void testProtoWithAnnotations_deserializeUnknownEnumValue() { String json = String.format("{ %n" + " \"content\":\"UNKNOWN\"%n" @@ -150,6 +152,7 @@ public void testProtoWithAnnotations_deserializeUnknownEnumValue() { assertThat(proto.getContent()).isEqualTo(Type.UNKNOWN); } + @Test public void testProtoWithAnnotations_deserializeUnrecognizedEnumValue() { String json = String.format("{ %n" + " \"content\":\"UNRECOGNIZED\"%n" @@ -162,6 +165,7 @@ public void testProtoWithAnnotations_deserializeUnrecognizedEnumValue() { } } + @Test public void testProtoWithAnnotations_deserializeWithEnumNumbers() { String json = String.format("{ %n" + " \"content\":\"0\"%n" @@ -180,6 +184,7 @@ public void testProtoWithAnnotations_deserializeWithEnumNumbers() { assertThat(rebuilt).isEqualTo("{\"content\":2}"); } + @Test public void testProtoWithAnnotations_serialize() { ProtoWithAnnotations proto = ProtoWithAnnotations.newBuilder() .setId("09f3j20839h032y0329hf30932h0nffn") diff --git a/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithComplexAndRepeatedFieldsTest.java b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithComplexAndRepeatedFieldsTest.java index 8e59d5d1e9..53b1fe368b 100644 --- a/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithComplexAndRepeatedFieldsTest.java +++ b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithComplexAndRepeatedFieldsTest.java @@ -15,6 +15,9 @@ */ package com.google.gson.protobuf.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import com.google.common.base.CaseFormat; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -25,20 +28,20 @@ import com.google.gson.protobuf.generated.Bag.ProtoWithRepeatedFields; import com.google.gson.protobuf.generated.Bag.SimpleProto; import com.google.protobuf.GeneratedMessageV3; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; /** * Functional tests for protocol buffers using complex and repeated fields * * @author Inderjeet Singh */ -public class ProtosWithComplexAndRepeatedFieldsTest extends TestCase { +public class ProtosWithComplexAndRepeatedFieldsTest { private Gson gson; private Gson upperCamelGson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new GsonBuilder() .registerTypeHierarchyAdapter(GeneratedMessageV3.class, @@ -56,6 +59,7 @@ protected void setUp() throws Exception { .create(); } + @Test public void testSerializeRepeatedFields() { ProtoWithRepeatedFields proto = ProtoWithRepeatedFields.newBuilder() .addNumbers(2) @@ -69,6 +73,7 @@ public void testSerializeRepeatedFields() { assertTrue(json.contains("count")); } + @Test public void testDeserializeRepeatedFieldsProto() { String json = "{numbers:[4,6],simples:[{msg:'bar'},{count:7}]}"; ProtoWithRepeatedFields proto = @@ -79,6 +84,7 @@ public void testDeserializeRepeatedFieldsProto() { assertEquals(7, proto.getSimples(1).getCount()); } + @Test public void testSerializeDifferentCaseFormat() { final ProtoWithDifferentCaseFormat proto = ProtoWithDifferentCaseFormat.newBuilder() @@ -90,6 +96,7 @@ public void testSerializeDifferentCaseFormat() { assertEquals("bar", json.get("NameThatTestsCaseFormat").getAsJsonArray().get(0).getAsString()); } + @Test public void testDeserializeDifferentCaseFormat() { final String json = "{NameThatTestsCaseFormat:['bar'],AnotherField:'foo'}"; ProtoWithDifferentCaseFormat proto = diff --git a/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithPrimitiveTypesTest.java b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithPrimitiveTypesTest.java index 2e9d0e1733..0666a6dd00 100644 --- a/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithPrimitiveTypesTest.java +++ b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithPrimitiveTypesTest.java @@ -15,6 +15,10 @@ */ package com.google.gson.protobuf.functional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.protobuf.ProtoTypeAdapter; @@ -22,14 +26,14 @@ import com.google.gson.protobuf.generated.Bag.SimpleProto; import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.GeneratedMessageV3; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; -public class ProtosWithPrimitiveTypesTest extends TestCase { +public class ProtosWithPrimitiveTypesTest { private Gson gson; - @Override - protected void setUp() throws Exception { - super.setUp(); + @Before + public void setUp() throws Exception { gson = new GsonBuilder().registerTypeHierarchyAdapter( GeneratedMessageV3.class, ProtoTypeAdapter.newBuilder() .setEnumSerialization(EnumSerialization.NUMBER) @@ -37,18 +41,21 @@ protected void setUp() throws Exception { .create(); } + @Test public void testSerializeEmptyProto() { SimpleProto proto = SimpleProto.newBuilder().build(); String json = gson.toJson(proto); assertEquals("{}", json); } + @Test public void testDeserializeEmptyProto() { SimpleProto proto = gson.fromJson("{}", SimpleProto.class); assertFalse(proto.hasCount()); assertFalse(proto.hasMsg()); } + @Test public void testSerializeProto() { Descriptor descriptor = SimpleProto.getDescriptor(); SimpleProto proto = SimpleProto.newBuilder() @@ -60,12 +67,14 @@ public void testSerializeProto() { assertTrue(json.contains("\"count\":3")); } + @Test public void testDeserializeProto() { SimpleProto proto = gson.fromJson("{msg:'foo',count:3}", SimpleProto.class); assertEquals("foo", proto.getMsg()); assertEquals(3, proto.getCount()); } + @Test public void testDeserializeWithExplicitNullValue() { SimpleProto proto = gson.fromJson("{msg:'foo',count:null}", SimpleProto.class); assertEquals("foo", proto.getMsg());