xref: /aosp_15_r20/external/protobuf/csharp/src/Google.Protobuf.Test/GeneratedMessageTest.Proto2.cs (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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