| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 | using Google.Protobuf.TestProtos.Proto2;using Proto2 = Google.Protobuf.TestProtos.Proto2;using NUnit.Framework;using static Google.Protobuf.TestProtos.Proto2.UnittestExtensions;namespace Google.Protobuf{    /// <summary>    /// Tests around the generated TestAllTypes message in unittest.proto    /// </summary>    public partial class GeneratedMessageTest    {        [Test]        public void DefaultProto2Values()        {            var message = new TestAllTypes();            Assert.AreEqual(false, message.OptionalBool);            Assert.AreEqual(ByteString.Empty, message.OptionalBytes);            Assert.AreEqual(0.0, message.OptionalDouble);            Assert.AreEqual(0, message.OptionalFixed32);            Assert.AreEqual(0L, message.OptionalFixed64);            Assert.AreEqual(0.0f, message.OptionalFloat);            Assert.AreEqual(ForeignEnum.ForeignFoo, message.OptionalForeignEnum);            Assert.IsNull(message.OptionalForeignMessage);            Assert.AreEqual(ImportEnum.ImportFoo, message.OptionalImportEnum);            Assert.IsNull(message.OptionalImportMessage);            Assert.AreEqual(0, message.OptionalInt32);            Assert.AreEqual(0L, message.OptionalInt64);            Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Foo, message.OptionalNestedEnum);            Assert.IsNull(message.OptionalNestedMessage);            Assert.IsNull(message.OptionalPublicImportMessage);            Assert.AreEqual(0, message.OptionalSfixed32);            Assert.AreEqual(0L, message.OptionalSfixed64);            Assert.AreEqual(0, message.OptionalSint32);            Assert.AreEqual(0L, message.OptionalSint64);            Assert.AreEqual("", message.OptionalString);            Assert.AreEqual(0U, message.OptionalUint32);            Assert.AreEqual(0UL, message.OptionalUint64);            // Repeated fields            Assert.AreEqual(0, message.RepeatedBool.Count);            Assert.AreEqual(0, message.RepeatedBytes.Count);            Assert.AreEqual(0, message.RepeatedDouble.Count);            Assert.AreEqual(0, message.RepeatedFixed32.Count);            Assert.AreEqual(0, message.RepeatedFixed64.Count);            Assert.AreEqual(0, message.RepeatedFloat.Count);            Assert.AreEqual(0, message.RepeatedForeignEnum.Count);            Assert.AreEqual(0, message.RepeatedForeignMessage.Count);            Assert.AreEqual(0, message.RepeatedImportEnum.Count);            Assert.AreEqual(0, message.RepeatedImportMessage.Count);            Assert.AreEqual(0, message.RepeatedNestedEnum.Count);            Assert.AreEqual(0, message.RepeatedNestedMessage.Count);            Assert.AreEqual(0, message.RepeatedSfixed32.Count);            Assert.AreEqual(0, message.RepeatedSfixed64.Count);            Assert.AreEqual(0, message.RepeatedSint32.Count);            Assert.AreEqual(0, message.RepeatedSint64.Count);            Assert.AreEqual(0, message.RepeatedString.Count);            Assert.AreEqual(0, message.RepeatedUint32.Count);            Assert.AreEqual(0, message.RepeatedUint64.Count);            // Oneof fields            Assert.AreEqual(Proto2.TestAllTypes.OneofFieldOneofCase.None, message.OneofFieldCase);            Assert.AreEqual(0, message.OneofUint32);            Assert.AreEqual("", message.OneofString);            Assert.AreEqual(ByteString.Empty, message.OneofBytes);            Assert.IsNull(message.OneofNestedMessage);            Assert.AreEqual(true, message.DefaultBool);            Assert.AreEqual(ByteString.CopyFromUtf8("world"), message.DefaultBytes);            Assert.AreEqual("123", message.DefaultCord);            Assert.AreEqual(52e3, message.DefaultDouble);            Assert.AreEqual(47, message.DefaultFixed32);            Assert.AreEqual(48, message.DefaultFixed64);            Assert.AreEqual(51.5, message.DefaultFloat);            Assert.AreEqual(ForeignEnum.ForeignBar, message.DefaultForeignEnum);            Assert.AreEqual(ImportEnum.ImportBar, message.DefaultImportEnum);            Assert.AreEqual(41, message.DefaultInt32);            Assert.AreEqual(42, message.DefaultInt64);            Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Bar, message.DefaultNestedEnum);            Assert.AreEqual(49, message.DefaultSfixed32);            Assert.AreEqual(-50, message.DefaultSfixed64);            Assert.AreEqual(-45, message.DefaultSint32);            Assert.AreEqual(46, message.DefaultSint64);            Assert.AreEqual("hello", message.DefaultString);            Assert.AreEqual("abc", message.DefaultStringPiece);            Assert.AreEqual(43, message.DefaultUint32);            Assert.AreEqual(44, message.DefaultUint64);            Assert.False(message.HasDefaultBool);            Assert.False(message.HasDefaultBytes);            Assert.False(message.HasDefaultCord);            Assert.False(message.HasDefaultDouble);            Assert.False(message.HasDefaultFixed32);            Assert.False(message.HasDefaultFixed64);            Assert.False(message.HasDefaultFloat);            Assert.False(message.HasDefaultForeignEnum);            Assert.False(message.HasDefaultImportEnum);            Assert.False(message.HasDefaultInt32);            Assert.False(message.HasDefaultInt64);            Assert.False(message.HasDefaultNestedEnum);            Assert.False(message.HasDefaultSfixed32);            Assert.False(message.HasDefaultSfixed64);            Assert.False(message.HasDefaultSint32);            Assert.False(message.HasDefaultSint64);            Assert.False(message.HasDefaultString);            Assert.False(message.HasDefaultStringPiece);            Assert.False(message.HasDefaultUint32);            Assert.False(message.HasDefaultUint64);        }        [Test]        public void DefaultExtensionValues()        {            var message = new TestAllExtensions();            Assert.AreEqual(false, message.GetExtension(OptionalBoolExtension));            Assert.AreEqual(ByteString.Empty, message.GetExtension(OptionalBytesExtension));            Assert.AreEqual(0.0, message.GetExtension(OptionalDoubleExtension));            Assert.AreEqual(0, message.GetExtension(OptionalFixed32Extension));            Assert.AreEqual(0L, message.GetExtension(OptionalFixed64Extension));            Assert.AreEqual(0.0f, message.GetExtension(OptionalFloatExtension));            Assert.AreEqual(ForeignEnum.ForeignFoo, message.GetExtension(OptionalForeignEnumExtension));            Assert.IsNull(message.GetExtension(OptionalForeignMessageExtension));            Assert.AreEqual(ImportEnum.ImportFoo, message.GetExtension(OptionalImportEnumExtension));            Assert.IsNull(message.GetExtension(OptionalImportMessageExtension));            Assert.AreEqual(0, message.GetExtension(OptionalInt32Extension));            Assert.AreEqual(0L, message.GetExtension(OptionalInt64Extension));            Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Foo, message.GetExtension(OptionalNestedEnumExtension));            Assert.IsNull(message.GetExtension(OptionalNestedMessageExtension));            Assert.IsNull(message.GetExtension(OptionalPublicImportMessageExtension));            Assert.AreEqual(0, message.GetExtension(OptionalSfixed32Extension));            Assert.AreEqual(0L, message.GetExtension(OptionalSfixed64Extension));            Assert.AreEqual(0, message.GetExtension(OptionalSint32Extension));            Assert.AreEqual(0L, message.GetExtension(OptionalSint64Extension));            Assert.AreEqual("", message.GetExtension(OptionalStringExtension));            Assert.AreEqual(0U, message.GetExtension(OptionalUint32Extension));            Assert.AreEqual(0UL, message.GetExtension(OptionalUint64Extension));            // Repeated fields            Assert.IsNull(message.GetExtension(RepeatedBoolExtension));            Assert.IsNull(message.GetExtension(RepeatedBytesExtension));            Assert.IsNull(message.GetExtension(RepeatedDoubleExtension));            Assert.IsNull(message.GetExtension(RepeatedFixed32Extension));            Assert.IsNull(message.GetExtension(RepeatedFixed64Extension));            Assert.IsNull(message.GetExtension(RepeatedFloatExtension));            Assert.IsNull(message.GetExtension(RepeatedForeignEnumExtension));            Assert.IsNull(message.GetExtension(RepeatedForeignMessageExtension));            Assert.IsNull(message.GetExtension(RepeatedImportEnumExtension));            Assert.IsNull(message.GetExtension(RepeatedImportMessageExtension));            Assert.IsNull(message.GetExtension(RepeatedNestedEnumExtension));            Assert.IsNull(message.GetExtension(RepeatedNestedMessageExtension));            Assert.IsNull(message.GetExtension(RepeatedSfixed32Extension));            Assert.IsNull(message.GetExtension(RepeatedSfixed64Extension));            Assert.IsNull(message.GetExtension(RepeatedSint32Extension));            Assert.IsNull(message.GetExtension(RepeatedSint64Extension));            Assert.IsNull(message.GetExtension(RepeatedStringExtension));            Assert.IsNull(message.GetExtension(RepeatedUint32Extension));            Assert.IsNull(message.GetExtension(RepeatedUint64Extension));            // Oneof fields            Assert.AreEqual(0, message.GetExtension(OneofUint32Extension));            Assert.AreEqual("", message.GetExtension(OneofStringExtension));            Assert.AreEqual(ByteString.Empty, message.GetExtension(OneofBytesExtension));            Assert.IsNull(message.GetExtension(OneofNestedMessageExtension));            Assert.AreEqual(true, message.GetExtension(DefaultBoolExtension));            Assert.AreEqual(ByteString.CopyFromUtf8("world"), message.GetExtension(DefaultBytesExtension));            Assert.AreEqual("123", message.GetExtension(DefaultCordExtension));            Assert.AreEqual(52e3, message.GetExtension(DefaultDoubleExtension));            Assert.AreEqual(47, message.GetExtension(DefaultFixed32Extension));            Assert.AreEqual(48, message.GetExtension(DefaultFixed64Extension));            Assert.AreEqual(51.5, message.GetExtension(DefaultFloatExtension));            Assert.AreEqual(ForeignEnum.ForeignBar, message.GetExtension(DefaultForeignEnumExtension));            Assert.AreEqual(ImportEnum.ImportBar, message.GetExtension(DefaultImportEnumExtension));            Assert.AreEqual(41, message.GetExtension(DefaultInt32Extension));            Assert.AreEqual(42, message.GetExtension(DefaultInt64Extension));            Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Bar, message.GetExtension(DefaultNestedEnumExtension));            Assert.AreEqual(49, message.GetExtension(DefaultSfixed32Extension));            Assert.AreEqual(-50, message.GetExtension(DefaultSfixed64Extension));            Assert.AreEqual(-45, message.GetExtension(DefaultSint32Extension));            Assert.AreEqual(46, message.GetExtension(DefaultSint64Extension));            Assert.AreEqual("hello", message.GetExtension(DefaultStringExtension));            Assert.AreEqual("abc", message.GetExtension(DefaultStringPieceExtension));            Assert.AreEqual(43, message.GetExtension(DefaultUint32Extension));            Assert.AreEqual(44, message.GetExtension(DefaultUint64Extension));            Assert.False(message.HasExtension(DefaultBoolExtension));            Assert.False(message.HasExtension(DefaultBytesExtension));            Assert.False(message.HasExtension(DefaultCordExtension));            Assert.False(message.HasExtension(DefaultDoubleExtension));            Assert.False(message.HasExtension(DefaultFixed32Extension));            Assert.False(message.HasExtension(DefaultFixed64Extension));            Assert.False(message.HasExtension(DefaultFloatExtension));            Assert.False(message.HasExtension(DefaultForeignEnumExtension));            Assert.False(message.HasExtension(DefaultImportEnumExtension));            Assert.False(message.HasExtension(DefaultInt32Extension));            Assert.False(message.HasExtension(DefaultInt64Extension));            Assert.False(message.HasExtension(DefaultNestedEnumExtension));            Assert.False(message.HasExtension(DefaultSfixed32Extension));            Assert.False(message.HasExtension(DefaultSfixed64Extension));            Assert.False(message.HasExtension(DefaultSint32Extension));            Assert.False(message.HasExtension(DefaultSint64Extension));            Assert.False(message.HasExtension(DefaultStringExtension));            Assert.False(message.HasExtension(DefaultStringPieceExtension));            Assert.False(message.HasExtension(DefaultUint32Extension));            Assert.False(message.HasExtension(DefaultUint64Extension));        }        [Test]        public void FieldPresence()        {            var message = new TestAllTypes();            Assert.False(message.HasOptionalBool);            Assert.False(message.OptionalBool);            message.OptionalBool = true;            Assert.True(message.HasOptionalBool);            Assert.True(message.OptionalBool);            message.OptionalBool = false;            Assert.True(message.HasOptionalBool);            Assert.False(message.OptionalBool);            message.ClearOptionalBool();            Assert.False(message.HasOptionalBool);            Assert.False(message.OptionalBool);            Assert.False(message.HasDefaultBool);            Assert.True(message.DefaultBool);            message.DefaultBool = false;            Assert.True(message.HasDefaultBool);            Assert.False(message.DefaultBool);            message.DefaultBool = true;            Assert.True(message.HasDefaultBool);            Assert.True(message.DefaultBool);            message.ClearDefaultBool();            Assert.False(message.HasDefaultBool);            Assert.True(message.DefaultBool);        }        [Test]        public void RequiredFields()        {            var message = new TestRequired();            Assert.False(message.IsInitialized());            message.A = 1;            message.B = 2;            message.C = 3;            Assert.True(message.IsInitialized());        }        /// <summary>        /// Code was accidentally left in message parser that threw exceptions when missing required fields after parsing.        /// We've decided to not throw exceptions on missing fields, instead leaving it up to the consumer how they        /// want to check and handle missing fields.        /// </summary>        [Test]        public void RequiredFieldsNoThrow()        {            Assert.DoesNotThrow(() => MessageParsingHelpers.AssertReadingMessage(TestRequired.Parser, new byte[0], m => { }));            Assert.DoesNotThrow(() => MessageParsingHelpers.AssertReadingMessage(TestRequired.Parser as MessageParser, new byte[0], m => { }));        }        [Test]        public void RequiredFieldsInExtensions()        {            var message = new TestAllExtensions();            Assert.True(message.IsInitialized());            message.SetExtension(TestRequired.Extensions.Single, new TestRequired());            Assert.False(message.IsInitialized());            var extensionMessage = message.GetExtension(TestRequired.Extensions.Single);            extensionMessage.A = 1;            extensionMessage.B = 2;            extensionMessage.C = 3;            Assert.True(message.IsInitialized());            message.GetOrInitializeExtension(TestRequired.Extensions.Multi);            Assert.True(message.IsInitialized());            message.GetExtension(TestRequired.Extensions.Multi).Add(new TestRequired());            Assert.False(message.IsInitialized());            extensionMessage = message.GetExtension(TestRequired.Extensions.Multi)[0];            extensionMessage.A = 1;            extensionMessage.B = 2;            extensionMessage.C = 3;            Assert.True(message.IsInitialized());            message.SetExtension(UnittestExtensions.OptionalBoolExtension, true);            Assert.True(message.IsInitialized());            message.GetOrInitializeExtension(UnittestExtensions.RepeatedBoolExtension).Add(true);            Assert.True(message.IsInitialized());        }        [Test]        public void RequiredFieldInNestedMessageMapValue()        {            var message = new TestRequiredMap();            message.Foo.Add(0, new TestRequiredMap.Types.NestedMessage());            Assert.False(message.IsInitialized());            message.Foo[0].RequiredInt32 = 12;            Assert.True(message.IsInitialized());        }        [Test]        public void RoundTrip_Groups()        {            var message = new TestAllTypes            {                OptionalGroup = new TestAllTypes.Types.OptionalGroup                {                    A = 10                },                RepeatedGroup =                {                    new TestAllTypes.Types.RepeatedGroup { A = 10 },                    new TestAllTypes.Types.RepeatedGroup { A = 20 },                    new TestAllTypes.Types.RepeatedGroup { A = 30 }                }            };            MessageParsingHelpers.AssertRoundtrip(Proto2.TestAllTypes.Parser, message);        }        [Test]        public void RoundTrip_ExtensionGroups()        {            var message = new TestAllExtensions();            message.SetExtension(UnittestExtensions.OptionalGroupExtension, new OptionalGroup_extension { A = 10 });            message.GetOrInitializeExtension(UnittestExtensions.RepeatedGroupExtension).AddRange(new[]            {                new RepeatedGroup_extension { A = 10 },                new RepeatedGroup_extension { A = 20 },                new RepeatedGroup_extension { A = 30 }            });            MessageParsingHelpers.AssertRoundtrip(                TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry() { UnittestExtensions.OptionalGroupExtension, UnittestExtensions.RepeatedGroupExtension }),                message);        }        [Test]        public void RoundTrip_NestedExtensionGroup()        {            var message = new TestGroupExtension();            message.SetExtension(TestNestedExtension.Extensions.OptionalGroupExtension, new TestNestedExtension.Types.OptionalGroup_extension { A = 10 });            MessageParsingHelpers.AssertRoundtrip(                TestGroupExtension.Parser.WithExtensionRegistry(new ExtensionRegistry() { TestNestedExtension.Extensions.OptionalGroupExtension }),                message);        }    }}
 |