protobuf 3.5.5 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGES.md +16 -0
  4. data/lib/protobuf/cli.rb +3 -1
  5. data/lib/protobuf/enum.rb +1 -0
  6. data/lib/protobuf/field/base_field.rb +1 -0
  7. data/lib/protobuf/field/varint_field.rb +16 -1
  8. data/lib/protobuf/message.rb +6 -7
  9. data/lib/protobuf/message/serialization.rb +0 -4
  10. data/lib/protobuf/rpc/connectors/ping.rb +87 -0
  11. data/lib/protobuf/rpc/connectors/zmq.rb +5 -16
  12. data/lib/protobuf/version.rb +1 -1
  13. data/spec/benchmark/tasks.rb +2 -1
  14. data/spec/encoding/all_types_spec.rb +28 -27
  15. data/spec/encoding/extreme_values_spec.rb +0 -0
  16. data/spec/functional/class_inheritance_spec.rb +1 -1
  17. data/spec/functional/socket_server_spec.rb +1 -1
  18. data/spec/functional/zmq_server_spec.rb +1 -1
  19. data/spec/lib/protobuf/field_spec.rb +1 -1
  20. data/spec/lib/protobuf/generators/base_spec.rb +2 -0
  21. data/spec/lib/protobuf/message_spec.rb +6 -4
  22. data/spec/lib/protobuf/rpc/client_spec.rb +1 -1
  23. data/spec/lib/protobuf/rpc/connectors/ping_spec.rb +69 -0
  24. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +6 -13
  25. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +1 -1
  26. data/spec/lib/protobuf/rpc/service_spec.rb +1 -1
  27. data/spec/lib/protobuf_spec.rb +1 -1
  28. data/spec/spec_helper.rb +5 -7
  29. data/spec/support/{test → protos}/all_types.data.bin +0 -0
  30. data/spec/support/{test → protos}/all_types.data.txt +0 -0
  31. data/spec/support/{test → protos}/enum.pb.rb +1 -1
  32. data/spec/support/{test → protos}/enum.proto +3 -1
  33. data/spec/support/{test → protos}/extreme_values.data.bin +0 -0
  34. data/spec/support/protos/google_unittest.bin +0 -0
  35. data/spec/support/{test → protos}/google_unittest.pb.rb +318 -77
  36. data/spec/support/{test → protos}/google_unittest.proto +230 -66
  37. data/spec/support/{test → protos}/google_unittest_import.pb.rb +13 -6
  38. data/spec/support/{test → protos}/google_unittest_import.proto +19 -10
  39. data/spec/support/protos/google_unittest_import_public.pb.rb +24 -0
  40. data/spec/support/{test → protos}/google_unittest_import_public.proto +8 -5
  41. data/spec/support/{test → protos}/multi_field_extensions.pb.rb +0 -0
  42. data/spec/support/{test → protos}/multi_field_extensions.proto +2 -0
  43. data/spec/support/{test → protos}/resource.pb.rb +0 -0
  44. data/spec/support/{test → protos}/resource.proto +2 -0
  45. data/spec/support/{test/resource_service.rb → resource_service.rb} +1 -1
  46. data/spec/support/server.rb +2 -1
  47. metadata +111 -160
  48. data/spec/data/data.bin +0 -3
  49. data/spec/data/types.bin +0 -0
  50. data/spec/support/test/defaults.pb.rb +0 -27
  51. data/spec/support/test/defaults.proto +0 -9
  52. data/spec/support/test/extended.pb.rb +0 -24
  53. data/spec/support/test/extended.proto +0 -10
  54. data/spec/support/test/google_unittest_import_public.pb.rb +0 -10
@@ -1,6 +1,6 @@
1
1
  // Protocol Buffers - Google's data interchange format
2
2
  // Copyright 2008 Google Inc. All rights reserved.
3
- // http://code.google.com/p/protobuf/
3
+ // https://developers.google.com/protocol-buffers/
4
4
  //
5
5
  // Redistribution and use in source and binary forms, with or without
6
6
  // modification, are permitted provided that the following conditions are
@@ -34,12 +34,28 @@
34
34
  //
35
35
  // A proto file we will use for unit testing.
36
36
 
