diff --git a/proto/src/main/protobuf/bag.proto b/proto/src/main/protobuf/bag.proto index 7c1c96cc..6df147a0 100644 --- a/proto/src/main/protobuf/bag.proto +++ b/proto/src/main/protobuf/bag.proto @@ -21,3 +21,9 @@ message SimpleProto { optional string msg = 1; optional int32 count = 2; } + +message ProtoWithRepeatedFields { + repeated int64 numbers = 1; + repeated SimpleProto simples = 2; + optional string name = 3; +} \ No newline at end of file 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 new file mode 100644 index 00000000..7b9a1c66 --- /dev/null +++ b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithComplexAndRepeatedFieldsTest.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2010 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.protobuf.functional; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.protobuf.ProtoTypeAdapter; +import com.google.gson.protobuf.generated.Bag.ProtoWithRepeatedFields; +import com.google.gson.protobuf.generated.Bag.SimpleProto; +import com.google.protobuf.GeneratedMessage; + +import junit.framework.TestCase; + +/** + * Functional tests for protocol buffers using complex and repeated fields + * + * @author Inderjeet Singh + */ +public class ProtosWithComplexAndRepeatedFieldsTest extends TestCase { + private Gson gson; + + @Override + protected void setUp() throws Exception { + super.setUp(); + gson = new GsonBuilder().registerTypeHierarchyAdapter( + GeneratedMessage.class, new ProtoTypeAdapter()).create(); + } + + public void testSerializeRepeatedFields() { + ProtoWithRepeatedFields proto = ProtoWithRepeatedFields.newBuilder() + .addNumbers(2) + .addNumbers(3) + .addSimples(SimpleProto.newBuilder().setMsg("foo").build()) + .addSimples(SimpleProto.newBuilder().setCount(3).build()) + .build(); + String json = gson.toJson(proto); + assertTrue(json.contains("[2,3]")); + assertTrue(json.contains("foo")); + assertTrue(json.contains("count")); + } + + public void testDeserializeRepeatedFieldsProto() { + String json = "{numbers:[4,6],simples:[{msg:'bar'},{count:7}]}"; + ProtoWithRepeatedFields proto = + gson.fromJson(json, ProtoWithRepeatedFields.class); + assertEquals(4, proto.getNumbers(0)); + assertEquals(6, proto.getNumbers(1)); + assertEquals("bar", proto.getSimples(0).getMsg()); + assertEquals(7, proto.getSimples(1).getCount()); + } +} diff --git a/proto/src/test/java/com/google/gson/protobuf/FunctionalTest.java b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithPrimitiveTypesTest.java similarity index 90% rename from proto/src/test/java/com/google/gson/protobuf/FunctionalTest.java rename to proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithPrimitiveTypesTest.java index 31724509..55628bc5 100644 --- a/proto/src/test/java/com/google/gson/protobuf/FunctionalTest.java +++ b/proto/src/test/java/com/google/gson/protobuf/functional/ProtosWithPrimitiveTypesTest.java @@ -13,17 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.google.gson.protobuf; +package com.google.gson.protobuf.functional; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.protobuf.ProtoTypeAdapter; import com.google.gson.protobuf.generated.Bag.SimpleProto; import com.google.protobuf.Descriptors.Descriptor; import com.google.protobuf.GeneratedMessage; import junit.framework.TestCase; -public class FunctionalTest extends TestCase { +public class ProtosWithPrimitiveTypesTest extends TestCase { private Gson gson; @Override @@ -48,8 +49,8 @@ public class FunctionalTest extends TestCase { public void testSerializeProto() { Descriptor descriptor = SimpleProto.getDescriptor(); SimpleProto proto = SimpleProto.newBuilder() - .setField(descriptor.findFieldByName("count"), 3) - .setField(descriptor.findFieldByName("msg"), "foo") + .setCount(3) + .setMsg("foo") .build(); String json = gson.toJson(proto); assertTrue(json.contains("\"msg\":\"foo\""));