• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Protocol Buffers - Google's data interchange format
2// Copyright 2011 Google Inc.  All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met:
7//
8//     * Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10//     * Redistributions in binary form must reproduce the above
11// copyright notice, this list of conditions and the following disclaimer
12// in the documentation and/or other materials provided with the
13// distribution.
14//     * Neither the name of Google Inc. nor the names of its
15// contributors may be used to endorse or promote products derived from
16// this software without specific prior written permission.
17//
18// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30syntax = "proto2";
31
32import "google/protobuf/unittest.proto";
33
34package protobuf_unittest;
35
36// Using the messages in unittest.proto, setup for recursive cases for testing
37// extensions at various depths.
38extend TestAllExtensions {
39  optional TestAllExtensions recursive_extension = 86;
40}
41
42// Recursive message to for testing autocreators at different depths.
43message TestRecursiveMessageWithRepeatedField {
44  optional TestRecursiveMessageWithRepeatedField a = 1;
45  repeated int32 i = 2;
46  repeated string str = 3;
47  map<int32, int32> i_to_i = 4;
48  map<string, string> str_to_str = 5;
49}
50
51// Recursive message and extension to for testing autocreators at different
52// depths.
53message TestRecursiveExtension {
54  optional TestRecursiveExtension recursive_sub_message = 1;
55  repeated int32 repeated_value = 2;
56  extensions 1000 to max;
57}
58
59extend TestRecursiveExtension {
60  optional TestRecursiveExtension recursive_message_extension = 1000;
61}
62
63message self {
64  message super {
65    optional int32 description = 1;
66  }
67
68  enum autorelease {
69    retain      = 1;
70    release     = 2;
71    retainCount = 3;
72  }
73
74  // Singular
75  optional   bool id                =  1;
76  optional   bool _cmd              =  2;
77  optional   bool in                =  3;
78  optional   bool out               =  4;
79  optional   bool inout             =  5;
80  optional   bool bycopy            =  6;
81  optional   bool byref             =  7;
82  optional   bool oneway            =  8;
83  optional   bool dealloc           =  9;
84  optional   bool zone              = 10;
85  optional   bool isProxy           = 11;
86  optional   bool copy              = 12;
87  optional   bool readonly          = 13;
88  optional   bool default           = 14;
89  optional   bool assign            = 15;
90  optional   bool getter            = 16;
91  optional   bool setter            = 17;
92  optional   bool weak              = 18;
93  optional   bool public            = 19;
94  optional   bool case              = 20;
95
96  optional   autorelease SubEnum    = 25;
97
98 optional group New = 50 {
99   optional string copy = 51;
100 }
101  optional group MutableCopy = 60 {
102    optional int32 extensionRegistry = 61;
103  }
104
105  extensions 90 to 94;
106
107}
108
109enum retain {
110  count          = 4;
111  initialized    = 5;
112  serializedSize = 6;
113}
114
115message ObjCPropertyNaming {
116  // Test that the properties properly get things all caps.
117  optional string url           = 1;
118  optional string thumbnail_url = 2;
119  optional string url_foo       = 3;
120  optional string some_url_blah = 4;
121  optional string http          = 5;
122  optional string https         = 6;
123  // This one doesn't.
124  repeated string urls          = 7;
125}
126
127// EnumValueShortName: The short names shouldn't get suffixes/prefixes.
128enum Foo {
129  SERIALIZED_SIZE = 1;
130  SIZE            = 2;
131  OTHER           = 3;
132}
133
134// EnumValueShortName: The enum name gets a prefix.
135enum Category {
136  RED  = 1;
137  BLUE = 2;
138}
139
140// EnumValueShortName: Twist case, full name gets PB, but the short names
141// should still end up correct.
142enum Time {
143  BASE            = 1;
144  RECORD          = 2;
145  SOMETHING_ELSE  = 3;
146}
147
148extend self {
149  repeated    int32 debugDescription    =  90 [packed = true];
150  repeated    int64 finalize            =  91 [packed = true];
151  repeated   uint32 hash                =  92 [packed = true];
152  repeated   uint64 classForCoder       =  93 [packed = true];
153  repeated   sint32 byref               =  94 [packed = true];
154}
155
156// Test handing of fields that start with init* since Xcode 5's ARC support
157// doesn't like messages that look like initializers but aren't.
158message ObjCInitFoo {
159  optional string init_val = 11;
160  optional int32 init_size = 12;
161  optional self init_self = 13;
162
163  repeated string init_vals = 21;
164  repeated int32 init_sizes = 22;
165  repeated self init_selfs = 23;
166}
167
168// Test handling of fields that start with retained names.
169message ObjCRetainedFoo {
170  optional string new_val_lower_complex = 11;
171  optional string new_Val_upper_complex = 12;
172  optional string newvalue_lower_no_underscore_complex = 13;
173  optional string newValue_upper_no_underscore_complex = 14;
174
175  optional int32 new_val_lower_primitive = 15;
176  optional int32 new_Val_upper_primitive = 16;
177  optional int32 newvalue_lower_no_underscore_primitive = 17;
178  optional int32 newValue_upper_no_underscore_primitive = 18;
179
180  optional self new_val_lower_message = 19;
181  optional self new_Val_upper_message = 20;
182  optional self newvalue_lower_no_underscore_message = 21;
183  optional self newValue_upper_no_underscore_message = 22;
184
185  optional Foo new_val_lower_enum = 23;
186  optional Foo new_Val_upper_enum = 24;
187  optional Foo newvalue_lower_no_underscore_enum = 25;
188  optional Foo newValue_upper_no_underscore_enum = 26;
189
190  repeated string new_val_lower_complex_repeated = 111;
191  repeated string new_Val_upper_complex_repeated = 112;
192  repeated string newvalue_lower_no_underscore_complex_repeated = 113;
193  repeated string newValue_upper_no_underscore_complex_repeated = 114;
194
195  repeated int32 new_val_lower_primitive_repeated = 115;
196  repeated int32 new_Val_upper_primitive_repeated = 116;
197  repeated int32 newvalue_lower_no_underscore_primitive_repeated = 117;
198  repeated int32 newValue_upper_no_underscore_primitive_repeated = 118;
199
200  repeated self new_val_lower_message_repeated = 119;
201  repeated self new_Val_upper_message_repeated = 120;
202  repeated self newvalue_lower_no_underscore_message_repeated = 121;
203  repeated self newValue_upper_no_underscore_message_repeated = 122;
204
205  repeated Foo new_val_lower_enum_repeated = 123;
206  repeated Foo new_Val_upper_enum_repeated = 124;
207  repeated Foo newvalue_lower_no_underscore_enum_repeated = 125;
208  repeated Foo newValue_upper_no_underscore_enum_repeated = 126;
209
210  optional string alloc_val_lower_complex = 211;
211  optional string alloc_Val_upper_complex = 212;
212  optional string allocvalue_lower_no_underscore_complex = 213;
213  optional string allocValue_upper_no_underscore_complex = 214;
214
215  optional int32 alloc_val_lower_primitive = 215;
216  optional int32 alloc_Val_upper_primitive = 216;
217  optional int32 allocvalue_lower_no_underscore_primitive = 217;
218  optional int32 allocValue_upper_no_underscore_primitive = 218;
219
220  optional self alloc_val_lower_message = 219;
221  optional self alloc_Val_upper_message = 220;
222  optional self allocvalue_lower_no_underscore_message = 221;
223  optional self allocValue_upper_no_underscore_message = 222;
224
225  optional Foo alloc_val_lower_enum = 223;
226  optional Foo alloc_Val_upper_enum = 224;
227  optional Foo allocvalue_lower_no_underscore_enum = 225;
228  optional Foo allocValue_upper_no_underscore_enum = 226;
229
230  repeated string alloc_val_lower_complex_repeated = 311;
231  repeated string alloc_Val_upper_complex_repeated = 312;
232  repeated string allocvalue_lower_no_underscore_complex_repeated = 313;
233  repeated string allocValue_upper_no_underscore_complex_repeated = 314;
234
235  repeated int32 alloc_val_lower_primitive_repeated = 315;
236  repeated int32 alloc_Val_upper_primitive_repeated = 316;
237  repeated int32 allocvalue_lower_no_underscore_primitive_repeated = 317;
238  repeated int32 allocValue_upper_no_underscore_primitive_repeated = 318;
239
240  repeated self alloc_val_lower_message_repeated = 319;
241  repeated self alloc_Val_upper_message_repeated = 320;
242  repeated self allocvalue_lower_no_underscore_message_repeated = 321;
243  repeated self allocValue_upper_no_underscore_message_repeated = 322;
244
245  repeated Foo alloc_val_lower_enum_repeated = 323;
246  repeated Foo alloc_Val_upper_enum_repeated = 324;
247  repeated Foo allocvalue_lower_no_underscore_enum_repeated = 325;
248  repeated Foo allocValue_upper_no_underscore_enum_repeated = 326;
249
250  optional string copy_val_lower_complex = 411;
251  optional string copy_Val_upper_complex = 412;
252  optional string copyvalue_lower_no_underscore_complex = 413;
253  optional string copyValue_upper_no_underscore_complex = 414;
254
255  optional int32 copy_val_lower_primitive = 415;
256  optional int32 copy_Val_upper_primitive = 416;
257  optional int32 copyvalue_lower_no_underscore_primitive = 417;
258  optional int32 copyValue_upper_no_underscore_primitive = 418;
259
260  optional self copy_val_lower_message = 419;
261  optional self copy_Val_upper_message = 420;
262  optional self copyvalue_lower_no_underscore_message = 421;
263  optional self copyValue_upper_no_underscore_message = 422;
264
265  optional Foo copy_val_lower_enum = 423;
266  optional Foo copy_Val_upper_enum = 424;
267  optional Foo copyvalue_lower_no_underscore_enum = 425;
268  optional Foo copyValue_upper_no_underscore_enum = 426;
269
270  repeated string copy_val_lower_complex_repeated = 511;
271  repeated string copy_Val_upper_complex_repeated = 512;
272  repeated string copyvalue_lower_no_underscore_complex_repeated = 513;
273  repeated string copyValue_upper_no_underscore_complex_repeated = 514;
274
275  repeated int32 copy_val_lower_primitive_repeated = 515;
276  repeated int32 copy_Val_upper_primitive_repeated = 516;
277  repeated int32 copyvalue_lower_no_underscore_primitive_repeated = 517;
278  repeated int32 copyValue_upper_no_underscore_primitive_repeated = 518;
279
280  repeated self copy_val_lower_message_repeated = 519;
281  repeated self copy_Val_upper_message_repeated = 520;
282  repeated self copyvalue_lower_no_underscore_message_repeated = 521;
283  repeated self copyValue_upper_no_underscore_message_repeated = 522;
284
285  repeated Foo copy_val_lower_enum_repeated = 523;
286  repeated Foo copy_Val_upper_enum_repeated = 524;
287  repeated Foo copyvalue_lower_no_underscore_enum_repeated = 525;
288  repeated Foo copyValue_upper_no_underscore_enum_repeated = 526;
289
290  optional string mutableCopy_val_lower_complex = 611;
291  optional string mutableCopy_Val_upper_complex = 612;
292  optional string mutableCopyvalue_lower_no_underscore_complex = 613;
293  optional string mutableCopyValue_upper_no_underscore_complex = 614;
294
295  optional int32 mutableCopy_val_lower_primitive = 615;
296  optional int32 mutableCopy_Val_upper_primitive = 616;
297  optional int32 mutableCopyvalue_lower_no_underscore_primitive = 617;
298  optional int32 mutableCopyValue_upper_no_underscore_primitive = 618;
299
300  optional self mutableCopy_val_lower_message = 619;
301  optional self mutableCopy_Val_upper_message = 620;
302  optional self mutableCopyvalue_lower_no_underscore_message = 621;
303  optional self mutableCopyValue_upper_no_underscore_message = 622;
304
305  optional Foo mutableCopy_val_lower_enum = 623;
306  optional Foo mutableCopy_Val_upper_enum = 624;
307  optional Foo mutableCopyvalue_lower_no_underscore_enum = 625;
308  optional Foo mutableCopyValue_upper_no_underscore_enum = 626;
309
310  repeated string mutableCopy_val_lower_complex_repeated = 711;
311  repeated string mutableCopy_Val_upper_complex_repeated = 712;
312  repeated string mutableCopyvalue_lower_no_underscore_complex_repeated = 713;
313  repeated string mutableCopyValue_upper_no_underscore_complex_repeated = 714;
314
315  repeated int32 mutableCopy_val_lower_primitive_repeated = 715;
316  repeated int32 mutableCopy_Val_upper_primitive_repeated = 716;
317  repeated int32 mutableCopyvalue_lower_no_underscore_primitive_repeated = 717;
318  repeated int32 mutableCopyValue_upper_no_underscore_primitive_repeated = 718;
319
320  repeated self mutableCopy_val_lower_message_repeated = 719;
321  repeated self mutableCopy_Val_upper_message_repeated = 720;
322  repeated self mutableCopyvalue_lower_no_underscore_message_repeated = 721;
323  repeated self mutableCopyValue_upper_no_underscore_message_repeated = 722;
324
325  repeated Foo mutableCopy_val_lower_enum_repeated = 723;
326  repeated Foo mutableCopy_Val_upper_enum_repeated = 724;
327  repeated Foo mutableCopyvalue_lower_no_underscore_enum_repeated = 725;
328  repeated Foo mutableCopyValue_upper_no_underscore_enum_repeated = 726;
329}
330
331// Test handling of fields that are the retained names.
332message ObjCRetainedComplex {
333  optional string new = 1;
334  optional string alloc = 2;
335  optional string copy = 3;
336  optional string mutableCopy = 4;
337}
338
339message ObjCRetainedComplexRepeated {
340  repeated string new = 1;
341  repeated string alloc = 2;
342  repeated string copy = 3;
343  repeated string mutableCopy = 4;
344}
345
346message ObjCRetainedPrimitive {
347  optional int32 new = 1;
348  optional int32 alloc = 2;
349  optional int32 copy = 3;
350  optional int32 mutableCopy = 4;
351}
352
353message ObjCRetainedPrimitiveRepeated {
354  repeated int32 new = 1;
355  repeated int32 alloc = 2;
356  repeated int32 copy = 3;
357  repeated int32 mutableCopy = 4;
358}
359
360message ObjCRetainedMessage {
361  optional self new = 1;
362  optional self alloc = 2;
363  optional self copy = 3;
364  optional self mutableCopy = 4;
365}
366
367message ObjCRetainedMessageRepeated {
368  repeated self new = 1;
369  repeated self alloc = 2;
370  repeated self copy = 3;
371  repeated self mutableCopy = 4;
372}
373
374// Test Handling some MacTypes
375message Point {
376  message Rect {
377    optional int32 TimeValue = 1;
378  }
379}
380
381// Test some weird defaults that we see in protos.
382message ObjcWeirdDefaults {
383  // Set default values that match the protocol buffer defined defaults to
384  // confirm hasDefault and the default values are set correctly.
385  optional string foo = 1 [default = ""];
386  optional bytes bar = 2 [default = ""];
387}
388
389// Used to confirm negative enum values work as expected.
390message EnumTestMsg {
391  enum MyEnum {
392    ZERO    = 0;
393    ONE     = 1;
394    TWO     = 2;
395    NEG_ONE = -1;
396    NEG_TWO = -2;
397  }
398  optional MyEnum foo = 1;
399  optional MyEnum bar = 2 [default = ONE];
400  optional MyEnum baz = 3 [default = NEG_ONE];
401
402  repeated MyEnum mumble = 4;
403}
404
405// Test case for https://github.com/google/protobuf/issues/1453
406// Message with no explicit defaults, but a non zero default for an enum.
407message MessageWithOneBasedEnum {
408  enum OneBasedEnum {
409    ONE = 1;
410    TWO = 2;
411  }
412  optional OneBasedEnum enum_field = 1;
413}
414
415// Message with all bools for testing things related to bool storage.
416message BoolOnlyMessage {
417  optional bool bool_field_1 = 1;
418  optional bool bool_field_2 = 2;
419  optional bool bool_field_3 = 3;
420  optional bool bool_field_4 = 4;
421  optional bool bool_field_5 = 5;
422  optional bool bool_field_6 = 6;
423  optional bool bool_field_7 = 7;
424  optional bool bool_field_8 = 8;
425  optional bool bool_field_9 = 9;
426  optional bool bool_field_10 = 10;
427  optional bool bool_field_11 = 11;
428  optional bool bool_field_12 = 12;
429  optional bool bool_field_13 = 13;
430  optional bool bool_field_14 = 14;
431  optional bool bool_field_15 = 15;
432  optional bool bool_field_16 = 16;
433  optional bool bool_field_17 = 17;
434  optional bool bool_field_18 = 18;
435  optional bool bool_field_19 = 19;
436  optional bool bool_field_20 = 20;
437  optional bool bool_field_21 = 21;
438  optional bool bool_field_22 = 22;
439  optional bool bool_field_23 = 23;
440  optional bool bool_field_24 = 24;
441  optional bool bool_field_25 = 25;
442  optional bool bool_field_26 = 26;
443  optional bool bool_field_27 = 27;
444  optional bool bool_field_28 = 28;
445  optional bool bool_field_29 = 29;
446  optional bool bool_field_30 = 30;
447  optional bool bool_field_31 = 31;
448  optional bool bool_field_32 = 32;
449}
450