using System; using System.Collections.Generic; using System.Text; using NUnit.Framework; using Google.ProtocolBuffers.TestProtos; namespace Google.ProtocolBuffers { [TestFixture] public class GeneratedMessageTest { ReflectionTester reflectionTester; ReflectionTester extensionsReflectionTester; [SetUp] public void SetUp() { reflectionTester = ReflectionTester.CreateTestAllTypesInstance(); extensionsReflectionTester = ReflectionTester.CreateTestAllExtensionsInstance(); } [Test] public void DefaultInstance() { Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.DefaultInstance.DefaultInstanceForType); Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.CreateBuilder().DefaultInstanceForType); } [Test] public void Accessors() { TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); TestUtil.SetAllFields(builder); TestAllTypes message = builder.Build(); TestUtil.AssertAllFieldsSet(message); } [Test] public void RepeatedSetters() { TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); TestUtil.SetAllFields(builder); TestUtil.ModifyRepeatedFields(builder); TestAllTypes message = builder.Build(); TestUtil.AssertRepeatedFieldsModified(message); } [Test] public void RepeatedAppend() { TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); builder.AddRangeRepeatedInt32(new int[]{1, 2, 3, 4}); builder.AddRangeRepeatedForeignEnum((new ForeignEnum[] { ForeignEnum.FOREIGN_BAZ })); ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build(); builder.AddRangeRepeatedForeignMessage(new ForeignMessage[] {foreignMessage}); TestAllTypes message = builder.Build(); TestUtil.AssertEqual(message.RepeatedInt32List, new int[]{1, 2, 3, 4}); TestUtil.AssertEqual(message.RepeatedForeignEnumList, new ForeignEnum[] {ForeignEnum.FOREIGN_BAZ}); Assert.AreEqual(1, message.RepeatedForeignMessageCount); Assert.AreEqual(12, message.GetRepeatedForeignMessage(0).C); } [Test] public void SettingForeignMessageUsingBuilder() { TestAllTypes message = TestAllTypes.CreateBuilder() // Pass builder for foreign message instance. .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123)) .Build(); TestAllTypes expectedMessage = TestAllTypes.CreateBuilder() // Create expected version passing foreign message instance explicitly. .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123).Build()) .Build(); Assert.AreEqual(expectedMessage, message); } [Test] public void SettingRepeatedForeignMessageUsingBuilder() { TestAllTypes message = TestAllTypes.CreateBuilder() // Pass builder for foreign message instance. .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456)) .Build(); TestAllTypes expectedMessage = TestAllTypes.CreateBuilder() // Create expected version passing foreign message instance explicitly. .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456).Build()) .Build(); Assert.AreEqual(expectedMessage, message); } [Test] public void Defaults() { TestUtil.AssertClear(TestAllTypes.DefaultInstance); TestUtil.AssertClear(TestAllTypes.CreateBuilder().Build()); Assert.AreEqual("\u1234", TestExtremeDefaultValues.DefaultInstance.Utf8String); } [Test] public void ReflectionGetters() { TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); TestUtil.SetAllFields(builder); TestAllTypes message = builder.Build(); reflectionTester.AssertAllFieldsSetViaReflection(message); } [Test] public void ReflectionSetters() { TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); reflectionTester.SetAllFieldsViaReflection(builder); TestAllTypes message = builder.Build(); TestUtil.AssertAllFieldsSet(message); } [Test] public void ReflectionRepeatedSetters() { TestAllTypes.Builder builder = TestAllTypes.CreateBuilder(); reflectionTester.SetAllFieldsViaReflection(builder); reflectionTester.ModifyRepeatedFieldsViaReflection(builder); TestAllTypes message = builder.Build(); TestUtil.AssertRepeatedFieldsModified(message); } [Test] public void ReflectionDefaults() { reflectionTester.AssertClearViaReflection(TestAllTypes.DefaultInstance); reflectionTester.AssertClearViaReflection(TestAllTypes.CreateBuilder().Build()); } // ================================================================= // Extensions. [Test] public void ExtensionAccessors() { TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder(); TestUtil.SetAllExtensions(builder); TestAllExtensions message = builder.Build(); TestUtil.AssertAllExtensionsSet(message); } [Test] public void ExtensionRepeatedSetters() { TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder(); TestUtil.SetAllExtensions(builder); TestUtil.ModifyRepeatedExtensions(builder); TestAllExtensions message = builder.Build(); TestUtil.AssertRepeatedExtensionsModified(message); } [Test] public void ExtensionDefaults() { TestUtil.AssertExtensionsClear(TestAllExtensions.DefaultInstance); TestUtil.AssertExtensionsClear(TestAllExtensions.CreateBuilder().Build()); } [Test] public void ExtensionReflectionGetters() { TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder(); TestUtil.SetAllExtensions(builder); TestAllExtensions message = builder.Build(); extensionsReflectionTester.AssertAllFieldsSetViaReflection(message); } [Test] public void ExtensionReflectionSetters() { TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder(); extensionsReflectionTester.SetAllFieldsViaReflection(builder); TestAllExtensions message = builder.Build(); TestUtil.AssertAllExtensionsSet(message); } [Test] public void ExtensionReflectionRepeatedSetters() { TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder(); extensionsReflectionTester.SetAllFieldsViaReflection(builder); extensionsReflectionTester.ModifyRepeatedFieldsViaReflection(builder); TestAllExtensions message = builder.Build(); TestUtil.AssertRepeatedExtensionsModified(message); } [Test] public void ExtensionReflectionDefaults() { extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.DefaultInstance); extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.CreateBuilder().Build()); } public void testClearExtension() { // clearExtension() is not actually used in TestUtil, so try it manually. Assert.IsFalse(TestAllExtensions.CreateBuilder() .SetExtension(UnitTestProtoFile.OptionalInt32Extension, 1) .ClearExtension(UnitTestProtoFile.OptionalInt32Extension) .HasExtension(UnitTestProtoFile.OptionalInt32Extension)); Assert.AreEqual(0, TestAllExtensions.CreateBuilder() .AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 1) .ClearExtension(UnitTestProtoFile.RepeatedInt32Extension) .GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension)); } // ================================================================= // multiple_files_test /* FIXME: Find this proto! public void MultipleFilesOption() { // We mostly just want to check that things compile. MessageWithNoOuter message = MessageWithNoOuter.CreateBuilder() .setNested(MessageWithNoOuter.NestedMessage.CreateBuilder().setI(1)) .addForeign(TestAllTypes.CreateBuilder().setOptionalInt32(1)) .setNestedEnum(MessageWithNoOuter.NestedEnum.BAZ) .setForeignEnum(EnumWithNoOuter.BAR) .Build(); Assert.AreEqual(message, MessageWithNoOuter.parseFrom(message.toByteString())); Assert.AreEqual(MultipleFilesTestProto.getDescriptor(), MessageWithNoOuter.getDescriptor().getFile()); Descriptors.FieldDescriptor field = MessageWithNoOuter.getDescriptor().findFieldByName("foreign_enum"); Assert.AreEqual(EnumWithNoOuter.BAR.getValueDescriptor(), message.getField(field)); Assert.AreEqual(MultipleFilesTestProto.getDescriptor(), ServiceWithNoOuter.getDescriptor().getFile()); assertFalse( TestAllExtensions.getDefaultInstance().hasExtension( MultipleFilesTestProto.extensionWithOuter)); } */ } }