123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457 |
- // Protocol Buffers - Google's data interchange format
- // Copyright 2008 Google Inc. All rights reserved.
- // http://github.com/jskeet/dotnet-protobufs/
- // Original C++/Java/Python code:
- // http://code.google.com/p/protobuf/
- //
- // Redistribution and use in source and binary forms, with or without
- // modification, are permitted provided that the following conditions are
- // met:
- //
- // * Redistributions of source code must retain the above copyright
- // notice, this list of conditions and the following disclaimer.
- // * Redistributions in binary form must reproduce the above
- // copyright notice, this list of conditions and the following disclaimer
- // in the documentation and/or other materials provided with the
- // distribution.
- // * Neither the name of Google Inc. nor the names of its
- // contributors may be used to endorse or promote products derived from
- // this software without specific prior written permission.
- //
- // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- using System;
- using System.Collections.Generic;
- using Google.ProtocolBuffers.Descriptors;
- using Google.ProtocolBuffers.TestProtos;
- using NUnit.Framework;
- using Google.ProtocolBuffers.Collections;
- namespace Google.ProtocolBuffers {
- [TestFixture]
- public class GeneratedMessageTest {
- ReflectionTester reflectionTester;
- ReflectionTester extensionsReflectionTester;
-
- [SetUp]
- public void SetUp() {
- reflectionTester = ReflectionTester.CreateTestAllTypesInstance();
- extensionsReflectionTester = ReflectionTester.CreateTestAllExtensionsInstance();
- }
- [Test]
- public void RepeatedAddPrimitiveBeforeBuild() {
- TestAllTypes message = new TestAllTypes.Builder { RepeatedInt32List = { 1, 2, 3 } }.Build();
- TestUtil.AssertEqual(new int[]{1, 2, 3}, message.RepeatedInt32List);
- }
- [Test]
- public void AddPrimitiveFailsAfterBuild() {
- TestAllTypes.Builder builder = new TestAllTypes.Builder();
- IList<int> list = builder.RepeatedInt32List;
- list.Add(1); // Fine
- builder.Build();
- try {
- list.Add(2);
- Assert.Fail("List should be frozen");
- } catch (NotSupportedException) {
- // Expected
- }
- }
- [Test]
- public void RepeatedAddMessageBeforeBuild() {
- TestAllTypes message = new TestAllTypes.Builder {
- RepeatedNestedMessageList = { new TestAllTypes.Types.NestedMessage.Builder { Bb = 10 }.Build() } }.Build();
- Assert.AreEqual(1, message.RepeatedNestedMessageCount);
- Assert.AreEqual(10, message.RepeatedNestedMessageList[0].Bb);
- }
- [Test]
- public void AddMessageFailsAfterBuild() {
- TestAllTypes.Builder builder = new TestAllTypes.Builder();
- IList<TestAllTypes.Types.NestedMessage> list = builder.RepeatedNestedMessageList;
- builder.Build();
- try {
- list.Add(new TestAllTypes.Types.NestedMessage.Builder { Bb = 10 }.Build());
- Assert.Fail("List should be frozen");
- } catch (NotSupportedException) {
- // Expected
- }
- }
- [Test]
- public void DoubleBuildError() {
- TestAllTypes.Builder builder = new TestAllTypes.Builder();
- builder.Build();
- try {
- builder.Build();
- Assert.Fail("Should have thrown exception.");
- } catch (InvalidOperationException) {
- // Success.
- }
- }
- [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 SettersRejectNull() {
- TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
- TestUtil.AssertArgumentNullException(() => builder.SetOptionalString(null));
- TestUtil.AssertArgumentNullException(() => builder.SetOptionalBytes(null));
- TestUtil.AssertArgumentNullException(() => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage)null));
- TestUtil.AssertArgumentNullException(() => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage.Builder)null));
- TestUtil.AssertArgumentNullException(() => builder.AddRepeatedString(null));
- TestUtil.AssertArgumentNullException(() => builder.AddRepeatedBytes(null));
- TestUtil.AssertArgumentNullException(() => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage)null));
- TestUtil.AssertArgumentNullException(() => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage.Builder)null));
- }
- [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 RepeatedAppendRejectsNull() {
- TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
- ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build();
- TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignMessage(new[] { foreignMessage, null }));
- TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignMessage(null));
- TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignEnum(null));
- TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedString(new[] { "one", null }));
- TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedBytes(new[] { TestUtil.ToBytes("one"), null }));
- }
- [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 SettingRepeatedValuesUsingRangeInCollectionInitializer() {
- int[] values = { 1, 2, 3 };
- TestAllTypes message = new TestAllTypes.Builder {
- RepeatedSint32List = { values }
- }.Build();
- Assert.IsTrue(Lists.Equals(values, message.RepeatedSint32List));
- }
- [Test]
- public void SettingRepeatedValuesUsingIndividualValuesInCollectionInitializer() {
- TestAllTypes message = new TestAllTypes.Builder {
- RepeatedSint32List = { 6, 7 }
- }.Build();
- Assert.IsTrue(Lists.Equals(new int[] { 6, 7 }, message.RepeatedSint32List));
- }
-
- [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 ReflectionSettersRejectNull() {
- TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
- reflectionTester.AssertReflectionSettersRejectNull(builder);
- }
- [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 TestReflectionRepeatedSettersRejectNull() {
- TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
- reflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);
- }
- [Test]
- public void ReflectionDefaults() {
- TestUtil.TestInMultipleCultures(() => {
- 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 ExtensionReflectionSettersRejectNull() {
- TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
- extensionsReflectionTester.AssertReflectionSettersRejectNull(builder);
- }
- [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 ExtensionReflectionRepeatedSettersRejectNull() {
- TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();
- extensionsReflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);
- }
- [Test]
- public void ExtensionReflectionDefaults() {
- TestUtil.TestInMultipleCultures(() => {
- extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.DefaultInstance);
- extensionsReflectionTester.AssertClearViaReflection(TestAllExtensions.CreateBuilder().Build());
- });
- }
-
- [Test]
- public void ClearExtension() {
- // 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));
- }
- [Test]
- public void ExtensionMergeFrom() {
- TestAllExtensions original = TestAllExtensions.CreateBuilder()
- .SetExtension(UnitTestProtoFile.OptionalInt32Extension, 1).Build();
- TestAllExtensions merged =
- TestAllExtensions.CreateBuilder().MergeFrom(original).Build();
- Assert.IsTrue((merged.HasExtension(UnitTestProtoFile.OptionalInt32Extension)));
- Assert.AreEqual(1, (int)merged.GetExtension(UnitTestProtoFile.OptionalInt32Extension));
- }
- /* Removed multiple files option for the moment
- [Test]
- public void MultipleFilesOption() {
- // We mostly just want to check that things compile.
- MessageWithNoOuter message = MessageWithNoOuter.CreateBuilder()
- .SetNested(MessageWithNoOuter.Types.NestedMessage.CreateBuilder().SetI(1))
- .AddForeign(TestAllTypes.CreateBuilder().SetOptionalInt32(1))
- .SetNestedEnum(MessageWithNoOuter.Types.NestedEnum.BAZ)
- .SetForeignEnum(EnumWithNoOuter.BAR)
- .Build();
- Assert.AreEqual(message, MessageWithNoOuter.ParseFrom(message.ToByteString()));
- Assert.AreEqual(MultiFileProto.Descriptor, MessageWithNoOuter.Descriptor.File);
- FieldDescriptor field = MessageWithNoOuter.Descriptor.FindDescriptor<FieldDescriptor>("foreign_enum");
- Assert.AreEqual(MultiFileProto.Descriptor.FindTypeByName<EnumDescriptor>("EnumWithNoOuter")
- .FindValueByNumber((int)EnumWithNoOuter.BAR), message[field]);
- Assert.AreEqual(MultiFileProto.Descriptor, ServiceWithNoOuter.Descriptor.File);
- Assert.IsFalse(TestAllExtensions.DefaultInstance.HasExtension(MultiFileProto.ExtensionWithOuter));
- }*/
- [Test]
- public void OptionalFieldWithRequiredSubfieldsOptimizedForSize() {
- TestOptionalOptimizedForSize message = TestOptionalOptimizedForSize.DefaultInstance;
- Assert.IsTrue(message.IsInitialized);
- message = TestOptionalOptimizedForSize.CreateBuilder().SetO(
- TestRequiredOptimizedForSize.CreateBuilder().BuildPartial()
- ).BuildPartial();
- Assert.IsFalse(message.IsInitialized);
- message = TestOptionalOptimizedForSize.CreateBuilder().SetO(
- TestRequiredOptimizedForSize.CreateBuilder().SetX(5).BuildPartial()
- ).BuildPartial();
- Assert.IsTrue(message.IsInitialized);
- }
- [Test]
- public void OptimizedForSizeMergeUsesAllFieldsFromTarget() {
- TestOptimizedForSize withFieldSet = new TestOptimizedForSize.Builder { I = 10 }.Build();
- TestOptimizedForSize.Builder builder = new TestOptimizedForSize.Builder();
- builder.MergeFrom(withFieldSet);
- TestOptimizedForSize built = builder.Build();
- Assert.AreEqual(10, built.I);
- }
- [Test]
- public void UninitializedExtensionInOptimizedForSizeMakesMessageUninitialized() {
- TestOptimizedForSize.Builder builder = new TestOptimizedForSize.Builder();
- builder.SetExtension(TestOptimizedForSize.TestExtension2,
- new TestRequiredOptimizedForSize.Builder().BuildPartial());
- Assert.IsFalse(builder.IsInitialized);
- Assert.IsFalse(builder.BuildPartial().IsInitialized);
- builder = new TestOptimizedForSize.Builder();
- builder.SetExtension(TestOptimizedForSize.TestExtension2,
- new TestRequiredOptimizedForSize.Builder { X = 10 }.BuildPartial());
- Assert.IsTrue(builder.IsInitialized);
- Assert.IsTrue(builder.BuildPartial().IsInitialized);
- }
- [Test]
- public void ToBuilder() {
- TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
- TestUtil.SetAllFields(builder);
- TestAllTypes message = builder.Build();
- TestUtil.AssertAllFieldsSet(message.ToBuilder().Build());
- }
- [Test]
- public void FieldConstantValues() {
- Assert.AreEqual(TestAllTypes.Types.NestedMessage.BbFieldNumber, 1);
- Assert.AreEqual(TestAllTypes.OptionalInt32FieldNumber, 1);
- Assert.AreEqual(TestAllTypes.OptionalGroupFieldNumber, 16);
- Assert.AreEqual(TestAllTypes.OptionalNestedMessageFieldNumber, 18);
- Assert.AreEqual(TestAllTypes.OptionalNestedEnumFieldNumber, 21);
- Assert.AreEqual(TestAllTypes.RepeatedInt32FieldNumber, 31);
- Assert.AreEqual(TestAllTypes.RepeatedGroupFieldNumber, 46);
- Assert.AreEqual(TestAllTypes.RepeatedNestedMessageFieldNumber, 48);
- Assert.AreEqual(TestAllTypes.RepeatedNestedEnumFieldNumber, 51);
- }
- [Test]
- public void ExtensionConstantValues() {
- Assert.AreEqual(TestRequired.SingleFieldNumber, 1000);
- Assert.AreEqual(TestRequired.MultiFieldNumber, 1001);
- Assert.AreEqual(UnitTestProtoFile.OptionalInt32ExtensionFieldNumber, 1);
- Assert.AreEqual(UnitTestProtoFile.OptionalGroupExtensionFieldNumber, 16);
- Assert.AreEqual(UnitTestProtoFile.OptionalNestedMessageExtensionFieldNumber, 18);
- Assert.AreEqual(UnitTestProtoFile.OptionalNestedEnumExtensionFieldNumber, 21);
- Assert.AreEqual(UnitTestProtoFile.RepeatedInt32ExtensionFieldNumber, 31);
- Assert.AreEqual(UnitTestProtoFile.RepeatedGroupExtensionFieldNumber, 46);
- Assert.AreEqual(UnitTestProtoFile.RepeatedNestedMessageExtensionFieldNumber, 48);
- Assert.AreEqual(UnitTestProtoFile.RepeatedNestedEnumExtensionFieldNumber, 51);
- }
- }
- }
|