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