unittest.proto 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  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. // Author: kenton@google.com (Kenton Varda)
  31. // Based on original Protocol Buffers design by
  32. // Sanjay Ghemawat, Jeff Dean, and others.
  33. //
  34. // A proto file we will use for unit testing.
  35. syntax = "proto2";
  36. // Some generic_services option(s) added automatically.
  37. // See: http://go/proto2-generic-services-default
  38. option cc_generic_services = true; // auto-added
  39. option java_generic_services = true; // auto-added
  40. option py_generic_services = true; // auto-added
  41. option cc_enable_arenas = true;
  42. import "google/protobuf/unittest_import.proto";
  43. // We don't put this in a package within proto2 because we need to make sure
  44. // that the generated code doesn't depend on being in the proto2 namespace.
  45. // In test_util.h we do "using namespace unittest = protobuf_unittest".
  46. package protobuf_unittest;
  47. // Protos optimized for SPEED use a strict superset of the generated code
  48. // of equivalent ones optimized for CODE_SIZE, so we should optimize all our
  49. // tests for speed unless explicitly testing code size optimization.
  50. option optimize_for = SPEED;
  51. option java_outer_classname = "UnittestProto";
  52. // This proto includes every type of field in both singular and repeated
  53. // forms.
  54. message TestAllTypes {
  55. message NestedMessage {
  56. // The field name "b" fails to compile in proto1 because it conflicts with
  57. // a local variable named "b" in one of the generated methods. Doh.
  58. // This file needs to compile in proto1 to test backwards-compatibility.
  59. optional int32 bb = 1;
  60. }
  61. enum NestedEnum {
  62. FOO = 1;
  63. BAR = 2;
  64. BAZ = 3;
  65. NEG = -1; // Intentionally negative.
  66. }
  67. // Singular
  68. optional int32 optional_int32 = 1;
  69. optional int64 optional_int64 = 2;
  70. optional uint32 optional_uint32 = 3;
  71. optional uint64 optional_uint64 = 4;
  72. optional sint32 optional_sint32 = 5;
  73. optional sint64 optional_sint64 = 6;
  74. optional fixed32 optional_fixed32 = 7;
  75. optional fixed64 optional_fixed64 = 8;
  76. optional sfixed32 optional_sfixed32 = 9;
  77. optional sfixed64 optional_sfixed64 = 10;
  78. optional float optional_float = 11;
  79. optional double optional_double = 12;
  80. optional bool optional_bool = 13;
  81. optional string optional_string = 14;
  82. optional bytes optional_bytes = 15;
  83. optional group OptionalGroup = 16 {
  84. optional int32 a = 17;
  85. }
  86. optional NestedMessage optional_nested_message = 18;
  87. optional ForeignMessage optional_foreign_message = 19;
  88. optional protobuf_unittest_import.ImportMessage optional_import_message = 20;
  89. optional NestedEnum optional_nested_enum = 21;
  90. optional ForeignEnum optional_foreign_enum = 22;
  91. optional protobuf_unittest_import.ImportEnum optional_import_enum = 23;
  92. optional string optional_string_piece = 24 [ctype=STRING_PIECE];
  93. optional string optional_cord = 25 [ctype=CORD];
  94. // Defined in unittest_import_public.proto
  95. optional protobuf_unittest_import.PublicImportMessage
  96. optional_public_import_message = 26;
  97. optional NestedMessage optional_lazy_message = 27 [lazy=true];
  98. // Repeated
  99. repeated int32 repeated_int32 = 31;
  100. repeated int64 repeated_int64 = 32;
  101. repeated uint32 repeated_uint32 = 33;
  102. repeated uint64 repeated_uint64 = 34;
  103. repeated sint32 repeated_sint32 = 35;
  104. repeated sint64 repeated_sint64 = 36;
  105. repeated fixed32 repeated_fixed32 = 37;
  106. repeated fixed64 repeated_fixed64 = 38;
  107. repeated sfixed32 repeated_sfixed32 = 39;
  108. repeated sfixed64 repeated_sfixed64 = 40;
  109. repeated float repeated_float = 41;
  110. repeated double repeated_double = 42;
  111. repeated bool repeated_bool = 43;
  112. repeated string repeated_string = 44;
  113. repeated bytes repeated_bytes = 45;
  114. repeated group RepeatedGroup = 46 {
  115. optional int32 a = 47;
  116. }
  117. repeated NestedMessage repeated_nested_message = 48;
  118. repeated ForeignMessage repeated_foreign_message = 49;
  119. repeated protobuf_unittest_import.ImportMessage repeated_import_message = 50;
  120. repeated NestedEnum repeated_nested_enum = 51;
  121. repeated ForeignEnum repeated_foreign_enum = 52;
  122. repeated protobuf_unittest_import.ImportEnum repeated_import_enum = 53;
  123. repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
  124. repeated string repeated_cord = 55 [ctype=CORD];
  125. repeated NestedMessage repeated_lazy_message = 57 [lazy=true];
  126. // Singular with defaults
  127. optional int32 default_int32 = 61 [default = 41 ];
  128. optional int64 default_int64 = 62 [default = 42 ];
  129. optional uint32 default_uint32 = 63 [default = 43 ];
  130. optional uint64 default_uint64 = 64 [default = 44 ];
  131. optional sint32 default_sint32 = 65 [default = -45 ];
  132. optional sint64 default_sint64 = 66 [default = 46 ];
  133. optional fixed32 default_fixed32 = 67 [default = 47 ];
  134. optional fixed64 default_fixed64 = 68 [default = 48 ];
  135. optional sfixed32 default_sfixed32 = 69 [default = 49 ];
  136. optional sfixed64 default_sfixed64 = 70 [default = -50 ];
  137. optional float default_float = 71 [default = 51.5 ];
  138. optional double default_double = 72 [default = 52e3 ];
  139. optional bool default_bool = 73 [default = true ];
  140. optional string default_string = 74 [default = "hello"];
  141. optional bytes default_bytes = 75 [default = "world"];
  142. optional NestedEnum default_nested_enum = 81 [default = BAR ];
  143. optional ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
  144. optional protobuf_unittest_import.ImportEnum
  145. default_import_enum = 83 [default = IMPORT_BAR];
  146. optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
  147. optional string default_cord = 85 [ctype=CORD,default="123"];
  148. // For oneof test
  149. oneof oneof_field {
  150. uint32 oneof_uint32 = 111;
  151. NestedMessage oneof_nested_message = 112;
  152. string oneof_string = 113;
  153. bytes oneof_bytes = 114;
  154. }
  155. }
  156. // This proto includes a recusively nested message.
  157. message NestedTestAllTypes {
  158. optional NestedTestAllTypes child = 1;
  159. optional TestAllTypes payload = 2;
  160. repeated NestedTestAllTypes repeated_child = 3;
  161. }
  162. message TestDeprecatedFields {
  163. optional int32 deprecated_int32 = 1 [deprecated=true];
  164. }
  165. // Define these after TestAllTypes to make sure the compiler can handle
  166. // that.
  167. message ForeignMessage {
  168. optional int32 c = 1;
  169. optional int32 d = 2;
  170. }
  171. enum ForeignEnum {
  172. FOREIGN_FOO = 4;
  173. FOREIGN_BAR = 5;
  174. FOREIGN_BAZ = 6;
  175. }
  176. message TestReservedFields {
  177. reserved 2, 15, 9 to 11;
  178. reserved "bar", "baz";
  179. }
  180. message TestAllExtensions {
  181. extensions 1 to max;
  182. }
  183. extend TestAllExtensions {
  184. // Singular
  185. optional int32 optional_int32_extension = 1;
  186. optional int64 optional_int64_extension = 2;
  187. optional uint32 optional_uint32_extension = 3;
  188. optional uint64 optional_uint64_extension = 4;
  189. optional sint32 optional_sint32_extension = 5;
  190. optional sint64 optional_sint64_extension = 6;
  191. optional fixed32 optional_fixed32_extension = 7;
  192. optional fixed64 optional_fixed64_extension = 8;
  193. optional sfixed32 optional_sfixed32_extension = 9;
  194. optional sfixed64 optional_sfixed64_extension = 10;
  195. optional float optional_float_extension = 11;
  196. optional double optional_double_extension = 12;
  197. optional bool optional_bool_extension = 13;
  198. optional string optional_string_extension = 14;
  199. optional bytes optional_bytes_extension = 15;
  200. optional group OptionalGroup_extension = 16 {
  201. optional int32 a = 17;
  202. }
  203. optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
  204. optional ForeignMessage optional_foreign_message_extension = 19;
  205. optional protobuf_unittest_import.ImportMessage
  206. optional_import_message_extension = 20;
  207. optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
  208. optional ForeignEnum optional_foreign_enum_extension = 22;
  209. optional protobuf_unittest_import.ImportEnum
  210. optional_import_enum_extension = 23;
  211. optional string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
  212. optional string optional_cord_extension = 25 [ctype=CORD];
  213. optional protobuf_unittest_import.PublicImportMessage
  214. optional_public_import_message_extension = 26;
  215. optional TestAllTypes.NestedMessage
  216. optional_lazy_message_extension = 27 [lazy=true];
  217. // Repeated
  218. repeated int32 repeated_int32_extension = 31;
  219. repeated int64 repeated_int64_extension = 32;
  220. repeated uint32 repeated_uint32_extension = 33;
  221. repeated uint64 repeated_uint64_extension = 34;
  222. repeated sint32 repeated_sint32_extension = 35;
  223. repeated sint64 repeated_sint64_extension = 36;
  224. repeated fixed32 repeated_fixed32_extension = 37;
  225. repeated fixed64 repeated_fixed64_extension = 38;
  226. repeated sfixed32 repeated_sfixed32_extension = 39;
  227. repeated sfixed64 repeated_sfixed64_extension = 40;
  228. repeated float repeated_float_extension = 41;
  229. repeated double repeated_double_extension = 42;
  230. repeated bool repeated_bool_extension = 43;
  231. repeated string repeated_string_extension = 44;
  232. repeated bytes repeated_bytes_extension = 45;
  233. repeated group RepeatedGroup_extension = 46 {
  234. optional int32 a = 47;
  235. }
  236. repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
  237. repeated ForeignMessage repeated_foreign_message_extension = 49;
  238. repeated protobuf_unittest_import.ImportMessage
  239. repeated_import_message_extension = 50;
  240. repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
  241. repeated ForeignEnum repeated_foreign_enum_extension = 52;
  242. repeated protobuf_unittest_import.ImportEnum
  243. repeated_import_enum_extension = 53;
  244. repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
  245. repeated string repeated_cord_extension = 55 [ctype=CORD];
  246. repeated TestAllTypes.NestedMessage
  247. repeated_lazy_message_extension = 57 [lazy=true];
  248. // Singular with defaults
  249. optional int32 default_int32_extension = 61 [default = 41 ];
  250. optional int64 default_int64_extension = 62 [default = 42 ];
  251. optional uint32 default_uint32_extension = 63 [default = 43 ];
  252. optional uint64 default_uint64_extension = 64 [default = 44 ];
  253. optional sint32 default_sint32_extension = 65 [default = -45 ];
  254. optional sint64 default_sint64_extension = 66 [default = 46 ];
  255. optional fixed32 default_fixed32_extension = 67 [default = 47 ];
  256. optional fixed64 default_fixed64_extension = 68 [default = 48 ];
  257. optional sfixed32 default_sfixed32_extension = 69 [default = 49 ];
  258. optional sfixed64 default_sfixed64_extension = 70 [default = -50 ];
  259. optional float default_float_extension = 71 [default = 51.5 ];
  260. optional double default_double_extension = 72 [default = 52e3 ];
  261. optional bool default_bool_extension = 73 [default = true ];
  262. optional string default_string_extension = 74 [default = "hello"];
  263. optional bytes default_bytes_extension = 75 [default = "world"];
  264. optional TestAllTypes.NestedEnum
  265. default_nested_enum_extension = 81 [default = BAR];
  266. optional ForeignEnum
  267. default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
  268. optional protobuf_unittest_import.ImportEnum
  269. default_import_enum_extension = 83 [default = IMPORT_BAR];
  270. optional string default_string_piece_extension = 84 [ctype=STRING_PIECE,
  271. default="abc"];
  272. optional string default_cord_extension = 85 [ctype=CORD, default="123"];
  273. // For oneof test
  274. optional uint32 oneof_uint32_extension = 111;
  275. optional TestAllTypes.NestedMessage oneof_nested_message_extension = 112;
  276. optional string oneof_string_extension = 113;
  277. optional bytes oneof_bytes_extension = 114;
  278. }
  279. message TestNestedExtension {
  280. extend TestAllExtensions {
  281. // Check for bug where string extensions declared in tested scope did not
  282. // compile.
  283. optional string test = 1002 [default="test"];
  284. // Used to test if generated extension name is correct when there are
  285. // underscores.
  286. optional string nested_string_extension = 1003;
  287. }
  288. }
  289. // We have separate messages for testing required fields because it's
  290. // annoying to have to fill in required fields in TestProto in order to
  291. // do anything with it. Note that we don't need to test every type of
  292. // required filed because the code output is basically identical to
  293. // optional fields for all types.
  294. message TestRequired {
  295. required int32 a = 1;
  296. optional int32 dummy2 = 2;
  297. required int32 b = 3;
  298. extend TestAllExtensions {
  299. optional TestRequired single = 1000;
  300. repeated TestRequired multi = 1001;
  301. }
  302. // Pad the field count to 32 so that we can test that IsInitialized()
  303. // properly checks multiple elements of has_bits_.
  304. optional int32 dummy4 = 4;
  305. optional int32 dummy5 = 5;
  306. optional int32 dummy6 = 6;
  307. optional int32 dummy7 = 7;
  308. optional int32 dummy8 = 8;
  309. optional int32 dummy9 = 9;
  310. optional int32 dummy10 = 10;
  311. optional int32 dummy11 = 11;
  312. optional int32 dummy12 = 12;
  313. optional int32 dummy13 = 13;
  314. optional int32 dummy14 = 14;
  315. optional int32 dummy15 = 15;
  316. optional int32 dummy16 = 16;
  317. optional int32 dummy17 = 17;
  318. optional int32 dummy18 = 18;
  319. optional int32 dummy19 = 19;
  320. optional int32 dummy20 = 20;
  321. optional int32 dummy21 = 21;
  322. optional int32 dummy22 = 22;
  323. optional int32 dummy23 = 23;
  324. optional int32 dummy24 = 24;
  325. optional int32 dummy25 = 25;
  326. optional int32 dummy26 = 26;
  327. optional int32 dummy27 = 27;
  328. optional int32 dummy28 = 28;
  329. optional int32 dummy29 = 29;
  330. optional int32 dummy30 = 30;
  331. optional int32 dummy31 = 31;
  332. optional int32 dummy32 = 32;
  333. required int32 c = 33;
  334. }
  335. message TestRequiredForeign {
  336. optional TestRequired optional_message = 1;
  337. repeated TestRequired repeated_message = 2;
  338. optional int32 dummy = 3;
  339. }
  340. // Test that we can use NestedMessage from outside TestAllTypes.
  341. message TestForeignNested {
  342. optional TestAllTypes.NestedMessage foreign_nested = 1;
  343. }
  344. // TestEmptyMessage is used to test unknown field support.
  345. message TestEmptyMessage {
  346. }
  347. // Like above, but declare all field numbers as potential extensions. No
  348. // actual extensions should ever be defined for this type.
  349. message TestEmptyMessageWithExtensions {
  350. extensions 1 to max;
  351. }
  352. message TestMultipleExtensionRanges {
  353. extensions 42;
  354. extensions 4143 to 4243;
  355. extensions 65536 to max;
  356. }
  357. // Test that really large tag numbers don't break anything.
  358. message TestReallyLargeTagNumber {
  359. // The largest possible tag number is 2^28 - 1, since the wire format uses
  360. // three bits to communicate wire type.
  361. optional int32 a = 1;
  362. optional int32 bb = 268435455;
  363. }
  364. message TestRecursiveMessage {
  365. optional TestRecursiveMessage a = 1;
  366. optional int32 i = 2;
  367. }
  368. // Test that mutual recursion works.
  369. message TestMutualRecursionA {
  370. optional TestMutualRecursionB bb = 1;
  371. }
  372. message TestMutualRecursionB {
  373. optional TestMutualRecursionA a = 1;
  374. optional int32 optional_int32 = 2;
  375. }
  376. // Test that groups have disjoint field numbers from their siblings and
  377. // parents. This is NOT possible in proto1; only google.protobuf. When attempting
  378. // to compile with proto1, this will emit an error; so we only include it
  379. // in protobuf_unittest_proto.
  380. message TestDupFieldNumber { // NO_PROTO1
  381. optional int32 a = 1; // NO_PROTO1
  382. optional group Foo = 2 { optional int32 a = 1; } // NO_PROTO1
  383. optional group Bar = 3 { optional int32 a = 1; } // NO_PROTO1
  384. } // NO_PROTO1
  385. // Additional messages for testing lazy fields.
  386. message TestEagerMessage {
  387. optional TestAllTypes sub_message = 1 [lazy=false];
  388. }
  389. message TestLazyMessage {
  390. optional TestAllTypes sub_message = 1 [lazy=true];
  391. }
  392. // Needed for a Python test.
  393. message TestNestedMessageHasBits {
  394. message NestedMessage {
  395. repeated int32 nestedmessage_repeated_int32 = 1;
  396. repeated ForeignMessage nestedmessage_repeated_foreignmessage = 2;
  397. }
  398. optional NestedMessage optional_nested_message = 1;
  399. }
  400. // Test an enum that has multiple values with the same number.
  401. enum TestEnumWithDupValue {
  402. option allow_alias = true;
  403. FOO1 = 1;
  404. BAR1 = 2;
  405. BAZ = 3;
  406. FOO2 = 1;
  407. BAR2 = 2;
  408. }
  409. // Test an enum with large, unordered values.
  410. enum TestSparseEnum {
  411. SPARSE_A = 123;
  412. SPARSE_B = 62374;
  413. SPARSE_C = 12589234;
  414. SPARSE_D = -15;
  415. SPARSE_E = -53452;
  416. SPARSE_F = 0;
  417. SPARSE_G = 2;
  418. }
  419. // Test message with CamelCase field names. This violates Protocol Buffer
  420. // standard style.
  421. message TestCamelCaseFieldNames {
  422. optional int32 PrimitiveField = 1;
  423. optional string StringField = 2;
  424. optional ForeignEnum EnumField = 3;
  425. optional ForeignMessage MessageField = 4;
  426. optional string StringPieceField = 5 [ctype=STRING_PIECE];
  427. optional string CordField = 6 [ctype=CORD];
  428. repeated int32 RepeatedPrimitiveField = 7;
  429. repeated string RepeatedStringField = 8;
  430. repeated ForeignEnum RepeatedEnumField = 9;
  431. repeated ForeignMessage RepeatedMessageField = 10;
  432. repeated string RepeatedStringPieceField = 11 [ctype=STRING_PIECE];
  433. repeated string RepeatedCordField = 12 [ctype=CORD];
  434. }
  435. // We list fields out of order, to ensure that we're using field number and not
  436. // field index to determine serialization order.
  437. message TestFieldOrderings {
  438. optional string my_string = 11;
  439. extensions 2 to 10;
  440. optional int64 my_int = 1;
  441. extensions 12 to 100;
  442. optional float my_float = 101;
  443. message NestedMessage {
  444. optional int64 oo = 2;
  445. // The field name "b" fails to compile in proto1 because it conflicts with
  446. // a local variable named "b" in one of the generated methods. Doh.
  447. // This file needs to compile in proto1 to test backwards-compatibility.
  448. optional int32 bb = 1;
  449. }
  450. optional NestedMessage optional_nested_message = 200;
  451. }
  452. extend TestFieldOrderings {
  453. optional string my_extension_string = 50;
  454. optional int32 my_extension_int = 5;
  455. }
  456. message TestExtremeDefaultValues {
  457. optional bytes escaped_bytes = 1 [default = "\0\001\a\b\f\n\r\t\v\\\'\"\xfe"];
  458. optional uint32 large_uint32 = 2 [default = 0xFFFFFFFF];
  459. optional uint64 large_uint64 = 3 [default = 0xFFFFFFFFFFFFFFFF];
  460. optional int32 small_int32 = 4 [default = -0x7FFFFFFF];
  461. optional int64 small_int64 = 5 [default = -0x7FFFFFFFFFFFFFFF];
  462. optional int32 really_small_int32 = 21 [default = -0x80000000];
  463. optional int64 really_small_int64 = 22 [default = -0x8000000000000000];
  464. // The default value here is UTF-8 for "\u1234". (We could also just type
  465. // the UTF-8 text directly into this text file rather than escape it, but
  466. // lots of people use editors that would be confused by this.)
  467. optional string utf8_string = 6 [default = "\341\210\264"];
  468. // Tests for single-precision floating-point values.
  469. optional float zero_float = 7 [default = 0];
  470. optional float one_float = 8 [default = 1];
  471. optional float small_float = 9 [default = 1.5];
  472. optional float negative_one_float = 10 [default = -1];
  473. optional float negative_float = 11 [default = -1.5];
  474. // Using exponents
  475. optional float large_float = 12 [default = 2E8];
  476. optional float small_negative_float = 13 [default = -8e-28];
  477. // Text for nonfinite floating-point values.
  478. optional double inf_double = 14 [default = inf];
  479. optional double neg_inf_double = 15 [default = -inf];
  480. optional double nan_double = 16 [default = nan];
  481. optional float inf_float = 17 [default = inf];
  482. optional float neg_inf_float = 18 [default = -inf];
  483. optional float nan_float = 19 [default = nan];
  484. // Tests for C++ trigraphs.
  485. // Trigraphs should be escaped in C++ generated files, but they should not be
  486. // escaped for other languages.
  487. // Note that in .proto file, "\?" is a valid way to escape ? in string
  488. // literals.
  489. optional string cpp_trigraph = 20 [default = "? \? ?? \?? \??? ??/ ?\?-"];
  490. // String defaults containing the character '\000'
  491. optional string string_with_zero = 23 [default = "hel\000lo"];
  492. optional bytes bytes_with_zero = 24 [default = "wor\000ld"];
  493. optional string string_piece_with_zero = 25 [ctype=STRING_PIECE,
  494. default="ab\000c"];
  495. optional string cord_with_zero = 26 [ctype=CORD,
  496. default="12\0003"];
  497. optional string replacement_string = 27 [default="${unknown}"];
  498. }
  499. message SparseEnumMessage {
  500. optional TestSparseEnum sparse_enum = 1;
  501. }
  502. // Test String and Bytes: string is for valid UTF-8 strings
  503. message OneString {
  504. optional string data = 1;
  505. }
  506. message MoreString {
  507. repeated string data = 1;
  508. }
  509. message OneBytes {
  510. optional bytes data = 1;
  511. }
  512. message MoreBytes {
  513. repeated bytes data = 1;
  514. }
  515. // Test int32, uint32, int64, uint64, and bool are all compatible
  516. message Int32Message {
  517. optional int32 data = 1;
  518. }
  519. message Uint32Message {
  520. optional uint32 data = 1;
  521. }
  522. message Int64Message {
  523. optional int64 data = 1;
  524. }
  525. message Uint64Message {
  526. optional uint64 data = 1;
  527. }
  528. message BoolMessage {
  529. optional bool data = 1;
  530. }
  531. // Test oneofs.
  532. message TestOneof {
  533. oneof foo {
  534. int32 foo_int = 1;
  535. string foo_string = 2;
  536. TestAllTypes foo_message = 3;
  537. group FooGroup = 4 {
  538. optional int32 a = 5;
  539. optional string b = 6;
  540. }
  541. }
  542. }
  543. message TestOneofBackwardsCompatible {
  544. optional int32 foo_int = 1;
  545. optional string foo_string = 2;
  546. optional TestAllTypes foo_message = 3;
  547. optional group FooGroup = 4 {
  548. optional int32 a = 5;
  549. optional string b = 6;
  550. }
  551. }
  552. message TestOneof2 {
  553. oneof foo {
  554. int32 foo_int = 1;
  555. string foo_string = 2;
  556. string foo_cord = 3 [ctype=CORD];
  557. string foo_string_piece = 4 [ctype=STRING_PIECE];
  558. bytes foo_bytes = 5;
  559. NestedEnum foo_enum = 6;
  560. NestedMessage foo_message = 7;
  561. group FooGroup = 8 {
  562. optional int32 a = 9;
  563. optional string b = 10;
  564. }
  565. NestedMessage foo_lazy_message = 11 [lazy=true];
  566. }
  567. oneof bar {
  568. int32 bar_int = 12 [default = 5];
  569. string bar_string = 13 [default = "STRING"];
  570. string bar_cord = 14 [ctype=CORD, default = "CORD"];
  571. string bar_string_piece = 15 [ctype=STRING_PIECE, default = "SPIECE"];
  572. bytes bar_bytes = 16 [default = "BYTES"];
  573. NestedEnum bar_enum = 17 [default = BAR];
  574. }
  575. optional int32 baz_int = 18;
  576. optional string baz_string = 19 [default = "BAZ"];
  577. message NestedMessage {
  578. optional int64 qux_int = 1;
  579. repeated int32 corge_int = 2;
  580. }
  581. enum NestedEnum {
  582. FOO = 1;
  583. BAR = 2;
  584. BAZ = 3;
  585. }
  586. }
  587. message TestRequiredOneof {
  588. oneof foo {
  589. int32 foo_int = 1;
  590. string foo_string = 2;
  591. NestedMessage foo_message = 3;
  592. }
  593. message NestedMessage {
  594. required double required_double = 1;
  595. }
  596. }
  597. // Test messages for packed fields
  598. message TestPackedTypes {
  599. repeated int32 packed_int32 = 90 [packed = true];
  600. repeated int64 packed_int64 = 91 [packed = true];
  601. repeated uint32 packed_uint32 = 92 [packed = true];
  602. repeated uint64 packed_uint64 = 93 [packed = true];
  603. repeated sint32 packed_sint32 = 94 [packed = true];
  604. repeated sint64 packed_sint64 = 95 [packed = true];
  605. repeated fixed32 packed_fixed32 = 96 [packed = true];
  606. repeated fixed64 packed_fixed64 = 97 [packed = true];
  607. repeated sfixed32 packed_sfixed32 = 98 [packed = true];
  608. repeated sfixed64 packed_sfixed64 = 99 [packed = true];
  609. repeated float packed_float = 100 [packed = true];
  610. repeated double packed_double = 101 [packed = true];
  611. repeated bool packed_bool = 102 [packed = true];
  612. repeated ForeignEnum packed_enum = 103 [packed = true];
  613. }
  614. // A message with the same fields as TestPackedTypes, but without packing. Used
  615. // to test packed <-> unpacked wire compatibility.
  616. message TestUnpackedTypes {
  617. repeated int32 unpacked_int32 = 90 [packed = false];
  618. repeated int64 unpacked_int64 = 91 [packed = false];
  619. repeated uint32 unpacked_uint32 = 92 [packed = false];
  620. repeated uint64 unpacked_uint64 = 93 [packed = false];
  621. repeated sint32 unpacked_sint32 = 94 [packed = false];
  622. repeated sint64 unpacked_sint64 = 95 [packed = false];
  623. repeated fixed32 unpacked_fixed32 = 96 [packed = false];
  624. repeated fixed64 unpacked_fixed64 = 97 [packed = false];
  625. repeated sfixed32 unpacked_sfixed32 = 98 [packed = false];
  626. repeated sfixed64 unpacked_sfixed64 = 99 [packed = false];
  627. repeated float unpacked_float = 100 [packed = false];
  628. repeated double unpacked_double = 101 [packed = false];
  629. repeated bool unpacked_bool = 102 [packed = false];
  630. repeated ForeignEnum unpacked_enum = 103 [packed = false];
  631. }
  632. message TestPackedExtensions {
  633. extensions 1 to max;
  634. }
  635. extend TestPackedExtensions {
  636. repeated int32 packed_int32_extension = 90 [packed = true];
  637. repeated int64 packed_int64_extension = 91 [packed = true];
  638. repeated uint32 packed_uint32_extension = 92 [packed = true];
  639. repeated uint64 packed_uint64_extension = 93 [packed = true];
  640. repeated sint32 packed_sint32_extension = 94 [packed = true];
  641. repeated sint64 packed_sint64_extension = 95 [packed = true];
  642. repeated fixed32 packed_fixed32_extension = 96 [packed = true];
  643. repeated fixed64 packed_fixed64_extension = 97 [packed = true];
  644. repeated sfixed32 packed_sfixed32_extension = 98 [packed = true];
  645. repeated sfixed64 packed_sfixed64_extension = 99 [packed = true];
  646. repeated float packed_float_extension = 100 [packed = true];
  647. repeated double packed_double_extension = 101 [packed = true];
  648. repeated bool packed_bool_extension = 102 [packed = true];
  649. repeated ForeignEnum packed_enum_extension = 103 [packed = true];
  650. }
  651. message TestUnpackedExtensions {
  652. extensions 1 to max;
  653. }
  654. extend TestUnpackedExtensions {
  655. repeated int32 unpacked_int32_extension = 90 [packed = false];
  656. repeated int64 unpacked_int64_extension = 91 [packed = false];
  657. repeated uint32 unpacked_uint32_extension = 92 [packed = false];
  658. repeated uint64 unpacked_uint64_extension = 93 [packed = false];
  659. repeated sint32 unpacked_sint32_extension = 94 [packed = false];
  660. repeated sint64 unpacked_sint64_extension = 95 [packed = false];
  661. repeated fixed32 unpacked_fixed32_extension = 96 [packed = false];
  662. repeated fixed64 unpacked_fixed64_extension = 97 [packed = false];
  663. repeated sfixed32 unpacked_sfixed32_extension = 98 [packed = false];
  664. repeated sfixed64 unpacked_sfixed64_extension = 99 [packed = false];
  665. repeated float unpacked_float_extension = 100 [packed = false];
  666. repeated double unpacked_double_extension = 101 [packed = false];
  667. repeated bool unpacked_bool_extension = 102 [packed = false];
  668. repeated ForeignEnum unpacked_enum_extension = 103 [packed = false];
  669. }
  670. // Used by ExtensionSetTest/DynamicExtensions. The test actually builds
  671. // a set of extensions to TestAllExtensions dynamically, based on the fields
  672. // of this message type.
  673. message TestDynamicExtensions {
  674. enum DynamicEnumType {
  675. DYNAMIC_FOO = 2200;
  676. DYNAMIC_BAR = 2201;
  677. DYNAMIC_BAZ = 2202;
  678. }
  679. message DynamicMessageType {
  680. optional int32 dynamic_field = 2100;
  681. }
  682. optional fixed32 scalar_extension = 2000;
  683. optional ForeignEnum enum_extension = 2001;
  684. optional DynamicEnumType dynamic_enum_extension = 2002;
  685. optional ForeignMessage message_extension = 2003;
  686. optional DynamicMessageType dynamic_message_extension = 2004;
  687. repeated string repeated_extension = 2005;
  688. repeated sint32 packed_extension = 2006 [packed = true];
  689. }
  690. message TestRepeatedScalarDifferentTagSizes {
  691. // Parsing repeated fixed size values used to fail. This message needs to be
  692. // used in order to get a tag of the right size; all of the repeated fields
  693. // in TestAllTypes didn't trigger the check.
  694. repeated fixed32 repeated_fixed32 = 12;
  695. // Check for a varint type, just for good measure.
  696. repeated int32 repeated_int32 = 13;
  697. // These have two-byte tags.
  698. repeated fixed64 repeated_fixed64 = 2046;
  699. repeated int64 repeated_int64 = 2047;
  700. // Three byte tags.
  701. repeated float repeated_float = 262142;
  702. repeated uint64 repeated_uint64 = 262143;
  703. }
  704. // Test that if an optional or required message/group field appears multiple
  705. // times in the input, they need to be merged.
  706. message TestParsingMerge {
  707. // RepeatedFieldsGenerator defines matching field types as TestParsingMerge,
  708. // except that all fields are repeated. In the tests, we will serialize the
  709. // RepeatedFieldsGenerator to bytes, and parse the bytes to TestParsingMerge.
  710. // Repeated fields in RepeatedFieldsGenerator are expected to be merged into
  711. // the corresponding required/optional fields in TestParsingMerge.
  712. message RepeatedFieldsGenerator {
  713. repeated TestAllTypes field1 = 1;
  714. repeated TestAllTypes field2 = 2;
  715. repeated TestAllTypes field3 = 3;
  716. repeated group Group1 = 10 {
  717. optional TestAllTypes field1 = 11;
  718. }
  719. repeated group Group2 = 20 {
  720. optional TestAllTypes field1 = 21;
  721. }
  722. repeated TestAllTypes ext1 = 1000;
  723. repeated TestAllTypes ext2 = 1001;
  724. }
  725. required TestAllTypes required_all_types = 1;
  726. optional TestAllTypes optional_all_types = 2;
  727. repeated TestAllTypes repeated_all_types = 3;
  728. optional group OptionalGroup = 10 {
  729. optional TestAllTypes optional_group_all_types = 11;
  730. }
  731. repeated group RepeatedGroup = 20 {
  732. optional TestAllTypes repeated_group_all_types = 21;
  733. }
  734. extensions 1000 to max;
  735. extend TestParsingMerge {
  736. optional TestAllTypes optional_ext = 1000;
  737. repeated TestAllTypes repeated_ext = 1001;
  738. }
  739. }
  740. message TestCommentInjectionMessage {
  741. // */ <- This should not close the generated doc comment
  742. optional string a = 1 [default="*/ <- Neither should this."];
  743. }
  744. // Test that RPC services work.
  745. message FooRequest {}
  746. message FooResponse {}
  747. message FooClientMessage {}
  748. message FooServerMessage{}
  749. service TestService {
  750. rpc Foo(FooRequest) returns (FooResponse);
  751. rpc Bar(BarRequest) returns (BarResponse);
  752. }
  753. message BarRequest {}
  754. message BarResponse {}