37
- import "test/google_unittest_import.proto";
37
+ syntax = "proto2";
38
+
39
+ // Some generic_services option(s) added automatically.
40
+ // See: http://go/proto2-generic-services-default
41
+ option cc_generic_services = true; // auto-added
42
+ option java_generic_services = true; // auto-added
43
+ option py_generic_services = true; // auto-added
44
+ option cc_enable_arenas = true;
45
+
46
+ import "protos/google_unittest_import.proto";
38
47
 
39
48
  // We don't put this in a package within proto2 because we need to make sure
40
49
  // that the generated code doesn't depend on being in the proto2 namespace.
41
- // In test_util.h we do "using namespace unittest = google_unittest".
42
- package googleUnittest;
50
+ // In test_util.h we do "using namespace unittest = protobuf_unittest".
51
+ package protobuf_unittest;
52
+
53
+ // Protos optimized for SPEED use a strict superset of the generated code
54
+ // of equivalent ones optimized for CODE_SIZE, so we should optimize all our
55
+ // tests for speed unless explicitly testing code size optimization.
56
+ option optimize_for = SPEED;
57
+
58
+ option java_outer_classname = "UnittestProto";
43
59
 
44
60
  // This proto includes every type of field in both singular and repeated
45
61
  // forms.
@@ -55,6 +71,7 @@ message TestAllTypes {
55
71
  FOO = 1;
56
72
  BAR = 2;
57
73
  BAZ = 3;
74
+ NEG = -1; // Intentionally negative.
58
75
  }
59
76
 
60
77
  // Singular
