1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Protocol Buffers - Google's data interchange format 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008 Google Inc. All rights reserved. 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// http://code.google.com/p/protobuf/ 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met: 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions of source code must retain the above copyright 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer. 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions in binary form must reproduce the above 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution. 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Neither the name of Google Inc. nor the names of its 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission. 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillepackage com.google.protobuf; 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 33d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleimport com.google.protobuf.DescriptorProtos.DescriptorProto; 34d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleimport com.google.protobuf.DescriptorProtos.FieldDescriptorProto; 35d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleimport com.google.protobuf.DescriptorProtos.FileDescriptorProto; 36d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Savilleimport com.google.protobuf.Descriptors.DescriptorValidationException; 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.Descriptors.FileDescriptor; 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.Descriptors.Descriptor; 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.Descriptors.FieldDescriptor; 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.Descriptors.EnumDescriptor; 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.Descriptors.EnumValueDescriptor; 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.Descriptors.ServiceDescriptor; 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.Descriptors.MethodDescriptor; 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.test.UnittestImport; 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.test.UnittestImport.ImportEnum; 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport com.google.protobuf.test.UnittestImport.ImportMessage; 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport protobuf_unittest.UnittestProto; 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport protobuf_unittest.UnittestProto.ForeignEnum; 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport protobuf_unittest.UnittestProto.ForeignMessage; 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport protobuf_unittest.UnittestProto.TestAllTypes; 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport protobuf_unittest.UnittestProto.TestAllExtensions; 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport protobuf_unittest.UnittestProto.TestExtremeDefaultValues; 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport protobuf_unittest.UnittestProto.TestRequired; 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport protobuf_unittest.UnittestProto.TestService; 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport protobuf_unittest.UnittestCustomOptions; 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport junit.framework.TestCase; 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport java.util.Arrays; 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport java.util.Collections; 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville/** 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Unit test for {@link Descriptors}. 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * @author kenton@google.com Kenton Varda 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville */ 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillepublic class DescriptorsTest extends TestCase { 70d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 71d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // Regression test for bug where referencing a FieldDescriptor.Type value 72d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // before a FieldDescriptorProto.Type value would yield a 73d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // ExceptionInInitializerError. 74d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville private static final Object STATIC_INIT_TEST = FieldDescriptor.Type.BOOL; 75d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 76d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville public void testFieldTypeEnumMapping() throws Exception { 77d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville assertEquals(FieldDescriptor.Type.values().length, 78d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville FieldDescriptorProto.Type.values().length); 79d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville for (FieldDescriptor.Type type : FieldDescriptor.Type.values()) { 80d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville FieldDescriptorProto.Type protoType = type.toProto(); 81d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville assertEquals("TYPE_" + type.name(), protoType.name()); 82d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville assertEquals(type, FieldDescriptor.Type.valueOf(protoType)); 83d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 84d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 85d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testFileDescriptor() throws Exception { 87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FileDescriptor file = UnittestProto.getDescriptor(); 88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("google/protobuf/unittest.proto", file.getName()); 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("protobuf_unittest", file.getPackage()); 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("UnittestProto", file.getOptions().getJavaOuterClassname()); 93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("google/protobuf/unittest.proto", 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville file.toProto().getName()); 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(Arrays.asList(UnittestImport.getDescriptor()), 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville file.getDependencies()); 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Descriptor messageType = TestAllTypes.getDescriptor(); 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(messageType, file.getMessageTypes().get(0)); 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(messageType, file.findMessageTypeByName("TestAllTypes")); 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(file.findMessageTypeByName("NoSuchType")); 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(file.findMessageTypeByName("protobuf_unittest.TestAllTypes")); 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < file.getMessageTypes().size(); i++) { 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(i, file.getMessageTypes().get(i).getIndex()); 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EnumDescriptor enumType = ForeignEnum.getDescriptor(); 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(enumType, file.getEnumTypes().get(0)); 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(enumType, file.findEnumTypeByName("ForeignEnum")); 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(file.findEnumTypeByName("NoSuchType")); 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(file.findEnumTypeByName("protobuf_unittest.ForeignEnum")); 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(Arrays.asList(ImportEnum.getDescriptor()), 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville UnittestImport.getDescriptor().getEnumTypes()); 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < file.getEnumTypes().size(); i++) { 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(i, file.getEnumTypes().get(i).getIndex()); 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ServiceDescriptor service = TestService.getDescriptor(); 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(service, file.getServices().get(0)); 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(service, file.findServiceByName("TestService")); 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(file.findServiceByName("NoSuchType")); 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(file.findServiceByName("protobuf_unittest.TestService")); 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(Collections.emptyList(), 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville UnittestImport.getDescriptor().getServices()); 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < file.getServices().size(); i++) { 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(i, file.getServices().get(i).getIndex()); 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor extension = 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville UnittestProto.optionalInt32Extension.getDescriptor(); 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(extension, file.getExtensions().get(0)); 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(extension, 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville file.findExtensionByName("optional_int32_extension")); 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(file.findExtensionByName("no_such_ext")); 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(file.findExtensionByName( 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "protobuf_unittest.optional_int32_extension")); 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(Collections.emptyList(), 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville UnittestImport.getDescriptor().getExtensions()); 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < file.getExtensions().size(); i++) { 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(i, file.getExtensions().get(i).getIndex()); 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testDescriptor() throws Exception { 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Descriptor messageType = TestAllTypes.getDescriptor(); 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Descriptor nestedType = TestAllTypes.NestedMessage.getDescriptor(); 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("TestAllTypes", messageType.getName()); 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("protobuf_unittest.TestAllTypes", messageType.getFullName()); 151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.getDescriptor(), messageType.getFile()); 152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(messageType.getContainingType()); 153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(DescriptorProtos.MessageOptions.getDefaultInstance(), 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville messageType.getOptions()); 155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("TestAllTypes", messageType.toProto().getName()); 156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("NestedMessage", nestedType.getName()); 158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("protobuf_unittest.TestAllTypes.NestedMessage", 159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nestedType.getFullName()); 160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.getDescriptor(), nestedType.getFile()); 161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(messageType, nestedType.getContainingType()); 162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor field = messageType.getFields().get(0); 164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("optional_int32", field.getName()); 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(field, messageType.findFieldByName("optional_int32")); 166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(messageType.findFieldByName("no_such_field")); 167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(field, messageType.findFieldByNumber(1)); 168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(messageType.findFieldByNumber(571283)); 169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < messageType.getFields().size(); i++) { 170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(i, messageType.getFields().get(i).getIndex()); 171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(nestedType, messageType.getNestedTypes().get(0)); 174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(nestedType, messageType.findNestedTypeByName("NestedMessage")); 175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(messageType.findNestedTypeByName("NoSuchType")); 176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < messageType.getNestedTypes().size(); i++) { 177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(i, messageType.getNestedTypes().get(i).getIndex()); 178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EnumDescriptor enumType = TestAllTypes.NestedEnum.getDescriptor(); 181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(enumType, messageType.getEnumTypes().get(0)); 182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(enumType, messageType.findEnumTypeByName("NestedEnum")); 183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(messageType.findEnumTypeByName("NoSuchType")); 184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < messageType.getEnumTypes().size(); i++) { 185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(i, messageType.getEnumTypes().get(i).getIndex()); 186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 187fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testFieldDescriptor() throws Exception { 190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Descriptor messageType = TestAllTypes.getDescriptor(); 191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor primitiveField = 192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville messageType.findFieldByName("optional_int32"); 193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor enumField = 194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville messageType.findFieldByName("optional_nested_enum"); 195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor messageField = 196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville messageType.findFieldByName("optional_foreign_message"); 197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor cordField = 198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville messageType.findFieldByName("optional_cord"); 199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor extension = 200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville UnittestProto.optionalInt32Extension.getDescriptor(); 201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor nestedExtension = TestRequired.single.getDescriptor(); 202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("optional_int32", primitiveField.getName()); 204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("protobuf_unittest.TestAllTypes.optional_int32", 205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville primitiveField.getFullName()); 206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(1, primitiveField.getNumber()); 207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(messageType, primitiveField.getContainingType()); 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.getDescriptor(), primitiveField.getFile()); 209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.Type.INT32, primitiveField.getType()); 210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.JavaType.INT, primitiveField.getJavaType()); 211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(DescriptorProtos.FieldOptions.getDefaultInstance(), 212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville primitiveField.getOptions()); 213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertFalse(primitiveField.isExtension()); 214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("optional_int32", primitiveField.toProto().getName()); 215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 216fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("optional_nested_enum", enumField.getName()); 217fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.Type.ENUM, enumField.getType()); 218fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.JavaType.ENUM, enumField.getJavaType()); 219fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(TestAllTypes.NestedEnum.getDescriptor(), 220fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enumField.getEnumType()); 221fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 222fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("optional_foreign_message", messageField.getName()); 223fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.Type.MESSAGE, messageField.getType()); 224fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.JavaType.MESSAGE, messageField.getJavaType()); 225fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(ForeignMessage.getDescriptor(), messageField.getMessageType()); 226fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 227fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("optional_cord", cordField.getName()); 228fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.Type.STRING, cordField.getType()); 229fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.JavaType.STRING, cordField.getJavaType()); 230fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(DescriptorProtos.FieldOptions.CType.CORD, 231fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville cordField.getOptions().getCtype()); 232fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 233fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("optional_int32_extension", extension.getName()); 234fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("protobuf_unittest.optional_int32_extension", 235fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension.getFullName()); 236fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(1, extension.getNumber()); 237fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(TestAllExtensions.getDescriptor(), 238fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension.getContainingType()); 239fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.getDescriptor(), extension.getFile()); 240fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.Type.INT32, extension.getType()); 241fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(FieldDescriptor.JavaType.INT, extension.getJavaType()); 242fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(DescriptorProtos.FieldOptions.getDefaultInstance(), 243fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville extension.getOptions()); 244fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue(extension.isExtension()); 245fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(null, extension.getExtensionScope()); 246fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("optional_int32_extension", extension.toProto().getName()); 247fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 248fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("single", nestedExtension.getName()); 249fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("protobuf_unittest.TestRequired.single", 250fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nestedExtension.getFullName()); 251fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(TestRequired.getDescriptor(), 252fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nestedExtension.getExtensionScope()); 253fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 254fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 255fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testFieldDescriptorLabel() throws Exception { 256fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor requiredField = 257fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestRequired.getDescriptor().findFieldByName("a"); 258fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor optionalField = 259fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestAllTypes.getDescriptor().findFieldByName("optional_int32"); 260fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor repeatedField = 261fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville TestAllTypes.getDescriptor().findFieldByName("repeated_int32"); 262fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 263fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue(requiredField.isRequired()); 264fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertFalse(requiredField.isRepeated()); 265fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertFalse(optionalField.isRequired()); 266fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertFalse(optionalField.isRepeated()); 267fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertFalse(repeatedField.isRequired()); 268fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue(repeatedField.isRepeated()); 269fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 270fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 271fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testFieldDescriptorDefault() throws Exception { 272fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Descriptor d = TestAllTypes.getDescriptor(); 273fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertFalse(d.findFieldByName("optional_int32").hasDefaultValue()); 274fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(0, d.findFieldByName("optional_int32").getDefaultValue()); 275fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue(d.findFieldByName("default_int32").hasDefaultValue()); 276fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(41, d.findFieldByName("default_int32").getDefaultValue()); 277fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 278fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville d = TestExtremeDefaultValues.getDescriptor(); 279fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals( 280fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ByteString.copyFrom( 281fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville "\0\001\007\b\f\n\r\t\013\\\'\"\u00fe".getBytes("ISO-8859-1")), 282fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville d.findFieldByName("escaped_bytes").getDefaultValue()); 283fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(-1, d.findFieldByName("large_uint32").getDefaultValue()); 284fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(-1L, d.findFieldByName("large_uint64").getDefaultValue()); 285fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 286fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 287fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testEnumDescriptor() throws Exception { 288fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EnumDescriptor enumType = ForeignEnum.getDescriptor(); 289fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EnumDescriptor nestedType = TestAllTypes.NestedEnum.getDescriptor(); 290fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 291fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("ForeignEnum", enumType.getName()); 292fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("protobuf_unittest.ForeignEnum", enumType.getFullName()); 293fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.getDescriptor(), enumType.getFile()); 294fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(enumType.getContainingType()); 295fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(DescriptorProtos.EnumOptions.getDefaultInstance(), 296fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enumType.getOptions()); 297fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 298fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("NestedEnum", nestedType.getName()); 299fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("protobuf_unittest.TestAllTypes.NestedEnum", 300fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville nestedType.getFullName()); 301fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.getDescriptor(), nestedType.getFile()); 302fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(TestAllTypes.getDescriptor(), nestedType.getContainingType()); 303fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 304fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EnumValueDescriptor value = ForeignEnum.FOREIGN_FOO.getValueDescriptor(); 305fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(value, enumType.getValues().get(0)); 306fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("FOREIGN_FOO", value.getName()); 307fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(4, value.getNumber()); 308fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(value, enumType.findValueByName("FOREIGN_FOO")); 309fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(value, enumType.findValueByNumber(4)); 310fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(enumType.findValueByName("NO_SUCH_VALUE")); 311fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < enumType.getValues().size(); i++) { 312fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(i, enumType.getValues().get(i).getIndex()); 313fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 314fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 315fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 316fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testServiceDescriptor() throws Exception { 317fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ServiceDescriptor service = TestService.getDescriptor(); 318fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 319fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("TestService", service.getName()); 320fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("protobuf_unittest.TestService", service.getFullName()); 321fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.getDescriptor(), service.getFile()); 322fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 323fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(2, service.getMethods().size()); 324fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 325fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MethodDescriptor fooMethod = service.getMethods().get(0); 326fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("Foo", fooMethod.getName()); 327fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.FooRequest.getDescriptor(), 328fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville fooMethod.getInputType()); 329fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.FooResponse.getDescriptor(), 330fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville fooMethod.getOutputType()); 331fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(fooMethod, service.findMethodByName("Foo")); 332fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 333fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MethodDescriptor barMethod = service.getMethods().get(1); 334fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals("Bar", barMethod.getName()); 335fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.BarRequest.getDescriptor(), 336fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville barMethod.getInputType()); 337fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestProto.BarResponse.getDescriptor(), 338fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville barMethod.getOutputType()); 339fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(barMethod, service.findMethodByName("Bar")); 340fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 341fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNull(service.findMethodByName("NoSuchMethod")); 342fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 343fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < service.getMethods().size(); i++) { 344fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(i, service.getMethods().get(i).getIndex()); 345fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 346fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 347fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 348fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 349fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testCustomOptions() throws Exception { 350fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville Descriptor descriptor = 351fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville UnittestCustomOptions.TestMessageWithCustomOptions.getDescriptor(); 352fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 353fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue( 354fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor.getOptions().hasExtension(UnittestCustomOptions.messageOpt1)); 355fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(Integer.valueOf(-56), 356fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville descriptor.getOptions().getExtension(UnittestCustomOptions.messageOpt1)); 357fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 358fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor field = descriptor.findFieldByName("field1"); 359fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNotNull(field); 360fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 361fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue( 362fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville field.getOptions().hasExtension(UnittestCustomOptions.fieldOpt1)); 363fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(Long.valueOf(8765432109L), 364fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville field.getOptions().getExtension(UnittestCustomOptions.fieldOpt1)); 365fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 366fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville EnumDescriptor enumType = 367fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville UnittestCustomOptions.TestMessageWithCustomOptions.AnEnum.getDescriptor(); 368fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 369fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue( 370fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enumType.getOptions().hasExtension(UnittestCustomOptions.enumOpt1)); 371fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(Integer.valueOf(-789), 372fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville enumType.getOptions().getExtension(UnittestCustomOptions.enumOpt1)); 373fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 374fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville ServiceDescriptor service = 375fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville UnittestCustomOptions.TestServiceWithCustomOptions.getDescriptor(); 376fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 377fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue( 378fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville service.getOptions().hasExtension(UnittestCustomOptions.serviceOpt1)); 379fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(Long.valueOf(-9876543210L), 380fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville service.getOptions().getExtension(UnittestCustomOptions.serviceOpt1)); 381fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 382fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MethodDescriptor method = service.findMethodByName("Foo"); 383fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertNotNull(method); 384fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 385fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue( 386fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville method.getOptions().hasExtension(UnittestCustomOptions.methodOpt1)); 387fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(UnittestCustomOptions.MethodOpt1.METHODOPT1_VAL2, 388fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville method.getOptions().getExtension(UnittestCustomOptions.methodOpt1)); 389fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 390fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 391fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville /** 392fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Test that the FieldDescriptor.Type enum is the same as the 393fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * WireFormat.FieldType enum. 394fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville */ 395fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testFieldTypeTablesMatch() throws Exception { 396fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor.Type[] values1 = FieldDescriptor.Type.values(); 397fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville WireFormat.FieldType[] values2 = WireFormat.FieldType.values(); 398fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 399fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(values1.length, values2.length); 400fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 401fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < values1.length; i++) { 402fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(values1[i].toString(), values2[i].toString()); 403fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 404fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 405fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 406fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville /** 407fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * Test that the FieldDescriptor.JavaType enum is the same as the 408fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville * WireFormat.JavaType enum. 409fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville */ 410fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testJavaTypeTablesMatch() throws Exception { 411fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville FieldDescriptor.JavaType[] values1 = FieldDescriptor.JavaType.values(); 412fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville WireFormat.JavaType[] values2 = WireFormat.JavaType.values(); 413fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 414fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(values1.length, values2.length); 415fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 416fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville for (int i = 0; i < values1.length; i++) { 417fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertEquals(values1[i].toString(), values2[i].toString()); 418fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 419fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 420fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 421fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public void testEnormousDescriptor() throws Exception { 422fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // The descriptor for this file is larger than 64k, yet it did not cause 423fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // a compiler error due to an over-long string literal. 424fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville assertTrue( 425fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville UnittestEnormousDescriptor.getDescriptor() 426fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville .toProto().getSerializedSize() > 65536); 427fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 428d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville 429d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville /** 430d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville * Tests that the DescriptorValidationException works as intended. 431d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville */ 432d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville public void testDescriptorValidatorException() throws Exception { 433d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville FileDescriptorProto fileDescriptorProto = FileDescriptorProto.newBuilder() 434d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .setName("foo.proto") 435d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .addMessageType(DescriptorProto.newBuilder() 436d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .setName("Foo") 437d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .addField(FieldDescriptorProto.newBuilder() 438d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .setLabel(FieldDescriptorProto.Label.LABEL_OPTIONAL) 439d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .setType(FieldDescriptorProto.Type.TYPE_INT32) 440d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .setName("foo") 441d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .setNumber(1) 442d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .setDefaultValue("invalid") 443d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .build()) 444d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .build()) 445d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville .build(); 446d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville try { 447d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville Descriptors.FileDescriptor.buildFrom(fileDescriptorProto, 448d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville new FileDescriptor[0]); 449d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville fail("DescriptorValidationException expected"); 450d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } catch (DescriptorValidationException e) { 451d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville // Expected; check that the error message contains some useful hints 452d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville assertTrue(e.getMessage().indexOf("foo") != -1); 453d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville assertTrue(e.getMessage().indexOf("Foo") != -1); 454d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville assertTrue(e.getMessage().indexOf("invalid") != -1); 455d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville assertTrue(e.getCause() instanceof NumberFormatException); 456d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville assertTrue(e.getCause().getMessage().indexOf("invalid") != -1); 457d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 458d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville } 459fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 460