unittest.proto 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2008 Google Inc. All rights reserved.
  3. //
  4. // Use of this source code is governed by a BSD-style
  5. // license that can be found in the LICENSE file or at
  6. // https://developers.google.com/open-source/licenses/bsd
  7. // Author: kenton@google.com (Kenton Varda)
  8. // Based on original Protocol Buffers design by
  9. // Sanjay Ghemawat, Jeff Dean, and others.
  10. //
  11. // A proto file we will use for unit testing.
  12. //
  13. // LINT: ALLOW_GROUPS, LEGACY_NAMES
  14. edition = "2023";
  15. // We don't put this in a package within proto2 because we need to make sure
  16. // that the generated code doesn't depend on being in the proto2 namespace.
  17. // In test_util.h we do "using namespace unittest = protobuf_unittest".
  18. package protobuf_unittest;
  19. import "google/protobuf/unittest_import.proto";
  20. option features = {
  21. enum_type: CLOSED
  22. repeated_field_encoding: EXPANDED
  23. utf8_validation: NONE
  24. };
  25. // Some generic_services option(s) added automatically.
  26. // See: http://go/proto2-generic-services-default
  27. option cc_generic_services = true; // auto-added
  28. option java_generic_services = true; // auto-added
  29. option py_generic_services = true; // auto-added
  30. option cc_enable_arenas = true;
  31. // Protos optimized for SPEED use a strict superset of the generated code
  32. // of equivalent ones optimized for CODE_SIZE, so we should optimize all our
  33. // tests for speed unless explicitly testing code size optimization.
  34. option optimize_for = SPEED;
  35. option java_outer_classname = "UnittestProto";
  36. // This proto includes every type of field in both singular and repeated
  37. // forms.
  38. message TestAllTypes {
  39. message NestedMessage {
  40. // The field name "b" fails to compile in proto1 because it conflicts with
  41. // a local variable named "b" in one of the generated methods. Doh.
  42. // This file needs to compile in proto1 to test backwards-compatibility.
  43. int32 bb = 1;
  44. }
  45. enum NestedEnum {
  46. FOO = 1;
  47. BAR = 2;
  48. BAZ = 3;
  49. NEG = -1; // Intentionally negative.
  50. }
  51. // Singular
  52. int32 optional_int32 = 1;
  53. int64 optional_int64 = 2;
  54. uint32 optional_uint32 = 3;
  55. uint64 optional_uint64 = 4;
  56. sint32 optional_sint32 = 5;
  57. sint64 optional_sint64 = 6;
  58. fixed32 optional_fixed32 = 7;
  59. fixed64 optional_fixed64 = 8;
  60. sfixed32 optional_sfixed32 = 9;
  61. sfixed64 optional_sfixed64 = 10;
  62. float optional_float = 11;
  63. double optional_double = 12;
  64. bool optional_bool = 13;
  65. string optional_string = 14;
  66. bytes optional_bytes = 15;
  67. message OptionalGroup {
  68. int32 a = 17;
  69. }
  70. OptionalGroup optionalgroup = 16 [
  71. features.message_encoding = DELIMITED
  72. ];
  73. NestedMessage optional_nested_message = 18;
  74. ForeignMessage optional_foreign_message = 19;
  75. protobuf_unittest_import.ImportMessage optional_import_message = 20;
  76. NestedEnum optional_nested_enum = 21;
  77. ForeignEnum optional_foreign_enum = 22;
  78. protobuf_unittest_import.ImportEnum optional_import_enum = 23;
  79. string optional_string_piece = 24 [
  80. ctype = STRING_PIECE
  81. ];
  82. string optional_cord = 25 [
  83. ctype = CORD
  84. ];
  85. bytes optional_bytes_cord = 86 [ctype=CORD];
  86. // Defined in unittest_import_public.proto
  87. protobuf_unittest_import.PublicImportMessage optional_public_import_message = 26;
  88. NestedMessage optional_lazy_message = 27 [
  89. lazy = true
  90. ];
  91. NestedMessage optional_unverified_lazy_message = 28 [
  92. unverified_lazy = true
  93. ];
  94. // Repeated
  95. repeated int32 repeated_int32 = 31;
  96. repeated int64 repeated_int64 = 32;
  97. repeated uint32 repeated_uint32 = 33;
  98. repeated uint64 repeated_uint64 = 34;
  99. repeated sint32 repeated_sint32 = 35;
  100. repeated sint64 repeated_sint64 = 36;
  101. repeated fixed32 repeated_fixed32 = 37;
  102. repeated fixed64 repeated_fixed64 = 38;
  103. repeated sfixed32 repeated_sfixed32 = 39;
  104. repeated sfixed64 repeated_sfixed64 = 40;
  105. repeated float repeated_float = 41;
  106. repeated double repeated_double = 42;
  107. repeated bool repeated_bool = 43;
  108. repeated string repeated_string = 44;
  109. repeated bytes repeated_bytes = 45;
  110. message RepeatedGroup {
  111. int32 a = 47;
  112. }
  113. repeated RepeatedGroup repeatedgroup = 46 [
  114. features.message_encoding = DELIMITED
  115. ];
  116. repeated NestedMessage repeated_nested_message = 48;
  117. repeated ForeignMessage repeated_foreign_message = 49;
  118. repeated protobuf_unittest_import.ImportMessage repeated_import_message = 50;
  119. repeated NestedEnum repeated_nested_enum = 51;
  120. repeated ForeignEnum repeated_foreign_enum = 52;
  121. repeated protobuf_unittest_import.ImportEnum repeated_import_enum = 53;
  122. repeated string repeated_string_piece = 54 [
  123. ctype = STRING_PIECE
  124. ];
  125. repeated string repeated_cord = 55 [
  126. ctype = CORD
  127. ];
  128. repeated NestedMessage repeated_lazy_message = 57 [
  129. lazy = true
  130. ];
  131. // Singular with defaults
  132. int32 default_int32 = 61 [
  133. default = 41
  134. ];
  135. int64 default_int64 = 62 [
  136. default = 42
  137. ];
  138. uint32 default_uint32 = 63 [
  139. default = 43
  140. ];
  141. uint64 default_uint64 = 64 [
  142. default = 44
  143. ];
  144. sint32 default_sint32 = 65 [
  145. default = -45
  146. ];
  147. sint64 default_sint64 = 66 [
  148. default = 46
  149. ];
  150. fixed32 default_fixed32 = 67 [
  151. default = 47
  152. ];
  153. fixed64 default_fixed64 = 68 [
  154. default = 48
  155. ];
  156. sfixed32 default_sfixed32 = 69 [
  157. default = 49
  158. ];
  159. sfixed64 default_sfixed64 = 70 [
  160. default = -50
  161. ];
  162. float default_float = 71 [
  163. default = 51.5
  164. ];
  165. double default_double = 72 [
  166. default = 5.2e4
  167. ];
  168. bool default_bool = 73 [
  169. default = true
  170. ];
  171. string default_string = 74 [
  172. default = "hello"
  173. ];
  174. bytes default_bytes = 75 [
  175. default = "world"
  176. ];
  177. NestedEnum default_nested_enum = 81 [
  178. default = BAR
  179. ];
  180. ForeignEnum default_foreign_enum = 82 [
  181. default = FOREIGN_BAR
  182. ];
  183. protobuf_unittest_import.ImportEnum default_import_enum = 83 [
  184. default = IMPORT_BAR
  185. ];
  186. string default_string_piece = 84 [
  187. ctype = STRING_PIECE,
  188. default = "abc"
  189. ];
  190. string default_cord = 85 [
  191. ctype = CORD,
  192. default = "123"
  193. ];
  194. // For oneof test
  195. oneof oneof_field {
  196. uint32 oneof_uint32 = 111;
  197. NestedMessage oneof_nested_message = 112;
  198. string oneof_string = 113;
  199. bytes oneof_bytes = 114;
  200. string oneof_cord = 115 [
  201. ctype = CORD
  202. ];
  203. string oneof_string_piece = 116 [
  204. ctype = STRING_PIECE
  205. ];
  206. NestedMessage oneof_lazy_nested_message = 117 [
  207. lazy = true
  208. ];
  209. }
  210. }
  211. // This proto includes a recursively nested message.
  212. message NestedTestAllTypes {
  213. NestedTestAllTypes child = 1;
  214. TestAllTypes payload = 2;
  215. repeated NestedTestAllTypes repeated_child = 3;
  216. NestedTestAllTypes lazy_child = 4 [
  217. lazy = true
  218. ];
  219. TestAllTypes eager_child = 5 [
  220. lazy = false
  221. ];
  222. }
  223. message TestDeprecatedFields {
  224. int32 deprecated_int32 = 1 [
  225. deprecated = true
  226. ];
  227. repeated string deprecated_repeated_string = 4 [
  228. deprecated = true
  229. ];
  230. TestAllTypes.NestedMessage deprecated_message = 3 [
  231. deprecated = true
  232. ];
  233. oneof oneof_fields {
  234. int32 deprecated_int32_in_oneof = 2 [
  235. deprecated = true
  236. ];
  237. }
  238. TestDeprecatedFields nested = 5;
  239. }
  240. message TestDeprecatedMessage {
  241. option deprecated = true;
  242. }
  243. // Define these after TestAllTypes to make sure the compiler can handle
  244. // that.
  245. message ForeignMessage {
  246. int32 c = 1;
  247. int32 d = 2;
  248. }
  249. enum ForeignEnum {
  250. FOREIGN_FOO = 4;
  251. FOREIGN_BAR = 5;
  252. FOREIGN_BAZ = 6;
  253. FOREIGN_BAX = 32; // (1 << 32) to generate a 64b bitmask would be incorrect.
  254. FOREIGN_LARGE = 123456; // Large enough to escape the Boxed Integer cache.
  255. }
  256. enum TestDeprecatedEnum {
  257. option deprecated = true;
  258. TEST_DEPRECATED_ENUM_UNSPECIFIED = 0;
  259. TEST_DEPRECATED_ENUM_VALUE1 = 1;
  260. TEST_DEPRECATED_ENUM_VALUE2 = 2;
  261. }
  262. message TestReservedFields {
  263. reserved 2, 15, 9 to 11;
  264. reserved bar, baz;
  265. }
  266. enum TestReservedEnumFields {
  267. UNKNOWN = 0;
  268. reserved 2, 15, 9 to 11;
  269. reserved bar, baz;
  270. }
  271. message TestAllExtensions {
  272. extensions 1 to max;
  273. }
  274. extend TestAllExtensions {
  275. // Singular
  276. int32 optional_int32_extension = 1;
  277. int64 optional_int64_extension = 2;
  278. uint32 optional_uint32_extension = 3;
  279. uint64 optional_uint64_extension = 4;
  280. sint32 optional_sint32_extension = 5;
  281. sint64 optional_sint64_extension = 6;
  282. fixed32 optional_fixed32_extension = 7;
  283. fixed64 optional_fixed64_extension = 8;
  284. sfixed32 optional_sfixed32_extension = 9;
  285. sfixed64 optional_sfixed64_extension = 10;
  286. float optional_float_extension = 11;
  287. double optional_double_extension = 12;
  288. bool optional_bool_extension = 13;
  289. string optional_string_extension = 14;
  290. bytes optional_bytes_extension = 15;
  291. OptionalGroup_extension optionalgroup_extension = 16 [
  292. features.message_encoding = DELIMITED
  293. ];
  294. TestAllTypes.NestedMessage optional_nested_message_extension = 18;
  295. ForeignMessage optional_foreign_message_extension = 19;
  296. protobuf_unittest_import.ImportMessage optional_import_message_extension = 20;
  297. TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
  298. ForeignEnum optional_foreign_enum_extension = 22;
  299. protobuf_unittest_import.ImportEnum optional_import_enum_extension = 23;
  300. string optional_string_piece_extension = 24 [
  301. ctype = STRING_PIECE
  302. ];
  303. // TODO: ctype=CORD is not supported for extension. Add
  304. // ctype=CORD option back after it is supported.
  305. string optional_cord_extension = 25;
  306. bytes optional_bytes_cord_extension = 86;
  307. protobuf_unittest_import.PublicImportMessage
  308. optional_public_import_message_extension = 26;
  309. TestAllTypes.NestedMessage optional_lazy_message_extension = 27 [
  310. lazy = true
  311. ];
  312. TestAllTypes.NestedMessage optional_unverified_lazy_message_extension = 28 [
  313. unverified_lazy = true
  314. ];
  315. // Repeated
  316. repeated int32 repeated_int32_extension = 31;
  317. repeated int64 repeated_int64_extension = 32;
  318. repeated uint32 repeated_uint32_extension = 33;
  319. repeated uint64 repeated_uint64_extension = 34;
  320. repeated sint32 repeated_sint32_extension = 35;
  321. repeated sint64 repeated_sint64_extension = 36;
  322. repeated fixed32 repeated_fixed32_extension = 37;
  323. repeated fixed64 repeated_fixed64_extension = 38;
  324. repeated sfixed32 repeated_sfixed32_extension = 39;
  325. repeated sfixed64 repeated_sfixed64_extension = 40;
  326. repeated float repeated_float_extension = 41;
  327. repeated double repeated_double_extension = 42;
  328. repeated bool repeated_bool_extension = 43;
  329. repeated string repeated_string_extension = 44;
  330. repeated bytes repeated_bytes_extension = 45;
  331. repeated RepeatedGroup_extension repeatedgroup_extension = 46 [
  332. features.message_encoding = DELIMITED
  333. ];
  334. repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
  335. repeated ForeignMessage repeated_foreign_message_extension = 49;
  336. repeated protobuf_unittest_import.ImportMessage
  337. repeated_import_message_extension = 50;
  338. repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
  339. repeated ForeignEnum repeated_foreign_enum_extension = 52;
  340. repeated protobuf_unittest_import.ImportEnum repeated_import_enum_extension = 53;
  341. repeated string repeated_string_piece_extension = 54 [
  342. ctype = STRING_PIECE
  343. ];
  344. // TODO: ctype=CORD is not supported for extension. Add
  345. // ctype=CORD option back after it is supported.
  346. repeated string repeated_cord_extension = 55;
  347. repeated TestAllTypes.NestedMessage repeated_lazy_message_extension = 57 [
  348. lazy = true
  349. ];
  350. // Singular with defaults
  351. int32 default_int32_extension = 61 [
  352. default = 41
  353. ];
  354. int64 default_int64_extension = 62 [
  355. default = 42
  356. ];
  357. uint32 default_uint32_extension = 63 [
  358. default = 43
  359. ];
  360. uint64 default_uint64_extension = 64 [
  361. default = 44
  362. ];
  363. sint32 default_sint32_extension = 65 [
  364. default = -45
  365. ];
  366. sint64 default_sint64_extension = 66 [
  367. default = 46
  368. ];
  369. fixed32 default_fixed32_extension = 67 [
  370. default = 47
  371. ];
  372. fixed64 default_fixed64_extension = 68 [
  373. default = 48
  374. ];
  375. sfixed32 default_sfixed32_extension = 69 [
  376. default = 49
  377. ];
  378. sfixed64 default_sfixed64_extension = 70 [
  379. default = -50
  380. ];
  381. float default_float_extension = 71 [
  382. default = 51.5
  383. ];
  384. double default_double_extension = 72 [
  385. default = 5.2e4
  386. ];
  387. bool default_bool_extension = 73 [
  388. default = true
  389. ];
  390. string default_string_extension = 74 [
  391. default = "hello"
  392. ];
  393. bytes default_bytes_extension = 75 [
  394. default = "world"
  395. ];
  396. TestAllTypes.NestedEnum default_nested_enum_extension = 81 [
  397. default = BAR
  398. ];
  399. ForeignEnum default_foreign_enum_extension = 82 [
  400. default = FOREIGN_BAR
  401. ];
  402. protobuf_unittest_import.ImportEnum default_import_enum_extension = 83 [
  403. default = IMPORT_BAR
  404. ];
  405. string default_string_piece_extension = 84 [
  406. ctype = STRING_PIECE,
  407. default = "abc"
  408. ];
  409. // TODO: ctype=CORD is not supported for extension. Add
  410. // ctype=CORD option back after it is supported.
  411. string default_cord_extension = 85 [
  412. default = "123"
  413. ];
  414. // For oneof test
  415. uint32 oneof_uint32_extension = 111;
  416. TestAllTypes.NestedMessage oneof_nested_message_extension = 112;
  417. string oneof_string_extension = 113;
  418. bytes oneof_bytes_extension = 114;
  419. }
  420. message OptionalGroup_extension {
  421. int32 a = 17;
  422. }
  423. message RepeatedGroup_extension {
  424. int32 a = 47;
  425. }
  426. message TestMixedFieldsAndExtensions {
  427. int32 a = 1;
  428. repeated fixed32 b = 3;
  429. extensions 2, 4;
  430. extend TestMixedFieldsAndExtensions {
  431. int32 c = 2;
  432. repeated fixed32 d = 4;
  433. }
  434. }
  435. message TestGroup {
  436. message OptionalGroup {
  437. int32 a = 17;
  438. int32 zz = 89; // fast table size must be at least 16, for this
  439. // field to be parsed by the fast parser, since
  440. // 89 - 17 = 72 is a multiple of 8.
  441. }
  442. OptionalGroup optionalgroup = 16 [
  443. features.message_encoding = DELIMITED
  444. ];
  445. ForeignEnum optional_foreign_enum = 22;
  446. }
  447. message TestGroupExtension {
  448. extensions 1 to max;
  449. }
  450. message TestNestedExtension {
  451. extend TestAllExtensions {
  452. // Check for bug where string extensions declared in tested scope did not
  453. // compile.
  454. string test = 1002 [
  455. default = "test"
  456. ];
  457. // Used to test if generated extension name is correct when there are
  458. // underscores.
  459. string nested_string_extension = 1003;
  460. }
  461. extend TestGroupExtension {
  462. OptionalGroup_extension optionalgroup_extension = 16 [
  463. features.message_encoding = DELIMITED
  464. ];
  465. ForeignEnum optional_foreign_enum_extension = 22;
  466. }
  467. message OptionalGroup_extension {
  468. int32 a = 17;
  469. }
  470. }
  471. message TestChildExtension {
  472. string a = 1;
  473. string b = 2;
  474. TestAllExtensions optional_extension = 3;
  475. }
  476. // Emulates wireformat data of TestChildExtension with dynamic extension
  477. // (DynamicExtension).
  478. message TestChildExtensionData {
  479. message NestedTestAllExtensionsData {
  480. message NestedDynamicExtensions {
  481. int32 a = 1;
  482. int32 b = 2;
  483. }
  484. NestedDynamicExtensions dynamic = 409707008;
  485. }
  486. string a = 1;
  487. string b = 2;
  488. NestedTestAllExtensionsData optional_extension = 3;
  489. }
  490. message TestNestedChildExtension {
  491. int32 a = 1;
  492. TestChildExtension child = 2;
  493. }
  494. // Emulates wireformat data of TestNestedChildExtension with dynamic extension
  495. // (DynamicExtension).
  496. message TestNestedChildExtensionData {
  497. int32 a = 1;
  498. TestChildExtensionData child = 2;
  499. }
  500. // Required and closed enum fields are considered unknown fields if the value is
  501. // not valid. We need to make sure it functions as expected.
  502. message TestRequiredEnum {
  503. ForeignEnum required_enum = 1 [
  504. features.field_presence = LEGACY_REQUIRED
  505. ];
  506. // A dummy optional field.
  507. int32 a = 2;
  508. }
  509. // Required and open enum accepts invalid enum values.
  510. enum ForeignOpenEnum {
  511. option features.enum_type = OPEN;
  512. FOREIGN_OPEN_UNKNOWN = 0;
  513. FOREIGN_OPEN_FOO = 4;
  514. FOREIGN_OPEN_BAR = 5;
  515. FOREIGN_OPEN_BAZ = 6;
  516. FOREIGN_OPEN_BAX = 32; // (1 << 32) to generate a 64b bitmask would be
  517. // incorrect.
  518. }
  519. message TestRequiredOpenEnum {
  520. ForeignOpenEnum required_enum = 1 [
  521. features.field_presence = LEGACY_REQUIRED
  522. ];
  523. // A dummy optional field.
  524. int32 a = 2;
  525. }
  526. // TestRequiredEnum + using enum values that won't fit to 64 bitmask.
  527. message TestRequiredEnumNoMask {
  528. enum NestedEnum {
  529. UNSPECIFIED = 0;
  530. FOO = 2;
  531. BAR = 100;
  532. BAZ = -1; // Intentionally negative.
  533. }
  534. NestedEnum required_enum = 1 [
  535. features.field_presence = LEGACY_REQUIRED
  536. ];
  537. // A dummy optional field.
  538. int32 a = 2;
  539. }
  540. message TestRequiredEnumMulti {
  541. enum NestedEnum {
  542. UNSPECIFIED = 0;
  543. FOO = 1;
  544. BAR = 2;
  545. BAZ = 100;
  546. }
  547. // Intentionally placed in descending field number to force sorting in closed
  548. // enum verification.
  549. NestedEnum required_enum_4 = 4 [
  550. features.field_presence = LEGACY_REQUIRED
  551. ];
  552. int32 a_3 = 3;
  553. NestedEnum required_enum_2 = 2 [
  554. features.field_presence = LEGACY_REQUIRED
  555. ];
  556. ForeignEnum required_enum_1 = 1 [
  557. features.field_presence = LEGACY_REQUIRED
  558. ];
  559. }
  560. message TestRequiredNoMaskMulti {
  561. enum NestedEnum {
  562. UNSPECIFIED = 0;
  563. FOO = 1;
  564. BAR = 2;
  565. BAZ = 100;
  566. }
  567. // Intentionally placed in descending field number to force sorting in closed
  568. // enum verification. Also, using large field numbers to use tag only
  569. // matching for required fields.
  570. fixed32 required_fixed32_80 = 80 [
  571. features.field_presence = LEGACY_REQUIRED
  572. ];
  573. fixed32 required_fixed32_70 = 70 [
  574. features.field_presence = LEGACY_REQUIRED
  575. ];
  576. NestedEnum required_enum_64 = 64 [
  577. features.field_presence = LEGACY_REQUIRED
  578. ];
  579. NestedEnum required_enum_4 = 4 [
  580. features.field_presence = LEGACY_REQUIRED
  581. ];
  582. int32 a_3 = 3;
  583. NestedEnum required_enum_2 = 2 [
  584. features.field_presence = LEGACY_REQUIRED
  585. ];
  586. ForeignEnum required_enum_1 = 1 [
  587. features.field_presence = LEGACY_REQUIRED
  588. ];
  589. }
  590. // We have separate messages for testing required fields because it's
  591. // annoying to have to fill in required fields in TestProto in order to
  592. // do anything with it. Note that we don't need to test every type of
  593. // required filed because the code output is basically identical to
  594. // optional fields for all types.
  595. message TestRequired {
  596. int32 a = 1 [
  597. features.field_presence = LEGACY_REQUIRED
  598. ];
  599. int32 dummy2 = 2;
  600. int32 b = 3 [
  601. features.field_presence = LEGACY_REQUIRED
  602. ];
  603. extend TestAllExtensions {
  604. TestRequired single = 1000;
  605. repeated TestRequired multi = 1001;
  606. }
  607. // Pad the field count to 32 so that we can test that IsInitialized()
  608. // properly checks multiple elements of has_bits_.
  609. int32 dummy4 = 4;
  610. int32 dummy5 = 5;
  611. int32 dummy6 = 6;
  612. int32 dummy7 = 7;
  613. int32 dummy8 = 8;
  614. int32 dummy9 = 9;
  615. int32 dummy10 = 10;
  616. int32 dummy11 = 11;
  617. int32 dummy12 = 12;
  618. int32 dummy13 = 13;
  619. int32 dummy14 = 14;
  620. int32 dummy15 = 15;
  621. int32 dummy16 = 16;
  622. int32 dummy17 = 17;
  623. int32 dummy18 = 18;
  624. int32 dummy19 = 19;
  625. int32 dummy20 = 20;
  626. int32 dummy21 = 21;
  627. int32 dummy22 = 22;
  628. int32 dummy23 = 23;
  629. int32 dummy24 = 24;
  630. int32 dummy25 = 25;
  631. int32 dummy26 = 26;
  632. int32 dummy27 = 27;
  633. int32 dummy28 = 28;
  634. int32 dummy29 = 29;
  635. int32 dummy30 = 30;
  636. int32 dummy31 = 31;
  637. int32 dummy32 = 32;
  638. int32 c = 33 [
  639. features.field_presence = LEGACY_REQUIRED
  640. ];
  641. // Add an optional child message to make this non-trivial for go/pdlazy.
  642. ForeignMessage optional_foreign = 34;
  643. }
  644. message TestRequiredForeign {
  645. TestRequired optional_message = 1;
  646. repeated TestRequired repeated_message = 2;
  647. int32 dummy = 3;
  648. // Missing required fields must not affect verification of child messages.
  649. NestedTestAllTypes optional_lazy_message = 4 [
  650. lazy = true
  651. ];
  652. }
  653. message TestRequiredMessage {
  654. TestRequired optional_message = 1;
  655. repeated TestRequired repeated_message = 2;
  656. TestRequired required_message = 3 [
  657. features.field_presence = LEGACY_REQUIRED
  658. ];
  659. }
  660. message TestNestedRequiredForeign {
  661. TestNestedRequiredForeign child = 1;
  662. TestRequiredForeign payload = 2;
  663. int32 dummy = 3;
  664. // optional message to test required closed enum.
  665. TestRequiredEnum required_enum = 5;
  666. TestRequiredEnumNoMask required_enum_no_mask = 6;
  667. TestRequiredEnumMulti required_enum_multi = 7;
  668. TestRequiredNoMaskMulti required_no_mask = 9;
  669. }
  670. // Test that we can use NestedMessage from outside TestAllTypes.
  671. message TestForeignNested {
  672. TestAllTypes.NestedMessage foreign_nested = 1;
  673. }
  674. // TestEmptyMessage is used to test unknown field support.
  675. message TestEmptyMessage {
  676. }
  677. // Like above, but declare all field numbers as potential extensions. No
  678. // actual extensions should ever be defined for this type.
  679. message TestEmptyMessageWithExtensions {
  680. extensions 1 to max;
  681. }
  682. // Needed for a Python test.
  683. message TestPickleNestedMessage {
  684. message NestedMessage {
  685. int32 bb = 1;
  686. message NestedNestedMessage {
  687. int32 cc = 1;
  688. }
  689. }
  690. }
  691. message TestMultipleExtensionRanges {
  692. extensions 42;
  693. extensions 4143 to 4243;
  694. extensions 65536 to max;
  695. }
  696. // Test that really large tag numbers don't break anything.
  697. message TestReallyLargeTagNumber {
  698. // The largest possible tag number is 2^28 - 1, since the wire format uses
  699. // three bits to communicate wire type.
  700. int32 a = 1;
  701. int32 bb = 268435455;
  702. }
  703. message TestRecursiveMessage {
  704. TestRecursiveMessage a = 1;
  705. int32 i = 2;
  706. }
  707. // Test that mutual recursion works.
  708. message TestMutualRecursionA {
  709. message SubMessage {
  710. TestMutualRecursionB b = 1;
  711. }
  712. TestMutualRecursionB bb = 1;
  713. message SubGroup {
  714. SubMessage sub_message = 3; // Needed because of bug in javatest
  715. TestAllTypes not_in_this_scc = 4;
  716. }
  717. SubGroup subgroup = 2 [
  718. features.message_encoding = DELIMITED
  719. ];
  720. message SubGroupR {
  721. TestAllTypes payload = 6;
  722. }
  723. repeated SubGroupR subgroupr = 5 [
  724. features.message_encoding = DELIMITED
  725. ];
  726. }
  727. message TestMutualRecursionB {
  728. TestMutualRecursionA a = 1;
  729. int32 optional_int32 = 2;
  730. }
  731. message TestIsInitialized {
  732. message SubMessage {
  733. message SubGroup {
  734. int32 i = 2 [
  735. features.field_presence = LEGACY_REQUIRED
  736. ];
  737. }
  738. SubGroup subgroup = 1 [
  739. features.message_encoding = DELIMITED
  740. ];
  741. }
  742. SubMessage sub_message = 1;
  743. }
  744. // Test that groups have disjoint field numbers from their siblings and
  745. // parents. This is NOT possible in proto1; only google.protobuf. When attempting
  746. // to compile with proto1, this will emit an error; so we only include it
  747. // in protobuf_unittest_proto.
  748. message TestDupFieldNumber {// NO_PROTO1
  749. int32 a = 1; // NO_PROTO1
  750. message Foo { // NO_PROTO1
  751. int32 a = 1; // NO_PROTO1
  752. } // NO_PROTO1
  753. Foo foo = 2 [features.message_encoding = DELIMITED]; // NO_PROTO1
  754. message Bar { // NO_PROTO1
  755. int32 a = 1; // NO_PROTO1
  756. } // NO_PROTO1
  757. Bar bar = 3 [features.message_encoding = DELIMITED]; // NO_PROTO1
  758. } // NO_PROTO1
  759. // Additional messages for testing lazy fields.
  760. message TestEagerMessage {
  761. TestAllTypes sub_message = 1 [
  762. lazy = false
  763. ];
  764. }
  765. message TestLazyMessage {
  766. TestAllTypes sub_message = 1 [
  767. lazy = true
  768. ];
  769. }
  770. message TestLazyMessageRepeated {
  771. repeated TestLazyMessage repeated_message = 1;
  772. }
  773. message TestEagerMaybeLazy {
  774. message NestedMessage {
  775. TestPackedTypes packed = 1;
  776. }
  777. TestAllTypes message_foo = 1;
  778. TestAllTypes message_bar = 2;
  779. NestedMessage message_baz = 3;
  780. }
  781. // Needed for a Python test.
  782. message TestNestedMessageHasBits {
  783. message NestedMessage {
  784. repeated int32 nestedmessage_repeated_int32 = 1;
  785. repeated ForeignMessage nestedmessage_repeated_foreignmessage = 2;
  786. }
  787. NestedMessage optional_nested_message = 1;
  788. }
  789. // Test an enum that has multiple values with the same number.
  790. enum TestEnumWithDupValue {
  791. option allow_alias = true;
  792. FOO1 = 1;
  793. BAR1 = 2;
  794. BAZ = 3;
  795. FOO2 = 1;
  796. BAR2 = 2;
  797. }
  798. // Test an enum with large, unordered values.
  799. enum TestSparseEnum {
  800. SPARSE_A = 123;
  801. SPARSE_B = 62374;
  802. SPARSE_C = 12589234;
  803. SPARSE_D = -15;
  804. SPARSE_E = -53452;
  805. SPARSE_F = 0;
  806. SPARSE_G = 2;
  807. }
  808. // Test message with CamelCase field names. This violates Protocol Buffer
  809. // standard style.
  810. message TestCamelCaseFieldNames {
  811. int32 PrimitiveField = 1;
  812. string StringField = 2;
  813. ForeignEnum EnumField = 3;
  814. ForeignMessage MessageField = 4;
  815. string StringPieceField = 5 [
  816. ctype = STRING_PIECE
  817. ];
  818. string CordField = 6 [
  819. ctype = CORD
  820. ];
  821. repeated int32 RepeatedPrimitiveField = 7;
  822. repeated string RepeatedStringField = 8;
  823. repeated ForeignEnum RepeatedEnumField = 9;
  824. repeated ForeignMessage RepeatedMessageField = 10;
  825. repeated string RepeatedStringPieceField = 11 [
  826. ctype = STRING_PIECE
  827. ];
  828. repeated string RepeatedCordField = 12 [
  829. ctype = CORD
  830. ];
  831. }
  832. // We list fields out of order, to ensure that we're using field number and not
  833. // field index to determine serialization order.
  834. message TestFieldOrderings {
  835. string my_string = 11;
  836. extensions 2 to 10;
  837. int64 my_int = 1;
  838. extensions 12 to 100;
  839. float my_float = 101;
  840. message NestedMessage {
  841. int64 oo = 2;
  842. // The field name "b" fails to compile in proto1 because it conflicts with
  843. // a local variable named "b" in one of the generated methods. Doh.
  844. // This file needs to compile in proto1 to test backwards-compatibility.
  845. int32 bb = 1;
  846. }
  847. NestedMessage optional_nested_message = 200;
  848. }
  849. extend TestFieldOrderings {
  850. string my_extension_string = 50;
  851. int32 my_extension_int = 5;
  852. }
  853. message TestExtensionOrderings1 {
  854. extend TestFieldOrderings {
  855. TestExtensionOrderings1 test_ext_orderings1 = 13;
  856. }
  857. string my_string = 1;
  858. }
  859. message TestExtensionOrderings2 {
  860. extend TestFieldOrderings {
  861. TestExtensionOrderings2 test_ext_orderings2 = 12;
  862. }
  863. message TestExtensionOrderings3 {
  864. extend TestFieldOrderings {
  865. TestExtensionOrderings3 test_ext_orderings3 = 14;
  866. }
  867. string my_string = 1;
  868. }
  869. string my_string = 1;
  870. }
  871. message TestExtremeDefaultValues {
  872. bytes escaped_bytes = 1 [
  873. default =
  874. "\0\001\a\b\f\n\r\t\v\\\'\"\xfe"
  875. ];
  876. uint32 large_uint32 = 2 [
  877. default = 0xFFFFFFFF
  878. ];
  879. uint64 large_uint64 = 3 [
  880. default = 0xFFFFFFFFFFFFFFFF
  881. ];
  882. int32 small_int32 = 4 [
  883. default = -0x7FFFFFFF
  884. ];
  885. int64 small_int64 = 5 [
  886. default = -0x7FFFFFFFFFFFFFFF
  887. ];
  888. int32 really_small_int32 = 21 [
  889. default = -0x80000000
  890. ];
  891. int64 really_small_int64 = 22 [
  892. default = -0x8000000000000000
  893. ];
  894. // The default value here is UTF-8 for "\u1234". (We could also just type
  895. // the UTF-8 text directly into this text file rather than escape it, but
  896. // lots of people use editors that would be confused by this.)
  897. string utf8_string = 6 [
  898. default = "\341\210\264"
  899. ];
  900. // Tests for single-precision floating-point values.
  901. float zero_float = 7 [
  902. default = 0
  903. ];
  904. float one_float = 8 [
  905. default = 1
  906. ];
  907. float small_float = 9 [
  908. default = 1.5
  909. ];
  910. float negative_one_float = 10 [
  911. default = -1
  912. ];
  913. float negative_float = 11 [
  914. default = -1.5
  915. ];
  916. // Using exponents
  917. float large_float = 12 [
  918. default = 2e8
  919. ];
  920. float small_negative_float = 13 [
  921. default = -8e-28
  922. ];
  923. // Text for nonfinite floating-point values.
  924. double inf_double = 14 [
  925. default = inf
  926. ];
  927. double neg_inf_double = 15 [
  928. default = -inf
  929. ];
  930. double nan_double = 16 [
  931. default = nan
  932. ];
  933. float inf_float = 17 [
  934. default = inf
  935. ];
  936. float neg_inf_float = 18 [
  937. default = -inf
  938. ];
  939. float nan_float = 19 [
  940. default = nan
  941. ];
  942. // Tests for C++ trigraphs.
  943. // Trigraphs should be escaped in C++ generated files, but they should not be
  944. // escaped for other languages.
  945. // Note that in .proto file, "\?" is a valid way to escape ? in string
  946. // literals.
  947. string cpp_trigraph = 20 [
  948. default = "? \? ?? \?? \??? ??/ ?\?-"
  949. ];
  950. // String defaults containing the character '\000'
  951. string string_with_zero = 23 [
  952. default = "hel\000lo"
  953. ];
  954. bytes bytes_with_zero = 24 [
  955. default = "wor\000ld"
  956. ];
  957. string string_piece_with_zero = 25 [
  958. ctype = STRING_PIECE,
  959. default = "ab\000c"
  960. ];
  961. string cord_with_zero = 26 [
  962. ctype = CORD,
  963. default = "12\0003"
  964. ];
  965. string replacement_string = 27 [
  966. default = "${unknown}"
  967. ];
  968. }
  969. message SparseEnumMessage {
  970. TestSparseEnum sparse_enum = 1;
  971. }
  972. // Test String and Bytes: string is for valid UTF-8 strings
  973. message OneString {
  974. string data = 1;
  975. }
  976. message MoreString {
  977. repeated string data = 1;
  978. }
  979. message OneBytes {
  980. bytes data = 1;
  981. }
  982. message MoreBytes {
  983. repeated bytes data = 1;
  984. }
  985. message ManyOptionalString {
  986. string str1 = 1;
  987. string str2 = 2;
  988. string str3 = 3;
  989. string str4 = 4;
  990. string str5 = 5;
  991. string str6 = 6;
  992. string str7 = 7;
  993. string str8 = 8;
  994. string str9 = 9;
  995. string str10 = 10;
  996. string str11 = 11;
  997. string str12 = 12;
  998. string str13 = 13;
  999. string str14 = 14;
  1000. string str15 = 15;
  1001. string str16 = 16;
  1002. string str17 = 17;
  1003. string str18 = 18;
  1004. string str19 = 19;
  1005. string str20 = 20;
  1006. string str21 = 21;
  1007. string str22 = 22;
  1008. string str23 = 23;
  1009. string str24 = 24;
  1010. string str25 = 25;
  1011. string str26 = 26;
  1012. string str27 = 27;
  1013. string str28 = 28;
  1014. string str29 = 29;
  1015. string str30 = 30;
  1016. string str31 = 31;
  1017. string str32 = 32;
  1018. }
  1019. // Test int32, uint32, int64, uint64, and bool are all compatible
  1020. message Int32Message {
  1021. int32 data = 1;
  1022. }
  1023. message Uint32Message {
  1024. uint32 data = 1;
  1025. }
  1026. message Int64Message {
  1027. int64 data = 1;
  1028. }
  1029. message Uint64Message {
  1030. uint64 data = 1;
  1031. }
  1032. message BoolMessage {
  1033. bool data = 1;
  1034. }
  1035. // Test oneofs.
  1036. message TestOneof {
  1037. oneof foo {
  1038. int32 foo_int = 1;
  1039. string foo_string = 2;
  1040. TestAllTypes foo_message = 3;
  1041. FooGroup foogroup = 4 [
  1042. features.message_encoding = DELIMITED
  1043. ];
  1044. }
  1045. message FooGroup {
  1046. int32 a = 5;
  1047. string b = 6;
  1048. }
  1049. }
  1050. message TestOneofBackwardsCompatible {
  1051. int32 foo_int = 1;
  1052. string foo_string = 2;
  1053. TestAllTypes foo_message = 3;
  1054. message FooGroup {
  1055. int32 a = 5;
  1056. string b = 6;
  1057. }
  1058. FooGroup foogroup = 4 [
  1059. features.message_encoding = DELIMITED
  1060. ];
  1061. }
  1062. message TestOneof2 {
  1063. oneof foo {
  1064. int32 foo_int = 1;
  1065. string foo_string = 2;
  1066. string foo_cord = 3 [
  1067. ctype = CORD
  1068. ];
  1069. string foo_string_piece = 4 [
  1070. ctype = STRING_PIECE
  1071. ];
  1072. bytes foo_bytes = 5;
  1073. NestedEnum foo_enum = 6;
  1074. NestedMessage foo_message = 7;
  1075. FooGroup foogroup = 8 [
  1076. features.message_encoding = DELIMITED
  1077. ];
  1078. NestedMessage foo_lazy_message = 11 [
  1079. lazy = true
  1080. ];
  1081. bytes foo_bytes_cord = 30 [
  1082. ctype = CORD
  1083. ];
  1084. }
  1085. message FooGroup {
  1086. int32 a = 9;
  1087. string b = 10;
  1088. }
  1089. oneof bar {
  1090. int32 bar_int = 12 [
  1091. default = 5
  1092. ];
  1093. string bar_string = 13 [
  1094. default = "STRING"
  1095. ];
  1096. string bar_cord = 14 [
  1097. ctype = CORD,
  1098. default = "CORD"
  1099. ];
  1100. string bar_string_piece = 15 [
  1101. ctype = STRING_PIECE,
  1102. default = "SPIECE"
  1103. ];
  1104. bytes bar_bytes = 16 [
  1105. default = "BYTES"
  1106. ];
  1107. NestedEnum bar_enum = 17 [
  1108. default = BAR
  1109. ];
  1110. string bar_string_with_empty_default = 20 [
  1111. default = ""
  1112. ];
  1113. string bar_cord_with_empty_default = 21 [
  1114. ctype = CORD,
  1115. default = ""
  1116. ];
  1117. string bar_string_piece_with_empty_default = 22 [
  1118. ctype = STRING_PIECE,
  1119. default = ""
  1120. ];
  1121. bytes bar_bytes_with_empty_default = 23 [
  1122. default = ""
  1123. ];
  1124. }
  1125. int32 baz_int = 18;
  1126. string baz_string = 19 [
  1127. default = "BAZ"
  1128. ];
  1129. message NestedMessage {
  1130. int64 moo_int = 1;
  1131. repeated int32 corge_int = 2;
  1132. NestedMessage child = 3;
  1133. }
  1134. enum NestedEnum {
  1135. FOO = 1;
  1136. BAR = 2;
  1137. BAZ = 3;
  1138. }
  1139. }
  1140. message TestRequiredOneof {
  1141. oneof foo {
  1142. int32 foo_int = 1;
  1143. string foo_string = 2;
  1144. NestedMessage foo_message = 3;
  1145. NestedMessage foo_lazy_message = 4 [
  1146. lazy = true
  1147. ];
  1148. }
  1149. message NestedMessage {
  1150. double required_double = 1 [
  1151. features.field_presence = LEGACY_REQUIRED
  1152. ];
  1153. }
  1154. }
  1155. // Test messages for packed fields
  1156. message TestPackedTypes {
  1157. repeated int32 packed_int32 = 90 [
  1158. features.repeated_field_encoding = PACKED
  1159. ];
  1160. repeated int64 packed_int64 = 91 [
  1161. features.repeated_field_encoding = PACKED
  1162. ];
  1163. repeated uint32 packed_uint32 = 92 [
  1164. features.repeated_field_encoding = PACKED
  1165. ];
  1166. repeated uint64 packed_uint64 = 93 [
  1167. features.repeated_field_encoding = PACKED
  1168. ];
  1169. repeated sint32 packed_sint32 = 94 [
  1170. features.repeated_field_encoding = PACKED
  1171. ];
  1172. repeated sint64 packed_sint64 = 95 [
  1173. features.repeated_field_encoding = PACKED
  1174. ];
  1175. repeated fixed32 packed_fixed32 = 96 [
  1176. features.repeated_field_encoding = PACKED
  1177. ];
  1178. repeated fixed64 packed_fixed64 = 97 [
  1179. features.repeated_field_encoding = PACKED
  1180. ];
  1181. repeated sfixed32 packed_sfixed32 = 98 [
  1182. features.repeated_field_encoding = PACKED
  1183. ];
  1184. repeated sfixed64 packed_sfixed64 = 99 [
  1185. features.repeated_field_encoding = PACKED
  1186. ];
  1187. repeated float packed_float = 100 [
  1188. features.repeated_field_encoding = PACKED
  1189. ];
  1190. repeated double packed_double = 101 [
  1191. features.repeated_field_encoding = PACKED
  1192. ];
  1193. repeated bool packed_bool = 102 [
  1194. features.repeated_field_encoding = PACKED
  1195. ];
  1196. repeated ForeignEnum packed_enum = 103 [
  1197. features.repeated_field_encoding = PACKED
  1198. ];
  1199. }
  1200. // A message with the same fields as TestPackedTypes, but without packing. Used
  1201. // to test packed <-> unpacked wire compatibility.
  1202. message TestUnpackedTypes {
  1203. repeated int32 unpacked_int32 = 90;
  1204. repeated int64 unpacked_int64 = 91;
  1205. repeated uint32 unpacked_uint32 = 92;
  1206. repeated uint64 unpacked_uint64 = 93;
  1207. repeated sint32 unpacked_sint32 = 94;
  1208. repeated sint64 unpacked_sint64 = 95;
  1209. repeated fixed32 unpacked_fixed32 = 96;
  1210. repeated fixed64 unpacked_fixed64 = 97;
  1211. repeated sfixed32 unpacked_sfixed32 = 98;
  1212. repeated sfixed64 unpacked_sfixed64 = 99;
  1213. repeated float unpacked_float = 100;
  1214. repeated double unpacked_double = 101;
  1215. repeated bool unpacked_bool = 102;
  1216. repeated ForeignEnum unpacked_enum = 103;
  1217. }
  1218. message TestPackedExtensions {
  1219. extensions 1 to max;
  1220. }
  1221. extend TestPackedExtensions {
  1222. repeated int32 packed_int32_extension = 90 [
  1223. features.repeated_field_encoding = PACKED
  1224. ];
  1225. repeated int64 packed_int64_extension = 91 [
  1226. features.repeated_field_encoding = PACKED
  1227. ];
  1228. repeated uint32 packed_uint32_extension = 92 [
  1229. features.repeated_field_encoding = PACKED
  1230. ];
  1231. repeated uint64 packed_uint64_extension = 93 [
  1232. features.repeated_field_encoding = PACKED
  1233. ];
  1234. repeated sint32 packed_sint32_extension = 94 [
  1235. features.repeated_field_encoding = PACKED
  1236. ];
  1237. repeated sint64 packed_sint64_extension = 95 [
  1238. features.repeated_field_encoding = PACKED
  1239. ];
  1240. repeated fixed32 packed_fixed32_extension = 96 [
  1241. features.repeated_field_encoding = PACKED
  1242. ];
  1243. repeated fixed64 packed_fixed64_extension = 97 [
  1244. features.repeated_field_encoding = PACKED
  1245. ];
  1246. repeated sfixed32 packed_sfixed32_extension = 98 [
  1247. features.repeated_field_encoding = PACKED
  1248. ];
  1249. repeated sfixed64 packed_sfixed64_extension = 99 [
  1250. features.repeated_field_encoding = PACKED
  1251. ];
  1252. repeated float packed_float_extension = 100 [
  1253. features.repeated_field_encoding = PACKED
  1254. ];
  1255. repeated double packed_double_extension = 101 [
  1256. features.repeated_field_encoding = PACKED
  1257. ];
  1258. repeated bool packed_bool_extension = 102 [
  1259. features.repeated_field_encoding = PACKED
  1260. ];
  1261. repeated ForeignEnum packed_enum_extension = 103 [
  1262. features.repeated_field_encoding = PACKED
  1263. ];
  1264. }
  1265. message TestUnpackedExtensions {
  1266. extensions 1 to max;
  1267. }
  1268. extend TestUnpackedExtensions {
  1269. repeated int32 unpacked_int32_extension = 90;
  1270. repeated int64 unpacked_int64_extension = 91;
  1271. repeated uint32 unpacked_uint32_extension = 92;
  1272. repeated uint64 unpacked_uint64_extension = 93;
  1273. repeated sint32 unpacked_sint32_extension = 94;
  1274. repeated sint64 unpacked_sint64_extension = 95;
  1275. repeated fixed32 unpacked_fixed32_extension = 96;
  1276. repeated fixed64 unpacked_fixed64_extension = 97;
  1277. repeated sfixed32 unpacked_sfixed32_extension = 98;
  1278. repeated sfixed64 unpacked_sfixed64_extension = 99;
  1279. repeated float unpacked_float_extension = 100;
  1280. repeated double unpacked_double_extension = 101;
  1281. repeated bool unpacked_bool_extension = 102;
  1282. repeated ForeignEnum unpacked_enum_extension = 103;
  1283. }
  1284. // Used by ExtensionSetTest/DynamicExtensions. The test actually builds
  1285. // a set of extensions to TestAllExtensions dynamically, based on the fields
  1286. // of this message type.
  1287. message TestDynamicExtensions {
  1288. enum DynamicEnumType {
  1289. DYNAMIC_FOO = 2200;
  1290. DYNAMIC_BAR = 2201;
  1291. DYNAMIC_BAZ = 2202;
  1292. }
  1293. message DynamicMessageType {
  1294. int32 dynamic_field = 2100;
  1295. }
  1296. fixed32 scalar_extension = 2000;
  1297. ForeignEnum enum_extension = 2001;
  1298. DynamicEnumType dynamic_enum_extension = 2002;
  1299. ForeignMessage message_extension = 2003;
  1300. DynamicMessageType dynamic_message_extension = 2004;
  1301. repeated string repeated_extension = 2005;
  1302. repeated sint32 packed_extension = 2006 [
  1303. features.repeated_field_encoding = PACKED
  1304. ];
  1305. }
  1306. message TestRepeatedString {
  1307. repeated string repeated_string1 = 1;
  1308. repeated string repeated_string2 = 2;
  1309. repeated bytes repeated_bytes11 = 11;
  1310. repeated bytes repeated_bytes12 = 12;
  1311. }
  1312. message TestRepeatedScalarDifferentTagSizes {
  1313. // Parsing repeated fixed size values used to fail. This message needs to be
  1314. // used in order to get a tag of the right size; all of the repeated fields
  1315. // in TestAllTypes didn't trigger the check.
  1316. repeated fixed32 repeated_fixed32 = 12;
  1317. // Check for a varint type, just for good measure.
  1318. repeated int32 repeated_int32 = 13;
  1319. // These have two-byte tags.
  1320. repeated fixed64 repeated_fixed64 = 2046;
  1321. repeated int64 repeated_int64 = 2047;
  1322. // Three byte tags.
  1323. repeated float repeated_float = 262142;
  1324. repeated uint64 repeated_uint64 = 262143;
  1325. }
  1326. // Test that if an optional or required message/group field appears multiple
  1327. // times in the input, they need to be merged.
  1328. message TestParsingMerge {
  1329. // RepeatedFieldsGenerator defines matching field types as TestParsingMerge,
  1330. // except that all fields are repeated. In the tests, we will serialize the
  1331. // RepeatedFieldsGenerator to bytes, and parse the bytes to TestParsingMerge.
  1332. // Repeated fields in RepeatedFieldsGenerator are expected to be merged into
  1333. // the corresponding required/optional fields in TestParsingMerge.
  1334. message RepeatedFieldsGenerator {
  1335. repeated TestAllTypes field1 = 1;
  1336. repeated TestAllTypes field2 = 2;
  1337. repeated TestAllTypes field3 = 3;
  1338. message Group1 {
  1339. TestAllTypes field1 = 11;
  1340. }
  1341. repeated Group1 group1 = 10 [
  1342. features.message_encoding = DELIMITED
  1343. ];
  1344. message Group2 {
  1345. TestAllTypes field1 = 21;
  1346. }
  1347. repeated Group2 group2 = 20 [
  1348. features.message_encoding = DELIMITED
  1349. ];
  1350. repeated TestAllTypes ext1 = 1000;
  1351. repeated TestAllTypes ext2 = 1001;
  1352. }
  1353. TestAllTypes required_all_types = 1 [
  1354. features.field_presence = LEGACY_REQUIRED
  1355. ];
  1356. TestAllTypes optional_all_types = 2;
  1357. repeated TestAllTypes repeated_all_types = 3;
  1358. message OptionalGroup {
  1359. TestAllTypes optional_group_all_types = 11;
  1360. }
  1361. OptionalGroup optionalgroup = 10 [
  1362. features.message_encoding = DELIMITED
  1363. ];
  1364. message RepeatedGroup {
  1365. TestAllTypes repeated_group_all_types = 21;
  1366. }
  1367. repeated RepeatedGroup repeatedgroup = 20 [
  1368. features.message_encoding = DELIMITED
  1369. ];
  1370. extensions 1000 to max;
  1371. extend TestParsingMerge {
  1372. TestAllTypes optional_ext = 1000;
  1373. repeated TestAllTypes repeated_ext = 1001;
  1374. }
  1375. }
  1376. // Test that the correct exception is thrown by parseFrom in a corner case
  1377. // involving merging, extensions, and required fields.
  1378. message TestMergeException {
  1379. TestAllExtensions all_extensions = 1;
  1380. }
  1381. message TestCommentInjectionMessage {
  1382. // */ <- This should not close the generated doc comment
  1383. string a = 1 [
  1384. default = "*/ <- Neither should this."
  1385. ];
  1386. }
  1387. // Used to check that the c++ code generator re-orders messages to reduce
  1388. // padding.
  1389. message TestMessageSize {
  1390. bool m1 = 1;
  1391. int64 m2 = 2;
  1392. bool m3 = 3;
  1393. string m4 = 4;
  1394. int32 m5 = 5;
  1395. int64 m6 = 6;
  1396. }
  1397. message OpenEnumMessage {
  1398. enum TestEnum {
  1399. option features.enum_type = OPEN;
  1400. UNKNOWN = 0;
  1401. FOO = 1;
  1402. BAR = 2;
  1403. BAZ = 3;
  1404. }
  1405. TestEnum opt_open = 1;
  1406. ForeignEnum opt_closed = 2;
  1407. repeated TestEnum repeated_open = 3;
  1408. repeated ForeignEnum repeated_closed = 4;
  1409. }
  1410. // Test that RPC services work.
  1411. message FooRequest {
  1412. }
  1413. message FooResponse {
  1414. }
  1415. message FooClientMessage {
  1416. }
  1417. message FooServerMessage {
  1418. }
  1419. service TestService {
  1420. rpc Foo(FooRequest) returns (FooResponse);
  1421. rpc Bar(BarRequest) returns (BarResponse);
  1422. }
  1423. message BarRequest {
  1424. }
  1425. message BarResponse {
  1426. }
  1427. message TestJsonName {
  1428. int32 field_name1 = 1;
  1429. int32 fieldName2 = 2;
  1430. int32 FieldName3 = 3;
  1431. int32 _field_name4 = 4;
  1432. int32 FIELD_NAME5 = 5;
  1433. int32 field_name6 = 6 [
  1434. json_name = "@type"
  1435. ];
  1436. int32 fieldname7 = 7;
  1437. }
  1438. message TestHugeFieldNumbers {
  1439. int32 optional_int32 = 536870000;
  1440. int32 fixed_32 = 536870001;
  1441. repeated int32 repeated_int32 = 536870002;
  1442. repeated int32 packed_int32 = 536870003 [
  1443. features.repeated_field_encoding = PACKED
  1444. ];
  1445. ForeignEnum optional_enum = 536870004;
  1446. string optional_string = 536870005;
  1447. bytes optional_bytes = 536870006;
  1448. ForeignMessage optional_message = 536870007;
  1449. message OptionalGroup {
  1450. int32 group_a = 536870009;
  1451. }
  1452. OptionalGroup optionalgroup = 536870008 [
  1453. features.message_encoding = DELIMITED
  1454. ];
  1455. map<string, string> string_string_map = 536870010;
  1456. oneof oneof_field {
  1457. uint32 oneof_uint32 = 536870011;
  1458. TestAllTypes oneof_test_all_types = 536870012;
  1459. string oneof_string = 536870013;
  1460. bytes oneof_bytes = 536870014;
  1461. }
  1462. extensions 536860000 to 536869999 [
  1463. declaration = {
  1464. number: 536860000
  1465. full_name: ".protobuf_unittest.test_all_types"
  1466. type: ".protobuf_unittest.TestAllTypes"
  1467. }
  1468. ];
  1469. }
  1470. extend TestHugeFieldNumbers {
  1471. TestAllTypes test_all_types = 536860000;
  1472. }
  1473. message TestExtensionInsideTable {
  1474. int32 field1 = 1;
  1475. int32 field2 = 2;
  1476. int32 field3 = 3;
  1477. int32 field4 = 4;
  1478. extensions 5;
  1479. int32 field6 = 6;
  1480. int32 field7 = 7;
  1481. int32 field8 = 8;
  1482. int32 field9 = 9;
  1483. int32 field10 = 10;
  1484. }
  1485. extend TestExtensionInsideTable {
  1486. int32 test_extension_inside_table_extension = 5;
  1487. }
  1488. // NOTE: Intentionally nested to mirror go/glep.
  1489. message TestNestedGroupExtensionOuter {
  1490. message Layer1OptionalGroup {
  1491. message Layer2RepeatedGroup {
  1492. extensions 3
  1493. // NOTE: extension metadata is not supported due to targets such as
  1494. // `//google/protobuf_legacy_opensource/src:shell_scripts_test`,
  1495. // eee https://screenshot.googleplex.com/Axz2QD8nxjdpyFF
  1496. // [metadata = {
  1497. // NOTE: can't write type there due to some clever build gen code at
  1498. // http://google3/google/protobuf/BUILD;l=1247;rcl=411090862
  1499. // type: "protobuf_unittest.TestNestedGroupExtensionInnerExtension",
  1500. // name: "inner",
  1501. // }]
  1502. ;
  1503. string another_field = 6;
  1504. }
  1505. repeated Layer2RepeatedGroup layer2repeatedgroup = 2 [
  1506. features.message_encoding = DELIMITED
  1507. ];
  1508. message Layer2AnotherOptionalRepeatedGroup {
  1509. string but_why_tho = 5;
  1510. }
  1511. repeated Layer2AnotherOptionalRepeatedGroup
  1512. layer2anotheroptionalrepeatedgroup = 4 [
  1513. features.message_encoding = DELIMITED
  1514. ];
  1515. }
  1516. Layer1OptionalGroup layer1optionalgroup = 1 [
  1517. features.message_encoding = DELIMITED
  1518. ];
  1519. }
  1520. message TestNestedGroupExtensionInnerExtension {
  1521. string inner_name = 1;
  1522. }
  1523. extend TestNestedGroupExtensionOuter.Layer1OptionalGroup.Layer2RepeatedGroup {
  1524. TestNestedGroupExtensionInnerExtension inner = 3;
  1525. }
  1526. enum VeryLargeEnum {
  1527. ENUM_LABEL_DEFAULT = 0;
  1528. ENUM_LABEL_1 = 1;
  1529. ENUM_LABEL_2 = 2;
  1530. ENUM_LABEL_3 = 3;
  1531. ENUM_LABEL_4 = 4;
  1532. ENUM_LABEL_5 = 5;
  1533. ENUM_LABEL_6 = 6;
  1534. ENUM_LABEL_7 = 7;
  1535. ENUM_LABEL_8 = 8;
  1536. ENUM_LABEL_9 = 9;
  1537. ENUM_LABEL_10 = 10;
  1538. ENUM_LABEL_11 = 11;
  1539. ENUM_LABEL_12 = 12;
  1540. ENUM_LABEL_13 = 13;
  1541. ENUM_LABEL_14 = 14;
  1542. ENUM_LABEL_15 = 15;
  1543. ENUM_LABEL_16 = 16;
  1544. ENUM_LABEL_17 = 17;
  1545. ENUM_LABEL_18 = 18;
  1546. ENUM_LABEL_19 = 19;
  1547. ENUM_LABEL_20 = 20;
  1548. ENUM_LABEL_21 = 21;
  1549. ENUM_LABEL_22 = 22;
  1550. ENUM_LABEL_23 = 23;
  1551. ENUM_LABEL_24 = 24;
  1552. ENUM_LABEL_25 = 25;
  1553. ENUM_LABEL_26 = 26;
  1554. ENUM_LABEL_27 = 27;
  1555. ENUM_LABEL_28 = 28;
  1556. ENUM_LABEL_29 = 29;
  1557. ENUM_LABEL_30 = 30;
  1558. ENUM_LABEL_31 = 31;
  1559. ENUM_LABEL_32 = 32;
  1560. ENUM_LABEL_33 = 33;
  1561. ENUM_LABEL_34 = 34;
  1562. ENUM_LABEL_35 = 35;
  1563. ENUM_LABEL_36 = 36;
  1564. ENUM_LABEL_37 = 37;
  1565. ENUM_LABEL_38 = 38;
  1566. ENUM_LABEL_39 = 39;
  1567. ENUM_LABEL_40 = 40;
  1568. ENUM_LABEL_41 = 41;
  1569. ENUM_LABEL_42 = 42;
  1570. ENUM_LABEL_43 = 43;
  1571. ENUM_LABEL_44 = 44;
  1572. ENUM_LABEL_45 = 45;
  1573. ENUM_LABEL_46 = 46;
  1574. ENUM_LABEL_47 = 47;
  1575. ENUM_LABEL_48 = 48;
  1576. ENUM_LABEL_49 = 49;
  1577. ENUM_LABEL_50 = 50;
  1578. ENUM_LABEL_51 = 51;
  1579. ENUM_LABEL_52 = 52;
  1580. ENUM_LABEL_53 = 53;
  1581. ENUM_LABEL_54 = 54;
  1582. ENUM_LABEL_55 = 55;
  1583. ENUM_LABEL_56 = 56;
  1584. ENUM_LABEL_57 = 57;
  1585. ENUM_LABEL_58 = 58;
  1586. ENUM_LABEL_59 = 59;
  1587. ENUM_LABEL_60 = 60;
  1588. ENUM_LABEL_61 = 61;
  1589. ENUM_LABEL_62 = 62;
  1590. ENUM_LABEL_63 = 63;
  1591. ENUM_LABEL_64 = 64;
  1592. ENUM_LABEL_65 = 65;
  1593. ENUM_LABEL_66 = 66;
  1594. ENUM_LABEL_67 = 67;
  1595. ENUM_LABEL_68 = 68;
  1596. ENUM_LABEL_69 = 69;
  1597. ENUM_LABEL_70 = 70;
  1598. ENUM_LABEL_71 = 71;
  1599. ENUM_LABEL_72 = 72;
  1600. ENUM_LABEL_73 = 73;
  1601. ENUM_LABEL_74 = 74;
  1602. ENUM_LABEL_75 = 75;
  1603. ENUM_LABEL_76 = 76;
  1604. ENUM_LABEL_77 = 77;
  1605. ENUM_LABEL_78 = 78;
  1606. ENUM_LABEL_79 = 79;
  1607. ENUM_LABEL_80 = 80;
  1608. ENUM_LABEL_81 = 81;
  1609. ENUM_LABEL_82 = 82;
  1610. ENUM_LABEL_83 = 83;
  1611. ENUM_LABEL_84 = 84;
  1612. ENUM_LABEL_85 = 85;
  1613. ENUM_LABEL_86 = 86;
  1614. ENUM_LABEL_87 = 87;
  1615. ENUM_LABEL_88 = 88;
  1616. ENUM_LABEL_89 = 89;
  1617. ENUM_LABEL_90 = 90;
  1618. ENUM_LABEL_91 = 91;
  1619. ENUM_LABEL_92 = 92;
  1620. ENUM_LABEL_93 = 93;
  1621. ENUM_LABEL_94 = 94;
  1622. ENUM_LABEL_95 = 95;
  1623. ENUM_LABEL_96 = 96;
  1624. ENUM_LABEL_97 = 97;
  1625. ENUM_LABEL_98 = 98;
  1626. ENUM_LABEL_99 = 99;
  1627. ENUM_LABEL_100 = 100;
  1628. }
  1629. message TestExtensionRangeSerialize {
  1630. int32 foo_one = 1;
  1631. extensions 2;
  1632. extensions 3 to 4;
  1633. int32 foo_two = 6;
  1634. int32 foo_three = 7;
  1635. extensions 9 to 10;
  1636. int32 foo_four = 13;
  1637. extensions 15 to 15;
  1638. extensions 17 to 17;
  1639. extensions 19 to 19;
  1640. extend TestExtensionRangeSerialize {
  1641. int32 bar_one = 2;
  1642. int32 bar_two = 4;
  1643. int32 bar_three = 10;
  1644. int32 bar_four = 15;
  1645. int32 bar_five = 19;
  1646. }
  1647. }
  1648. message TestVerifyInt32Simple {
  1649. int32 optional_int32_1 = 1;
  1650. int32 optional_int32_2 = 2;
  1651. int32 optional_int32_63 = 63;
  1652. int32 optional_int32_64 = 64;
  1653. }
  1654. message TestVerifyInt32 {
  1655. int32 optional_int32_1 = 1;
  1656. int32 optional_int32_2 = 2;
  1657. int32 optional_int32_63 = 63;
  1658. int32 optional_int32_64 = 64;
  1659. TestAllTypes optional_all_types = 9;
  1660. repeated TestAllTypes repeated_all_types = 10;
  1661. }
  1662. message TestVerifyMostlyInt32 {
  1663. int64 optional_int64_30 = 30;
  1664. int32 optional_int32_1 = 1;
  1665. int32 optional_int32_2 = 2;
  1666. int32 optional_int32_3 = 3;
  1667. int32 optional_int32_4 = 4;
  1668. int32 optional_int32_63 = 63;
  1669. int32 optional_int32_64 = 64;
  1670. TestAllTypes optional_all_types = 9;
  1671. repeated TestAllTypes repeated_all_types = 10;
  1672. }
  1673. message TestVerifyMostlyInt32BigFieldNumber {
  1674. int64 optional_int64_30 = 30;
  1675. int32 optional_int32_300 = 300;
  1676. int32 optional_int32_1 = 1;
  1677. int32 optional_int32_2 = 2;
  1678. int32 optional_int32_3 = 3;
  1679. int32 optional_int32_4 = 4;
  1680. int32 optional_int32_63 = 63;
  1681. int32 optional_int32_64 = 64;
  1682. TestAllTypes optional_all_types = 9;
  1683. repeated TestAllTypes repeated_all_types = 10;
  1684. }
  1685. message TestVerifyUint32Simple {
  1686. uint32 optional_uint32_1 = 1;
  1687. uint32 optional_uint32_2 = 2;
  1688. uint32 optional_uint32_63 = 63;
  1689. uint32 optional_uint32_64 = 64;
  1690. }
  1691. message TestVerifyUint32 {
  1692. uint32 optional_uint32_1 = 1;
  1693. uint32 optional_uint32_2 = 2;
  1694. uint32 optional_uint32_63 = 63;
  1695. uint32 optional_uint32_64 = 64;
  1696. TestAllTypes optional_all_types = 9;
  1697. repeated TestAllTypes repeated_all_types = 10;
  1698. }
  1699. message TestVerifyOneUint32 {
  1700. uint32 optional_uint32_1 = 1;
  1701. int32 optional_int32_2 = 2;
  1702. int32 optional_int32_63 = 63;
  1703. int32 optional_int32_64 = 64;
  1704. TestAllTypes optional_all_types = 9;
  1705. repeated TestAllTypes repeated_all_types = 10;
  1706. }
  1707. message TestVerifyOneInt32BigFieldNumber {
  1708. int32 optional_int32_65 = 65;
  1709. int64 optional_int64_1 = 1;
  1710. int64 optional_int64_2 = 2;
  1711. int64 optional_int64_63 = 63;
  1712. int64 optional_int64_64 = 64;
  1713. TestAllTypes optional_all_types = 9;
  1714. repeated TestAllTypes repeated_all_types = 10;
  1715. }
  1716. message TestVerifyInt32BigFieldNumber {
  1717. int32 optional_int32_1000 = 1000;
  1718. int32 optional_int32_65 = 65;
  1719. int32 optional_int32_1 = 1;
  1720. int32 optional_int32_2 = 2;
  1721. int32 optional_int32_63 = 63;
  1722. int32 optional_int32_64 = 64;
  1723. TestAllTypes optional_all_types = 9;
  1724. repeated TestAllTypes repeated_all_types = 10;
  1725. }
  1726. message TestVerifyUint32BigFieldNumber {
  1727. uint32 optional_uint32_1000 = 1000;
  1728. uint32 optional_uint32_65 = 65;
  1729. uint32 optional_uint32_1 = 1;
  1730. uint32 optional_uint32_2 = 2;
  1731. uint32 optional_uint32_63 = 63;
  1732. uint32 optional_uint32_64 = 64;
  1733. TestAllTypes optional_all_types = 9;
  1734. repeated TestAllTypes repeated_all_types = 10;
  1735. }
  1736. message TestVerifyBigFieldNumberUint32 {
  1737. message Nested {
  1738. uint32 optional_uint32_5000 = 5000;
  1739. uint32 optional_uint32_1000 = 1000;
  1740. uint32 optional_uint32_66 = 66;
  1741. uint32 optional_uint32_65 = 65;
  1742. uint32 optional_uint32_1 = 1;
  1743. uint32 optional_uint32_2 = 2;
  1744. uint32 optional_uint32_63 = 63;
  1745. uint32 optional_uint32_64 = 64;
  1746. Nested optional_nested = 9;
  1747. repeated Nested repeated_nested = 10;
  1748. }
  1749. Nested optional_nested = 1;
  1750. }
  1751. // This message contains different kind of enums to exercise the different
  1752. // parsers in table-driven.
  1753. message EnumParseTester {
  1754. enum SeqSmall0 {
  1755. SEQ_SMALL_0_DEFAULT = 0;
  1756. SEQ_SMALL_0_1 = 1;
  1757. SEQ_SMALL_0_2 = 2;
  1758. }
  1759. SeqSmall0 optional_seq_small_0_lowfield = 1;
  1760. SeqSmall0 optional_seq_small_0_midfield = 1001;
  1761. SeqSmall0 optional_seq_small_0_hifield = 1000001;
  1762. repeated SeqSmall0 repeated_seq_small_0_lowfield = 2;
  1763. repeated SeqSmall0 repeated_seq_small_0_midfield = 1002;
  1764. repeated SeqSmall0 repeated_seq_small_0_hifield = 1000002;
  1765. repeated SeqSmall0 packed_seq_small_0_lowfield = 3 [
  1766. features.repeated_field_encoding = PACKED
  1767. ];
  1768. repeated SeqSmall0 packed_seq_small_0_midfield = 1003 [
  1769. features.repeated_field_encoding = PACKED
  1770. ];
  1771. repeated SeqSmall0 packed_seq_small_0_hifield = 1000003 [
  1772. features.repeated_field_encoding = PACKED
  1773. ];
  1774. enum SeqSmall1 {
  1775. SEQ_SMALL_1_DEFAULT = 1;
  1776. SEQ_SMALL_1_2 = 2;
  1777. SEQ_SMALL_1_3 = 3;
  1778. }
  1779. SeqSmall1 optional_seq_small_1_lowfield = 4;
  1780. SeqSmall1 optional_seq_small_1_midfield = 1004;
  1781. SeqSmall1 optional_seq_small_1_hifield = 1000004;
  1782. repeated SeqSmall1 repeated_seq_small_1_lowfield = 5;
  1783. repeated SeqSmall1 repeated_seq_small_1_midfield = 1005;
  1784. repeated SeqSmall1 repeated_seq_small_1_hifield = 1000005;
  1785. repeated SeqSmall1 packed_seq_small_1_lowfield = 6 [
  1786. features.repeated_field_encoding = PACKED
  1787. ];
  1788. repeated SeqSmall1 packed_seq_small_1_midfield = 1006 [
  1789. features.repeated_field_encoding = PACKED
  1790. ];
  1791. repeated SeqSmall1 packed_seq_small_1_hifield = 1000006 [
  1792. features.repeated_field_encoding = PACKED
  1793. ];
  1794. enum SeqLarge {
  1795. SEQ_LARGE_DEFAULT = -1;
  1796. SEQ_LARGE_0 = 0;
  1797. SEQ_LARGE_1 = 1;
  1798. SEQ_LARGE_2 = 2;
  1799. SEQ_LARGE_3 = 3;
  1800. SEQ_LARGE_4 = 4;
  1801. SEQ_LARGE_5 = 5;
  1802. SEQ_LARGE_6 = 6;
  1803. SEQ_LARGE_7 = 7;
  1804. SEQ_LARGE_8 = 8;
  1805. SEQ_LARGE_9 = 9;
  1806. SEQ_LARGE_10 = 10;
  1807. SEQ_LARGE_11 = 11;
  1808. SEQ_LARGE_12 = 12;
  1809. SEQ_LARGE_13 = 13;
  1810. SEQ_LARGE_14 = 14;
  1811. SEQ_LARGE_15 = 15;
  1812. SEQ_LARGE_16 = 16;
  1813. SEQ_LARGE_17 = 17;
  1814. SEQ_LARGE_18 = 18;
  1815. SEQ_LARGE_19 = 19;
  1816. SEQ_LARGE_20 = 20;
  1817. SEQ_LARGE_21 = 21;
  1818. SEQ_LARGE_22 = 22;
  1819. SEQ_LARGE_23 = 23;
  1820. SEQ_LARGE_24 = 24;
  1821. SEQ_LARGE_25 = 25;
  1822. SEQ_LARGE_26 = 26;
  1823. SEQ_LARGE_27 = 27;
  1824. SEQ_LARGE_28 = 28;
  1825. SEQ_LARGE_29 = 29;
  1826. SEQ_LARGE_30 = 30;
  1827. SEQ_LARGE_31 = 31;
  1828. SEQ_LARGE_32 = 32;
  1829. SEQ_LARGE_33 = 33;
  1830. }
  1831. SeqLarge optional_seq_large_lowfield = 7;
  1832. SeqLarge optional_seq_large_midfield = 1007;
  1833. SeqLarge optional_seq_large_hifield = 1000007;
  1834. repeated SeqLarge repeated_seq_large_lowfield = 8;
  1835. repeated SeqLarge repeated_seq_large_midfield = 1008;
  1836. repeated SeqLarge repeated_seq_large_hifield = 1000008;
  1837. repeated SeqLarge packed_seq_large_lowfield = 9 [
  1838. features.repeated_field_encoding = PACKED
  1839. ];
  1840. repeated SeqLarge packed_seq_large_midfield = 1009 [
  1841. features.repeated_field_encoding = PACKED
  1842. ];
  1843. repeated SeqLarge packed_seq_large_hifield = 1000009 [
  1844. features.repeated_field_encoding = PACKED
  1845. ];
  1846. enum Arbitrary {
  1847. ARBITRARY_DEFAULT = -123123;
  1848. ARBITRARY_1 = -123;
  1849. ARBITRARY_2 = 213;
  1850. ARBITRARY_3 = 213213;
  1851. ARBITRARY_MIN = -2147483648;
  1852. ARBITRARY_MAX = 2147483647;
  1853. }
  1854. Arbitrary optional_arbitrary_lowfield = 10;
  1855. Arbitrary optional_arbitrary_midfield = 1010;
  1856. Arbitrary optional_arbitrary_hifield = 1000010;
  1857. repeated Arbitrary repeated_arbitrary_lowfield = 11;
  1858. repeated Arbitrary repeated_arbitrary_midfield = 1011;
  1859. repeated Arbitrary repeated_arbitrary_hifield = 1000011;
  1860. repeated Arbitrary packed_arbitrary_lowfield = 12 [
  1861. features.repeated_field_encoding = PACKED
  1862. ];
  1863. repeated Arbitrary packed_arbitrary_midfield = 1012 [
  1864. features.repeated_field_encoding = PACKED
  1865. ];
  1866. repeated Arbitrary packed_arbitrary_hifield = 1000012 [
  1867. features.repeated_field_encoding = PACKED
  1868. ];
  1869. extensions 2000000 to max;
  1870. extend EnumParseTester {
  1871. Arbitrary optional_arbitrary_ext = 2000000;
  1872. repeated Arbitrary repeated_arbitrary_ext = 2000001;
  1873. repeated Arbitrary packed_arbitrary_ext = 2000002 [
  1874. features.repeated_field_encoding = PACKED
  1875. ];
  1876. }
  1877. // An arbitrary field we can append to to break the runs of repeated fields.
  1878. int32 other_field = 99;
  1879. }
  1880. // This message contains different kind of bool fields to exercise the different
  1881. // parsers in table-drived.
  1882. message BoolParseTester {
  1883. bool optional_bool_lowfield = 1;
  1884. bool optional_bool_midfield = 1001;
  1885. bool optional_bool_hifield = 1000001;
  1886. repeated bool repeated_bool_lowfield = 2;
  1887. repeated bool repeated_bool_midfield = 1002;
  1888. repeated bool repeated_bool_hifield = 1000002;
  1889. repeated bool packed_bool_lowfield = 3 [
  1890. features.repeated_field_encoding = PACKED
  1891. ];
  1892. repeated bool packed_bool_midfield = 1003 [
  1893. features.repeated_field_encoding = PACKED
  1894. ];
  1895. repeated bool packed_bool_hifield = 1000003 [
  1896. features.repeated_field_encoding = PACKED
  1897. ];
  1898. extensions 2000000 to max;
  1899. extend BoolParseTester {
  1900. bool optional_bool_ext = 2000000;
  1901. repeated bool repeated_bool_ext = 2000001;
  1902. repeated bool packed_bool_ext = 2000002 [
  1903. features.repeated_field_encoding = PACKED
  1904. ];
  1905. }
  1906. // An arbitrary field we can append to to break the runs of repeated fields.
  1907. int32 other_field = 99;
  1908. }
  1909. message Int32ParseTester {
  1910. int32 optional_int32_lowfield = 1;
  1911. int32 optional_int32_midfield = 1001;
  1912. int32 optional_int32_hifield = 1000001;
  1913. repeated int32 repeated_int32_lowfield = 2;
  1914. repeated int32 repeated_int32_midfield = 1002;
  1915. repeated int32 repeated_int32_hifield = 1000002;
  1916. repeated int32 packed_int32_lowfield = 3 [
  1917. features.repeated_field_encoding = PACKED
  1918. ];
  1919. repeated int32 packed_int32_midfield = 1003 [
  1920. features.repeated_field_encoding = PACKED
  1921. ];
  1922. repeated int32 packed_int32_hifield = 1000003 [
  1923. features.repeated_field_encoding = PACKED
  1924. ];
  1925. extensions 2000000 to max;
  1926. extend Int32ParseTester {
  1927. int32 optional_int32_ext = 2000000;
  1928. repeated int32 repeated_int32_ext = 2000001;
  1929. repeated int32 packed_int32_ext = 2000002 [
  1930. features.repeated_field_encoding = PACKED
  1931. ];
  1932. }
  1933. // An arbitrary field we can append to to break the runs of repeated fields.
  1934. int32 other_field = 99;
  1935. }
  1936. message Int64ParseTester {
  1937. int64 optional_int64_lowfield = 1;
  1938. int64 optional_int64_midfield = 1001;
  1939. int64 optional_int64_hifield = 1000001;
  1940. repeated int64 repeated_int64_lowfield = 2;
  1941. repeated int64 repeated_int64_midfield = 1002;
  1942. repeated int64 repeated_int64_hifield = 1000002;
  1943. repeated int64 packed_int64_lowfield = 3 [
  1944. features.repeated_field_encoding = PACKED
  1945. ];
  1946. repeated int64 packed_int64_midfield = 1003 [
  1947. features.repeated_field_encoding = PACKED
  1948. ];
  1949. repeated int64 packed_int64_hifield = 1000003 [
  1950. features.repeated_field_encoding = PACKED
  1951. ];
  1952. extensions 2000000 to max;
  1953. extend Int64ParseTester {
  1954. int64 optional_int64_ext = 2000000;
  1955. repeated int64 repeated_int64_ext = 2000001;
  1956. repeated int64 packed_int64_ext = 2000002 [
  1957. features.repeated_field_encoding = PACKED
  1958. ];
  1959. }
  1960. // An arbitrary field we can append to to break the runs of repeated fields.
  1961. int32 other_field = 99;
  1962. }
  1963. message InlinedStringIdxRegressionProto {
  1964. // We mix data to make sure aux ids and inlined string idx do not match.
  1965. // aux_idx == inlined_string_idx == 1
  1966. string str1 = 1;
  1967. // aux_idx == 2
  1968. InlinedStringIdxRegressionProto sub = 2;
  1969. // aux_idx == 3, inlined_string_idx == 2
  1970. string str2 = 3;
  1971. // aux_idx == 4, inlined_string_idx == 3
  1972. bytes str3 = 4;
  1973. }
  1974. message StringParseTester {
  1975. string optional_string_lowfield = 1;
  1976. string optional_string_midfield = 1001;
  1977. string optional_string_hifield = 1000001;
  1978. repeated string repeated_string_lowfield = 2;
  1979. repeated string repeated_string_midfield = 1002;
  1980. repeated string repeated_string_hifield = 1000002;
  1981. extensions 2000000 to max;
  1982. extend StringParseTester {
  1983. string optional_string_ext = 2000000;
  1984. repeated string repeated_string_ext = 2000001;
  1985. }
  1986. }
  1987. message BadFieldNames {
  1988. int32 OptionalInt32 = 1;
  1989. int32 for = 2;
  1990. }
  1991. message TestNestedMessageRedaction {
  1992. string optional_unredacted_nested_string = 1;
  1993. string optional_redacted_nested_string = 2 [
  1994. debug_redact = true
  1995. ];
  1996. }
  1997. message RedactedFields {
  1998. string optional_redacted_string = 1 [
  1999. debug_redact = true
  2000. ];
  2001. string optional_unredacted_string = 2;
  2002. repeated string repeated_redacted_string = 3 [
  2003. debug_redact = true
  2004. ];
  2005. repeated string repeated_unredacted_string = 4;
  2006. TestNestedMessageRedaction optional_redacted_message = 5 [
  2007. debug_redact = true
  2008. ];
  2009. TestNestedMessageRedaction optional_unredacted_message = 6;
  2010. repeated TestNestedMessageRedaction repeated_redacted_message = 7 [
  2011. debug_redact = true
  2012. ];
  2013. repeated TestNestedMessageRedaction repeated_unredacted_message = 8;
  2014. map<string, string> map_redacted_string = 9 [
  2015. debug_redact = true
  2016. ];
  2017. map<string, string> map_unredacted_string = 10;
  2018. string optional_redacted_false_string = 11 [
  2019. debug_redact = false
  2020. ];
  2021. extensions 20 to 30;
  2022. }
  2023. extend RedactedFields {
  2024. string redacted_extension = 20 [
  2025. debug_redact = true
  2026. ];
  2027. }
  2028. message TestCord {
  2029. bytes optional_bytes_cord = 1 [
  2030. ctype = CORD
  2031. ];
  2032. bytes optional_bytes_cord_default = 2 [
  2033. ctype = CORD,
  2034. default = "hello"
  2035. ];
  2036. }
  2037. message TestPackedEnumSmallRange {
  2038. enum NestedEnum {
  2039. UNSPECIFIED = 0;
  2040. FOO = 1;
  2041. BAR = 2;
  2042. BAZ = 3;
  2043. }
  2044. repeated NestedEnum vals = 1 [
  2045. features.repeated_field_encoding = PACKED
  2046. ];
  2047. }
  2048. message EnumsForBenchmark {
  2049. enum Flat {
  2050. A0 = 0;
  2051. A1 = 1;
  2052. A2 = 2;
  2053. A3 = 3;
  2054. A4 = 4;
  2055. A5 = 5;
  2056. A6 = 6;
  2057. A7 = 7;
  2058. A8 = 8;
  2059. A9 = 9;
  2060. A10 = 10;
  2061. A11 = 11;
  2062. A12 = 12;
  2063. A13 = 13;
  2064. A14 = 14;
  2065. A15 = 15;
  2066. }
  2067. // Has a few holes, bitmap can be used.
  2068. enum AlmostFlat {
  2069. B0 = 0;
  2070. B1 = 1;
  2071. B2 = 2;
  2072. B3 = 3;
  2073. B5 = 5;
  2074. B6 = 6;
  2075. B7 = 7;
  2076. B8 = 8;
  2077. B9 = 9;
  2078. B11 = 11;
  2079. B12 = 12;
  2080. B13 = 13;
  2081. B14 = 14;
  2082. B15 = 15;
  2083. B17 = 17;
  2084. B19 = 19;
  2085. }
  2086. enum Sparse {
  2087. C536 = 536;
  2088. C8387 = 8387;
  2089. C9673 = 9673;
  2090. C10285 = 10285;
  2091. C13318 = 13318;
  2092. C15963 = 15963;
  2093. C16439 = 16439;
  2094. C18197 = 18197;
  2095. C19430 = 19430;
  2096. C20361 = 20361;
  2097. C20706 = 20706;
  2098. C21050 = 21050;
  2099. C21906 = 21906;
  2100. C27265 = 27265;
  2101. C30109 = 30109;
  2102. C31670 = 31670;
  2103. }
  2104. }
  2105. message TestMessageWithManyRepeatedPtrFields {
  2106. repeated string repeated_string_1 = 1;
  2107. repeated string repeated_string_2 = 2;
  2108. repeated string repeated_string_3 = 3;
  2109. repeated string repeated_string_4 = 4;
  2110. repeated string repeated_string_5 = 5;
  2111. repeated string repeated_string_6 = 6;
  2112. repeated string repeated_string_7 = 7;
  2113. repeated string repeated_string_8 = 8;
  2114. repeated string repeated_string_9 = 9;
  2115. repeated string repeated_string_10 = 10;
  2116. repeated string repeated_string_11 = 11;
  2117. repeated string repeated_string_12 = 12;
  2118. repeated string repeated_string_13 = 13;
  2119. repeated string repeated_string_14 = 14;
  2120. repeated string repeated_string_15 = 15;
  2121. repeated string repeated_string_16 = 16;
  2122. repeated string repeated_string_17 = 17;
  2123. repeated string repeated_string_18 = 18;
  2124. repeated string repeated_string_19 = 19;
  2125. repeated string repeated_string_20 = 20;
  2126. repeated string repeated_string_21 = 21;
  2127. repeated string repeated_string_22 = 22;
  2128. repeated string repeated_string_23 = 23;
  2129. repeated string repeated_string_24 = 24;
  2130. repeated string repeated_string_25 = 25;
  2131. repeated string repeated_string_26 = 26;
  2132. repeated string repeated_string_27 = 27;
  2133. repeated string repeated_string_28 = 28;
  2134. repeated string repeated_string_29 = 29;
  2135. repeated string repeated_string_30 = 30;
  2136. repeated string repeated_string_31 = 31;
  2137. repeated string repeated_string_32 = 32;
  2138. }
  2139. message MessageCreatorZeroInit {
  2140. int32 i = 1;
  2141. double d = 2;
  2142. MessageCreatorZeroInit m = 3;
  2143. oneof one {
  2144. string os = 10;
  2145. string oc = 11 [
  2146. ctype = CORD
  2147. ];
  2148. fixed64 of = 12;
  2149. MessageCreatorZeroInit ol = 13 [
  2150. lazy = true
  2151. ];
  2152. }
  2153. }
  2154. message MessageCreatorMemcpy {
  2155. string s = 1;
  2156. repeated int32 i = 2 [
  2157. features.repeated_field_encoding = PACKED
  2158. ];
  2159. MessageCreatorMemcpy m = 3 [
  2160. lazy = true
  2161. ];
  2162. map<int32, int32> m2 = 4;
  2163. }
  2164. message MessageCreatorFunc {
  2165. // This one is ArenaDtorNeeds::kRequired so we must run the constructor.
  2166. string c = 3 [
  2167. ctype = CORD
  2168. ];
  2169. }