@@ -74,27 +91,26 @@ message TestAllTypes {
74
91
  optional string optional_string = 14;
75
92
  optional bytes optional_bytes = 15;
76
93
 
77
- // TODO: Support groups
78
- //optional group OptionalGroup = 16 {
79
- // optional int32 a = 17;
80
- //}
94
+ optional group OptionalGroup = 16 {
95
+ optional int32 a = 17;
96
+ }
81
97
 
82
98
  optional NestedMessage optional_nested_message = 18;
83
99
  optional ForeignMessage optional_foreign_message = 19;
84
- optional googleUnittestImport.ImportMessage optional_import_message = 20;
100
+ optional protobuf_unittest_import.ImportMessage optional_import_message = 20;
85
101
 
86
102
  optional NestedEnum optional_nested_enum = 21;
87
103
  optional ForeignEnum optional_foreign_enum = 22;
88
- optional googleUnittestImport.ImportEnum optional_import_enum = 23;
104
+ optional protobuf_unittest_import.ImportEnum optional_import_enum = 23;
89
105
 
90
106
  optional string optional_string_piece = 24 [ctype=STRING_PIECE];
91
107
  optional string optional_cord = 25 [ctype=CORD];
92
108
 
93
109
  // Defined in unittest_import_public.proto
94
- optional googleUnittestImport.PublicImportMessage
110
+ optional protobuf_unittest_import.PublicImportMessage
95
111
  optional_public_import_message = 26;
96
112
 
97
- optional NestedMessage optional_lazy_message = 27; // [lazy=true];
113
+ optional NestedMessage optional_lazy_message = 27 [lazy=true];
98
114
 
99
115
  // Repeated
100
116
  repeated int32 repeated_int32 = 31;
@@ -113,23 +129,22 @@ message TestAllTypes {
113
129
  repeated string repeated_string = 44;
114
130
  repeated bytes repeated_bytes = 45;
115
131
 
116
- // TODO: Support groups
117
- //repeated group RepeatedGroup = 46 {
118
- // optional int32 a = 47;
119
- //}
132
+ repeated group RepeatedGroup = 46 {
133
+ optional int32 a = 47;
134
+ }
120
135
 
121
136
  repeated NestedMessage repeated_nested_message = 48;
122
137
  repeated ForeignMessage repeated_foreign_message = 49;
123
- repeated googleUnittestImport.ImportMessage repeated_import_message = 50;
138
+ repeated protobuf_unittest_import.ImportMessage repeated_import_message = 50;
124
139
 
125
140
  repeated NestedEnum repeated_nested_enum = 51;
126
141
  repeated ForeignEnum repeated_foreign_enum = 52;
127
- repeated googleUnittestImport.ImportEnum repeated_import_enum = 53;
142
+ repeated protobuf_unittest_import.ImportEnum repeated_import_enum = 53;
128
143
 
129
144
  repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
130
145
  repeated string repeated_cord = 55 [ctype=CORD];
131
146
 
132
- repeated NestedMessage repeated_lazy_message = 57; // [lazy=true];
147
+ repeated NestedMessage repeated_lazy_message = 57 [lazy=true];
133
148
 
134
149
  // Singular with defaults
135
150
  optional int32 default_int32 = 61 [default = 41 ];
@@ -150,11 +165,26 @@ message TestAllTypes {
150
165
 
151
166
  optional NestedEnum default_nested_enum = 81 [default = BAR ];
152
167
  optional ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
153
- optional googleUnittestImport.ImportEnum
168
+ optional protobuf_unittest_import.ImportEnum
154
169
  default_import_enum = 83 [default = IMPORT_BAR];
155
170
 
156
171
  optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
157
172
  optional string default_cord = 85 [ctype=CORD,default="123"];
173
+
174
+ // For oneof test
175
+ oneof oneof_field {
176
+ uint32 oneof_uint32 = 111;
177
+ NestedMessage oneof_nested_message = 112;
178
+ string oneof_string = 113;
179
+ bytes oneof_bytes = 114;
180
+ }
181
+ }
182
+
183
+ // This proto includes a recusively nested message.
184
+ message NestedTestAllTypes {
185
+ optional NestedTestAllTypes child = 1;
186
+ optional TestAllTypes payload = 2;
187
+ repeated NestedTestAllTypes repeated_child = 3;
158
188
  }
159
189
 
160
190
  message TestDeprecatedFields {
@@ -173,6 +203,11 @@ enum ForeignEnum {
173
203
  FOREIGN_BAZ = 6;
174
204
  }
175
205
 
206
+ message TestReservedFields {
207
+ reserved 2, 15, 9 to 11;
208
+ reserved "bar", "baz";
209
+ }
210
+
176
211
  message TestAllExtensions {
177
212
  extensions 1 to max;
178
213
  }
@@ -195,29 +230,28 @@ extend TestAllExtensions {
195
230
  optional string optional_string_extension = 14;
196
231
  optional bytes optional_bytes_extension = 15;
197
232
 
198
- // TODO: Support groups
199
- //optional group OptionalGroup_extension = 16 {
200
- // optional int32 a = 17;
201
- //}
233
+ optional group OptionalGroup_extension = 16 {
234
+ optional int32 a = 17;
235
+ }
202
236
 
203
237
  optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
204
238
  optional ForeignMessage optional_foreign_message_extension = 19;
205
- optional googleUnittestImport.ImportMessage
239
+ optional protobuf_unittest_import.ImportMessage
206
240
  optional_import_message_extension = 20;
207
241
 
208
242
  optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
209
243
  optional ForeignEnum optional_foreign_enum_extension = 22;
210
- optional googleUnittestImport.ImportEnum
244
+ optional protobuf_unittest_import.ImportEnum
211
245
  optional_import_enum_extension = 23;
212
246
 
213
247
  optional string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
214
248
  optional string optional_cord_extension = 25 [ctype=CORD];
215
249
 
216
- optional googleUnittestImport.PublicImportMessage
250
+ optional protobuf_unittest_import.PublicImportMessage
217
251
  optional_public_import_message_extension = 26;
218
252
 
219
253
  optional TestAllTypes.NestedMessage
220
- optional_lazy_message_extension = 27; // [lazy=true];
254
+ optional_lazy_message_extension = 27 [lazy=true];
221
255
 
222
256
  // Repeated
223
257
  repeated int32 repeated_int32_extension = 31;
@@ -236,26 +270,25 @@ extend TestAllExtensions {
236
270
  repeated string repeated_string_extension = 44;
237
271
  repeated bytes repeated_bytes_extension = 45;
238
272
 
239
- // TODO: Support groups
240
- //repeated group RepeatedGroup_extension = 46 {
241
- // optional int32 a = 47;
242
- //}
273
+ repeated group RepeatedGroup_extension = 46 {
274
+ optional int32 a = 47;
275
+ }
243
276
 
244
277
  repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
245
278
  repeated ForeignMessage repeated_foreign_message_extension = 49;
246
- repeated googleUnittestImport.ImportMessage
279
+ repeated protobuf_unittest_import.ImportMessage
247
280
  repeated_import_message_extension = 50;
248
281
 
249
282
  repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
250
283
  repeated ForeignEnum repeated_foreign_enum_extension = 52;
251
- repeated googleUnittestImport.ImportEnum
284
+ repeated protobuf_unittest_import.ImportEnum
252
285
  repeated_import_enum_extension = 53;
253
286
 
254
287
  repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
255
288
  repeated string repeated_cord_extension = 55 [ctype=CORD];
256
289
 
257
290
  repeated TestAllTypes.NestedMessage
258
- repeated_lazy_message_extension = 57; // [lazy=true];
291
+ repeated_lazy_message_extension = 57 [lazy=true];
259
292
 
260
293
  // Singular with defaults
261
294
  optional int32 default_int32_extension = 61 [default = 41 ];
@@ -278,12 +311,18 @@ extend TestAllExtensions {
278
311
  default_nested_enum_extension = 81 [default = BAR];
279
312
  optional ForeignEnum
280
313
  default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
281
- optional googleUnittestImport.ImportEnum
314
+ optional protobuf_unittest_import.ImportEnum
282
315
  default_import_enum_extension = 83 [default = IMPORT_BAR];
283
316
 
284
317
  optional string default_string_piece_extension = 84 [ctype=STRING_PIECE,
285
318
  default="abc"];
286
319
  optional string default_cord_extension = 85 [ctype=CORD, default="123"];
320
+
321
+ // For oneof test
322
+ optional uint32 oneof_uint32_extension = 111;
323
+ optional TestAllTypes.NestedMessage oneof_nested_message_extension = 112;
324
+ optional string oneof_string_extension = 113;
325
+ optional bytes oneof_bytes_extension = 114;
287
326
  }
288
327
 
289
328
  message TestNestedExtension {
@@ -291,6 +330,9 @@ message TestNestedExtension {
291
330
  // Check for bug where string extensions declared in tested scope did not
292
331
  // compile.
293
332
  optional string test = 1002 [default="test"];
333
+ // Used to test if generated extension name is correct when there are
334
+ // underscores.
335
+ optional string nested_string_extension = 1003;
294
336
  }
295
337
  }
296
338
 
@@ -395,22 +437,21 @@ message TestMutualRecursionB {
395
437
  }
396
438
 
397
439
  // Test that groups have disjoint field numbers from their siblings and
398
- // parents. This is NOT possible in proto1; only proto2. When attempting
440
+ // parents. This is NOT possible in proto1; only google.protobuf. When attempting
399
441
  // to compile with proto1, this will emit an error; so we only include it
400
- // in google_unittest_proto.
442
+ // in protobuf_unittest_proto.
401
443
  message TestDupFieldNumber { // NO_PROTO1
402
444
  optional int32 a = 1; // NO_PROTO1
403
- // TODO: Support groups
404
- //optional group Foo = 2 { optional int32 a = 1; } // NO_PROTO1
405
- //optional group Bar = 3 { optional int32 a = 1; } // NO_PROTO1
445
+ optional group Foo = 2 { optional int32 a = 1; } // NO_PROTO1
446
+ optional group Bar = 3 { optional int32 a = 1; } // NO_PROTO1
406
447
  } // NO_PROTO1
407
448
 
408
449
  // Additional messages for testing lazy fields.
409
450
  message TestEagerMessage {
410
- optional TestAllTypes sub_message = 1; // [lazy=false];
451
+ optional TestAllTypes sub_message = 1 [lazy=false];
411
452
  }
412
453
  message TestLazyMessage {
413
- optional TestAllTypes sub_message = 1; // [lazy=true];
454
+ optional TestAllTypes sub_message = 1 [lazy=true];
414
455
  }
415
456
 
416
457
  // Needed for a Python test.
@@ -424,15 +465,15 @@ message TestNestedMessageHasBits {
424
465
 
425
466
 
426
467
  // Test an enum that has multiple values with the same number.
427
- // TODO: update and test this when the new compiler is released
428
- // enum TestEnumWithDupValue {
429
- // option allow_alias = true;
430
- // FOO1 = 1;
431
- // BAR1 = 2;
432
- // BAZ = 3;
433
- // FOO2 = 1;
434
- // BAR2 = 2;
435
- // }
468
+ enum TestEnumWithDupValue {
469
+ option allow_alias = true;
470
+
471
+ FOO1 = 1;
472
+ BAR1 = 2;
473
+ BAZ = 3;
474
+ FOO2 = 1;
475
+ BAR2 = 2;
476
+ }
436
477
 
437
478
  // Test an enum with large, unordered values.
438
479
  enum TestSparseEnum {
@@ -472,6 +513,15 @@ message TestFieldOrderings {
472
513
  optional int64 my_int = 1;
473
514
  extensions 12 to 100;
474
515
  optional float my_float = 101;
516
+ message NestedMessage {
517
+ optional int64 oo = 2;
518
+ // The field name "b" fails to compile in proto1 because it conflicts with
519
+ // a local variable named "b" in one of the generated methods. Doh.
520
+ // This file needs to compile in proto1 to test backwards-compatibility.
521
+ optional int32 bb = 1;
522
+ }
523
+
524
+ optional NestedMessage optional_nested_message = 200;
475
525
  }
476
526
 
477
527
 
@@ -527,6 +577,7 @@ message TestExtremeDefaultValues {
527
577
  default="ab\000c"];
528
578
  optional string cord_with_zero = 26 [ctype=CORD,
529
579
  default="12\0003"];
580
+ optional string replacement_string = 27 [default="${unknown}"];
530
581
  }
531
582
 
532
583
  message SparseEnumMessage {
@@ -550,6 +601,100 @@ message MoreBytes {
550
601
  repeated bytes data = 1;
551
602
  }
552
603
 
604
+ // Test int32, uint32, int64, uint64, and bool are all compatible
605
+ message Int32Message {
606
+ optional int32 data = 1;
607
+ }
608
+
609
+ message Uint32Message {
610
+ optional uint32 data = 1;
611
+ }
612
+
613
+ message Int64Message {
614
+ optional int64 data = 1;
615
+ }
616
+
617
+ message Uint64Message {
618
+ optional uint64 data = 1;
619
+ }
620
+
621
+ message BoolMessage {
622
+ optional bool data = 1;
623
+ }
624
+
625
+ // Test oneofs.
626
+ message TestOneof {
627
+ oneof foo {
628
+ int32 foo_int = 1;
629
+ string foo_string = 2;
630
+ TestAllTypes foo_message = 3;
631
+ group FooGroup = 4 {
632
+ optional int32 a = 5;
633
+ optional string b = 6;
634
+ }
635
+ }
636
+ }
637
+
638
+ message TestOneofBackwardsCompatible {
639
+ optional int32 foo_int = 1;
640
+ optional string foo_string = 2;
641
+ optional TestAllTypes foo_message = 3;
642
+ optional group FooGroup = 4 {
643
+ optional int32 a = 5;
644
+ optional string b = 6;
645
+ }
646
+ }
647
+
648
+ message TestOneof2 {
649
+ oneof foo {
650
+ int32 foo_int = 1;
651
+ string foo_string = 2;
652
+ string foo_cord = 3 [ctype=CORD];
653
+ string foo_string_piece = 4 [ctype=STRING_PIECE];
654
+ bytes foo_bytes = 5;
655
+ NestedEnum foo_enum = 6;
656
+ NestedMessage foo_message = 7;
657
+ group FooGroup = 8 {
658
+ optional int32 a = 9;
659
+ optional string b = 10;
660
+ }
661
+ NestedMessage foo_lazy_message = 11 [lazy=true];
662
+ }
663
+
664
+ oneof bar {
665
+ int32 bar_int = 12 [default = 5];
666
+ string bar_string = 13 [default = "STRING"];
667
+ string bar_cord = 14 [ctype=CORD, default = "CORD"];
668
+ string bar_string_piece = 15 [ctype=STRING_PIECE, default = "SPIECE"];
669
+ bytes bar_bytes = 16 [default = "BYTES"];
670
+ NestedEnum bar_enum = 17 [default = BAR];
671
+ }
672
+
673
+ optional int32 baz_int = 18;
674
+ optional string baz_string = 19 [default = "BAZ"];
675
+
676
+ message NestedMessage {
677
+ optional int64 qux_int = 1;
678
+ repeated int32 corge_int = 2;
679
+ }
680
+
681
+ enum NestedEnum {
682
+ FOO = 1;
683
+ BAR = 2;
684
+ BAZ = 3;
685
+ }
686
+ }
687
+
688
+ message TestRequiredOneof {
689
+ oneof foo {
690
+ int32 foo_int = 1;
691
+ string foo_string = 2;
692
+ NestedMessage foo_message = 3;
693
+ }
694
+ message NestedMessage {
695
+ required double required_double = 1;
696
+ }
697
+ }
553
698
 
554
699
  // Test messages for packed fields
555
700
 
@@ -610,6 +755,27 @@ extend TestPackedExtensions {
610
755
  repeated ForeignEnum packed_enum_extension = 103 [packed = true];
611
756
  }
612
757
 
758
+ message TestUnpackedExtensions {
759
+ extensions 1 to max;
760
+ }
761
+
762
+ extend TestUnpackedExtensions {
763
+ repeated int32 unpacked_int32_extension = 90 [packed = false];
764
+ repeated int64 unpacked_int64_extension = 91 [packed = false];
765
+ repeated uint32 unpacked_uint32_extension = 92 [packed = false];
766
+ repeated uint64 unpacked_uint64_extension = 93 [packed = false];
767
+ repeated sint32 unpacked_sint32_extension = 94 [packed = false];
768
+ repeated sint64 unpacked_sint64_extension = 95 [packed = false];
769
+ repeated fixed32 unpacked_fixed32_extension = 96 [packed = false];
770
+ repeated fixed64 unpacked_fixed64_extension = 97 [packed = false];
771
+ repeated sfixed32 unpacked_sfixed32_extension = 98 [packed = false];
772
+ repeated sfixed64 unpacked_sfixed64_extension = 99 [packed = false];
773
+ repeated float unpacked_float_extension = 100 [packed = false];
774
+ repeated double unpacked_double_extension = 101 [packed = false];
775
+ repeated bool unpacked_bool_extension = 102 [packed = false];
776
+ repeated ForeignEnum unpacked_enum_extension = 103 [packed = false];
777
+ }
778
+
613
779
  // Used by ExtensionSetTest/DynamicExtensions. The test actually builds
614
780
  // a set of extensions to TestAllExtensions dynamically, based on the fields
615
781
  // of this message type.
@@ -663,26 +829,24 @@ message TestParsingMerge {
663
829
  repeated TestAllTypes field1 = 1;
664
830
  repeated TestAllTypes field2 = 2;
665
831
  repeated TestAllTypes field3 = 3;
666
- // TODO: Support groups
667
- //repeated group Group1 = 10 {
668
- // optional TestAllTypes field1 = 11;
669
- //}
670
- //repeated group Group2 = 20 {
671
- // optional TestAllTypes field1 = 21;
672
- //}
832
+ repeated group Group1 = 10 {
833
+ optional TestAllTypes field1 = 11;
834
+ }
835
+ repeated group Group2 = 20 {
836
+ optional TestAllTypes field1 = 21;
837
+ }
673
838
  repeated TestAllTypes ext1 = 1000;
674
839
  repeated TestAllTypes ext2 = 1001;
675
840
  }
676
841
  required TestAllTypes required_all_types = 1;
677
842
  optional TestAllTypes optional_all_types = 2;
678
843
  repeated TestAllTypes repeated_all_types = 3;
679
- // TODO: Support groups
680
- //optional group OptionalGroup = 10 {
681
- // optional TestAllTypes optional_group_all_types = 11;
682
- //}
683
- //repeated group RepeatedGroup = 20 {
684
- // optional TestAllTypes repeated_group_all_types = 21;
685
- //}
844
+ optional group OptionalGroup = 10 {
845
+ optional TestAllTypes optional_group_all_types = 11;
846
+ }
847
+ repeated group RepeatedGroup = 20 {
848
+ optional TestAllTypes repeated_group_all_types = 21;
849
+ }
686
850
  extensions 1000 to max;
687
851
  extend TestParsingMerge {
688
852
  optional TestAllTypes optional_ext = 1000;