/// <summary> /// Constructs an instance that will expect messages using the given /// descriptor. Normally <paramref name="baseDescriptor"/> should be /// a descriptor for TestAllTypes. However, if extensionRegistry is non-null, /// then baseDescriptor should be for TestAllExtensions instead, and instead of /// reading and writing normal fields, the tester will read and write extensions. /// All of the TestAllExtensions extensions must be registered in the registry. /// </summary> private ReflectionTester(MessageDescriptor baseDescriptor, ExtensionRegistry extensionRegistry) { this.baseDescriptor = baseDescriptor; this.extensionRegistry = extensionRegistry; this.file = baseDescriptor.File; Assert.AreEqual(1, file.Dependencies.Count); this.importFile = file.Dependencies[0]; MessageDescriptor testAllTypes; if (baseDescriptor.Name == "TestAllTypes") { testAllTypes = baseDescriptor; } else { testAllTypes = file.FindTypeByName<MessageDescriptor>("TestAllTypes"); Assert.NotNull(testAllTypes); } if (extensionRegistry == null) { // Use testAllTypes, rather than baseDescriptor, to allow // initialization using TestPackedTypes descriptors. These objects // won't be used by the methods for packed fields. this.optionalGroup = testAllTypes.FindDescriptor<MessageDescriptor>("OptionalGroup"); this.repeatedGroup = testAllTypes.FindDescriptor<MessageDescriptor>("RepeatedGroup"); } else { this.optionalGroup = file.FindTypeByName<MessageDescriptor>("OptionalGroup_extension"); this.repeatedGroup = file.FindTypeByName<MessageDescriptor>("RepeatedGroup_extension"); } this.nestedMessage = testAllTypes.FindDescriptor<MessageDescriptor>("NestedMessage"); this.foreignMessage = file.FindTypeByName<MessageDescriptor>("ForeignMessage"); this.importMessage = importFile.FindTypeByName<MessageDescriptor>("ImportMessage"); this.nestedEnum = testAllTypes.FindDescriptor<EnumDescriptor>("NestedEnum"); this.foreignEnum = file.FindTypeByName<EnumDescriptor>("ForeignEnum"); this.importEnum = importFile.FindTypeByName<EnumDescriptor>("ImportEnum"); Assert.NotNull(optionalGroup); Assert.NotNull(repeatedGroup); Assert.NotNull(nestedMessage); Assert.NotNull(foreignMessage); Assert.NotNull(importMessage); Assert.NotNull(nestedEnum); Assert.NotNull(foreignEnum); Assert.NotNull(importEnum); this.nestedB = nestedMessage.FindDescriptor<FieldDescriptor>("bb"); this.foreignC = foreignMessage.FindDescriptor<FieldDescriptor>("c"); this.importD = importMessage.FindDescriptor<FieldDescriptor>("d"); this.nestedFoo = nestedEnum.FindValueByName("FOO"); this.nestedBar = nestedEnum.FindValueByName("BAR"); this.nestedBaz = nestedEnum.FindValueByName("BAZ"); this.foreignFoo = foreignEnum.FindValueByName("FOREIGN_FOO"); this.foreignBar = foreignEnum.FindValueByName("FOREIGN_BAR"); this.foreignBaz = foreignEnum.FindValueByName("FOREIGN_BAZ"); this.importFoo = importEnum.FindValueByName("IMPORT_FOO"); this.importBar = importEnum.FindValueByName("IMPORT_BAR"); this.importBaz = importEnum.FindValueByName("IMPORT_BAZ"); this.groupA = optionalGroup.FindDescriptor<FieldDescriptor>("a"); this.repeatedGroupA = repeatedGroup.FindDescriptor<FieldDescriptor>("a"); Assert.NotNull(groupA); Assert.NotNull(repeatedGroupA); Assert.NotNull(nestedB); Assert.NotNull(foreignC); Assert.NotNull(importD); Assert.NotNull(nestedFoo); Assert.NotNull(nestedBar); Assert.NotNull(nestedBaz); Assert.NotNull(foreignFoo); Assert.NotNull(foreignBar); Assert.NotNull(foreignBaz); Assert.NotNull(importFoo); Assert.NotNull(importBar); Assert.NotNull(importBaz); }
public void FileDescriptor() { FileDescriptor file = Unittest.Descriptor; Assert.AreEqual("google/protobuf/unittest.proto", file.Name); Assert.AreEqual("protobuf_unittest", file.Package); Assert.AreEqual("UnittestProto", file.Options.JavaOuterClassname); Assert.AreEqual("google/protobuf/unittest.proto", file.Proto.Name); // unittest.proto doesn't have any public imports, but unittest_import.proto does. Assert.AreEqual(0, file.PublicDependencies.Count); Assert.AreEqual(1, UnittestImport.Descriptor.PublicDependencies.Count); Assert.AreEqual(UnittestImportPublic.Descriptor, UnittestImport.Descriptor.PublicDependencies[0]); Assert.AreEqual(1, file.Dependencies.Count); Assert.AreEqual(UnittestImport.Descriptor, file.Dependencies[0]); MessageDescriptor messageType = TestAllTypes.Descriptor; Assert.AreEqual(messageType, file.MessageTypes[0]); Assert.AreEqual(messageType, file.FindTypeByName <MessageDescriptor>("TestAllTypes")); Assert.Null(file.FindTypeByName <MessageDescriptor>("NoSuchType")); Assert.Null(file.FindTypeByName <MessageDescriptor>("protobuf_unittest.TestAllTypes")); for (int i = 0; i < file.MessageTypes.Count; i++) { Assert.AreEqual(i, file.MessageTypes[i].Index); } Assert.AreEqual(file.EnumTypes[0], file.FindTypeByName <EnumDescriptor>("ForeignEnum")); Assert.Null(file.FindTypeByName <EnumDescriptor>("NoSuchType")); Assert.Null(file.FindTypeByName <EnumDescriptor>("protobuf_unittest.ForeignEnum")); Assert.AreEqual(1, UnittestImport.Descriptor.EnumTypes.Count); Assert.AreEqual("ImportEnum", UnittestImport.Descriptor.EnumTypes[0].Name); for (int i = 0; i < file.EnumTypes.Count; i++) { Assert.AreEqual(i, file.EnumTypes[i].Index); } FieldDescriptor extension = Unittest.OptionalInt32Extension.Descriptor; Assert.AreEqual(extension, file.Extensions[0]); Assert.AreEqual(extension, file.FindTypeByName <FieldDescriptor>("optional_int32_extension")); Assert.Null(file.FindTypeByName <FieldDescriptor>("no_such_ext")); Assert.Null(file.FindTypeByName <FieldDescriptor>("protobuf_unittest.optional_int32_extension")); Assert.AreEqual(0, UnittestImport.Descriptor.Extensions.Count); for (int i = 0; i < file.Extensions.Count; i++) { Assert.AreEqual(i, file.Extensions[i].Index); } }
public void FileDescriptor() { FileDescriptor file = UnitTestProtoFile.Descriptor; Assert.AreEqual("google/protobuf/unittest.proto", file.Name); Assert.AreEqual("protobuf_unittest", file.Package); Assert.AreEqual("UnittestProto", file.Options.JavaOuterClassname); Assert.AreEqual("google/protobuf/unittest.proto", file.Proto.Name); // TODO(jonskeet): Either change to expect 2 dependencies, or don't emit them. // Assert.AreEqual(2, file.Dependencies.Count); Assert.AreEqual(UnitTestImportProtoFile.Descriptor, file.Dependencies[1]); MessageDescriptor messageType = TestAllTypes.Descriptor; Assert.AreEqual(messageType, file.MessageTypes[0]); Assert.AreEqual(messageType, file.FindTypeByName <MessageDescriptor>("TestAllTypes")); Assert.IsNull(file.FindTypeByName <MessageDescriptor>("NoSuchType")); Assert.IsNull(file.FindTypeByName <MessageDescriptor>("protobuf_unittest.TestAllTypes")); for (int i = 0; i < file.MessageTypes.Count; i++) { Assert.AreEqual(i, file.MessageTypes[i].Index); } Assert.AreEqual(file.EnumTypes[0], file.FindTypeByName <EnumDescriptor>("ForeignEnum")); Assert.IsNull(file.FindTypeByName <EnumDescriptor>("NoSuchType")); Assert.IsNull(file.FindTypeByName <EnumDescriptor>("protobuf_unittest.ForeignEnum")); Assert.AreEqual(1, UnitTestImportProtoFile.Descriptor.EnumTypes.Count); Assert.AreEqual("ImportEnum", UnitTestImportProtoFile.Descriptor.EnumTypes[0].Name); for (int i = 0; i < file.EnumTypes.Count; i++) { Assert.AreEqual(i, file.EnumTypes[i].Index); } ServiceDescriptor service = TestGenericService.Descriptor; Assert.AreEqual(service, UnitTestGenericServices.Descriptor.Services[0]); Assert.AreEqual(service, UnitTestGenericServices.Descriptor.FindTypeByName <ServiceDescriptor>("TestGenericService")); Assert.IsNull(UnitTestGenericServices.Descriptor.FindTypeByName <ServiceDescriptor>("NoSuchType")); Assert.IsNull( UnitTestGenericServices.Descriptor.FindTypeByName <ServiceDescriptor>( "protobuf_unittest.TestGenericService")); Assert.AreEqual(0, UnitTestImportProtoFile.Descriptor.Services.Count); for (int i = 0; i < file.Services.Count; i++) { Assert.AreEqual(i, file.Services[i].Index); } FieldDescriptor extension = UnitTestProtoFile.OptionalInt32Extension.Descriptor; Assert.AreEqual(extension, file.Extensions[0]); Assert.AreEqual(extension, file.FindTypeByName <FieldDescriptor>("optional_int32_extension")); Assert.IsNull(file.FindTypeByName <FieldDescriptor>("no_such_ext")); Assert.IsNull(file.FindTypeByName <FieldDescriptor>("protobuf_unittest.optional_int32_extension")); Assert.AreEqual(0, UnitTestImportProtoFile.Descriptor.Extensions.Count); for (int i = 0; i < file.Extensions.Count; i++) { Assert.AreEqual(i, file.Extensions[i].Index); } }
public void ServiceComments() { var service = unitTestProto3Descriptor.FindTypeByName <ServiceDescriptor>("TestService"); Assert.NotNull(service.Declaration); Assert.AreEqual(" This is a test service\n", service.Declaration.LeadingComments); }