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);
- }
- }
- }
|