/* * Copyright (C) 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.gson.functional; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.SerializedName; import com.google.gson.common.TestTypes.ClassWithSerializedNameFields; import com.google.gson.common.TestTypes.StringWrapper; import junit.framework.TestCase; /** * Functional tests for naming policies. * * @author Inderjeet Singh * @author Joel Leitch */ public class NamingPolicyTest extends TestCase { private GsonBuilder builder; @Override protected void setUp() throws Exception { super.setUp(); builder = new GsonBuilder(); } public void testGsonWithNonDefaultFieldNamingPolicySerialization() { Gson gson = builder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create(); StringWrapper target = new StringWrapper("blah"); assertEquals("{\"SomeConstantStringInstanceField\":\"" + target.someConstantStringInstanceField + "\"}", gson.toJson(target)); } public void testGsonWithNonDefaultFieldNamingPolicyDeserialiation() { Gson gson = builder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create(); StringWrapper target = new StringWrapper("SomeValue"); String jsonRepresentation = gson.toJson(target); StringWrapper deserializedObject = gson.fromJson(jsonRepresentation, StringWrapper.class); assertEquals(target.someConstantStringInstanceField, deserializedObject.someConstantStringInstanceField); } public void testGsonWithSerializedNameFieldNamingPolicySerialization() { Gson gson = builder.create(); ClassWithSerializedNameFields expected = new ClassWithSerializedNameFields(5); String actual = gson.toJson(expected); assertEquals(expected.getExpectedJson(), actual); } public void testGsonWithSerializedNameFieldNamingPolicyDeserialization() { Gson gson = builder.create(); ClassWithSerializedNameFields expected = new ClassWithSerializedNameFields(5); ClassWithSerializedNameFields actual = gson.fromJson(expected.getExpectedJson(), ClassWithSerializedNameFields.class); assertEquals(expected.f, actual.f); } public void testGsonDuplicateNameUsingSerializedNameFieldNamingPolicySerialization() { Gson gson = builder.create(); ClassWithDuplicateFields target = new ClassWithDuplicateFields(10); String actual = gson.toJson(target); assertEquals("{\"a\":10}", actual); target = new ClassWithDuplicateFields(3.0D); actual = gson.toJson(target); assertEquals("{\"a\":3.0}", actual); } @SuppressWarnings("unused") private static class ClassWithDuplicateFields { public Integer a; @SerializedName("a") public Double b; public ClassWithDuplicateFields(Integer a) { this(a, null); } public ClassWithDuplicateFields(Double b) { this(null, b); } public ClassWithDuplicateFields(Integer a, Double b) { this.a = a; this.b = b; } } }