unittest.proto 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
  1. // Additional options required for C# generation. File from copyright
  2. // line onwards is as per original distribution.
  3. import "google/protobuf/csharp_options.proto";
  4. option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
  5. option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestProtoFile";
  6. // Protocol Buffers - Google's data interchange format
  7. // Copyright 2008 Google Inc. All rights reserved.
  8. // http://code.google.com/p/protobuf/
  9. //
  10. // Redistribution and use in source and binary forms, with or without
  11. // modification, are permitted provided that the following conditions are
  12. // met:
  13. //
  14. // * Redistributions of source code must retain the above copyright
  15. // notice, this list of conditions and the following disclaimer.
  16. // * Redistributions in binary form must reproduce the above
  17. // copyright notice, this list of conditions and the following disclaimer
  18. // in the documentation and/or other materials provided with the
  19. // distribution.
  20. // * Neither the name of Google Inc. nor the names of its
  21. // contributors may be used to endorse or promote products derived from
  22. // this software without specific prior written permission.
  23. //
  24. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  25. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  26. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  27. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  28. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  29. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  30. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  31. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  32. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  33. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  34. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  35. // Author: kenton@google.com (Kenton Varda)
  36. // Based on original Protocol Buffers design by
  37. // Sanjay Ghemawat, Jeff Dean, and others.
  38. //
  39. // A proto file we will use for unit testing.
  40. // Some generic_services option(s) added automatically.
  41. // See: http://go/proto2-generic-services-default
  42. option cc_generic_services = true; // auto-added
  43. option java_generic_services = true; // auto-added
  44. option py_generic_services = true; // auto-added
  45. import "google/protobuf/unittest_import.proto";
  46. // We don't put this in a package within proto2 because we need to make sure
  47. // that the generated code doesn't depend on being in the proto2 namespace.
  48. // In test_util.h we do "using namespace unittest = protobuf_unittest".
  49. package protobuf_unittest;
  50. // Protos optimized for SPEED use a strict superset of the generated code
  51. // of equivalent ones optimized for CODE_SIZE, so we should optimize all our
  52. // tests for speed unless explicitly testing code size optimization.
  53. option optimize_for = SPEED;
  54. option java_outer_classname = "UnittestProto";
  55. // This proto includes every type of field in both singular and repeated
  56. // forms.
  57. message TestAllTypes {
  58. message NestedMessage {
  59. // The field name "b" fails to compile in proto1 because it conflicts with
  60. // a local variable named "b" in one of the generated methods. Doh.
  61. // This file needs to compile in proto1 to test backwards-compatibility.
  62. optional int32 bb = 1;
  63. }
  64. enum NestedEnum {
  65. FOO = 1;
  66. BAR = 2;
  67. BAZ = 3;
  68. }
  69. // Singular
  70. optional int32 optional_int32 = 1;
  71. optional int64 optional_int64 = 2;
  72. optional uint32 optional_uint32 = 3;
  73. optional uint64 optional_uint64 = 4;
  74. optional sint32 optional_sint32 = 5;
  75. optional sint64 optional_sint64 = 6;
  76. optional fixed32 optional_fixed32 = 7;
  77. optional fixed64 optional_fixed64 = 8;
  78. optional sfixed32 optional_sfixed32 = 9;
  79. optional sfixed64 optional_sfixed64 = 10;
  80. optional float optional_float = 11;
  81. optional double optional_double = 12;
  82. optional bool optional_bool = 13;
  83. optional string optional_string = 14;
  84. optional bytes optional_bytes = 15;
  85. optional group OptionalGroup = 16 {
  86. optional int32 a = 17;
  87. }
  88. optional NestedMessage optional_nested_message = 18;
  89. optional ForeignMessage optional_foreign_message = 19;
  90. optional protobuf_unittest_import.ImportMessage optional_import_message = 20;
  91. optional NestedEnum optional_nested_enum = 21;
  92. optional ForeignEnum optional_foreign_enum = 22;
  93. optional protobuf_unittest_import.ImportEnum optional_import_enum = 23;
  94. optional string optional_string_piece = 24 [ctype=STRING_PIECE];
  95. optional string optional_cord = 25 [ctype=CORD];
  96. // Repeated
  97. repeated int32 repeated_int32 = 31;
  98. repeated int64 repeated_int64 = 32;
  99. repeated uint32 repeated_uint32 = 33;
  100. repeated uint64 repeated_uint64 = 34;
  101. repeated sint32 repeated_sint32 = 35;
  102. repeated sint64 repeated_sint64 = 36;
  103. repeated fixed32 repeated_fixed32 = 37;
  104. repeated fixed64 repeated_fixed64 = 38;
  105. repeated sfixed32 repeated_sfixed32 = 39;
  106. repeated sfixed64 repeated_sfixed64 = 40;
  107. repeated float repeated_float = 41;
  108. repeated double repeated_double = 42;
  109. repeated bool repeated_bool = 43;
  110. repeated string repeated_string = 44;
  111. repeated bytes repeated_bytes = 45;
  112. repeated group RepeatedGroup = 46 {
  113. optional int32 a = 47;
  114. }
  115. repeated NestedMessage repeated_nested_message = 48;
  116. repeated ForeignMessage repeated_foreign_message = 49;
  117. repeated protobuf_unittest_import.ImportMessage repeated_import_message = 50;
  118. repeated NestedEnum repeated_nested_enum = 51;
  119. repeated ForeignEnum repeated_foreign_enum = 52;
  120. repeated protobuf_unittest_import.ImportEnum repeated_import_enum = 53;
  121. repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
  122. repeated string repeated_cord = 55 [ctype=CORD];
  123. // Singular with defaults
  124. optional int32 default_int32 = 61 [default = 41 ];
  125. optional int64 default_int64 = 62 [default = 42 ];
  126. optional uint32 default_uint32 = 63 [default = 43 ];
  127. optional uint64 default_uint64 = 64 [default = 44 ];
  128. optional sint32 default_sint32 = 65 [default = -45 ];
  129. optional sint64 default_sint64 = 66 [default = 46 ];
  130. optional fixed32 default_fixed32 = 67 [default = 47 ];
  131. optional fixed64 default_fixed64 = 68 [default = 48 ];
  132. optional sfixed32 default_sfixed32 = 69 [default = 49 ];
  133. optional sfixed64 default_sfixed64 = 70 [default = -50 ];
  134. optional float default_float = 71 [default = 51.5 ];
  135. optional double default_double = 72 [default = 52e3 ];
  136. optional bool default_bool = 73 [default = true ];
  137. optional string default_string = 74 [default = "hello"];
  138. optional bytes default_bytes = 75 [default = "world"];
  139. optional NestedEnum default_nested_enum = 81 [default = BAR ];
  140. optional ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
  141. optional protobuf_unittest_import.ImportEnum
  142. default_import_enum = 83 [default = IMPORT_BAR];
  143. optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
  144. optional string default_cord = 85 [ctype=CORD,default="123"];
  145. }
  146. message TestDeprecatedFields {
  147. optional int32 deprecated_int32 = 1 [deprecated=true];
  148. }
  149. // Define these after TestAllTypes to make sure the compiler can handle
  150. // that.
  151. message ForeignMessage {
  152. optional int32 c = 1;
  153. }
  154. enum ForeignEnum {
  155. FOREIGN_FOO = 4;
  156. FOREIGN_BAR = 5;
  157. FOREIGN_BAZ = 6;
  158. }
  159. message TestAllExtensions {
  160. extensions 1 to max;
  161. }
  162. extend TestAllExtensions {
  163. // Singular
  164. optional int32 optional_int32_extension = 1;
  165. optional int64 optional_int64_extension = 2;
  166. optional uint32 optional_uint32_extension = 3;
  167. optional uint64 optional_uint64_extension = 4;
  168. optional sint32 optional_sint32_extension = 5;
  169. optional sint64 optional_sint64_extension = 6;
  170. optional fixed32 optional_fixed32_extension = 7;
  171. optional fixed64 optional_fixed64_extension = 8;
  172. optional sfixed32 optional_sfixed32_extension = 9;
  173. optional sfixed64 optional_sfixed64_extension = 10;
  174. optional float optional_float_extension = 11;
  175. optional double optional_double_extension = 12;
  176. optional bool optional_bool_extension = 13;
  177. optional string optional_string_extension = 14;
  178. optional bytes optional_bytes_extension = 15;
  179. optional group OptionalGroup_extension = 16 {
  180. optional int32 a = 17;
  181. }
  182. optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
  183. optional ForeignMessage optional_foreign_message_extension = 19;
  184. optional protobuf_unittest_import.ImportMessage
  185. optional_import_message_extension = 20;
  186. optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
  187. optional ForeignEnum optional_foreign_enum_extension = 22;
  188. optional protobuf_unittest_import.ImportEnum
  189. optional_import_enum_extension = 23;
  190. optional string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
  191. optional string optional_cord_extension = 25 [ctype=CORD];
  192. // Repeated
  193. repeated int32 repeated_int32_extension = 31;
  194. repeated int64 repeated_int64_extension = 32;
  195. repeated uint32 repeated_uint32_extension = 33;
  196. repeated uint64 repeated_uint64_extension = 34;
  197. repeated sint32 repeated_sint32_extension = 35;
  198. repeated sint64 repeated_sint64_extension = 36;
  199. repeated fixed32 repeated_fixed32_extension = 37;
  200. repeated fixed64 repeated_fixed64_extension = 38;
  201. repeated sfixed32 repeated_sfixed32_extension = 39;
  202. repeated sfixed64 repeated_sfixed64_extension = 40;
  203. repeated float repeated_float_extension = 41;
  204. repeated double repeated_double_extension = 42;
  205. repeated bool repeated_bool_extension = 43;
  206. repeated string repeated_string_extension = 44;
  207. repeated bytes repeated_bytes_extension = 45;
  208. repeated group RepeatedGroup_extension = 46 {
  209. optional int32 a = 47;
  210. }
  211. repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
  212. repeated ForeignMessage repeated_foreign_message_extension = 49;
  213. repeated protobuf_unittest_import.ImportMessage
  214. repeated_import_message_extension = 50;
  215. repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
  216. repeated ForeignEnum repeated_foreign_enum_extension = 52;
  217. repeated protobuf_unittest_import.ImportEnum
  218. repeated_import_enum_extension = 53;
  219. repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
  220. repeated string repeated_cord_extension = 55 [ctype=CORD];
  221. // Singular with defaults
  222. optional int32 default_int32_extension = 61 [default = 41 ];
  223. optional int64 default_int64_extension = 62 [default = 42 ];
  224. optional uint32 default_uint32_extension = 63 [default = 43 ];
  225. optional uint64 default_uint64_extension = 64 [default = 44 ];
  226. optional sint32 default_sint32_extension = 65 [default = -45 ];
  227. optional sint64 default_sint64_extension = 66 [default = 46 ];
  228. optional fixed32 default_fixed32_extension = 67 [default = 47 ];
  229. optional fixed64 default_fixed64_extension = 68 [default = 48 ];
  230. optional sfixed32 default_sfixed32_extension = 69 [default = 49 ];
  231. optional sfixed64 default_sfixed64_extension = 70 [default = -50 ];
  232. optional float default_float_extension = 71 [default = 51.5 ];
  233. optional double default_double_extension = 72 [default = 52e3 ];
  234. optional bool default_bool_extension = 73 [default = true ];
  235. optional string default_string_extension = 74 [default = "hello"];
  236. optional bytes default_bytes_extension = 75 [default = "world"];
  237. optional TestAllTypes.NestedEnum
  238. default_nested_enum_extension = 81 [default = BAR];
  239. optional ForeignEnum
  240. default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
  241. optional protobuf_unittest_import.ImportEnum
  242. default_import_enum_extension = 83 [default = IMPORT_BAR];
  243. optional string default_string_piece_extension = 84 [ctype=STRING_PIECE,
  244. default="abc"];
  245. optional string default_cord_extension = 85 [ctype=CORD, default="123"];
  246. }
  247. message TestNestedExtension {
  248. extend TestAllExtensions {
  249. // Check for bug where string extensions declared in tested scope did not
  250. // compile.
  251. optional string test = 1002 [default="test"];
  252. }
  253. }
  254. // We have separate messages for testing required fields because it's
  255. // annoying to have to fill in required fields in TestProto in order to
  256. // do anything with it. Note that we don't need to test every type of
  257. // required filed because the code output is basically identical to
  258. // optional fields for all types.
  259. message TestRequired {
  260. required int32 a = 1;
  261. optional int32 dummy2 = 2;
  262. required int32 b = 3;
  263. extend TestAllExtensions {
  264. optional TestRequired single = 1000;
  265. repeated TestRequired multi = 1001;
  266. }
  267. // Pad the field count to 32 so that we can test that IsInitialized()
  268. // properly checks multiple elements of has_bits_.
  269. optional int32 dummy4 = 4;
  270. optional int32 dummy5 = 5;
  271. optional int32 dummy6 = 6;
  272. optional int32 dummy7 = 7;
  273. optional int32 dummy8 = 8;
  274. optional int32 dummy9 = 9;
  275. optional int32 dummy10 = 10;
  276. optional int32 dummy11 = 11;
  277. optional int32 dummy12 = 12;
  278. optional int32 dummy13 = 13;
  279. optional int32 dummy14 = 14;
  280. optional int32 dummy15 = 15;
  281. optional int32 dummy16 = 16;
  282. optional int32 dummy17 = 17;
  283. optional int32 dummy18 = 18;
  284. optional int32 dummy19 = 19;
  285. optional int32 dummy20 = 20;
  286. optional int32 dummy21 = 21;
  287. optional int32 dummy22 = 22;
  288. optional int32 dummy23 = 23;
  289. optional int32 dummy24 = 24;
  290. optional int32 dummy25 = 25;
  291. optional int32 dummy26 = 26;
  292. optional int32 dummy27 = 27;
  293. optional int32 dummy28 = 28;
  294. optional int32 dummy29 = 29;
  295. optional int32 dummy30 = 30;
  296. optional int32 dummy31 = 31;
  297. optional int32 dummy32 = 32;
  298. required int32 c = 33;
  299. }
  300. message TestRequiredForeign {
  301. optional TestRequired optional_message = 1;
  302. repeated TestRequired repeated_message = 2;
  303. optional int32 dummy = 3;
  304. }
  305. // Test that we can use NestedMessage from outside TestAllTypes.
  306. message TestForeignNested {
  307. optional TestAllTypes.NestedMessage foreign_nested = 1;
  308. }
  309. // TestEmptyMessage is used to test unknown field support.
  310. message TestEmptyMessage {
  311. }
  312. // Like above, but declare all field numbers as potential extensions. No
  313. // actual extensions should ever be defined for this type.
  314. message TestEmptyMessageWithExtensions {
  315. extensions 1 to max;
  316. }
  317. message TestMultipleExtensionRanges {
  318. extensions 42;
  319. extensions 4143 to 4243;
  320. extensions 65536 to max;
  321. }
  322. // Test that really large tag numbers don't break anything.
  323. message TestReallyLargeTagNumber {
  324. // The largest possible tag number is 2^28 - 1, since the wire format uses
  325. // three bits to communicate wire type.
  326. optional int32 a = 1;
  327. optional int32 bb = 268435455;
  328. }
  329. message TestRecursiveMessage {
  330. optional TestRecursiveMessage a = 1;
  331. optional int32 i = 2;
  332. }
  333. // Test that mutual recursion works.
  334. message TestMutualRecursionA {
  335. optional TestMutualRecursionB bb = 1;
  336. }
  337. message TestMutualRecursionB {
  338. optional TestMutualRecursionA a = 1;
  339. optional int32 optional_int32 = 2;
  340. }
  341. // Test that groups have disjoint field numbers from their siblings and
  342. // parents. This is NOT possible in proto1; only proto2. When attempting
  343. // to compile with proto1, this will emit an error; so we only include it
  344. // in protobuf_unittest_proto.
  345. message TestDupFieldNumber { // NO_PROTO1
  346. optional int32 a = 1; // NO_PROTO1
  347. optional group Foo = 2 { optional int32 a = 1; } // NO_PROTO1
  348. optional group Bar = 3 { optional int32 a = 1; } // NO_PROTO1
  349. } // NO_PROTO1
  350. // Needed for a Python test.
  351. message TestNestedMessageHasBits {
  352. message NestedMessage {
  353. repeated int32 nestedmessage_repeated_int32 = 1;
  354. repeated ForeignMessage nestedmessage_repeated_foreignmessage = 2;
  355. }
  356. optional NestedMessage optional_nested_message = 1;
  357. }
  358. // Test an enum that has multiple values with the same number.
  359. enum TestEnumWithDupValue {
  360. FOO1 = 1;
  361. BAR1 = 2;
  362. BAZ = 3;
  363. FOO2 = 1;
  364. BAR2 = 2;
  365. }
  366. // Test an enum with large, unordered values.
  367. enum TestSparseEnum {
  368. SPARSE_A = 123;
  369. SPARSE_B = 62374;
  370. SPARSE_C = 12589234;
  371. SPARSE_D = -15;
  372. SPARSE_E = -53452;
  373. SPARSE_F = 0;
  374. SPARSE_G = 2;
  375. }
  376. // Test message with CamelCase field names. This violates Protocol Buffer
  377. // standard style.
  378. message TestCamelCaseFieldNames {
  379. optional int32 PrimitiveField = 1;
  380. optional string StringField = 2;
  381. optional ForeignEnum EnumField = 3;
  382. optional ForeignMessage MessageField = 4;
  383. optional string StringPieceField = 5 [ctype=STRING_PIECE];
  384. optional string CordField = 6 [ctype=CORD];
  385. repeated int32 RepeatedPrimitiveField = 7;
  386. repeated string RepeatedStringField = 8;
  387. repeated ForeignEnum RepeatedEnumField = 9;
  388. repeated ForeignMessage RepeatedMessageField = 10;
  389. repeated string RepeatedStringPieceField = 11 [ctype=STRING_PIECE];
  390. repeated string RepeatedCordField = 12 [ctype=CORD];
  391. }
  392. // We list fields out of order, to ensure that we're using field number and not
  393. // field index to determine serialization order.
  394. message TestFieldOrderings {
  395. optional string my_string = 11;
  396. extensions 2 to 10;
  397. optional int64 my_int = 1;
  398. extensions 12 to 100;
  399. optional float my_float = 101;
  400. }
  401. extend TestFieldOrderings {
  402. optional string my_extension_string = 50;
  403. optional int32 my_extension_int = 5;
  404. }
  405. message TestExtremeDefaultValues {
  406. optional bytes escaped_bytes = 1 [default = "\0\001\a\b\f\n\r\t\v\\\'\"\xfe"];
  407. optional uint32 large_uint32 = 2 [default = 0xFFFFFFFF];
  408. optional uint64 large_uint64 = 3 [default = 0xFFFFFFFFFFFFFFFF];
  409. optional int32 small_int32 = 4 [default = -0x7FFFFFFF];
  410. optional int64 small_int64 = 5 [default = -0x7FFFFFFFFFFFFFFF];
  411. // The default value here is UTF-8 for "\u1234". (We could also just type
  412. // the UTF-8 text directly into this text file rather than escape it, but
  413. // lots of people use editors that would be confused by this.)
  414. optional string utf8_string = 6 [default = "\341\210\264"];
  415. // Tests for single-precision floating-point values.
  416. optional float zero_float = 7 [default = 0];
  417. optional float one_float = 8 [default = 1];
  418. optional float small_float = 9 [default = 1.5];
  419. optional float negative_one_float = 10 [default = -1];
  420. optional float negative_float = 11 [default = -1.5];
  421. // Using exponents
  422. optional float large_float = 12 [default = 2E8];
  423. optional float small_negative_float = 13 [default = -8e-28];
  424. // Text for nonfinite floating-point values.
  425. optional double inf_double = 14 [default = inf];
  426. optional double neg_inf_double = 15 [default = -inf];
  427. optional double nan_double = 16 [default = nan];
  428. optional float inf_float = 17 [default = inf];
  429. optional float neg_inf_float = 18 [default = -inf];
  430. optional float nan_float = 19 [default = nan];
  431. // Tests for C++ trigraphs.
  432. // Trigraphs should be escaped in C++ generated files, but they should not be
  433. // escaped for other languages.
  434. // Note that in .proto file, "\?" is a valid way to escape ? in string
  435. // literals.
  436. optional string cpp_trigraph = 20 [default = "? \? ?? \?? \??? ??/ ?\?-"];
  437. }
  438. message SparseEnumMessage {
  439. optional TestSparseEnum sparse_enum = 1;
  440. }
  441. // Test String and Bytes: string is for valid UTF-8 strings
  442. message OneString {
  443. optional string data = 1;
  444. }
  445. message OneBytes {
  446. optional bytes data = 1;
  447. }
  448. // Test messages for packed fields
  449. message TestPackedTypes {
  450. repeated int32 packed_int32 = 90 [packed = true];
  451. repeated int64 packed_int64 = 91 [packed = true];
  452. repeated uint32 packed_uint32 = 92 [packed = true];
  453. repeated uint64 packed_uint64 = 93 [packed = true];
  454. repeated sint32 packed_sint32 = 94 [packed = true];
  455. repeated sint64 packed_sint64 = 95 [packed = true];
  456. repeated fixed32 packed_fixed32 = 96 [packed = true];
  457. repeated fixed64 packed_fixed64 = 97 [packed = true];
  458. repeated sfixed32 packed_sfixed32 = 98 [packed = true];
  459. repeated sfixed64 packed_sfixed64 = 99 [packed = true];
  460. repeated float packed_float = 100 [packed = true];
  461. repeated double packed_double = 101 [packed = true];
  462. repeated bool packed_bool = 102 [packed = true];
  463. repeated ForeignEnum packed_enum = 103 [packed = true];
  464. }
  465. // A message with the same fields as TestPackedTypes, but without packing. Used
  466. // to test packed <-> unpacked wire compatibility.
  467. message TestUnpackedTypes {
  468. repeated int32 unpacked_int32 = 90 [packed = false];
  469. repeated int64 unpacked_int64 = 91 [packed = false];
  470. repeated uint32 unpacked_uint32 = 92 [packed = false];
  471. repeated uint64 unpacked_uint64 = 93 [packed = false];
  472. repeated sint32 unpacked_sint32 = 94 [packed = false];
  473. repeated sint64 unpacked_sint64 = 95 [packed = false];
  474. repeated fixed32 unpacked_fixed32 = 96 [packed = false];
  475. repeated fixed64 unpacked_fixed64 = 97 [packed = false];
  476. repeated sfixed32 unpacked_sfixed32 = 98 [packed = false];
  477. repeated sfixed64 unpacked_sfixed64 = 99 [packed = false];
  478. repeated float unpacked_float = 100 [packed = false];
  479. repeated double unpacked_double = 101 [packed = false];
  480. repeated bool unpacked_bool = 102 [packed = false];
  481. repeated ForeignEnum unpacked_enum = 103 [packed = false];
  482. }
  483. message TestPackedExtensions {
  484. extensions 1 to max;
  485. }
  486. extend TestPackedExtensions {
  487. repeated int32 packed_int32_extension = 90 [packed = true];
  488. repeated int64 packed_int64_extension = 91 [packed = true];
  489. repeated uint32 packed_uint32_extension = 92 [packed = true];
  490. repeated uint64 packed_uint64_extension = 93 [packed = true];
  491. repeated sint32 packed_sint32_extension = 94 [packed = true];
  492. repeated sint64 packed_sint64_extension = 95 [packed = true];
  493. repeated fixed32 packed_fixed32_extension = 96 [packed = true];
  494. repeated fixed64 packed_fixed64_extension = 97 [packed = true];
  495. repeated sfixed32 packed_sfixed32_extension = 98 [packed = true];
  496. repeated sfixed64 packed_sfixed64_extension = 99 [packed = true];
  497. repeated float packed_float_extension = 100 [packed = true];
  498. repeated double packed_double_extension = 101 [packed = true];
  499. repeated bool packed_bool_extension = 102 [packed = true];
  500. repeated ForeignEnum packed_enum_extension = 103 [packed = true];
  501. }
  502. // Used by ExtensionSetTest/DynamicExtensions. The test actually builds
  503. // a set of extensions to TestAllExtensions dynamically, based on the fields
  504. // of this message type.
  505. message TestDynamicExtensions {
  506. enum DynamicEnumType {
  507. DYNAMIC_FOO = 2200;
  508. DYNAMIC_BAR = 2201;
  509. DYNAMIC_BAZ = 2202;
  510. }
  511. message DynamicMessageType {
  512. optional int32 dynamic_field = 2100;
  513. }
  514. optional fixed32 scalar_extension = 2000;
  515. optional ForeignEnum enum_extension = 2001;
  516. optional DynamicEnumType dynamic_enum_extension = 2002;
  517. optional ForeignMessage message_extension = 2003;
  518. optional DynamicMessageType dynamic_message_extension = 2004;
  519. repeated string repeated_extension = 2005;
  520. repeated sint32 packed_extension = 2006 [packed = true];
  521. }
  522. message TestRepeatedScalarDifferentTagSizes {
  523. // Parsing repeated fixed size values used to fail. This message needs to be
  524. // used in order to get a tag of the right size; all of the repeated fields
  525. // in TestAllTypes didn't trigger the check.
  526. repeated fixed32 repeated_fixed32 = 12;
  527. // Check for a varint type, just for good measure.
  528. repeated int32 repeated_int32 = 13;
  529. // These have two-byte tags.
  530. repeated fixed64 repeated_fixed64 = 2046;
  531. repeated int64 repeated_int64 = 2047;
  532. // Three byte tags.
  533. repeated float repeated_float = 262142;
  534. repeated uint64 repeated_uint64 = 262143;
  535. }
  536. // Test that RPC services work.
  537. message FooRequest {}
  538. message FooResponse {}
  539. service TestService {
  540. rpc Foo(FooRequest) returns (FooResponse);
  541. rpc Bar(BarRequest) returns (BarResponse);
  542. }
  543. message BarRequest {}
  544. message BarResponse {}