OLD | NEW |
| (Empty) |
1 // Protocol Buffers - Google's data interchange format | |
2 // Copyright 2008 Google Inc. All rights reserved. | |
3 // http://code.google.com/p/protobuf/ | |
4 // | |
5 // Redistribution and use in source and binary forms, with or without | |
6 // modification, are permitted provided that the following conditions are | |
7 // met: | |
8 // | |
9 // * Redistributions of source code must retain the above copyright | |
10 // notice, this list of conditions and the following disclaimer. | |
11 // * Redistributions in binary form must reproduce the above | |
12 // copyright notice, this list of conditions and the following disclaimer | |
13 // in the documentation and/or other materials provided with the | |
14 // distribution. | |
15 // * Neither the name of Google Inc. nor the names of its | |
16 // contributors may be used to endorse or promote products derived from | |
17 // this software without specific prior written permission. | |
18 // | |
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
30 | |
31 package com.google.protobuf.test; | |
32 import com.google.protobuf.*; | |
33 | |
34 import com.google.protobuf.Descriptors.Descriptor; | |
35 import com.google.protobuf.Descriptors.FieldDescriptor; | |
36 import com.google.protobuf.test.UnittestImport; | |
37 import protobuf_unittest.EnumWithNoOuter; | |
38 import protobuf_unittest.MessageWithNoOuter; | |
39 import protobuf_unittest.MultipleFilesTestProto; | |
40 import protobuf_unittest.NestedExtension.MyNestedExtension; | |
41 import protobuf_unittest.NonNestedExtension; | |
42 import protobuf_unittest.NonNestedExtension.MessageToBeExtended; | |
43 import protobuf_unittest.NonNestedExtension.MyNonNestedExtension; | |
44 import protobuf_unittest.ServiceWithNoOuter; | |
45 import protobuf_unittest.UnittestOptimizeFor.TestOptimizedForSize; | |
46 import protobuf_unittest.UnittestOptimizeFor.TestOptionalOptimizedForSize; | |
47 import protobuf_unittest.UnittestOptimizeFor.TestRequiredOptimizedForSize; | |
48 import protobuf_unittest.UnittestProto; | |
49 import protobuf_unittest.UnittestProto.ForeignEnum; | |
50 import protobuf_unittest.UnittestProto.ForeignMessage; | |
51 import protobuf_unittest.UnittestProto.ForeignMessageOrBuilder; | |
52 import protobuf_unittest.UnittestProto.TestAllExtensions; | |
53 import protobuf_unittest.UnittestProto.TestAllTypes; | |
54 import protobuf_unittest.UnittestProto.TestAllTypes.NestedMessage; | |
55 import protobuf_unittest.UnittestProto.TestAllTypesOrBuilder; | |
56 import protobuf_unittest.UnittestProto.TestExtremeDefaultValues; | |
57 import protobuf_unittest.UnittestProto.TestPackedTypes; | |
58 import protobuf_unittest.UnittestProto.TestUnpackedTypes; | |
59 | |
60 import junit.framework.TestCase; | |
61 | |
62 import java.io.ByteArrayInputStream; | |
63 import java.io.ByteArrayOutputStream; | |
64 import java.io.ObjectInputStream; | |
65 import java.io.ObjectOutputStream; | |
66 import java.util.Arrays; | |
67 import java.util.Collections; | |
68 import java.util.List; | |
69 | |
70 /** | |
71 * Unit test for generated messages and generated code. See also | |
72 * {@link MessageTest}, which tests some generated message functionality. | |
73 * | |
74 * @author kenton@google.com Kenton Varda | |
75 */ | |
76 public class GeneratedMessageTest extends TestCase { | |
77 TestUtil.ReflectionTester reflectionTester = | |
78 new TestUtil.ReflectionTester(TestAllTypes.getDescriptor(), null); | |
79 | |
80 public void testDefaultInstance() throws Exception { | |
81 assertSame(TestAllTypes.getDefaultInstance(), | |
82 TestAllTypes.getDefaultInstance().getDefaultInstanceForType()); | |
83 assertSame(TestAllTypes.getDefaultInstance(), | |
84 TestAllTypes.newBuilder().getDefaultInstanceForType()); | |
85 } | |
86 | |
87 public void testMessageOrBuilder() throws Exception { | |
88 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
89 TestUtil.setAllFields(builder); | |
90 TestAllTypes message = builder.build(); | |
91 TestUtil.assertAllFieldsSet(message); | |
92 } | |
93 | |
94 public void testUsingBuilderMultipleTimes() throws Exception { | |
95 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
96 // primitive field scalar and repeated | |
97 builder.setOptionalSfixed64(100); | |
98 builder.addRepeatedInt32(100); | |
99 // enum field scalar and repeated | |
100 builder.setOptionalImportEnum(UnittestImport.ImportEnum.IMPORT_BAR); | |
101 builder.addRepeatedImportEnum(UnittestImport.ImportEnum.IMPORT_BAR); | |
102 // proto field scalar and repeated | |
103 builder.setOptionalForeignMessage(ForeignMessage.newBuilder().setC(1)); | |
104 builder.addRepeatedForeignMessage(ForeignMessage.newBuilder().setC(1)); | |
105 | |
106 TestAllTypes value1 = builder.build(); | |
107 | |
108 assertEquals(100, value1.getOptionalSfixed64()); | |
109 assertEquals(100, value1.getRepeatedInt32(0)); | |
110 assertEquals(UnittestImport.ImportEnum.IMPORT_BAR, | |
111 value1.getOptionalImportEnum()); | |
112 assertEquals(UnittestImport.ImportEnum.IMPORT_BAR, | |
113 value1.getRepeatedImportEnum(0)); | |
114 assertEquals(1, value1.getOptionalForeignMessage().getC()); | |
115 assertEquals(1, value1.getRepeatedForeignMessage(0).getC()); | |
116 | |
117 // Make sure that builder didn't update previously created values | |
118 builder.setOptionalSfixed64(200); | |
119 builder.setRepeatedInt32(0, 200); | |
120 builder.setOptionalImportEnum(UnittestImport.ImportEnum.IMPORT_FOO); | |
121 builder.setRepeatedImportEnum(0, UnittestImport.ImportEnum.IMPORT_FOO); | |
122 builder.setOptionalForeignMessage(ForeignMessage.newBuilder().setC(2)); | |
123 builder.setRepeatedForeignMessage(0, ForeignMessage.newBuilder().setC(2)); | |
124 | |
125 TestAllTypes value2 = builder.build(); | |
126 | |
127 // Make sure value1 didn't change. | |
128 assertEquals(100, value1.getOptionalSfixed64()); | |
129 assertEquals(100, value1.getRepeatedInt32(0)); | |
130 assertEquals(UnittestImport.ImportEnum.IMPORT_BAR, | |
131 value1.getOptionalImportEnum()); | |
132 assertEquals(UnittestImport.ImportEnum.IMPORT_BAR, | |
133 value1.getRepeatedImportEnum(0)); | |
134 assertEquals(1, value1.getOptionalForeignMessage().getC()); | |
135 assertEquals(1, value1.getRepeatedForeignMessage(0).getC()); | |
136 | |
137 // Make sure value2 is correct | |
138 assertEquals(200, value2.getOptionalSfixed64()); | |
139 assertEquals(200, value2.getRepeatedInt32(0)); | |
140 assertEquals(UnittestImport.ImportEnum.IMPORT_FOO, | |
141 value2.getOptionalImportEnum()); | |
142 assertEquals(UnittestImport.ImportEnum.IMPORT_FOO, | |
143 value2.getRepeatedImportEnum(0)); | |
144 assertEquals(2, value2.getOptionalForeignMessage().getC()); | |
145 assertEquals(2, value2.getRepeatedForeignMessage(0).getC()); | |
146 } | |
147 | |
148 public void testRepeatedArraysAreImmutable() throws Exception { | |
149 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
150 builder.addRepeatedInt32(100); | |
151 builder.addRepeatedImportEnum(UnittestImport.ImportEnum.IMPORT_BAR); | |
152 builder.addRepeatedForeignMessage(ForeignMessage.getDefaultInstance()); | |
153 assertIsUnmodifiable(builder.getRepeatedInt32List()); | |
154 assertIsUnmodifiable(builder.getRepeatedImportEnumList()); | |
155 assertIsUnmodifiable(builder.getRepeatedForeignMessageList()); | |
156 assertIsUnmodifiable(builder.getRepeatedFloatList()); | |
157 | |
158 | |
159 TestAllTypes value = builder.build(); | |
160 assertIsUnmodifiable(value.getRepeatedInt32List()); | |
161 assertIsUnmodifiable(value.getRepeatedImportEnumList()); | |
162 assertIsUnmodifiable(value.getRepeatedForeignMessageList()); | |
163 assertIsUnmodifiable(value.getRepeatedFloatList()); | |
164 } | |
165 | |
166 public void testParsedMessagesAreImmutable() throws Exception { | |
167 TestAllTypes value = TestAllTypes.PARSER.parseFrom( | |
168 TestUtil.getAllSet().toByteString()); | |
169 assertIsUnmodifiable(value.getRepeatedInt32List()); | |
170 assertIsUnmodifiable(value.getRepeatedInt64List()); | |
171 assertIsUnmodifiable(value.getRepeatedUint32List()); | |
172 assertIsUnmodifiable(value.getRepeatedUint64List()); | |
173 assertIsUnmodifiable(value.getRepeatedSint32List()); | |
174 assertIsUnmodifiable(value.getRepeatedSint64List()); | |
175 assertIsUnmodifiable(value.getRepeatedFixed32List()); | |
176 assertIsUnmodifiable(value.getRepeatedFixed64List()); | |
177 assertIsUnmodifiable(value.getRepeatedSfixed32List()); | |
178 assertIsUnmodifiable(value.getRepeatedSfixed64List()); | |
179 assertIsUnmodifiable(value.getRepeatedFloatList()); | |
180 assertIsUnmodifiable(value.getRepeatedDoubleList()); | |
181 assertIsUnmodifiable(value.getRepeatedBoolList()); | |
182 assertIsUnmodifiable(value.getRepeatedStringList()); | |
183 assertIsUnmodifiable(value.getRepeatedBytesList()); | |
184 assertIsUnmodifiable(value.getRepeatedGroupList()); | |
185 assertIsUnmodifiable(value.getRepeatedNestedMessageList()); | |
186 assertIsUnmodifiable(value.getRepeatedForeignMessageList()); | |
187 assertIsUnmodifiable(value.getRepeatedImportMessageList()); | |
188 assertIsUnmodifiable(value.getRepeatedNestedEnumList()); | |
189 assertIsUnmodifiable(value.getRepeatedForeignEnumList()); | |
190 assertIsUnmodifiable(value.getRepeatedImportEnumList()); | |
191 } | |
192 | |
193 private void assertIsUnmodifiable(List<?> list) { | |
194 if (list == Collections.emptyList()) { | |
195 // OKAY -- Need to check this b/c EmptyList allows you to call clear. | |
196 } else { | |
197 try { | |
198 list.clear(); | |
199 fail("List wasn't immutable"); | |
200 } catch (UnsupportedOperationException e) { | |
201 // good | |
202 } | |
203 } | |
204 } | |
205 | |
206 public void testSettersRejectNull() throws Exception { | |
207 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
208 try { | |
209 builder.setOptionalString(null); | |
210 fail("Exception was not thrown"); | |
211 } catch (NullPointerException e) { | |
212 // We expect this exception. | |
213 } | |
214 try { | |
215 builder.setOptionalBytes(null); | |
216 fail("Exception was not thrown"); | |
217 } catch (NullPointerException e) { | |
218 // We expect this exception. | |
219 } | |
220 try { | |
221 builder.setOptionalNestedMessage((TestAllTypes.NestedMessage) null); | |
222 fail("Exception was not thrown"); | |
223 } catch (NullPointerException e) { | |
224 // We expect this exception. | |
225 } | |
226 try { | |
227 builder.setOptionalNestedMessage( | |
228 (TestAllTypes.NestedMessage.Builder) null); | |
229 fail("Exception was not thrown"); | |
230 } catch (NullPointerException e) { | |
231 // We expect this exception. | |
232 } | |
233 try { | |
234 builder.setOptionalNestedEnum(null); | |
235 fail("Exception was not thrown"); | |
236 } catch (NullPointerException e) { | |
237 // We expect this exception. | |
238 } | |
239 try { | |
240 builder.addRepeatedString(null); | |
241 fail("Exception was not thrown"); | |
242 } catch (NullPointerException e) { | |
243 // We expect this exception. | |
244 } | |
245 try { | |
246 builder.addRepeatedBytes(null); | |
247 fail("Exception was not thrown"); | |
248 } catch (NullPointerException e) { | |
249 // We expect this exception. | |
250 } | |
251 try { | |
252 builder.addRepeatedNestedMessage((TestAllTypes.NestedMessage) null); | |
253 fail("Exception was not thrown"); | |
254 } catch (NullPointerException e) { | |
255 // We expect this exception. | |
256 } | |
257 try { | |
258 builder.addRepeatedNestedMessage( | |
259 (TestAllTypes.NestedMessage.Builder) null); | |
260 fail("Exception was not thrown"); | |
261 } catch (NullPointerException e) { | |
262 // We expect this exception. | |
263 } | |
264 try { | |
265 builder.addRepeatedNestedEnum(null); | |
266 fail("Exception was not thrown"); | |
267 } catch (NullPointerException e) { | |
268 // We expect this exception. | |
269 } | |
270 } | |
271 | |
272 public void testRepeatedSetters() throws Exception { | |
273 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
274 TestUtil.setAllFields(builder); | |
275 TestUtil.modifyRepeatedFields(builder); | |
276 TestAllTypes message = builder.build(); | |
277 TestUtil.assertRepeatedFieldsModified(message); | |
278 } | |
279 | |
280 public void testRepeatedSettersRejectNull() throws Exception { | |
281 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
282 | |
283 builder.addRepeatedString("one"); | |
284 builder.addRepeatedString("two"); | |
285 try { | |
286 builder.setRepeatedString(1, null); | |
287 fail("Exception was not thrown"); | |
288 } catch (NullPointerException e) { | |
289 // We expect this exception. | |
290 } | |
291 | |
292 builder.addRepeatedBytes(TestUtil.toBytes("one")); | |
293 builder.addRepeatedBytes(TestUtil.toBytes("two")); | |
294 try { | |
295 builder.setRepeatedBytes(1, null); | |
296 fail("Exception was not thrown"); | |
297 } catch (NullPointerException e) { | |
298 // We expect this exception. | |
299 } | |
300 | |
301 builder.addRepeatedNestedMessage( | |
302 TestAllTypes.NestedMessage.newBuilder().setBb(218).build()); | |
303 builder.addRepeatedNestedMessage( | |
304 TestAllTypes.NestedMessage.newBuilder().setBb(456).build()); | |
305 try { | |
306 builder.setRepeatedNestedMessage(1, (TestAllTypes.NestedMessage) null); | |
307 fail("Exception was not thrown"); | |
308 } catch (NullPointerException e) { | |
309 // We expect this exception. | |
310 } | |
311 try { | |
312 builder.setRepeatedNestedMessage( | |
313 1, (TestAllTypes.NestedMessage.Builder) null); | |
314 fail("Exception was not thrown"); | |
315 } catch (NullPointerException e) { | |
316 // We expect this exception. | |
317 } | |
318 | |
319 builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.FOO); | |
320 builder.addRepeatedNestedEnum(TestAllTypes.NestedEnum.BAR); | |
321 try { | |
322 builder.setRepeatedNestedEnum(1, null); | |
323 fail("Exception was not thrown"); | |
324 } catch (NullPointerException e) { | |
325 // We expect this exception. | |
326 } | |
327 } | |
328 | |
329 public void testRepeatedAppend() throws Exception { | |
330 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
331 | |
332 builder.addAllRepeatedInt32(Arrays.asList(1, 2, 3, 4)); | |
333 builder.addAllRepeatedForeignEnum(Arrays.asList(ForeignEnum.FOREIGN_BAZ)); | |
334 | |
335 ForeignMessage foreignMessage = | |
336 ForeignMessage.newBuilder().setC(12).build(); | |
337 builder.addAllRepeatedForeignMessage(Arrays.asList(foreignMessage)); | |
338 | |
339 TestAllTypes message = builder.build(); | |
340 assertEquals(message.getRepeatedInt32List(), Arrays.asList(1, 2, 3, 4)); | |
341 assertEquals(message.getRepeatedForeignEnumList(), | |
342 Arrays.asList(ForeignEnum.FOREIGN_BAZ)); | |
343 assertEquals(1, message.getRepeatedForeignMessageCount()); | |
344 assertEquals(12, message.getRepeatedForeignMessage(0).getC()); | |
345 } | |
346 | |
347 public void testRepeatedAppendRejectsNull() throws Exception { | |
348 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
349 | |
350 ForeignMessage foreignMessage = | |
351 ForeignMessage.newBuilder().setC(12).build(); | |
352 try { | |
353 builder.addAllRepeatedForeignMessage( | |
354 Arrays.asList(foreignMessage, (ForeignMessage) null)); | |
355 fail("Exception was not thrown"); | |
356 } catch (NullPointerException e) { | |
357 // We expect this exception. | |
358 } | |
359 | |
360 try { | |
361 builder.addAllRepeatedForeignEnum( | |
362 Arrays.asList(ForeignEnum.FOREIGN_BAZ, null)); | |
363 fail("Exception was not thrown"); | |
364 } catch (NullPointerException e) { | |
365 // We expect this exception. | |
366 } | |
367 | |
368 try { | |
369 builder.addAllRepeatedString(Arrays.asList("one", null)); | |
370 fail("Exception was not thrown"); | |
371 } catch (NullPointerException e) { | |
372 // We expect this exception. | |
373 } | |
374 | |
375 try { | |
376 builder.addAllRepeatedBytes(Arrays.asList(TestUtil.toBytes("one"), null)); | |
377 fail("Exception was not thrown"); | |
378 } catch (NullPointerException e) { | |
379 // We expect this exception. | |
380 } | |
381 } | |
382 | |
383 public void testSettingForeignMessageUsingBuilder() throws Exception { | |
384 TestAllTypes message = TestAllTypes.newBuilder() | |
385 // Pass builder for foreign message instance. | |
386 .setOptionalForeignMessage(ForeignMessage.newBuilder().setC(123)) | |
387 .build(); | |
388 TestAllTypes expectedMessage = TestAllTypes.newBuilder() | |
389 // Create expected version passing foreign message instance explicitly. | |
390 .setOptionalForeignMessage( | |
391 ForeignMessage.newBuilder().setC(123).build()) | |
392 .build(); | |
393 // TODO(ngd): Upgrade to using real #equals method once implemented | |
394 assertEquals(expectedMessage.toString(), message.toString()); | |
395 } | |
396 | |
397 public void testSettingRepeatedForeignMessageUsingBuilder() throws Exception { | |
398 TestAllTypes message = TestAllTypes.newBuilder() | |
399 // Pass builder for foreign message instance. | |
400 .addRepeatedForeignMessage(ForeignMessage.newBuilder().setC(456)) | |
401 .build(); | |
402 TestAllTypes expectedMessage = TestAllTypes.newBuilder() | |
403 // Create expected version passing foreign message instance explicitly. | |
404 .addRepeatedForeignMessage( | |
405 ForeignMessage.newBuilder().setC(456).build()) | |
406 .build(); | |
407 assertEquals(expectedMessage.toString(), message.toString()); | |
408 } | |
409 | |
410 public void testDefaults() throws Exception { | |
411 TestUtil.assertClear(TestAllTypes.getDefaultInstance()); | |
412 TestUtil.assertClear(TestAllTypes.newBuilder().build()); | |
413 | |
414 TestExtremeDefaultValues message = | |
415 TestExtremeDefaultValues.getDefaultInstance(); | |
416 assertEquals("\u1234", message.getUtf8String()); | |
417 assertEquals(Double.POSITIVE_INFINITY, message.getInfDouble()); | |
418 assertEquals(Double.NEGATIVE_INFINITY, message.getNegInfDouble()); | |
419 assertTrue(Double.isNaN(message.getNanDouble())); | |
420 assertEquals(Float.POSITIVE_INFINITY, message.getInfFloat()); | |
421 assertEquals(Float.NEGATIVE_INFINITY, message.getNegInfFloat()); | |
422 assertTrue(Float.isNaN(message.getNanFloat())); | |
423 assertEquals("? ? ?? ?? ??? ??/ ??-", message.getCppTrigraph()); | |
424 } | |
425 | |
426 public void testClear() throws Exception { | |
427 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
428 TestUtil.assertClear(builder); | |
429 TestUtil.setAllFields(builder); | |
430 builder.clear(); | |
431 TestUtil.assertClear(builder); | |
432 } | |
433 | |
434 public void testReflectionGetters() throws Exception { | |
435 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
436 TestUtil.setAllFields(builder); | |
437 reflectionTester.assertAllFieldsSetViaReflection(builder); | |
438 | |
439 TestAllTypes message = builder.build(); | |
440 reflectionTester.assertAllFieldsSetViaReflection(message); | |
441 } | |
442 | |
443 public void testReflectionSetters() throws Exception { | |
444 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
445 reflectionTester.setAllFieldsViaReflection(builder); | |
446 TestUtil.assertAllFieldsSet(builder); | |
447 | |
448 TestAllTypes message = builder.build(); | |
449 TestUtil.assertAllFieldsSet(message); | |
450 } | |
451 | |
452 public void testReflectionSettersRejectNull() throws Exception { | |
453 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
454 reflectionTester.assertReflectionSettersRejectNull(builder); | |
455 } | |
456 | |
457 public void testReflectionRepeatedSetters() throws Exception { | |
458 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
459 reflectionTester.setAllFieldsViaReflection(builder); | |
460 reflectionTester.modifyRepeatedFieldsViaReflection(builder); | |
461 TestUtil.assertRepeatedFieldsModified(builder); | |
462 | |
463 TestAllTypes message = builder.build(); | |
464 TestUtil.assertRepeatedFieldsModified(message); | |
465 } | |
466 | |
467 public void testReflectionRepeatedSettersRejectNull() throws Exception { | |
468 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
469 reflectionTester.assertReflectionRepeatedSettersRejectNull(builder); | |
470 } | |
471 | |
472 public void testReflectionDefaults() throws Exception { | |
473 reflectionTester.assertClearViaReflection( | |
474 TestAllTypes.getDefaultInstance()); | |
475 reflectionTester.assertClearViaReflection( | |
476 TestAllTypes.newBuilder().build()); | |
477 } | |
478 | |
479 public void testEnumInterface() throws Exception { | |
480 assertTrue(TestAllTypes.getDefaultInstance().getDefaultNestedEnum() | |
481 instanceof ProtocolMessageEnum); | |
482 } | |
483 | |
484 public void testEnumMap() throws Exception { | |
485 Internal.EnumLiteMap<ForeignEnum> map = ForeignEnum.internalGetValueMap(); | |
486 | |
487 for (ForeignEnum value : ForeignEnum.values()) { | |
488 assertEquals(value, map.findValueByNumber(value.getNumber())); | |
489 } | |
490 | |
491 assertTrue(map.findValueByNumber(12345) == null); | |
492 } | |
493 | |
494 public void testParsePackedToUnpacked() throws Exception { | |
495 TestUnpackedTypes.Builder builder = TestUnpackedTypes.newBuilder(); | |
496 TestUnpackedTypes message = | |
497 builder.mergeFrom(TestUtil.getPackedSet().toByteString()).build(); | |
498 TestUtil.assertUnpackedFieldsSet(message); | |
499 } | |
500 | |
501 public void testParseUnpackedToPacked() throws Exception { | |
502 TestPackedTypes.Builder builder = TestPackedTypes.newBuilder(); | |
503 TestPackedTypes message = | |
504 builder.mergeFrom(TestUtil.getUnpackedSet().toByteString()).build(); | |
505 TestUtil.assertPackedFieldsSet(message); | |
506 } | |
507 | |
508 // ================================================================= | |
509 // Extensions. | |
510 | |
511 TestUtil.ReflectionTester extensionsReflectionTester = | |
512 new TestUtil.ReflectionTester(TestAllExtensions.getDescriptor(), | |
513 TestUtil.getExtensionRegistry()); | |
514 | |
515 public void testExtensionMessageOrBuilder() throws Exception { | |
516 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); | |
517 TestUtil.setAllExtensions(builder); | |
518 TestAllExtensions message = builder.build(); | |
519 TestUtil.assertAllExtensionsSet(message); | |
520 } | |
521 | |
522 public void testExtensionRepeatedSetters() throws Exception { | |
523 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); | |
524 TestUtil.setAllExtensions(builder); | |
525 TestUtil.modifyRepeatedExtensions(builder); | |
526 TestAllExtensions message = builder.build(); | |
527 TestUtil.assertRepeatedExtensionsModified(message); | |
528 } | |
529 | |
530 public void testExtensionDefaults() throws Exception { | |
531 TestUtil.assertExtensionsClear(TestAllExtensions.getDefaultInstance()); | |
532 TestUtil.assertExtensionsClear(TestAllExtensions.newBuilder().build()); | |
533 } | |
534 | |
535 public void testExtensionReflectionGetters() throws Exception { | |
536 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); | |
537 TestUtil.setAllExtensions(builder); | |
538 extensionsReflectionTester.assertAllFieldsSetViaReflection(builder); | |
539 | |
540 TestAllExtensions message = builder.build(); | |
541 extensionsReflectionTester.assertAllFieldsSetViaReflection(message); | |
542 } | |
543 | |
544 public void testExtensionReflectionSetters() throws Exception { | |
545 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); | |
546 extensionsReflectionTester.setAllFieldsViaReflection(builder); | |
547 TestUtil.assertAllExtensionsSet(builder); | |
548 | |
549 TestAllExtensions message = builder.build(); | |
550 TestUtil.assertAllExtensionsSet(message); | |
551 } | |
552 | |
553 public void testExtensionReflectionSettersRejectNull() throws Exception { | |
554 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); | |
555 extensionsReflectionTester.assertReflectionSettersRejectNull(builder); | |
556 } | |
557 | |
558 public void testExtensionReflectionRepeatedSetters() throws Exception { | |
559 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); | |
560 extensionsReflectionTester.setAllFieldsViaReflection(builder); | |
561 extensionsReflectionTester.modifyRepeatedFieldsViaReflection(builder); | |
562 TestUtil.assertRepeatedExtensionsModified(builder); | |
563 | |
564 TestAllExtensions message = builder.build(); | |
565 TestUtil.assertRepeatedExtensionsModified(message); | |
566 } | |
567 | |
568 public void testExtensionReflectionRepeatedSettersRejectNull() | |
569 throws Exception { | |
570 TestAllExtensions.Builder builder = TestAllExtensions.newBuilder(); | |
571 extensionsReflectionTester.assertReflectionRepeatedSettersRejectNull( | |
572 builder); | |
573 } | |
574 | |
575 public void testExtensionReflectionDefaults() throws Exception { | |
576 extensionsReflectionTester.assertClearViaReflection( | |
577 TestAllExtensions.getDefaultInstance()); | |
578 extensionsReflectionTester.assertClearViaReflection( | |
579 TestAllExtensions.newBuilder().build()); | |
580 } | |
581 | |
582 public void testClearExtension() throws Exception { | |
583 // clearExtension() is not actually used in TestUtil, so try it manually. | |
584 assertFalse( | |
585 TestAllExtensions.newBuilder() | |
586 .setExtension(UnittestProto.optionalInt32Extension, 1) | |
587 .clearExtension(UnittestProto.optionalInt32Extension) | |
588 .hasExtension(UnittestProto.optionalInt32Extension)); | |
589 assertEquals(0, | |
590 TestAllExtensions.newBuilder() | |
591 .addExtension(UnittestProto.repeatedInt32Extension, 1) | |
592 .clearExtension(UnittestProto.repeatedInt32Extension) | |
593 .getExtensionCount(UnittestProto.repeatedInt32Extension)); | |
594 } | |
595 | |
596 public void testExtensionCopy() throws Exception { | |
597 TestAllExtensions original = TestUtil.getAllExtensionsSet(); | |
598 TestAllExtensions copy = TestAllExtensions.newBuilder(original).build(); | |
599 TestUtil.assertAllExtensionsSet(copy); | |
600 } | |
601 | |
602 public void testExtensionMergeFrom() throws Exception { | |
603 TestAllExtensions original = | |
604 TestAllExtensions.newBuilder() | |
605 .setExtension(UnittestProto.optionalInt32Extension, 1).build(); | |
606 TestAllExtensions merged = | |
607 TestAllExtensions.newBuilder().mergeFrom(original).build(); | |
608 assertTrue(merged.hasExtension(UnittestProto.optionalInt32Extension)); | |
609 assertEquals( | |
610 1, (int) merged.getExtension(UnittestProto.optionalInt32Extension)); | |
611 } | |
612 | |
613 // ================================================================= | |
614 // multiple_files_test | |
615 | |
616 public void testMultipleFilesOption() throws Exception { | |
617 // We mostly just want to check that things compile. | |
618 MessageWithNoOuter message = | |
619 MessageWithNoOuter.newBuilder() | |
620 .setNested(MessageWithNoOuter.NestedMessage.newBuilder().setI(1)) | |
621 .addForeign(TestAllTypes.newBuilder().setOptionalInt32(1)) | |
622 .setNestedEnum(MessageWithNoOuter.NestedEnum.BAZ) | |
623 .setForeignEnum(EnumWithNoOuter.BAR) | |
624 .build(); | |
625 assertEquals(message, MessageWithNoOuter.parseFrom(message.toByteString())); | |
626 | |
627 assertEquals(MultipleFilesTestProto.getDescriptor(), | |
628 MessageWithNoOuter.getDescriptor().getFile()); | |
629 | |
630 Descriptors.FieldDescriptor field = | |
631 MessageWithNoOuter.getDescriptor().findFieldByName("foreign_enum"); | |
632 assertEquals(EnumWithNoOuter.BAR.getValueDescriptor(), | |
633 message.getField(field)); | |
634 | |
635 assertEquals(MultipleFilesTestProto.getDescriptor(), | |
636 ServiceWithNoOuter.getDescriptor().getFile()); | |
637 | |
638 assertFalse( | |
639 TestAllExtensions.getDefaultInstance().hasExtension( | |
640 MultipleFilesTestProto.extensionWithOuter)); | |
641 } | |
642 | |
643 public void testOptionalFieldWithRequiredSubfieldsOptimizedForSize() | |
644 throws Exception { | |
645 TestOptionalOptimizedForSize message = | |
646 TestOptionalOptimizedForSize.getDefaultInstance(); | |
647 assertTrue(message.isInitialized()); | |
648 | |
649 message = TestOptionalOptimizedForSize.newBuilder().setO( | |
650 TestRequiredOptimizedForSize.newBuilder().buildPartial() | |
651 ).buildPartial(); | |
652 assertFalse(message.isInitialized()); | |
653 | |
654 message = TestOptionalOptimizedForSize.newBuilder().setO( | |
655 TestRequiredOptimizedForSize.newBuilder().setX(5).buildPartial() | |
656 ).buildPartial(); | |
657 assertTrue(message.isInitialized()); | |
658 } | |
659 | |
660 public void testUninitializedExtensionInOptimizedForSize() | |
661 throws Exception { | |
662 TestOptimizedForSize.Builder builder = TestOptimizedForSize.newBuilder(); | |
663 builder.setExtension(TestOptimizedForSize.testExtension2, | |
664 TestRequiredOptimizedForSize.newBuilder().buildPartial()); | |
665 assertFalse(builder.isInitialized()); | |
666 assertFalse(builder.buildPartial().isInitialized()); | |
667 | |
668 builder = TestOptimizedForSize.newBuilder(); | |
669 builder.setExtension(TestOptimizedForSize.testExtension2, | |
670 TestRequiredOptimizedForSize.newBuilder().setX(10).buildPartial()); | |
671 assertTrue(builder.isInitialized()); | |
672 assertTrue(builder.buildPartial().isInitialized()); | |
673 } | |
674 | |
675 public void testToBuilder() throws Exception { | |
676 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
677 TestUtil.setAllFields(builder); | |
678 TestAllTypes message = builder.build(); | |
679 TestUtil.assertAllFieldsSet(message); | |
680 TestUtil.assertAllFieldsSet(message.toBuilder().build()); | |
681 } | |
682 | |
683 public void testFieldConstantValues() throws Exception { | |
684 assertEquals(TestAllTypes.NestedMessage.BB_FIELD_NUMBER, 1); | |
685 assertEquals(TestAllTypes.OPTIONAL_INT32_FIELD_NUMBER, 1); | |
686 assertEquals(TestAllTypes.OPTIONALGROUP_FIELD_NUMBER, 16); | |
687 assertEquals(TestAllTypes.OPTIONAL_NESTED_MESSAGE_FIELD_NUMBER, 18); | |
688 assertEquals(TestAllTypes.OPTIONAL_NESTED_ENUM_FIELD_NUMBER, 21); | |
689 assertEquals(TestAllTypes.REPEATED_INT32_FIELD_NUMBER, 31); | |
690 assertEquals(TestAllTypes.REPEATEDGROUP_FIELD_NUMBER, 46); | |
691 assertEquals(TestAllTypes.REPEATED_NESTED_MESSAGE_FIELD_NUMBER, 48); | |
692 assertEquals(TestAllTypes.REPEATED_NESTED_ENUM_FIELD_NUMBER, 51); | |
693 } | |
694 | |
695 public void testExtensionConstantValues() throws Exception { | |
696 assertEquals(UnittestProto.TestRequired.SINGLE_FIELD_NUMBER, 1000); | |
697 assertEquals(UnittestProto.TestRequired.MULTI_FIELD_NUMBER, 1001); | |
698 assertEquals(UnittestProto.OPTIONAL_INT32_EXTENSION_FIELD_NUMBER, 1); | |
699 assertEquals(UnittestProto.OPTIONALGROUP_EXTENSION_FIELD_NUMBER, 16); | |
700 assertEquals( | |
701 UnittestProto.OPTIONAL_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 18); | |
702 assertEquals(UnittestProto.OPTIONAL_NESTED_ENUM_EXTENSION_FIELD_NUMBER, 21); | |
703 assertEquals(UnittestProto.REPEATED_INT32_EXTENSION_FIELD_NUMBER, 31); | |
704 assertEquals(UnittestProto.REPEATEDGROUP_EXTENSION_FIELD_NUMBER, 46); | |
705 assertEquals( | |
706 UnittestProto.REPEATED_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER, 48); | |
707 assertEquals(UnittestProto.REPEATED_NESTED_ENUM_EXTENSION_FIELD_NUMBER, 51); | |
708 } | |
709 | |
710 public void testRecursiveMessageDefaultInstance() throws Exception { | |
711 UnittestProto.TestRecursiveMessage message = | |
712 UnittestProto.TestRecursiveMessage.getDefaultInstance(); | |
713 assertTrue(message != null); | |
714 assertTrue(message.getA() != null); | |
715 assertTrue(message.getA() == message); | |
716 } | |
717 | |
718 public void testSerialize() throws Exception { | |
719 ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |
720 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
721 TestUtil.setAllFields(builder); | |
722 TestAllTypes expected = builder.build(); | |
723 ObjectOutputStream out = new ObjectOutputStream(baos); | |
724 try { | |
725 out.writeObject(expected); | |
726 } finally { | |
727 out.close(); | |
728 } | |
729 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); | |
730 ObjectInputStream in = new ObjectInputStream(bais); | |
731 TestAllTypes actual = (TestAllTypes) in.readObject(); | |
732 assertEquals(expected, actual); | |
733 } | |
734 | |
735 public void testSerializePartial() throws Exception { | |
736 ByteArrayOutputStream baos = new ByteArrayOutputStream(); | |
737 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
738 TestAllTypes expected = builder.buildPartial(); | |
739 ObjectOutputStream out = new ObjectOutputStream(baos); | |
740 try { | |
741 out.writeObject(expected); | |
742 } finally { | |
743 out.close(); | |
744 } | |
745 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); | |
746 ObjectInputStream in = new ObjectInputStream(bais); | |
747 TestAllTypes actual = (TestAllTypes) in.readObject(); | |
748 assertEquals(expected, actual); | |
749 } | |
750 | |
751 public void testEnumValues() { | |
752 assertEquals( | |
753 TestAllTypes.NestedEnum.BAR.getNumber(), | |
754 TestAllTypes.NestedEnum.BAR_VALUE); | |
755 assertEquals( | |
756 TestAllTypes.NestedEnum.BAZ.getNumber(), | |
757 TestAllTypes.NestedEnum.BAZ_VALUE); | |
758 assertEquals( | |
759 TestAllTypes.NestedEnum.FOO.getNumber(), | |
760 TestAllTypes.NestedEnum.FOO_VALUE); | |
761 } | |
762 | |
763 public void testNonNestedExtensionInitialization() { | |
764 assertTrue(NonNestedExtension.nonNestedExtension | |
765 .getMessageDefaultInstance() instanceof MyNonNestedExtension); | |
766 assertEquals("nonNestedExtension", | |
767 NonNestedExtension.nonNestedExtension.getDescriptor().getName()
); | |
768 } | |
769 | |
770 public void testNestedExtensionInitialization() { | |
771 assertTrue(MyNestedExtension.recursiveExtension.getMessageDefaultInstance() | |
772 instanceof MessageToBeExtended); | |
773 assertEquals("recursiveExtension", | |
774 MyNestedExtension.recursiveExtension.getDescriptor().getName())
; | |
775 } | |
776 | |
777 | |
778 public void testBaseMessageOrBuilder() { | |
779 // Mostly just makes sure the base interface exists and has some methods. | |
780 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
781 TestAllTypes message = builder.buildPartial(); | |
782 TestAllTypesOrBuilder builderAsInterface = (TestAllTypesOrBuilder) builder; | |
783 TestAllTypesOrBuilder messageAsInterface = (TestAllTypesOrBuilder) message; | |
784 | |
785 assertEquals( | |
786 messageAsInterface.getDefaultBool(), | |
787 messageAsInterface.getDefaultBool()); | |
788 assertEquals( | |
789 messageAsInterface.getOptionalDouble(), | |
790 messageAsInterface.getOptionalDouble()); | |
791 } | |
792 | |
793 public void testMessageOrBuilderGetters() { | |
794 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
795 | |
796 // single fields | |
797 assertSame(ForeignMessage.getDefaultInstance(), | |
798 builder.getOptionalForeignMessageOrBuilder()); | |
799 ForeignMessage.Builder subBuilder = | |
800 builder.getOptionalForeignMessageBuilder(); | |
801 assertSame(subBuilder, builder.getOptionalForeignMessageOrBuilder()); | |
802 | |
803 // repeated fields | |
804 ForeignMessage m0 = ForeignMessage.newBuilder().buildPartial(); | |
805 ForeignMessage m1 = ForeignMessage.newBuilder().buildPartial(); | |
806 ForeignMessage m2 = ForeignMessage.newBuilder().buildPartial(); | |
807 builder.addRepeatedForeignMessage(m0); | |
808 builder.addRepeatedForeignMessage(m1); | |
809 builder.addRepeatedForeignMessage(m2); | |
810 assertSame(m0, builder.getRepeatedForeignMessageOrBuilder(0)); | |
811 assertSame(m1, builder.getRepeatedForeignMessageOrBuilder(1)); | |
812 assertSame(m2, builder.getRepeatedForeignMessageOrBuilder(2)); | |
813 ForeignMessage.Builder b0 = builder.getRepeatedForeignMessageBuilder(0); | |
814 ForeignMessage.Builder b1 = builder.getRepeatedForeignMessageBuilder(1); | |
815 assertSame(b0, builder.getRepeatedForeignMessageOrBuilder(0)); | |
816 assertSame(b1, builder.getRepeatedForeignMessageOrBuilder(1)); | |
817 assertSame(m2, builder.getRepeatedForeignMessageOrBuilder(2)); | |
818 | |
819 List<? extends ForeignMessageOrBuilder> messageOrBuilderList = | |
820 builder.getRepeatedForeignMessageOrBuilderList(); | |
821 assertSame(b0, messageOrBuilderList.get(0)); | |
822 assertSame(b1, messageOrBuilderList.get(1)); | |
823 assertSame(m2, messageOrBuilderList.get(2)); | |
824 } | |
825 | |
826 public void testGetFieldBuilder() { | |
827 Descriptor descriptor = TestAllTypes.getDescriptor(); | |
828 | |
829 FieldDescriptor fieldDescriptor = | |
830 descriptor.findFieldByName("optional_nested_message"); | |
831 FieldDescriptor foreignFieldDescriptor = | |
832 descriptor.findFieldByName("optional_foreign_message"); | |
833 FieldDescriptor importFieldDescriptor = | |
834 descriptor.findFieldByName("optional_import_message"); | |
835 | |
836 // Mutate the message with new field builder | |
837 // Mutate nested message | |
838 TestAllTypes.Builder builder1 = TestAllTypes.newBuilder(); | |
839 Message.Builder fieldBuilder1 = builder1.newBuilderForField(fieldDescriptor) | |
840 .mergeFrom((Message) builder1.getField(fieldDescriptor)); | |
841 FieldDescriptor subFieldDescriptor1 = | |
842 fieldBuilder1.getDescriptorForType().findFieldByName("bb"); | |
843 fieldBuilder1.setField(subFieldDescriptor1, 1); | |
844 builder1.setField(fieldDescriptor, fieldBuilder1.build()); | |
845 | |
846 // Mutate foreign message | |
847 Message.Builder foreignFieldBuilder1 = builder1.newBuilderForField( | |
848 foreignFieldDescriptor) | |
849 .mergeFrom((Message) builder1.getField(foreignFieldDescriptor)); | |
850 FieldDescriptor subForeignFieldDescriptor1 = | |
851 foreignFieldBuilder1.getDescriptorForType().findFieldByName("c"); | |
852 foreignFieldBuilder1.setField(subForeignFieldDescriptor1, 2); | |
853 builder1.setField(foreignFieldDescriptor, foreignFieldBuilder1.build()); | |
854 | |
855 // Mutate import message | |
856 Message.Builder importFieldBuilder1 = builder1.newBuilderForField( | |
857 importFieldDescriptor) | |
858 .mergeFrom((Message) builder1.getField(importFieldDescriptor)); | |
859 FieldDescriptor subImportFieldDescriptor1 = | |
860 importFieldBuilder1.getDescriptorForType().findFieldByName("d"); | |
861 importFieldBuilder1.setField(subImportFieldDescriptor1, 3); | |
862 builder1.setField(importFieldDescriptor, importFieldBuilder1.build()); | |
863 | |
864 Message newMessage1 = builder1.build(); | |
865 | |
866 // Mutate the message with existing field builder | |
867 // Mutate nested message | |
868 TestAllTypes.Builder builder2 = TestAllTypes.newBuilder(); | |
869 Message.Builder fieldBuilder2 = builder2.getFieldBuilder(fieldDescriptor); | |
870 FieldDescriptor subFieldDescriptor2 = | |
871 fieldBuilder2.getDescriptorForType().findFieldByName("bb"); | |
872 fieldBuilder2.setField(subFieldDescriptor2, 1); | |
873 builder2.setField(fieldDescriptor, fieldBuilder2.build()); | |
874 | |
875 // Mutate foreign message | |
876 Message.Builder foreignFieldBuilder2 = builder2.newBuilderForField( | |
877 foreignFieldDescriptor) | |
878 .mergeFrom((Message) builder2.getField(foreignFieldDescriptor)); | |
879 FieldDescriptor subForeignFieldDescriptor2 = | |
880 foreignFieldBuilder2.getDescriptorForType().findFieldByName("c"); | |
881 foreignFieldBuilder2.setField(subForeignFieldDescriptor2, 2); | |
882 builder2.setField(foreignFieldDescriptor, foreignFieldBuilder2.build()); | |
883 | |
884 // Mutate import message | |
885 Message.Builder importFieldBuilder2 = builder2.newBuilderForField( | |
886 importFieldDescriptor) | |
887 .mergeFrom((Message) builder2.getField(importFieldDescriptor)); | |
888 FieldDescriptor subImportFieldDescriptor2 = | |
889 importFieldBuilder2.getDescriptorForType().findFieldByName("d"); | |
890 importFieldBuilder2.setField(subImportFieldDescriptor2, 3); | |
891 builder2.setField(importFieldDescriptor, importFieldBuilder2.build()); | |
892 | |
893 Message newMessage2 = builder2.build(); | |
894 | |
895 // These two messages should be equal. | |
896 assertEquals(newMessage1, newMessage2); | |
897 } | |
898 | |
899 public void testGetFieldBuilderWithInitializedValue() { | |
900 Descriptor descriptor = TestAllTypes.getDescriptor(); | |
901 FieldDescriptor fieldDescriptor = | |
902 descriptor.findFieldByName("optional_nested_message"); | |
903 | |
904 // Before setting field, builder is initialized by default value. | |
905 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
906 NestedMessage.Builder fieldBuilder = | |
907 (NestedMessage.Builder) builder.getFieldBuilder(fieldDescriptor); | |
908 assertEquals(0, fieldBuilder.getBb()); | |
909 | |
910 // Setting field value with new field builder instance. | |
911 builder = TestAllTypes.newBuilder(); | |
912 NestedMessage.Builder newFieldBuilder = | |
913 builder.getOptionalNestedMessageBuilder(); | |
914 newFieldBuilder.setBb(2); | |
915 // Then get the field builder instance by getFieldBuilder(). | |
916 fieldBuilder = | |
917 (NestedMessage.Builder) builder.getFieldBuilder(fieldDescriptor); | |
918 // It should contain new value. | |
919 assertEquals(2, fieldBuilder.getBb()); | |
920 // These two builder should be equal. | |
921 assertSame(fieldBuilder, newFieldBuilder); | |
922 } | |
923 | |
924 public void testGetFieldBuilderNotSupportedException() { | |
925 Descriptor descriptor = TestAllTypes.getDescriptor(); | |
926 TestAllTypes.Builder builder = TestAllTypes.newBuilder(); | |
927 try { | |
928 builder.getFieldBuilder(descriptor.findFieldByName("optional_int32")); | |
929 fail("Exception was not thrown"); | |
930 } catch (UnsupportedOperationException e) { | |
931 // We expect this exception. | |
932 } | |
933 try { | |
934 builder.getFieldBuilder( | |
935 descriptor.findFieldByName("optional_nested_enum")); | |
936 fail("Exception was not thrown"); | |
937 } catch (UnsupportedOperationException e) { | |
938 // We expect this exception. | |
939 } | |
940 try { | |
941 builder.getFieldBuilder(descriptor.findFieldByName("repeated_int32")); | |
942 fail("Exception was not thrown"); | |
943 } catch (UnsupportedOperationException e) { | |
944 // We expect this exception. | |
945 } | |
946 try { | |
947 builder.getFieldBuilder( | |
948 descriptor.findFieldByName("repeated_nested_enum")); | |
949 fail("Exception was not thrown"); | |
950 } catch (UnsupportedOperationException e) { | |
951 // We expect this exception. | |
952 } | |
953 try { | |
954 builder.getFieldBuilder( | |
955 descriptor.findFieldByName("repeated_nested_message")); | |
956 fail("Exception was not thrown"); | |
957 } catch (UnsupportedOperationException e) { | |
958 // We expect this exception. | |
959 } | |
960 } | |
961 } | |
OLD | NEW |