• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Protocol Buffers - Google's data interchange format
2// Copyright 2008 Google Inc.  All rights reserved.
3// https://developers.google.com/protocol-buffers/
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// Author: kenton@google.com (Kenton Varda)
32//
33// This is like unittest.proto but with optimize_for = LITE_RUNTIME.
34
35syntax = "proto2";
36
37package protobuf_unittest;
38
39import "google/protobuf/unittest_import_lite.proto";
40
41option cc_enable_arenas = true;
42option optimize_for = LITE_RUNTIME;
43option java_package = "com.google.protobuf";
44
45// Same as TestAllTypes but with the lite runtime.
46message TestAllTypesLite {
47  message NestedMessage {
48    optional int32 bb = 1;
49    optional int64 cc = 2;
50  }
51
52  enum NestedEnum {
53    FOO = 1;
54    BAR = 2;
55    BAZ = 3;
56  }
57
58  // Singular
59  optional int32 optional_int32 = 1;
60  optional int64 optional_int64 = 2;
61  optional uint32 optional_uint32 = 3;
62  optional uint64 optional_uint64 = 4;
63  optional sint32 optional_sint32 = 5;
64  optional sint64 optional_sint64 = 6;
65  optional fixed32 optional_fixed32 = 7;
66  optional fixed64 optional_fixed64 = 8;
67  optional sfixed32 optional_sfixed32 = 9;
68  optional sfixed64 optional_sfixed64 = 10;
69  optional float optional_float = 11;
70  optional double optional_double = 12;
71  optional bool optional_bool = 13;
72  optional string optional_string = 14;
73  optional bytes optional_bytes = 15;
74
75  optional group OptionalGroup = 16 {
76    optional int32 a = 17;
77  }
78
79  optional NestedMessage optional_nested_message = 18;
80  optional ForeignMessageLite optional_foreign_message = 19;
81  optional protobuf_unittest_import.ImportMessageLite optional_import_message =
82      20;
83
84  optional NestedEnum optional_nested_enum = 21;
85  optional ForeignEnumLite optional_foreign_enum = 22;
86  optional protobuf_unittest_import.ImportEnumLite optional_import_enum = 23;
87
88  optional string optional_string_piece = 24 [ctype = STRING_PIECE];
89  optional string optional_cord = 25 [ctype = CORD];
90
91  // Defined in unittest_import_public.proto
92  optional protobuf_unittest_import.PublicImportMessageLite
93      optional_public_import_message = 26;
94
95  optional NestedMessage optional_lazy_message = 27 [lazy = true];
96
97  // Repeated
98  repeated int32 repeated_int32 = 31;
99  repeated int64 repeated_int64 = 32;
100  repeated uint32 repeated_uint32 = 33;
101  repeated uint64 repeated_uint64 = 34;
102  repeated sint32 repeated_sint32 = 35;
103  repeated sint64 repeated_sint64 = 36;
104  repeated fixed32 repeated_fixed32 = 37;
105  repeated fixed64 repeated_fixed64 = 38;
106  repeated sfixed32 repeated_sfixed32 = 39;
107  repeated sfixed64 repeated_sfixed64 = 40;
108  repeated float repeated_float = 41;
109  repeated double repeated_double = 42;
110  repeated bool repeated_bool = 43;
111  repeated string repeated_string = 44;
112  repeated bytes repeated_bytes = 45;
113
114  repeated group RepeatedGroup = 46 {
115    optional int32 a = 47;
116  }
117
118  repeated NestedMessage repeated_nested_message = 48;
119  repeated ForeignMessageLite repeated_foreign_message = 49;
120  repeated protobuf_unittest_import.ImportMessageLite repeated_import_message =
121      50;
122
123  repeated NestedEnum repeated_nested_enum = 51;
124  repeated ForeignEnumLite repeated_foreign_enum = 52;
125  repeated protobuf_unittest_import.ImportEnumLite repeated_import_enum = 53;
126
127  repeated string repeated_string_piece = 54 [ctype = STRING_PIECE];
128  repeated string repeated_cord = 55 [ctype = CORD];
129
130  repeated NestedMessage repeated_lazy_message = 57 [lazy = true];
131
132  // Singular with defaults
133  optional int32 default_int32 = 61 [default = 41];
134  optional int64 default_int64 = 62 [default = 42];
135  optional uint32 default_uint32 = 63 [default = 43];
136  optional uint64 default_uint64 = 64 [default = 44];
137  optional sint32 default_sint32 = 65 [default = -45];
138  optional sint64 default_sint64 = 66 [default = 46];
139  optional fixed32 default_fixed32 = 67 [default = 47];
140  optional fixed64 default_fixed64 = 68 [default = 48];
141  optional sfixed32 default_sfixed32 = 69 [default = 49];
142  optional sfixed64 default_sfixed64 = 70 [default = -50];
143  optional float default_float = 71 [default = 51.5];
144  optional double default_double = 72 [default = 52e3];
145  optional bool default_bool = 73 [default = true];
146  optional string default_string = 74 [default = "hello"];
147  optional bytes default_bytes = 75 [default = "world"];
148
149  optional NestedEnum default_nested_enum = 81 [default = BAR];
150  optional ForeignEnumLite default_foreign_enum = 82
151      [default = FOREIGN_LITE_BAR];
152  optional protobuf_unittest_import.ImportEnumLite default_import_enum = 83
153      [default = IMPORT_LITE_BAR];
154
155  optional string default_string_piece = 84
156      [ctype = STRING_PIECE, default = "abc"];
157  optional string default_cord = 85 [ctype = CORD, default = "123"];
158
159  // For oneof test
160  oneof oneof_field {
161    uint32 oneof_uint32 = 111;
162    NestedMessage oneof_nested_message = 112;
163    string oneof_string = 113;
164    bytes oneof_bytes = 114;
165    NestedMessage oneof_lazy_nested_message = 115 [lazy = true];
166  }
167
168  // Tests toString for non-repeated fields with a list suffix
169  optional int32 deceptively_named_list = 116;
170}
171
172message ForeignMessageLite {
173  optional int32 c = 1;
174}
175
176enum ForeignEnumLite {
177  FOREIGN_LITE_FOO = 4;
178  FOREIGN_LITE_BAZ = 6;
179  FOREIGN_LITE_BAR = 5;
180}
181
182message TestPackedTypesLite {
183  repeated int32 packed_int32 = 90 [packed = true];
184  repeated int64 packed_int64 = 91 [packed = true];
185  repeated uint32 packed_uint32 = 92 [packed = true];
186  repeated uint64 packed_uint64 = 93 [packed = true];
187  repeated sint32 packed_sint32 = 94 [packed = true];
188  repeated sint64 packed_sint64 = 95 [packed = true];
189  repeated fixed32 packed_fixed32 = 96 [packed = true];
190  repeated fixed64 packed_fixed64 = 97 [packed = true];
191  repeated sfixed32 packed_sfixed32 = 98 [packed = true];
192  repeated sfixed64 packed_sfixed64 = 99 [packed = true];
193  repeated float packed_float = 100 [packed = true];
194  repeated double packed_double = 101 [packed = true];
195  repeated bool packed_bool = 102 [packed = true];
196  repeated ForeignEnumLite packed_enum = 103 [packed = true];
197}
198
199message TestAllExtensionsLite {
200  extensions 1 to max;
201}
202
203extend TestAllExtensionsLite {
204  // Singular
205  optional int32 optional_int32_extension_lite = 1;
206  optional int64 optional_int64_extension_lite = 2;
207  optional uint32 optional_uint32_extension_lite = 3;
208  optional uint64 optional_uint64_extension_lite = 4;
209  optional sint32 optional_sint32_extension_lite = 5;
210  optional sint64 optional_sint64_extension_lite = 6;
211  optional fixed32 optional_fixed32_extension_lite = 7;
212  optional fixed64 optional_fixed64_extension_lite = 8;
213  optional sfixed32 optional_sfixed32_extension_lite = 9;
214  optional sfixed64 optional_sfixed64_extension_lite = 10;
215  optional float optional_float_extension_lite = 11;
216  optional double optional_double_extension_lite = 12;
217  optional bool optional_bool_extension_lite = 13;
218  optional string optional_string_extension_lite = 14;
219  optional bytes optional_bytes_extension_lite = 15;
220
221  optional group OptionalGroup_extension_lite = 16 {
222    optional int32 a = 17;
223  }
224
225  optional TestAllTypesLite.NestedMessage
226      optional_nested_message_extension_lite = 18;
227  optional ForeignMessageLite optional_foreign_message_extension_lite = 19;
228  optional protobuf_unittest_import.ImportMessageLite
229      optional_import_message_extension_lite = 20;
230
231  optional TestAllTypesLite.NestedEnum optional_nested_enum_extension_lite = 21;
232  optional ForeignEnumLite optional_foreign_enum_extension_lite = 22;
233  optional protobuf_unittest_import.ImportEnumLite
234      optional_import_enum_extension_lite = 23;
235
236  optional string optional_string_piece_extension_lite = 24
237      [ctype = STRING_PIECE];
238  optional string optional_cord_extension_lite = 25 [ctype = CORD];
239
240  optional protobuf_unittest_import.PublicImportMessageLite
241      optional_public_import_message_extension_lite = 26;
242
243  optional TestAllTypesLite.NestedMessage optional_lazy_message_extension_lite =
244      27 [lazy = true];
245
246  // Repeated
247  repeated int32 repeated_int32_extension_lite = 31;
248  repeated int64 repeated_int64_extension_lite = 32;
249  repeated uint32 repeated_uint32_extension_lite = 33;
250  repeated uint64 repeated_uint64_extension_lite = 34;
251  repeated sint32 repeated_sint32_extension_lite = 35;
252  repeated sint64 repeated_sint64_extension_lite = 36;
253  repeated fixed32 repeated_fixed32_extension_lite = 37;
254  repeated fixed64 repeated_fixed64_extension_lite = 38;
255  repeated sfixed32 repeated_sfixed32_extension_lite = 39;
256  repeated sfixed64 repeated_sfixed64_extension_lite = 40;
257  repeated float repeated_float_extension_lite = 41;
258  repeated double repeated_double_extension_lite = 42;
259  repeated bool repeated_bool_extension_lite = 43;
260  repeated string repeated_string_extension_lite = 44;
261  repeated bytes repeated_bytes_extension_lite = 45;
262
263  repeated group RepeatedGroup_extension_lite = 46 {
264    optional int32 a = 47;
265  }
266
267  repeated TestAllTypesLite.NestedMessage
268      repeated_nested_message_extension_lite = 48;
269  repeated ForeignMessageLite repeated_foreign_message_extension_lite = 49;
270  repeated protobuf_unittest_import.ImportMessageLite
271      repeated_import_message_extension_lite = 50;
272
273  repeated TestAllTypesLite.NestedEnum repeated_nested_enum_extension_lite = 51;
274  repeated ForeignEnumLite repeated_foreign_enum_extension_lite = 52;
275  repeated protobuf_unittest_import.ImportEnumLite
276      repeated_import_enum_extension_lite = 53;
277
278  repeated string repeated_string_piece_extension_lite = 54
279      [ctype = STRING_PIECE];
280  repeated string repeated_cord_extension_lite = 55 [ctype = CORD];
281
282  repeated TestAllTypesLite.NestedMessage repeated_lazy_message_extension_lite =
283      57 [lazy = true];
284
285  // Singular with defaults
286  optional int32 default_int32_extension_lite = 61 [default = 41];
287  optional int64 default_int64_extension_lite = 62 [default = 42];
288  optional uint32 default_uint32_extension_lite = 63 [default = 43];
289  optional uint64 default_uint64_extension_lite = 64 [default = 44];
290  optional sint32 default_sint32_extension_lite = 65 [default = -45];
291  optional sint64 default_sint64_extension_lite = 66 [default = 46];
292  optional fixed32 default_fixed32_extension_lite = 67 [default = 47];
293  optional fixed64 default_fixed64_extension_lite = 68 [default = 48];
294  optional sfixed32 default_sfixed32_extension_lite = 69 [default = 49];
295  optional sfixed64 default_sfixed64_extension_lite = 70 [default = -50];
296  optional float default_float_extension_lite = 71 [default = 51.5];
297  optional double default_double_extension_lite = 72 [default = 52e3];
298  optional bool default_bool_extension_lite = 73 [default = true];
299  optional string default_string_extension_lite = 74 [default = "hello"];
300  optional bytes default_bytes_extension_lite = 75 [default = "world"];
301
302  optional TestAllTypesLite.NestedEnum default_nested_enum_extension_lite = 81
303      [default = BAR];
304  optional ForeignEnumLite default_foreign_enum_extension_lite = 82
305      [default = FOREIGN_LITE_BAR];
306  optional protobuf_unittest_import.ImportEnumLite
307      default_import_enum_extension_lite = 83 [default = IMPORT_LITE_BAR];
308
309  optional string default_string_piece_extension_lite = 84
310      [ctype = STRING_PIECE, default = "abc"];
311  optional string default_cord_extension_lite = 85
312      [ctype = CORD, default = "123"];
313
314  // For oneof test
315  optional uint32 oneof_uint32_extension_lite = 111;
316  optional TestAllTypesLite.NestedMessage oneof_nested_message_extension_lite =
317      112;
318  optional string oneof_string_extension_lite = 113;
319  optional bytes oneof_bytes_extension_lite = 114;
320}
321
322message TestPackedExtensionsLite {
323  extensions 1 to max;
324}
325
326extend TestPackedExtensionsLite {
327  repeated int32 packed_int32_extension_lite = 90 [packed = true];
328  repeated int64 packed_int64_extension_lite = 91 [packed = true];
329  repeated uint32 packed_uint32_extension_lite = 92 [packed = true];
330  repeated uint64 packed_uint64_extension_lite = 93 [packed = true];
331  repeated sint32 packed_sint32_extension_lite = 94 [packed = true];
332  repeated sint64 packed_sint64_extension_lite = 95 [packed = true];
333  repeated fixed32 packed_fixed32_extension_lite = 96 [packed = true];
334  repeated fixed64 packed_fixed64_extension_lite = 97 [packed = true];
335  repeated sfixed32 packed_sfixed32_extension_lite = 98 [packed = true];
336  repeated sfixed64 packed_sfixed64_extension_lite = 99 [packed = true];
337  repeated float packed_float_extension_lite = 100 [packed = true];
338  repeated double packed_double_extension_lite = 101 [packed = true];
339  repeated bool packed_bool_extension_lite = 102 [packed = true];
340  repeated ForeignEnumLite packed_enum_extension_lite = 103 [packed = true];
341}
342
343message TestNestedExtensionLite {
344  extend TestAllExtensionsLite {
345    optional int32 nested_extension = 12345;
346  }
347}
348
349// Test that deprecated fields work.  We only verify that they compile (at one
350// point this failed).
351message TestDeprecatedLite {
352  optional int32 deprecated_field = 1 [deprecated = true];
353  required int32 deprecated_field2 = 2 [deprecated = true];
354  optional string deprecated_field3 = 3 [deprecated = true];
355  optional TestDeprecatedLite deprecated_field4 = 4 [deprecated = true];
356}
357
358// See the comments of the same type in unittest.proto.
359message TestParsingMergeLite {
360  message RepeatedFieldsGenerator {
361    repeated TestAllTypesLite field1 = 1;
362    repeated TestAllTypesLite field2 = 2;
363    repeated TestAllTypesLite field3 = 3;
364    repeated group Group1 = 10 {
365      optional TestAllTypesLite field1 = 11;
366    }
367    repeated group Group2 = 20 {
368      optional TestAllTypesLite field1 = 21;
369    }
370    repeated TestAllTypesLite ext1 = 1000;
371    repeated TestAllTypesLite ext2 = 1001;
372  }
373  required TestAllTypesLite required_all_types = 1;
374  optional TestAllTypesLite optional_all_types = 2;
375  repeated TestAllTypesLite repeated_all_types = 3;
376  optional group OptionalGroup = 10 {
377    optional TestAllTypesLite optional_group_all_types = 11;
378  }
379  repeated group RepeatedGroup = 20 {
380    optional TestAllTypesLite repeated_group_all_types = 21;
381  }
382  extensions 1000 to max;
383  extend TestParsingMergeLite {
384    optional TestAllTypesLite optional_ext = 1000;
385    repeated TestAllTypesLite repeated_ext = 1001;
386  }
387}
388
389// TestEmptyMessageLite is used to test unknown fields support in lite mode.
390message TestEmptyMessageLite {}
391
392// Like above, but declare all field numbers as potential extensions.  No
393// actual extensions should ever be defined for this type.
394message TestEmptyMessageWithExtensionsLite {
395  extensions 1 to max;
396}
397
398enum V1EnumLite { V1_FIRST = 1; }
399
400enum V2EnumLite {
401  V2_FIRST = 1;
402  V2_SECOND = 2;
403}
404
405message V1MessageLite {
406  required int32 int_field = 1;
407  optional V1EnumLite enum_field = 2 [default = V1_FIRST];
408}
409
410message V2MessageLite {
411  required int32 int_field = 1;
412  optional V2EnumLite enum_field = 2 [default = V2_FIRST];
413}
414
415message TestHugeFieldNumbersLite {
416  optional int32 optional_int32 = 536870000;
417  optional int32 fixed_32 = 536870001;
418  repeated int32 repeated_int32 = 536870002 [packed = false];
419  repeated int32 packed_int32 = 536870003 [packed = true];
420
421  optional ForeignEnumLite optional_enum = 536870004;
422  optional string optional_string = 536870005;
423  optional bytes optional_bytes = 536870006;
424  optional ForeignMessageLite optional_message = 536870007;
425
426  optional group OptionalGroup = 536870008 {
427    optional int32 group_a = 536870009;
428  }
429
430  map<string, string> string_string_map = 536870010;
431
432  oneof oneof_field {
433    uint32 oneof_uint32 = 536870011;
434    TestAllTypesLite oneof_test_all_types = 536870012;
435    string oneof_string = 536870013;
436    bytes oneof_bytes = 536870014;
437  }
438
439  extensions 536860000 to 536869999;
440}
441
442extend TestHugeFieldNumbersLite {
443  optional TestAllTypesLite test_all_types_lite = 536860000;
444}
445
446message TestOneofParsingLite {
447  oneof oneof_field {
448    int32 oneof_int32 = 1;
449    TestAllTypesLite oneof_submessage = 2;
450    string oneof_string = 3;
451    bytes oneof_bytes = 4 [default = "default bytes"];
452    string oneof_string_cord = 5 [ctype = CORD, default = "default Cord"];
453    bytes oneof_bytes_cord = 6 [ctype = CORD];
454    string oneof_string_string_piece = 7 [ctype = STRING_PIECE];
455    bytes oneof_bytes_string_piece = 8
456        [ctype = STRING_PIECE, default = "default StringPiece"];
457    V2EnumLite oneof_enum = 9;
458  }
459}
460
461// The following four messages are set up to test for wire compatibility between
462// packed and non-packed repeated fields. We use the field number 2048, because
463// that is large enough to require a 3-byte varint for the tag.
464message PackedInt32 {
465  repeated int32 repeated_int32 = 2048 [packed = true];
466}
467
468message NonPackedInt32 {
469  repeated int32 repeated_int32 = 2048;
470}
471
472message PackedFixed32 {
473  repeated fixed32 repeated_fixed32 = 2048 [packed = true];
474}
475
476message NonPackedFixed32 {
477  repeated fixed32 repeated_fixed32 = 2048;
478}
479
480// Test an enum that has multiple values with the same number.
481message DupEnum {
482  enum TestEnumWithDupValueLite {
483    option allow_alias = true;
484
485    FOO1 = 1;
486    BAR1 = 2;
487    BAZ = 3;
488    FOO2 = 1;
489    BAR2 = 2;
490  }
491}
492