示例#1
1
        /// <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);
        }
示例#2
0
        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);
            }
        }
示例#4
0
        public void ServiceComments()
        {
            var service = unitTestProto3Descriptor.FindTypeByName <ServiceDescriptor>("TestService");

            Assert.NotNull(service.Declaration);
            Assert.AreEqual(" This is a test service\n", service.Declaration.LeadingComments);
        }