1*1b3f573fSAndroid Build Coastguard Worker using Google.Protobuf.TestProtos.Proto2; 2*1b3f573fSAndroid Build Coastguard Worker using Proto2 = Google.Protobuf.TestProtos.Proto2; 3*1b3f573fSAndroid Build Coastguard Worker using NUnit.Framework; 4*1b3f573fSAndroid Build Coastguard Worker 5*1b3f573fSAndroid Build Coastguard Worker using static Google.Protobuf.TestProtos.Proto2.UnittestExtensions; 6*1b3f573fSAndroid Build Coastguard Worker 7*1b3f573fSAndroid Build Coastguard Worker namespace Google.Protobuf 8*1b3f573fSAndroid Build Coastguard Worker { 9*1b3f573fSAndroid Build Coastguard Worker /// <summary> 10*1b3f573fSAndroid Build Coastguard Worker /// Tests around the generated TestAllTypes message in unittest.proto 11*1b3f573fSAndroid Build Coastguard Worker /// </summary> 12*1b3f573fSAndroid Build Coastguard Worker public partial class GeneratedMessageTest 13*1b3f573fSAndroid Build Coastguard Worker { 14*1b3f573fSAndroid Build Coastguard Worker [Test] DefaultProto2Values()15*1b3f573fSAndroid Build Coastguard Worker public void DefaultProto2Values() 16*1b3f573fSAndroid Build Coastguard Worker { 17*1b3f573fSAndroid Build Coastguard Worker var message = new TestAllTypes(); 18*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(false, message.OptionalBool); 19*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ByteString.Empty, message.OptionalBytes); 20*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0.0, message.OptionalDouble); 21*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.OptionalFixed32); 22*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0L, message.OptionalFixed64); 23*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0.0f, message.OptionalFloat); 24*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ForeignEnum.ForeignFoo, message.OptionalForeignEnum); 25*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.OptionalForeignMessage); 26*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ImportEnum.ImportFoo, message.OptionalImportEnum); 27*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.OptionalImportMessage); 28*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.OptionalInt32); 29*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0L, message.OptionalInt64); 30*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Foo, message.OptionalNestedEnum); 31*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.OptionalNestedMessage); 32*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.OptionalPublicImportMessage); 33*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.OptionalSfixed32); 34*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0L, message.OptionalSfixed64); 35*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.OptionalSint32); 36*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0L, message.OptionalSint64); 37*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("", message.OptionalString); 38*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0U, message.OptionalUint32); 39*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0UL, message.OptionalUint64); 40*1b3f573fSAndroid Build Coastguard Worker 41*1b3f573fSAndroid Build Coastguard Worker // Repeated fields 42*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedBool.Count); 43*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedBytes.Count); 44*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedDouble.Count); 45*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedFixed32.Count); 46*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedFixed64.Count); 47*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedFloat.Count); 48*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedForeignEnum.Count); 49*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedForeignMessage.Count); 50*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedImportEnum.Count); 51*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedImportMessage.Count); 52*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedNestedEnum.Count); 53*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedNestedMessage.Count); 54*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedSfixed32.Count); 55*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedSfixed64.Count); 56*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedSint32.Count); 57*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedSint64.Count); 58*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedString.Count); 59*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedUint32.Count); 60*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.RepeatedUint64.Count); 61*1b3f573fSAndroid Build Coastguard Worker 62*1b3f573fSAndroid Build Coastguard Worker // Oneof fields 63*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(Proto2.TestAllTypes.OneofFieldOneofCase.None, message.OneofFieldCase); 64*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.OneofUint32); 65*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("", message.OneofString); 66*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ByteString.Empty, message.OneofBytes); 67*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.OneofNestedMessage); 68*1b3f573fSAndroid Build Coastguard Worker 69*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(true, message.DefaultBool); 70*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ByteString.CopyFromUtf8("world"), message.DefaultBytes); 71*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("123", message.DefaultCord); 72*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(52e3, message.DefaultDouble); 73*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(47, message.DefaultFixed32); 74*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(48, message.DefaultFixed64); 75*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(51.5, message.DefaultFloat); 76*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ForeignEnum.ForeignBar, message.DefaultForeignEnum); 77*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ImportEnum.ImportBar, message.DefaultImportEnum); 78*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(41, message.DefaultInt32); 79*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(42, message.DefaultInt64); 80*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Bar, message.DefaultNestedEnum); 81*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(49, message.DefaultSfixed32); 82*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(-50, message.DefaultSfixed64); 83*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(-45, message.DefaultSint32); 84*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(46, message.DefaultSint64); 85*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("hello", message.DefaultString); 86*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("abc", message.DefaultStringPiece); 87*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(43, message.DefaultUint32); 88*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(44, message.DefaultUint64); 89*1b3f573fSAndroid Build Coastguard Worker 90*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultBool); 91*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultBytes); 92*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultCord); 93*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultDouble); 94*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultFixed32); 95*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultFixed64); 96*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultFloat); 97*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultForeignEnum); 98*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultImportEnum); 99*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultInt32); 100*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultInt64); 101*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultNestedEnum); 102*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultSfixed32); 103*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultSfixed64); 104*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultSint32); 105*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultSint64); 106*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultString); 107*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultStringPiece); 108*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultUint32); 109*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultUint64); 110*1b3f573fSAndroid Build Coastguard Worker } 111*1b3f573fSAndroid Build Coastguard Worker 112*1b3f573fSAndroid Build Coastguard Worker [Test] DefaultExtensionValues()113*1b3f573fSAndroid Build Coastguard Worker public void DefaultExtensionValues() 114*1b3f573fSAndroid Build Coastguard Worker { 115*1b3f573fSAndroid Build Coastguard Worker var message = new TestAllExtensions(); 116*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(false, message.GetExtension(OptionalBoolExtension)); 117*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ByteString.Empty, message.GetExtension(OptionalBytesExtension)); 118*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0.0, message.GetExtension(OptionalDoubleExtension)); 119*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.GetExtension(OptionalFixed32Extension)); 120*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0L, message.GetExtension(OptionalFixed64Extension)); 121*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0.0f, message.GetExtension(OptionalFloatExtension)); 122*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ForeignEnum.ForeignFoo, message.GetExtension(OptionalForeignEnumExtension)); 123*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(OptionalForeignMessageExtension)); 124*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ImportEnum.ImportFoo, message.GetExtension(OptionalImportEnumExtension)); 125*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(OptionalImportMessageExtension)); 126*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.GetExtension(OptionalInt32Extension)); 127*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0L, message.GetExtension(OptionalInt64Extension)); 128*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Foo, message.GetExtension(OptionalNestedEnumExtension)); 129*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(OptionalNestedMessageExtension)); 130*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(OptionalPublicImportMessageExtension)); 131*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.GetExtension(OptionalSfixed32Extension)); 132*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0L, message.GetExtension(OptionalSfixed64Extension)); 133*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.GetExtension(OptionalSint32Extension)); 134*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0L, message.GetExtension(OptionalSint64Extension)); 135*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("", message.GetExtension(OptionalStringExtension)); 136*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0U, message.GetExtension(OptionalUint32Extension)); 137*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0UL, message.GetExtension(OptionalUint64Extension)); 138*1b3f573fSAndroid Build Coastguard Worker 139*1b3f573fSAndroid Build Coastguard Worker // Repeated fields 140*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedBoolExtension)); 141*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedBytesExtension)); 142*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedDoubleExtension)); 143*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedFixed32Extension)); 144*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedFixed64Extension)); 145*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedFloatExtension)); 146*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedForeignEnumExtension)); 147*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedForeignMessageExtension)); 148*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedImportEnumExtension)); 149*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedImportMessageExtension)); 150*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedNestedEnumExtension)); 151*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedNestedMessageExtension)); 152*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedSfixed32Extension)); 153*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedSfixed64Extension)); 154*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedSint32Extension)); 155*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedSint64Extension)); 156*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedStringExtension)); 157*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedUint32Extension)); 158*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(RepeatedUint64Extension)); 159*1b3f573fSAndroid Build Coastguard Worker 160*1b3f573fSAndroid Build Coastguard Worker // Oneof fields 161*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(0, message.GetExtension(OneofUint32Extension)); 162*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("", message.GetExtension(OneofStringExtension)); 163*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ByteString.Empty, message.GetExtension(OneofBytesExtension)); 164*1b3f573fSAndroid Build Coastguard Worker Assert.IsNull(message.GetExtension(OneofNestedMessageExtension)); 165*1b3f573fSAndroid Build Coastguard Worker 166*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(true, message.GetExtension(DefaultBoolExtension)); 167*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ByteString.CopyFromUtf8("world"), message.GetExtension(DefaultBytesExtension)); 168*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("123", message.GetExtension(DefaultCordExtension)); 169*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(52e3, message.GetExtension(DefaultDoubleExtension)); 170*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(47, message.GetExtension(DefaultFixed32Extension)); 171*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(48, message.GetExtension(DefaultFixed64Extension)); 172*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(51.5, message.GetExtension(DefaultFloatExtension)); 173*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ForeignEnum.ForeignBar, message.GetExtension(DefaultForeignEnumExtension)); 174*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(ImportEnum.ImportBar, message.GetExtension(DefaultImportEnumExtension)); 175*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(41, message.GetExtension(DefaultInt32Extension)); 176*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(42, message.GetExtension(DefaultInt64Extension)); 177*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(Proto2.TestAllTypes.Types.NestedEnum.Bar, message.GetExtension(DefaultNestedEnumExtension)); 178*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(49, message.GetExtension(DefaultSfixed32Extension)); 179*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(-50, message.GetExtension(DefaultSfixed64Extension)); 180*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(-45, message.GetExtension(DefaultSint32Extension)); 181*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(46, message.GetExtension(DefaultSint64Extension)); 182*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("hello", message.GetExtension(DefaultStringExtension)); 183*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual("abc", message.GetExtension(DefaultStringPieceExtension)); 184*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(43, message.GetExtension(DefaultUint32Extension)); 185*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(44, message.GetExtension(DefaultUint64Extension)); 186*1b3f573fSAndroid Build Coastguard Worker 187*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultBoolExtension)); 188*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultBytesExtension)); 189*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultCordExtension)); 190*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultDoubleExtension)); 191*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultFixed32Extension)); 192*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultFixed64Extension)); 193*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultFloatExtension)); 194*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultForeignEnumExtension)); 195*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultImportEnumExtension)); 196*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultInt32Extension)); 197*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultInt64Extension)); 198*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultNestedEnumExtension)); 199*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultSfixed32Extension)); 200*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultSfixed64Extension)); 201*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultSint32Extension)); 202*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultSint64Extension)); 203*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultStringExtension)); 204*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultStringPieceExtension)); 205*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultUint32Extension)); 206*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasExtension(DefaultUint64Extension)); 207*1b3f573fSAndroid Build Coastguard Worker } 208*1b3f573fSAndroid Build Coastguard Worker 209*1b3f573fSAndroid Build Coastguard Worker [Test] FieldPresence()210*1b3f573fSAndroid Build Coastguard Worker public void FieldPresence() 211*1b3f573fSAndroid Build Coastguard Worker { 212*1b3f573fSAndroid Build Coastguard Worker var message = new TestAllTypes(); 213*1b3f573fSAndroid Build Coastguard Worker 214*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasOptionalBool); 215*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.OptionalBool); 216*1b3f573fSAndroid Build Coastguard Worker 217*1b3f573fSAndroid Build Coastguard Worker message.OptionalBool = true; 218*1b3f573fSAndroid Build Coastguard Worker 219*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.HasOptionalBool); 220*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.OptionalBool); 221*1b3f573fSAndroid Build Coastguard Worker 222*1b3f573fSAndroid Build Coastguard Worker message.OptionalBool = false; 223*1b3f573fSAndroid Build Coastguard Worker 224*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.HasOptionalBool); 225*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.OptionalBool); 226*1b3f573fSAndroid Build Coastguard Worker 227*1b3f573fSAndroid Build Coastguard Worker message.ClearOptionalBool(); 228*1b3f573fSAndroid Build Coastguard Worker 229*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasOptionalBool); 230*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.OptionalBool); 231*1b3f573fSAndroid Build Coastguard Worker 232*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultBool); 233*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.DefaultBool); 234*1b3f573fSAndroid Build Coastguard Worker 235*1b3f573fSAndroid Build Coastguard Worker message.DefaultBool = false; 236*1b3f573fSAndroid Build Coastguard Worker 237*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.HasDefaultBool); 238*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.DefaultBool); 239*1b3f573fSAndroid Build Coastguard Worker 240*1b3f573fSAndroid Build Coastguard Worker message.DefaultBool = true; 241*1b3f573fSAndroid Build Coastguard Worker 242*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.HasDefaultBool); 243*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.DefaultBool); 244*1b3f573fSAndroid Build Coastguard Worker 245*1b3f573fSAndroid Build Coastguard Worker message.ClearDefaultBool(); 246*1b3f573fSAndroid Build Coastguard Worker 247*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.HasDefaultBool); 248*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.DefaultBool); 249*1b3f573fSAndroid Build Coastguard Worker } 250*1b3f573fSAndroid Build Coastguard Worker 251*1b3f573fSAndroid Build Coastguard Worker [Test] RequiredFields()252*1b3f573fSAndroid Build Coastguard Worker public void RequiredFields() 253*1b3f573fSAndroid Build Coastguard Worker { 254*1b3f573fSAndroid Build Coastguard Worker var message = new TestRequired(); 255*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.IsInitialized()); 256*1b3f573fSAndroid Build Coastguard Worker 257*1b3f573fSAndroid Build Coastguard Worker message.A = 1; 258*1b3f573fSAndroid Build Coastguard Worker message.B = 2; 259*1b3f573fSAndroid Build Coastguard Worker message.C = 3; 260*1b3f573fSAndroid Build Coastguard Worker 261*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.IsInitialized()); 262*1b3f573fSAndroid Build Coastguard Worker } 263*1b3f573fSAndroid Build Coastguard Worker 264*1b3f573fSAndroid Build Coastguard Worker /// <summary> 265*1b3f573fSAndroid Build Coastguard Worker /// Code was accidentally left in message parser that threw exceptions when missing required fields after parsing. 266*1b3f573fSAndroid Build Coastguard Worker /// We've decided to not throw exceptions on missing fields, instead leaving it up to the consumer how they 267*1b3f573fSAndroid Build Coastguard Worker /// want to check and handle missing fields. 268*1b3f573fSAndroid Build Coastguard Worker /// </summary> 269*1b3f573fSAndroid Build Coastguard Worker [Test] RequiredFieldsNoThrow()270*1b3f573fSAndroid Build Coastguard Worker public void RequiredFieldsNoThrow() 271*1b3f573fSAndroid Build Coastguard Worker { 272*1b3f573fSAndroid Build Coastguard Worker Assert.DoesNotThrow(() => MessageParsingHelpers.AssertReadingMessage(TestRequired.Parser, new byte[0], m => { })); 273*1b3f573fSAndroid Build Coastguard Worker Assert.DoesNotThrow(() => MessageParsingHelpers.AssertReadingMessage(TestRequired.Parser as MessageParser, new byte[0], m => { })); 274*1b3f573fSAndroid Build Coastguard Worker } 275*1b3f573fSAndroid Build Coastguard Worker 276*1b3f573fSAndroid Build Coastguard Worker [Test] RequiredFieldsInExtensions()277*1b3f573fSAndroid Build Coastguard Worker public void RequiredFieldsInExtensions() 278*1b3f573fSAndroid Build Coastguard Worker { 279*1b3f573fSAndroid Build Coastguard Worker var message = new TestAllExtensions(); 280*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.IsInitialized()); 281*1b3f573fSAndroid Build Coastguard Worker 282*1b3f573fSAndroid Build Coastguard Worker message.SetExtension(TestRequired.Extensions.Single, new TestRequired()); 283*1b3f573fSAndroid Build Coastguard Worker 284*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.IsInitialized()); 285*1b3f573fSAndroid Build Coastguard Worker 286*1b3f573fSAndroid Build Coastguard Worker var extensionMessage = message.GetExtension(TestRequired.Extensions.Single); 287*1b3f573fSAndroid Build Coastguard Worker extensionMessage.A = 1; 288*1b3f573fSAndroid Build Coastguard Worker extensionMessage.B = 2; 289*1b3f573fSAndroid Build Coastguard Worker extensionMessage.C = 3; 290*1b3f573fSAndroid Build Coastguard Worker 291*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.IsInitialized()); 292*1b3f573fSAndroid Build Coastguard Worker 293*1b3f573fSAndroid Build Coastguard Worker message.GetOrInitializeExtension(TestRequired.Extensions.Multi); 294*1b3f573fSAndroid Build Coastguard Worker 295*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.IsInitialized()); 296*1b3f573fSAndroid Build Coastguard Worker 297*1b3f573fSAndroid Build Coastguard Worker message.GetExtension(TestRequired.Extensions.Multi).Add(new TestRequired()); 298*1b3f573fSAndroid Build Coastguard Worker 299*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.IsInitialized()); 300*1b3f573fSAndroid Build Coastguard Worker 301*1b3f573fSAndroid Build Coastguard Worker extensionMessage = message.GetExtension(TestRequired.Extensions.Multi)[0]; 302*1b3f573fSAndroid Build Coastguard Worker extensionMessage.A = 1; 303*1b3f573fSAndroid Build Coastguard Worker extensionMessage.B = 2; 304*1b3f573fSAndroid Build Coastguard Worker extensionMessage.C = 3; 305*1b3f573fSAndroid Build Coastguard Worker 306*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.IsInitialized()); 307*1b3f573fSAndroid Build Coastguard Worker 308*1b3f573fSAndroid Build Coastguard Worker message.SetExtension(UnittestExtensions.OptionalBoolExtension, true); 309*1b3f573fSAndroid Build Coastguard Worker 310*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.IsInitialized()); 311*1b3f573fSAndroid Build Coastguard Worker 312*1b3f573fSAndroid Build Coastguard Worker message.GetOrInitializeExtension(UnittestExtensions.RepeatedBoolExtension).Add(true); 313*1b3f573fSAndroid Build Coastguard Worker 314*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.IsInitialized()); 315*1b3f573fSAndroid Build Coastguard Worker } 316*1b3f573fSAndroid Build Coastguard Worker 317*1b3f573fSAndroid Build Coastguard Worker [Test] RequiredFieldInNestedMessageMapValue()318*1b3f573fSAndroid Build Coastguard Worker public void RequiredFieldInNestedMessageMapValue() 319*1b3f573fSAndroid Build Coastguard Worker { 320*1b3f573fSAndroid Build Coastguard Worker var message = new TestRequiredMap(); 321*1b3f573fSAndroid Build Coastguard Worker message.Foo.Add(0, new TestRequiredMap.Types.NestedMessage()); 322*1b3f573fSAndroid Build Coastguard Worker 323*1b3f573fSAndroid Build Coastguard Worker Assert.False(message.IsInitialized()); 324*1b3f573fSAndroid Build Coastguard Worker 325*1b3f573fSAndroid Build Coastguard Worker message.Foo[0].RequiredInt32 = 12; 326*1b3f573fSAndroid Build Coastguard Worker 327*1b3f573fSAndroid Build Coastguard Worker Assert.True(message.IsInitialized()); 328*1b3f573fSAndroid Build Coastguard Worker } 329*1b3f573fSAndroid Build Coastguard Worker 330*1b3f573fSAndroid Build Coastguard Worker [Test] RoundTrip_Groups()331*1b3f573fSAndroid Build Coastguard Worker public void RoundTrip_Groups() 332*1b3f573fSAndroid Build Coastguard Worker { 333*1b3f573fSAndroid Build Coastguard Worker var message = new TestAllTypes 334*1b3f573fSAndroid Build Coastguard Worker { 335*1b3f573fSAndroid Build Coastguard Worker OptionalGroup = new TestAllTypes.Types.OptionalGroup 336*1b3f573fSAndroid Build Coastguard Worker { 337*1b3f573fSAndroid Build Coastguard Worker A = 10 338*1b3f573fSAndroid Build Coastguard Worker }, 339*1b3f573fSAndroid Build Coastguard Worker RepeatedGroup = 340*1b3f573fSAndroid Build Coastguard Worker { 341*1b3f573fSAndroid Build Coastguard Worker new TestAllTypes.Types.RepeatedGroup { A = 10 }, 342*1b3f573fSAndroid Build Coastguard Worker new TestAllTypes.Types.RepeatedGroup { A = 20 }, 343*1b3f573fSAndroid Build Coastguard Worker new TestAllTypes.Types.RepeatedGroup { A = 30 } 344*1b3f573fSAndroid Build Coastguard Worker } 345*1b3f573fSAndroid Build Coastguard Worker }; 346*1b3f573fSAndroid Build Coastguard Worker 347*1b3f573fSAndroid Build Coastguard Worker MessageParsingHelpers.AssertWritingMessage(message); 348*1b3f573fSAndroid Build Coastguard Worker 349*1b3f573fSAndroid Build Coastguard Worker MessageParsingHelpers.AssertRoundtrip(Proto2.TestAllTypes.Parser, message); 350*1b3f573fSAndroid Build Coastguard Worker } 351*1b3f573fSAndroid Build Coastguard Worker 352*1b3f573fSAndroid Build Coastguard Worker [Test] RoundTrip_ExtensionGroups()353*1b3f573fSAndroid Build Coastguard Worker public void RoundTrip_ExtensionGroups() 354*1b3f573fSAndroid Build Coastguard Worker { 355*1b3f573fSAndroid Build Coastguard Worker var message = new TestAllExtensions(); 356*1b3f573fSAndroid Build Coastguard Worker message.SetExtension(UnittestExtensions.OptionalGroupExtension, new OptionalGroup_extension { A = 10 }); 357*1b3f573fSAndroid Build Coastguard Worker message.GetOrInitializeExtension(UnittestExtensions.RepeatedGroupExtension).AddRange(new[] 358*1b3f573fSAndroid Build Coastguard Worker { 359*1b3f573fSAndroid Build Coastguard Worker new RepeatedGroup_extension { A = 10 }, 360*1b3f573fSAndroid Build Coastguard Worker new RepeatedGroup_extension { A = 20 }, 361*1b3f573fSAndroid Build Coastguard Worker new RepeatedGroup_extension { A = 30 } 362*1b3f573fSAndroid Build Coastguard Worker }); 363*1b3f573fSAndroid Build Coastguard Worker 364*1b3f573fSAndroid Build Coastguard Worker MessageParsingHelpers.AssertWritingMessage(message); 365*1b3f573fSAndroid Build Coastguard Worker 366*1b3f573fSAndroid Build Coastguard Worker MessageParsingHelpers.AssertRoundtrip( 367*1b3f573fSAndroid Build Coastguard Worker TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry() { UnittestExtensions.OptionalGroupExtension, UnittestExtensions.RepeatedGroupExtension }), 368*1b3f573fSAndroid Build Coastguard Worker message); 369*1b3f573fSAndroid Build Coastguard Worker } 370*1b3f573fSAndroid Build Coastguard Worker 371*1b3f573fSAndroid Build Coastguard Worker [Test] RoundTrip_NestedExtensionGroup()372*1b3f573fSAndroid Build Coastguard Worker public void RoundTrip_NestedExtensionGroup() 373*1b3f573fSAndroid Build Coastguard Worker { 374*1b3f573fSAndroid Build Coastguard Worker var message = new TestGroupExtension(); 375*1b3f573fSAndroid Build Coastguard Worker message.SetExtension(TestNestedExtension.Extensions.OptionalGroupExtension, new TestNestedExtension.Types.OptionalGroup_extension { A = 10 }); 376*1b3f573fSAndroid Build Coastguard Worker 377*1b3f573fSAndroid Build Coastguard Worker MessageParsingHelpers.AssertWritingMessage(message); 378*1b3f573fSAndroid Build Coastguard Worker 379*1b3f573fSAndroid Build Coastguard Worker MessageParsingHelpers.AssertRoundtrip( 380*1b3f573fSAndroid Build Coastguard Worker TestGroupExtension.Parser.WithExtensionRegistry(new ExtensionRegistry() { TestNestedExtension.Extensions.OptionalGroupExtension }), 381*1b3f573fSAndroid Build Coastguard Worker message); 382*1b3f573fSAndroid Build Coastguard Worker } 383*1b3f573fSAndroid Build Coastguard Worker 384*1b3f573fSAndroid Build Coastguard Worker [Test] RoundTrip_ParseUsingCodedInput()385*1b3f573fSAndroid Build Coastguard Worker public void RoundTrip_ParseUsingCodedInput() 386*1b3f573fSAndroid Build Coastguard Worker { 387*1b3f573fSAndroid Build Coastguard Worker var message = new TestAllExtensions(); 388*1b3f573fSAndroid Build Coastguard Worker message.SetExtension(UnittestExtensions.OptionalBoolExtension, true); 389*1b3f573fSAndroid Build Coastguard Worker byte[] bytes = message.ToByteArray(); 390*1b3f573fSAndroid Build Coastguard Worker using (CodedInputStream input = new CodedInputStream(bytes)) 391*1b3f573fSAndroid Build Coastguard Worker { 392*1b3f573fSAndroid Build Coastguard Worker var parsed = TestAllExtensions.Parser.WithExtensionRegistry(new ExtensionRegistry() { UnittestExtensions.OptionalBoolExtension }).ParseFrom(input); 393*1b3f573fSAndroid Build Coastguard Worker Assert.AreEqual(message, parsed); 394*1b3f573fSAndroid Build Coastguard Worker } 395*1b3f573fSAndroid Build Coastguard Worker } 396*1b3f573fSAndroid Build Coastguard Worker } 397*1b3f573fSAndroid Build Coastguard Worker } 398