GPBMessageTests+Runtime.m 82 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2015 Google Inc. All rights reserved.
  3. // https://developers.google.com/protocol-buffers/
  4. //
  5. // Redistribution and use in source and binary forms, with or without
  6. // modification, are permitted provided that the following conditions are
  7. // met:
  8. //
  9. // * Redistributions of source code must retain the above copyright
  10. // notice, this list of conditions and the following disclaimer.
  11. // * Redistributions in binary form must reproduce the above
  12. // copyright notice, this list of conditions and the following disclaimer
  13. // in the documentation and/or other materials provided with the
  14. // distribution.
  15. // * Neither the name of Google Inc. nor the names of its
  16. // contributors may be used to endorse or promote products derived from
  17. // this software without specific prior written permission.
  18. //
  19. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  22. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  23. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  24. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  25. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  26. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  27. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  28. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  29. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. #import "GPBTestUtilities.h"
  31. #import <objc/runtime.h>
  32. #import "GPBMessage.h"
  33. #import "google/protobuf/MapUnittest.pbobjc.h"
  34. #import "google/protobuf/Unittest.pbobjc.h"
  35. #import "google/protobuf/UnittestObjcStartup.pbobjc.h"
  36. #import "google/protobuf/UnittestRuntimeProto2.pbobjc.h"
  37. #import "google/protobuf/UnittestRuntimeProto3.pbobjc.h"
  38. @interface MessageRuntimeTests : GPBTestCase
  39. @end
  40. @implementation MessageRuntimeTests
  41. // TODO(thomasvl): Pull tests over from GPBMessageTests that are runtime
  42. // specific.
  43. - (void)testStartupOrdering {
  44. // Just have to create a message. Nothing else uses the classes from
  45. // this file, so the first selector invoked on the class will initialize
  46. // it, which also initializes the root.
  47. TestObjCStartupMessage *message = [TestObjCStartupMessage message];
  48. XCTAssertNotNil(message);
  49. }
  50. - (void)testProto2HasMethodSupport {
  51. NSArray *names = @[
  52. @"Int32",
  53. @"Int64",
  54. @"Uint32",
  55. @"Uint64",
  56. @"Sint32",
  57. @"Sint64",
  58. @"Fixed32",
  59. @"Fixed64",
  60. @"Sfixed32",
  61. @"Sfixed64",
  62. @"Float",
  63. @"Double",
  64. @"Bool",
  65. @"String",
  66. @"Bytes",
  67. @"Group",
  68. @"Message",
  69. @"Enum",
  70. ];
  71. // Proto2 gets:
  72. // Single fields - has*/setHas* is valid.
  73. for (NSString *name in names) {
  74. // build the selector, i.e. - hasOptionalInt32/setHasOptionalInt32:
  75. SEL hasSel = NSSelectorFromString(
  76. [NSString stringWithFormat:@"hasOptional%@", name]);
  77. SEL setHasSel = NSSelectorFromString(
  78. [NSString stringWithFormat:@"setHasOptional%@:", name]);
  79. XCTAssertTrue([Message2 instancesRespondToSelector:hasSel], @"field: %@",
  80. name);
  81. XCTAssertTrue([Message2 instancesRespondToSelector:setHasSel], @"field: %@",
  82. name);
  83. }
  84. // Repeated fields
  85. // - no has*/setHas*
  86. // - *Count
  87. for (NSString *name in names) {
  88. // build the selector, i.e. - hasRepeatedInt32Array/setHasRepeatedInt32Array:
  89. SEL hasSel = NSSelectorFromString(
  90. [NSString stringWithFormat:@"hasRepeated%@Array", name]);
  91. SEL setHasSel = NSSelectorFromString(
  92. [NSString stringWithFormat:@"setHasRepeated%@Array:", name]);
  93. XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
  94. name);
  95. XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
  96. @"field: %@", name);
  97. // build the selector, i.e. - repeatedInt32Array_Count
  98. SEL countSel = NSSelectorFromString(
  99. [NSString stringWithFormat:@"repeated%@Array_Count", name]);
  100. XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
  101. name);
  102. }
  103. // OneOf fields - no has*/setHas*
  104. for (NSString *name in names) {
  105. // build the selector, i.e. - hasOneofInt32/setHasOneofInt32:
  106. SEL hasSel =
  107. NSSelectorFromString([NSString stringWithFormat:@"hasOneof%@", name]);
  108. SEL setHasSel = NSSelectorFromString(
  109. [NSString stringWithFormat:@"setHasOneof%@:", name]);
  110. XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
  111. name);
  112. XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
  113. @"field: %@", name);
  114. }
  115. // map<> fields
  116. // - no has*/setHas*
  117. // - *Count
  118. NSArray *mapNames = @[
  119. @"Int32Int32",
  120. @"Int64Int64",
  121. @"Uint32Uint32",
  122. @"Uint64Uint64",
  123. @"Sint32Sint32",
  124. @"Sint64Sint64",
  125. @"Fixed32Fixed32",
  126. @"Fixed64Fixed64",
  127. @"Sfixed32Sfixed32",
  128. @"Sfixed64Sfixed64",
  129. @"Int32Float",
  130. @"Int32Double",
  131. @"BoolBool",
  132. @"StringString",
  133. @"StringBytes",
  134. @"StringMessage",
  135. @"Int32Bytes",
  136. @"Int32Enum",
  137. @"Int32Message",
  138. ];
  139. for (NSString *name in mapNames) {
  140. // build the selector, i.e. - hasMapInt32Int32/setHasMapInt32Int32:
  141. SEL hasSel = NSSelectorFromString(
  142. [NSString stringWithFormat:@"hasMap%@", name]);
  143. SEL setHasSel = NSSelectorFromString(
  144. [NSString stringWithFormat:@"setHasMap%@:", name]);
  145. XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
  146. name);
  147. XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
  148. @"field: %@", name);
  149. // build the selector, i.e. - mapInt32Int32Count
  150. SEL countSel = NSSelectorFromString(
  151. [NSString stringWithFormat:@"map%@_Count", name]);
  152. XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
  153. name);
  154. }
  155. }
  156. - (void)testProto3HasMethodSupport {
  157. NSArray *names = @[
  158. @"Int32",
  159. @"Int64",
  160. @"Uint32",
  161. @"Uint64",
  162. @"Sint32",
  163. @"Sint64",
  164. @"Fixed32",
  165. @"Fixed64",
  166. @"Sfixed32",
  167. @"Sfixed64",
  168. @"Float",
  169. @"Double",
  170. @"Bool",
  171. @"String",
  172. @"Bytes",
  173. @"Message",
  174. @"Enum",
  175. ];
  176. // Proto3 gets:
  177. // Single fields
  178. // - has*/setHas* invalid for primative types.
  179. // - has*/setHas* valid for Message.
  180. for (NSString *name in names) {
  181. // build the selector, i.e. - hasOptionalInt32/setHasOptionalInt32:
  182. SEL hasSel = NSSelectorFromString(
  183. [NSString stringWithFormat:@"hasOptional%@", name]);
  184. SEL setHasSel = NSSelectorFromString(
  185. [NSString stringWithFormat:@"setHasOptional%@:", name]);
  186. if ([name isEqual:@"Message"]) {
  187. // Sub messages/groups are the exception.
  188. XCTAssertTrue([Message3 instancesRespondToSelector:hasSel], @"field: %@",
  189. name);
  190. XCTAssertTrue([Message3 instancesRespondToSelector:setHasSel],
  191. @"field: %@", name);
  192. } else {
  193. XCTAssertFalse([Message3 instancesRespondToSelector:hasSel], @"field: %@",
  194. name);
  195. XCTAssertFalse([Message3 instancesRespondToSelector:setHasSel],
  196. @"field: %@", name);
  197. }
  198. }
  199. // Repeated fields
  200. // - no has*/setHas*
  201. // - *Count
  202. for (NSString *name in names) {
  203. // build the selector, i.e. - hasRepeatedInt32Array/setHasRepeatedInt32Array:
  204. SEL hasSel = NSSelectorFromString(
  205. [NSString stringWithFormat:@"hasRepeated%@Array", name]);
  206. SEL setHasSel = NSSelectorFromString(
  207. [NSString stringWithFormat:@"setHasRepeated%@Array:", name]);
  208. XCTAssertFalse([Message3 instancesRespondToSelector:hasSel], @"field: %@",
  209. name);
  210. XCTAssertFalse([Message3 instancesRespondToSelector:setHasSel],
  211. @"field: %@", name);
  212. // build the selector, i.e. - repeatedInt32Array_Count
  213. SEL countSel = NSSelectorFromString(
  214. [NSString stringWithFormat:@"repeated%@Array_Count", name]);
  215. XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
  216. name);
  217. }
  218. // OneOf fields - no has*/setHas*
  219. for (NSString *name in names) {
  220. // build the selector, i.e. - hasOneofInt32/setHasOneofInt32:
  221. SEL hasSel =
  222. NSSelectorFromString([NSString stringWithFormat:@"hasOneof%@", name]);
  223. SEL setHasSel = NSSelectorFromString(
  224. [NSString stringWithFormat:@"setHasOneof%@:", name]);
  225. XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
  226. name);
  227. XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
  228. @"field: %@", name);
  229. }
  230. // map<> fields
  231. // - no has*/setHas*
  232. // - *Count
  233. NSArray *mapNames = @[
  234. @"Int32Int32",
  235. @"Int64Int64",
  236. @"Uint32Uint32",
  237. @"Uint64Uint64",
  238. @"Sint32Sint32",
  239. @"Sint64Sint64",
  240. @"Fixed32Fixed32",
  241. @"Fixed64Fixed64",
  242. @"Sfixed32Sfixed32",
  243. @"Sfixed64Sfixed64",
  244. @"Int32Float",
  245. @"Int32Double",
  246. @"BoolBool",
  247. @"StringString",
  248. @"StringBytes",
  249. @"StringMessage",
  250. @"Int32Bytes",
  251. @"Int32Enum",
  252. @"Int32Message",
  253. ];
  254. for (NSString *name in mapNames) {
  255. // build the selector, i.e. - hasMapInt32Int32/setHasMapInt32Int32:
  256. SEL hasSel = NSSelectorFromString(
  257. [NSString stringWithFormat:@"hasMap%@", name]);
  258. SEL setHasSel = NSSelectorFromString(
  259. [NSString stringWithFormat:@"setHasMap%@:", name]);
  260. XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@",
  261. name);
  262. XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel],
  263. @"field: %@", name);
  264. // build the selector, i.e. - mapInt32Int32Count
  265. SEL countSel = NSSelectorFromString(
  266. [NSString stringWithFormat:@"map%@_Count", name]);
  267. XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@",
  268. name);
  269. }
  270. }
  271. - (void)testProto2SingleFieldHasBehavior {
  272. //
  273. // Setting to any value including the default value (0) should result has*
  274. // being true.
  275. //
  276. //%PDDM-DEFINE PROTO2_TEST_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE)
  277. //% { // optional##FIELD :: NON_ZERO_VALUE
  278. //% Message2 *msg = [[Message2 alloc] init];
  279. //% XCTAssertFalse(msg.hasOptional##FIELD);
  280. //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD));
  281. //% msg.optional##FIELD = NON_ZERO_VALUE;
  282. //% XCTAssertTrue(msg.hasOptional##FIELD);
  283. //% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD));
  284. //% [msg release];
  285. //% }
  286. //% { // optional##FIELD :: ZERO_VALUE
  287. //% Message2 *msg = [[Message2 alloc] init];
  288. //% XCTAssertFalse(msg.hasOptional##FIELD);
  289. //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD));
  290. //% msg.optional##FIELD = ZERO_VALUE;
  291. //% XCTAssertTrue(msg.hasOptional##FIELD);
  292. //% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD));
  293. //% [msg release];
  294. //% }
  295. //%
  296. //%PDDM-DEFINE PROTO2_TEST_HAS_FIELDS()
  297. //%PROTO2_TEST_HAS_FIELD(Int32, 1, 0)
  298. //%PROTO2_TEST_HAS_FIELD(Int64, 1, 0)
  299. //%PROTO2_TEST_HAS_FIELD(Uint32, 1, 0)
  300. //%PROTO2_TEST_HAS_FIELD(Uint64, 1, 0)
  301. //%PROTO2_TEST_HAS_FIELD(Sint32, 1, 0)
  302. //%PROTO2_TEST_HAS_FIELD(Sint64, 1, 0)
  303. //%PROTO2_TEST_HAS_FIELD(Fixed32, 1, 0)
  304. //%PROTO2_TEST_HAS_FIELD(Fixed64, 1, 0)
  305. //%PROTO2_TEST_HAS_FIELD(Sfixed32, 1, 0)
  306. //%PROTO2_TEST_HAS_FIELD(Sfixed64, 1, 0)
  307. //%PROTO2_TEST_HAS_FIELD(Float, 1.0f, 0.0f)
  308. //%PROTO2_TEST_HAS_FIELD(Double, 1.0, 0.0)
  309. //%PROTO2_TEST_HAS_FIELD(Bool, YES, NO)
  310. //%PROTO2_TEST_HAS_FIELD(String, @"foo", @"")
  311. //%PROTO2_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding], [NSData data])
  312. //% //
  313. //% // Test doesn't apply to optionalGroup/optionalMessage.
  314. //% //
  315. //%
  316. //%PROTO2_TEST_HAS_FIELD(Enum, Message2_Enum_Bar, Message2_Enum_Foo)
  317. //%PDDM-EXPAND PROTO2_TEST_HAS_FIELDS()
  318. // This block of code is generated, do not edit it directly.
  319. { // optionalInt32 :: 1
  320. Message2 *msg = [[Message2 alloc] init];
  321. XCTAssertFalse(msg.hasOptionalInt32);
  322. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt32));
  323. msg.optionalInt32 = 1;
  324. XCTAssertTrue(msg.hasOptionalInt32);
  325. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt32));
  326. [msg release];
  327. }
  328. { // optionalInt32 :: 0
  329. Message2 *msg = [[Message2 alloc] init];
  330. XCTAssertFalse(msg.hasOptionalInt32);
  331. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt32));
  332. msg.optionalInt32 = 0;
  333. XCTAssertTrue(msg.hasOptionalInt32);
  334. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt32));
  335. [msg release];
  336. }
  337. { // optionalInt64 :: 1
  338. Message2 *msg = [[Message2 alloc] init];
  339. XCTAssertFalse(msg.hasOptionalInt64);
  340. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt64));
  341. msg.optionalInt64 = 1;
  342. XCTAssertTrue(msg.hasOptionalInt64);
  343. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt64));
  344. [msg release];
  345. }
  346. { // optionalInt64 :: 0
  347. Message2 *msg = [[Message2 alloc] init];
  348. XCTAssertFalse(msg.hasOptionalInt64);
  349. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt64));
  350. msg.optionalInt64 = 0;
  351. XCTAssertTrue(msg.hasOptionalInt64);
  352. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt64));
  353. [msg release];
  354. }
  355. { // optionalUint32 :: 1
  356. Message2 *msg = [[Message2 alloc] init];
  357. XCTAssertFalse(msg.hasOptionalUint32);
  358. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint32));
  359. msg.optionalUint32 = 1;
  360. XCTAssertTrue(msg.hasOptionalUint32);
  361. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint32));
  362. [msg release];
  363. }
  364. { // optionalUint32 :: 0
  365. Message2 *msg = [[Message2 alloc] init];
  366. XCTAssertFalse(msg.hasOptionalUint32);
  367. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint32));
  368. msg.optionalUint32 = 0;
  369. XCTAssertTrue(msg.hasOptionalUint32);
  370. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint32));
  371. [msg release];
  372. }
  373. { // optionalUint64 :: 1
  374. Message2 *msg = [[Message2 alloc] init];
  375. XCTAssertFalse(msg.hasOptionalUint64);
  376. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint64));
  377. msg.optionalUint64 = 1;
  378. XCTAssertTrue(msg.hasOptionalUint64);
  379. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint64));
  380. [msg release];
  381. }
  382. { // optionalUint64 :: 0
  383. Message2 *msg = [[Message2 alloc] init];
  384. XCTAssertFalse(msg.hasOptionalUint64);
  385. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint64));
  386. msg.optionalUint64 = 0;
  387. XCTAssertTrue(msg.hasOptionalUint64);
  388. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint64));
  389. [msg release];
  390. }
  391. { // optionalSint32 :: 1
  392. Message2 *msg = [[Message2 alloc] init];
  393. XCTAssertFalse(msg.hasOptionalSint32);
  394. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint32));
  395. msg.optionalSint32 = 1;
  396. XCTAssertTrue(msg.hasOptionalSint32);
  397. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint32));
  398. [msg release];
  399. }
  400. { // optionalSint32 :: 0
  401. Message2 *msg = [[Message2 alloc] init];
  402. XCTAssertFalse(msg.hasOptionalSint32);
  403. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint32));
  404. msg.optionalSint32 = 0;
  405. XCTAssertTrue(msg.hasOptionalSint32);
  406. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint32));
  407. [msg release];
  408. }
  409. { // optionalSint64 :: 1
  410. Message2 *msg = [[Message2 alloc] init];
  411. XCTAssertFalse(msg.hasOptionalSint64);
  412. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint64));
  413. msg.optionalSint64 = 1;
  414. XCTAssertTrue(msg.hasOptionalSint64);
  415. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint64));
  416. [msg release];
  417. }
  418. { // optionalSint64 :: 0
  419. Message2 *msg = [[Message2 alloc] init];
  420. XCTAssertFalse(msg.hasOptionalSint64);
  421. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint64));
  422. msg.optionalSint64 = 0;
  423. XCTAssertTrue(msg.hasOptionalSint64);
  424. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint64));
  425. [msg release];
  426. }
  427. { // optionalFixed32 :: 1
  428. Message2 *msg = [[Message2 alloc] init];
  429. XCTAssertFalse(msg.hasOptionalFixed32);
  430. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed32));
  431. msg.optionalFixed32 = 1;
  432. XCTAssertTrue(msg.hasOptionalFixed32);
  433. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed32));
  434. [msg release];
  435. }
  436. { // optionalFixed32 :: 0
  437. Message2 *msg = [[Message2 alloc] init];
  438. XCTAssertFalse(msg.hasOptionalFixed32);
  439. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed32));
  440. msg.optionalFixed32 = 0;
  441. XCTAssertTrue(msg.hasOptionalFixed32);
  442. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed32));
  443. [msg release];
  444. }
  445. { // optionalFixed64 :: 1
  446. Message2 *msg = [[Message2 alloc] init];
  447. XCTAssertFalse(msg.hasOptionalFixed64);
  448. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed64));
  449. msg.optionalFixed64 = 1;
  450. XCTAssertTrue(msg.hasOptionalFixed64);
  451. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed64));
  452. [msg release];
  453. }
  454. { // optionalFixed64 :: 0
  455. Message2 *msg = [[Message2 alloc] init];
  456. XCTAssertFalse(msg.hasOptionalFixed64);
  457. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed64));
  458. msg.optionalFixed64 = 0;
  459. XCTAssertTrue(msg.hasOptionalFixed64);
  460. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed64));
  461. [msg release];
  462. }
  463. { // optionalSfixed32 :: 1
  464. Message2 *msg = [[Message2 alloc] init];
  465. XCTAssertFalse(msg.hasOptionalSfixed32);
  466. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed32));
  467. msg.optionalSfixed32 = 1;
  468. XCTAssertTrue(msg.hasOptionalSfixed32);
  469. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed32));
  470. [msg release];
  471. }
  472. { // optionalSfixed32 :: 0
  473. Message2 *msg = [[Message2 alloc] init];
  474. XCTAssertFalse(msg.hasOptionalSfixed32);
  475. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed32));
  476. msg.optionalSfixed32 = 0;
  477. XCTAssertTrue(msg.hasOptionalSfixed32);
  478. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed32));
  479. [msg release];
  480. }
  481. { // optionalSfixed64 :: 1
  482. Message2 *msg = [[Message2 alloc] init];
  483. XCTAssertFalse(msg.hasOptionalSfixed64);
  484. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed64));
  485. msg.optionalSfixed64 = 1;
  486. XCTAssertTrue(msg.hasOptionalSfixed64);
  487. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed64));
  488. [msg release];
  489. }
  490. { // optionalSfixed64 :: 0
  491. Message2 *msg = [[Message2 alloc] init];
  492. XCTAssertFalse(msg.hasOptionalSfixed64);
  493. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed64));
  494. msg.optionalSfixed64 = 0;
  495. XCTAssertTrue(msg.hasOptionalSfixed64);
  496. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed64));
  497. [msg release];
  498. }
  499. { // optionalFloat :: 1.0f
  500. Message2 *msg = [[Message2 alloc] init];
  501. XCTAssertFalse(msg.hasOptionalFloat);
  502. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFloat));
  503. msg.optionalFloat = 1.0f;
  504. XCTAssertTrue(msg.hasOptionalFloat);
  505. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFloat));
  506. [msg release];
  507. }
  508. { // optionalFloat :: 0.0f
  509. Message2 *msg = [[Message2 alloc] init];
  510. XCTAssertFalse(msg.hasOptionalFloat);
  511. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFloat));
  512. msg.optionalFloat = 0.0f;
  513. XCTAssertTrue(msg.hasOptionalFloat);
  514. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFloat));
  515. [msg release];
  516. }
  517. { // optionalDouble :: 1.0
  518. Message2 *msg = [[Message2 alloc] init];
  519. XCTAssertFalse(msg.hasOptionalDouble);
  520. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalDouble));
  521. msg.optionalDouble = 1.0;
  522. XCTAssertTrue(msg.hasOptionalDouble);
  523. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalDouble));
  524. [msg release];
  525. }
  526. { // optionalDouble :: 0.0
  527. Message2 *msg = [[Message2 alloc] init];
  528. XCTAssertFalse(msg.hasOptionalDouble);
  529. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalDouble));
  530. msg.optionalDouble = 0.0;
  531. XCTAssertTrue(msg.hasOptionalDouble);
  532. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalDouble));
  533. [msg release];
  534. }
  535. { // optionalBool :: YES
  536. Message2 *msg = [[Message2 alloc] init];
  537. XCTAssertFalse(msg.hasOptionalBool);
  538. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBool));
  539. msg.optionalBool = YES;
  540. XCTAssertTrue(msg.hasOptionalBool);
  541. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBool));
  542. [msg release];
  543. }
  544. { // optionalBool :: NO
  545. Message2 *msg = [[Message2 alloc] init];
  546. XCTAssertFalse(msg.hasOptionalBool);
  547. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBool));
  548. msg.optionalBool = NO;
  549. XCTAssertTrue(msg.hasOptionalBool);
  550. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBool));
  551. [msg release];
  552. }
  553. { // optionalString :: @"foo"
  554. Message2 *msg = [[Message2 alloc] init];
  555. XCTAssertFalse(msg.hasOptionalString);
  556. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString));
  557. msg.optionalString = @"foo";
  558. XCTAssertTrue(msg.hasOptionalString);
  559. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString));
  560. [msg release];
  561. }
  562. { // optionalString :: @""
  563. Message2 *msg = [[Message2 alloc] init];
  564. XCTAssertFalse(msg.hasOptionalString);
  565. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString));
  566. msg.optionalString = @"";
  567. XCTAssertTrue(msg.hasOptionalString);
  568. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString));
  569. [msg release];
  570. }
  571. { // optionalBytes :: [@"foo" dataUsingEncoding:NSUTF8StringEncoding]
  572. Message2 *msg = [[Message2 alloc] init];
  573. XCTAssertFalse(msg.hasOptionalBytes);
  574. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes));
  575. msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding];
  576. XCTAssertTrue(msg.hasOptionalBytes);
  577. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes));
  578. [msg release];
  579. }
  580. { // optionalBytes :: [NSData data]
  581. Message2 *msg = [[Message2 alloc] init];
  582. XCTAssertFalse(msg.hasOptionalBytes);
  583. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes));
  584. msg.optionalBytes = [NSData data];
  585. XCTAssertTrue(msg.hasOptionalBytes);
  586. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes));
  587. [msg release];
  588. }
  589. //
  590. // Test doesn't apply to optionalGroup/optionalMessage.
  591. //
  592. { // optionalEnum :: Message2_Enum_Bar
  593. Message2 *msg = [[Message2 alloc] init];
  594. XCTAssertFalse(msg.hasOptionalEnum);
  595. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalEnum));
  596. msg.optionalEnum = Message2_Enum_Bar;
  597. XCTAssertTrue(msg.hasOptionalEnum);
  598. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalEnum));
  599. [msg release];
  600. }
  601. { // optionalEnum :: Message2_Enum_Foo
  602. Message2 *msg = [[Message2 alloc] init];
  603. XCTAssertFalse(msg.hasOptionalEnum);
  604. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalEnum));
  605. msg.optionalEnum = Message2_Enum_Foo;
  606. XCTAssertTrue(msg.hasOptionalEnum);
  607. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalEnum));
  608. [msg release];
  609. }
  610. //%PDDM-EXPAND-END PROTO2_TEST_HAS_FIELDS()
  611. }
  612. - (void)testProto3SingleFieldHasBehavior {
  613. //
  614. // Setting to any value including the default value (0) should result has*
  615. // being true.
  616. //
  617. //%PDDM-DEFINE PROTO3_TEST_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE)
  618. //% { // optional##FIELD
  619. //% Message3 *msg = [[Message3 alloc] init];
  620. //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD));
  621. //% msg.optional##FIELD = NON_ZERO_VALUE;
  622. //% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD));
  623. //% msg.optional##FIELD = ZERO_VALUE;
  624. //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD));
  625. //% [msg release];
  626. //% }
  627. //%
  628. //%PDDM-DEFINE PROTO3_TEST_HAS_FIELDS()
  629. //%PROTO3_TEST_HAS_FIELD(Int32, 1, 0)
  630. //%PROTO3_TEST_HAS_FIELD(Int64, 1, 0)
  631. //%PROTO3_TEST_HAS_FIELD(Uint32, 1, 0)
  632. //%PROTO3_TEST_HAS_FIELD(Uint64, 1, 0)
  633. //%PROTO3_TEST_HAS_FIELD(Sint32, 1, 0)
  634. //%PROTO3_TEST_HAS_FIELD(Sint64, 1, 0)
  635. //%PROTO3_TEST_HAS_FIELD(Fixed32, 1, 0)
  636. //%PROTO3_TEST_HAS_FIELD(Fixed64, 1, 0)
  637. //%PROTO3_TEST_HAS_FIELD(Sfixed32, 1, 0)
  638. //%PROTO3_TEST_HAS_FIELD(Sfixed64, 1, 0)
  639. //%PROTO3_TEST_HAS_FIELD(Float, 1.0f, 0.0f)
  640. //%PROTO3_TEST_HAS_FIELD(Double, 1.0, 0.0)
  641. //%PROTO3_TEST_HAS_FIELD(Bool, YES, NO)
  642. //%PROTO3_TEST_HAS_FIELD(String, @"foo", @"")
  643. //%PROTO3_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding], [NSData data])
  644. //% //
  645. //% // Test doesn't apply to optionalGroup/optionalMessage.
  646. //% //
  647. //%
  648. //%PROTO3_TEST_HAS_FIELD(Enum, Message3_Enum_Bar, Message3_Enum_Foo)
  649. //%PDDM-EXPAND PROTO3_TEST_HAS_FIELDS()
  650. // This block of code is generated, do not edit it directly.
  651. { // optionalInt32
  652. Message3 *msg = [[Message3 alloc] init];
  653. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt32));
  654. msg.optionalInt32 = 1;
  655. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt32));
  656. msg.optionalInt32 = 0;
  657. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt32));
  658. [msg release];
  659. }
  660. { // optionalInt64
  661. Message3 *msg = [[Message3 alloc] init];
  662. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt64));
  663. msg.optionalInt64 = 1;
  664. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt64));
  665. msg.optionalInt64 = 0;
  666. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt64));
  667. [msg release];
  668. }
  669. { // optionalUint32
  670. Message3 *msg = [[Message3 alloc] init];
  671. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint32));
  672. msg.optionalUint32 = 1;
  673. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint32));
  674. msg.optionalUint32 = 0;
  675. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint32));
  676. [msg release];
  677. }
  678. { // optionalUint64
  679. Message3 *msg = [[Message3 alloc] init];
  680. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint64));
  681. msg.optionalUint64 = 1;
  682. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint64));
  683. msg.optionalUint64 = 0;
  684. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint64));
  685. [msg release];
  686. }
  687. { // optionalSint32
  688. Message3 *msg = [[Message3 alloc] init];
  689. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint32));
  690. msg.optionalSint32 = 1;
  691. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint32));
  692. msg.optionalSint32 = 0;
  693. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint32));
  694. [msg release];
  695. }
  696. { // optionalSint64
  697. Message3 *msg = [[Message3 alloc] init];
  698. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint64));
  699. msg.optionalSint64 = 1;
  700. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint64));
  701. msg.optionalSint64 = 0;
  702. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint64));
  703. [msg release];
  704. }
  705. { // optionalFixed32
  706. Message3 *msg = [[Message3 alloc] init];
  707. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed32));
  708. msg.optionalFixed32 = 1;
  709. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed32));
  710. msg.optionalFixed32 = 0;
  711. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed32));
  712. [msg release];
  713. }
  714. { // optionalFixed64
  715. Message3 *msg = [[Message3 alloc] init];
  716. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed64));
  717. msg.optionalFixed64 = 1;
  718. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed64));
  719. msg.optionalFixed64 = 0;
  720. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed64));
  721. [msg release];
  722. }
  723. { // optionalSfixed32
  724. Message3 *msg = [[Message3 alloc] init];
  725. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed32));
  726. msg.optionalSfixed32 = 1;
  727. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed32));
  728. msg.optionalSfixed32 = 0;
  729. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed32));
  730. [msg release];
  731. }
  732. { // optionalSfixed64
  733. Message3 *msg = [[Message3 alloc] init];
  734. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed64));
  735. msg.optionalSfixed64 = 1;
  736. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed64));
  737. msg.optionalSfixed64 = 0;
  738. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed64));
  739. [msg release];
  740. }
  741. { // optionalFloat
  742. Message3 *msg = [[Message3 alloc] init];
  743. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFloat));
  744. msg.optionalFloat = 1.0f;
  745. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFloat));
  746. msg.optionalFloat = 0.0f;
  747. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFloat));
  748. [msg release];
  749. }
  750. { // optionalDouble
  751. Message3 *msg = [[Message3 alloc] init];
  752. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalDouble));
  753. msg.optionalDouble = 1.0;
  754. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalDouble));
  755. msg.optionalDouble = 0.0;
  756. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalDouble));
  757. [msg release];
  758. }
  759. { // optionalBool
  760. Message3 *msg = [[Message3 alloc] init];
  761. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBool));
  762. msg.optionalBool = YES;
  763. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBool));
  764. msg.optionalBool = NO;
  765. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBool));
  766. [msg release];
  767. }
  768. { // optionalString
  769. Message3 *msg = [[Message3 alloc] init];
  770. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString));
  771. msg.optionalString = @"foo";
  772. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString));
  773. msg.optionalString = @"";
  774. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString));
  775. [msg release];
  776. }
  777. { // optionalBytes
  778. Message3 *msg = [[Message3 alloc] init];
  779. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes));
  780. msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding];
  781. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes));
  782. msg.optionalBytes = [NSData data];
  783. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes));
  784. [msg release];
  785. }
  786. //
  787. // Test doesn't apply to optionalGroup/optionalMessage.
  788. //
  789. { // optionalEnum
  790. Message3 *msg = [[Message3 alloc] init];
  791. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalEnum));
  792. msg.optionalEnum = Message3_Enum_Bar;
  793. XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalEnum));
  794. msg.optionalEnum = Message3_Enum_Foo;
  795. XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalEnum));
  796. [msg release];
  797. }
  798. //%PDDM-EXPAND-END PROTO3_TEST_HAS_FIELDS()
  799. }
  800. - (void)testAccessingProto2UnknownEnumValues {
  801. Message2 *msg = [[Message2 alloc] init];
  802. // Set it to something non zero, try and confirm it doesn't change.
  803. msg.optionalEnum = Message2_Enum_Bar;
  804. XCTAssertThrowsSpecificNamed(msg.optionalEnum = 666, NSException,
  805. NSInvalidArgumentException);
  806. XCTAssertEqual(msg.optionalEnum, Message2_Enum_Bar);
  807. msg.oneofEnum = Message2_Enum_Bar;
  808. XCTAssertThrowsSpecificNamed(msg.oneofEnum = 666, NSException,
  809. NSInvalidArgumentException);
  810. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Bar);
  811. [msg release];
  812. }
  813. - (void)testAccessingProto3UnknownEnumValues {
  814. Message3 *msg = [[Message3 alloc] init];
  815. // Set it to something non zero, try and confirm it doesn't change.
  816. msg.optionalEnum = Message3_Enum_Bar;
  817. XCTAssertThrowsSpecificNamed(msg.optionalEnum = 666, NSException,
  818. NSInvalidArgumentException);
  819. XCTAssertEqual(msg.optionalEnum, Message3_Enum_Bar);
  820. msg.oneofEnum = Message3_Enum_Bar;
  821. XCTAssertThrowsSpecificNamed(msg.oneofEnum = 666, NSException,
  822. NSInvalidArgumentException);
  823. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Bar);
  824. // Set via raw api to confirm it works.
  825. SetMessage3_OptionalEnum_RawValue(msg, 666);
  826. XCTAssertEqual(msg.optionalEnum,
  827. Message3_Enum_GPBUnrecognizedEnumeratorValue);
  828. XCTAssertEqual(Message3_OptionalEnum_RawValue(msg), 666);
  829. SetMessage3_OneofEnum_RawValue(msg, 666);
  830. XCTAssertEqual(msg.oneofEnum, Message3_Enum_GPBUnrecognizedEnumeratorValue);
  831. XCTAssertEqual(Message3_OneofEnum_RawValue(msg), 666);
  832. [msg release];
  833. }
  834. - (void)testProto2OneofBasicBehaviors {
  835. Message2 *msg = [[Message2 alloc] init];
  836. NSString *oneofStringDefault = @"string";
  837. NSData *oneofBytesDefault = [@"data" dataUsingEncoding:NSUTF8StringEncoding];
  838. // Nothing set.
  839. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase);
  840. XCTAssertEqual(msg.oneofInt32, 100);
  841. XCTAssertEqual(msg.oneofInt64, 101);
  842. XCTAssertEqual(msg.oneofUint32, 102U);
  843. XCTAssertEqual(msg.oneofUint64, 103U);
  844. XCTAssertEqual(msg.oneofSint32, 104);
  845. XCTAssertEqual(msg.oneofSint64, 105);
  846. XCTAssertEqual(msg.oneofFixed32, 106U);
  847. XCTAssertEqual(msg.oneofFixed64, 107U);
  848. XCTAssertEqual(msg.oneofSfixed32, 108);
  849. XCTAssertEqual(msg.oneofSfixed64, 109);
  850. XCTAssertEqual(msg.oneofFloat, 110.0f);
  851. XCTAssertEqual(msg.oneofDouble, 111.0);
  852. XCTAssertEqual(msg.oneofBool, YES);
  853. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  854. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  855. XCTAssertNotNil(msg.oneofGroup);
  856. XCTAssertNotNil(msg.oneofMessage);
  857. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  858. // Set, check the case, check everyone has default but the one, confirm case
  859. // didn't change.
  860. msg.oneofInt32 = 1;
  861. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofInt32);
  862. XCTAssertEqual(msg.oneofInt32, 1);
  863. XCTAssertEqual(msg.oneofInt64, 101);
  864. XCTAssertEqual(msg.oneofUint32, 102U);
  865. XCTAssertEqual(msg.oneofUint64, 103U);
  866. XCTAssertEqual(msg.oneofSint32, 104);
  867. XCTAssertEqual(msg.oneofSint64, 105);
  868. XCTAssertEqual(msg.oneofFixed32, 106U);
  869. XCTAssertEqual(msg.oneofFixed64, 107U);
  870. XCTAssertEqual(msg.oneofSfixed32, 108);
  871. XCTAssertEqual(msg.oneofSfixed64, 109);
  872. XCTAssertEqual(msg.oneofFloat, 110.0f);
  873. XCTAssertEqual(msg.oneofDouble, 111.0);
  874. XCTAssertEqual(msg.oneofBool, YES);
  875. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  876. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  877. XCTAssertNotNil(msg.oneofGroup);
  878. XCTAssertNotNil(msg.oneofMessage);
  879. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  880. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofInt32);
  881. msg.oneofInt64 = 2;
  882. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofInt64);
  883. XCTAssertEqual(msg.oneofInt32, 100);
  884. XCTAssertEqual(msg.oneofInt64, 2);
  885. XCTAssertEqual(msg.oneofUint32, 102U);
  886. XCTAssertEqual(msg.oneofUint64, 103U);
  887. XCTAssertEqual(msg.oneofSint32, 104);
  888. XCTAssertEqual(msg.oneofSint64, 105);
  889. XCTAssertEqual(msg.oneofFixed32, 106U);
  890. XCTAssertEqual(msg.oneofFixed64, 107U);
  891. XCTAssertEqual(msg.oneofSfixed32, 108);
  892. XCTAssertEqual(msg.oneofSfixed64, 109);
  893. XCTAssertEqual(msg.oneofFloat, 110.0f);
  894. XCTAssertEqual(msg.oneofDouble, 111.0);
  895. XCTAssertEqual(msg.oneofBool, YES);
  896. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  897. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  898. XCTAssertNotNil(msg.oneofGroup);
  899. XCTAssertNotNil(msg.oneofMessage);
  900. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  901. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofInt64);
  902. msg.oneofUint32 = 3;
  903. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofUint32);
  904. XCTAssertEqual(msg.oneofInt32, 100);
  905. XCTAssertEqual(msg.oneofInt64, 101);
  906. XCTAssertEqual(msg.oneofUint32, 3U);
  907. XCTAssertEqual(msg.oneofUint64, 103U);
  908. XCTAssertEqual(msg.oneofSint32, 104);
  909. XCTAssertEqual(msg.oneofSint64, 105);
  910. XCTAssertEqual(msg.oneofFixed32, 106U);
  911. XCTAssertEqual(msg.oneofFixed64, 107U);
  912. XCTAssertEqual(msg.oneofSfixed32, 108);
  913. XCTAssertEqual(msg.oneofSfixed64, 109);
  914. XCTAssertEqual(msg.oneofFloat, 110.0f);
  915. XCTAssertEqual(msg.oneofDouble, 111.0);
  916. XCTAssertEqual(msg.oneofBool, YES);
  917. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  918. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  919. XCTAssertNotNil(msg.oneofGroup);
  920. XCTAssertNotNil(msg.oneofMessage);
  921. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  922. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofUint32);
  923. msg.oneofUint64 = 4;
  924. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofUint64);
  925. XCTAssertEqual(msg.oneofInt32, 100);
  926. XCTAssertEqual(msg.oneofInt64, 101);
  927. XCTAssertEqual(msg.oneofUint32, 102U);
  928. XCTAssertEqual(msg.oneofUint64, 4U);
  929. XCTAssertEqual(msg.oneofSint32, 104);
  930. XCTAssertEqual(msg.oneofSint64, 105);
  931. XCTAssertEqual(msg.oneofFixed32, 106U);
  932. XCTAssertEqual(msg.oneofFixed64, 107U);
  933. XCTAssertEqual(msg.oneofSfixed32, 108);
  934. XCTAssertEqual(msg.oneofSfixed64, 109);
  935. XCTAssertEqual(msg.oneofFloat, 110.0f);
  936. XCTAssertEqual(msg.oneofDouble, 111.0);
  937. XCTAssertEqual(msg.oneofBool, YES);
  938. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  939. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  940. XCTAssertNotNil(msg.oneofGroup);
  941. XCTAssertNotNil(msg.oneofMessage);
  942. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  943. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofUint64);
  944. msg.oneofSint32 = 5;
  945. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSint32);
  946. XCTAssertEqual(msg.oneofInt32, 100);
  947. XCTAssertEqual(msg.oneofInt64, 101);
  948. XCTAssertEqual(msg.oneofUint32, 102U);
  949. XCTAssertEqual(msg.oneofUint64, 103U);
  950. XCTAssertEqual(msg.oneofSint32, 5);
  951. XCTAssertEqual(msg.oneofSint64, 105);
  952. XCTAssertEqual(msg.oneofFixed32, 106U);
  953. XCTAssertEqual(msg.oneofFixed64, 107U);
  954. XCTAssertEqual(msg.oneofSfixed32, 108);
  955. XCTAssertEqual(msg.oneofSfixed64, 109);
  956. XCTAssertEqual(msg.oneofFloat, 110.0f);
  957. XCTAssertEqual(msg.oneofDouble, 111.0);
  958. XCTAssertEqual(msg.oneofBool, YES);
  959. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  960. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  961. XCTAssertNotNil(msg.oneofGroup);
  962. XCTAssertNotNil(msg.oneofMessage);
  963. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  964. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSint32);
  965. msg.oneofSint64 = 6;
  966. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSint64);
  967. XCTAssertEqual(msg.oneofInt32, 100);
  968. XCTAssertEqual(msg.oneofInt64, 101);
  969. XCTAssertEqual(msg.oneofUint32, 102U);
  970. XCTAssertEqual(msg.oneofUint64, 103U);
  971. XCTAssertEqual(msg.oneofSint32, 104);
  972. XCTAssertEqual(msg.oneofSint64, 6);
  973. XCTAssertEqual(msg.oneofFixed32, 106U);
  974. XCTAssertEqual(msg.oneofFixed64, 107U);
  975. XCTAssertEqual(msg.oneofSfixed32, 108);
  976. XCTAssertEqual(msg.oneofSfixed64, 109);
  977. XCTAssertEqual(msg.oneofFloat, 110.0f);
  978. XCTAssertEqual(msg.oneofDouble, 111.0);
  979. XCTAssertEqual(msg.oneofBool, YES);
  980. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  981. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  982. XCTAssertNotNil(msg.oneofGroup);
  983. XCTAssertNotNil(msg.oneofMessage);
  984. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  985. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSint64);
  986. msg.oneofFixed32 = 7;
  987. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFixed32);
  988. XCTAssertEqual(msg.oneofInt32, 100);
  989. XCTAssertEqual(msg.oneofInt64, 101);
  990. XCTAssertEqual(msg.oneofUint32, 102U);
  991. XCTAssertEqual(msg.oneofUint64, 103U);
  992. XCTAssertEqual(msg.oneofSint32, 104);
  993. XCTAssertEqual(msg.oneofSint64, 105);
  994. XCTAssertEqual(msg.oneofFixed32, 7U);
  995. XCTAssertEqual(msg.oneofFixed64, 107U);
  996. XCTAssertEqual(msg.oneofSfixed32, 108);
  997. XCTAssertEqual(msg.oneofSfixed64, 109);
  998. XCTAssertEqual(msg.oneofFloat, 110.0f);
  999. XCTAssertEqual(msg.oneofDouble, 111.0);
  1000. XCTAssertEqual(msg.oneofBool, YES);
  1001. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1002. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1003. XCTAssertNotNil(msg.oneofGroup);
  1004. XCTAssertNotNil(msg.oneofMessage);
  1005. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1006. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFixed32);
  1007. msg.oneofFixed64 = 8;
  1008. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFixed64);
  1009. XCTAssertEqual(msg.oneofInt32, 100);
  1010. XCTAssertEqual(msg.oneofInt64, 101);
  1011. XCTAssertEqual(msg.oneofUint32, 102U);
  1012. XCTAssertEqual(msg.oneofUint64, 103U);
  1013. XCTAssertEqual(msg.oneofSint32, 104);
  1014. XCTAssertEqual(msg.oneofSint64, 105);
  1015. XCTAssertEqual(msg.oneofFixed32, 106U);
  1016. XCTAssertEqual(msg.oneofFixed64, 8U);
  1017. XCTAssertEqual(msg.oneofSfixed32, 108);
  1018. XCTAssertEqual(msg.oneofSfixed64, 109);
  1019. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1020. XCTAssertEqual(msg.oneofDouble, 111.0);
  1021. XCTAssertEqual(msg.oneofBool, YES);
  1022. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1023. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1024. XCTAssertNotNil(msg.oneofGroup);
  1025. XCTAssertNotNil(msg.oneofMessage);
  1026. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1027. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFixed64);
  1028. msg.oneofSfixed32 = 9;
  1029. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSfixed32);
  1030. XCTAssertEqual(msg.oneofInt32, 100);
  1031. XCTAssertEqual(msg.oneofInt64, 101);
  1032. XCTAssertEqual(msg.oneofUint32, 102U);
  1033. XCTAssertEqual(msg.oneofUint64, 103U);
  1034. XCTAssertEqual(msg.oneofSint32, 104);
  1035. XCTAssertEqual(msg.oneofSint64, 105);
  1036. XCTAssertEqual(msg.oneofFixed32, 106U);
  1037. XCTAssertEqual(msg.oneofFixed64, 107U);
  1038. XCTAssertEqual(msg.oneofSfixed32, 9);
  1039. XCTAssertEqual(msg.oneofSfixed64, 109);
  1040. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1041. XCTAssertEqual(msg.oneofDouble, 111.0);
  1042. XCTAssertEqual(msg.oneofBool, YES);
  1043. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1044. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1045. XCTAssertNotNil(msg.oneofGroup);
  1046. XCTAssertNotNil(msg.oneofMessage);
  1047. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1048. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSfixed32);
  1049. msg.oneofSfixed64 = 10;
  1050. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSfixed64);
  1051. XCTAssertEqual(msg.oneofInt32, 100);
  1052. XCTAssertEqual(msg.oneofInt64, 101);
  1053. XCTAssertEqual(msg.oneofUint32, 102U);
  1054. XCTAssertEqual(msg.oneofUint64, 103U);
  1055. XCTAssertEqual(msg.oneofSint32, 104);
  1056. XCTAssertEqual(msg.oneofSint64, 105);
  1057. XCTAssertEqual(msg.oneofFixed32, 106U);
  1058. XCTAssertEqual(msg.oneofFixed64, 107U);
  1059. XCTAssertEqual(msg.oneofSfixed32, 108);
  1060. XCTAssertEqual(msg.oneofSfixed64, 10);
  1061. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1062. XCTAssertEqual(msg.oneofDouble, 111.0);
  1063. XCTAssertEqual(msg.oneofBool, YES);
  1064. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1065. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1066. XCTAssertNotNil(msg.oneofGroup);
  1067. XCTAssertNotNil(msg.oneofMessage);
  1068. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1069. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSfixed64);
  1070. msg.oneofFloat = 11.0f;
  1071. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFloat);
  1072. XCTAssertEqual(msg.oneofInt32, 100);
  1073. XCTAssertEqual(msg.oneofInt64, 101);
  1074. XCTAssertEqual(msg.oneofUint32, 102U);
  1075. XCTAssertEqual(msg.oneofUint64, 103U);
  1076. XCTAssertEqual(msg.oneofSint32, 104);
  1077. XCTAssertEqual(msg.oneofSint64, 105);
  1078. XCTAssertEqual(msg.oneofFixed32, 106U);
  1079. XCTAssertEqual(msg.oneofFixed64, 107U);
  1080. XCTAssertEqual(msg.oneofSfixed32, 108);
  1081. XCTAssertEqual(msg.oneofSfixed64, 109);
  1082. XCTAssertEqual(msg.oneofFloat, 11.0f);
  1083. XCTAssertEqual(msg.oneofDouble, 111.0);
  1084. XCTAssertEqual(msg.oneofBool, YES);
  1085. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1086. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1087. XCTAssertNotNil(msg.oneofGroup);
  1088. XCTAssertNotNil(msg.oneofMessage);
  1089. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1090. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFloat);
  1091. msg.oneofDouble = 12.0;
  1092. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofDouble);
  1093. XCTAssertEqual(msg.oneofInt32, 100);
  1094. XCTAssertEqual(msg.oneofInt64, 101);
  1095. XCTAssertEqual(msg.oneofUint32, 102U);
  1096. XCTAssertEqual(msg.oneofUint64, 103U);
  1097. XCTAssertEqual(msg.oneofSint32, 104);
  1098. XCTAssertEqual(msg.oneofSint64, 105);
  1099. XCTAssertEqual(msg.oneofFixed32, 106U);
  1100. XCTAssertEqual(msg.oneofFixed64, 107U);
  1101. XCTAssertEqual(msg.oneofSfixed32, 108);
  1102. XCTAssertEqual(msg.oneofSfixed64, 109);
  1103. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1104. XCTAssertEqual(msg.oneofDouble, 12.0);
  1105. XCTAssertEqual(msg.oneofBool, YES);
  1106. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1107. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1108. XCTAssertNotNil(msg.oneofGroup);
  1109. XCTAssertNotNil(msg.oneofMessage);
  1110. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1111. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofDouble);
  1112. msg.oneofBool = NO;
  1113. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofBool);
  1114. XCTAssertEqual(msg.oneofInt32, 100);
  1115. XCTAssertEqual(msg.oneofInt64, 101);
  1116. XCTAssertEqual(msg.oneofUint32, 102U);
  1117. XCTAssertEqual(msg.oneofUint64, 103U);
  1118. XCTAssertEqual(msg.oneofSint32, 104);
  1119. XCTAssertEqual(msg.oneofSint64, 105);
  1120. XCTAssertEqual(msg.oneofFixed32, 106U);
  1121. XCTAssertEqual(msg.oneofFixed64, 107U);
  1122. XCTAssertEqual(msg.oneofSfixed32, 108);
  1123. XCTAssertEqual(msg.oneofSfixed64, 109);
  1124. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1125. XCTAssertEqual(msg.oneofDouble, 111.0);
  1126. XCTAssertEqual(msg.oneofBool, NO);
  1127. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1128. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1129. XCTAssertNotNil(msg.oneofGroup);
  1130. XCTAssertNotNil(msg.oneofMessage);
  1131. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1132. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofBool);
  1133. msg.oneofString = @"foo";
  1134. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofString);
  1135. XCTAssertEqual(msg.oneofInt32, 100);
  1136. XCTAssertEqual(msg.oneofInt64, 101);
  1137. XCTAssertEqual(msg.oneofUint32, 102U);
  1138. XCTAssertEqual(msg.oneofUint64, 103U);
  1139. XCTAssertEqual(msg.oneofSint32, 104);
  1140. XCTAssertEqual(msg.oneofSint64, 105);
  1141. XCTAssertEqual(msg.oneofFixed32, 106U);
  1142. XCTAssertEqual(msg.oneofFixed64, 107U);
  1143. XCTAssertEqual(msg.oneofSfixed32, 108);
  1144. XCTAssertEqual(msg.oneofSfixed64, 109);
  1145. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1146. XCTAssertEqual(msg.oneofDouble, 111.0);
  1147. XCTAssertEqual(msg.oneofBool, YES);
  1148. XCTAssertEqualObjects(msg.oneofString, @"foo");
  1149. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1150. XCTAssertNotNil(msg.oneofGroup);
  1151. XCTAssertNotNil(msg.oneofMessage);
  1152. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1153. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofString);
  1154. msg.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding];
  1155. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofBytes);
  1156. XCTAssertEqual(msg.oneofInt32, 100);
  1157. XCTAssertEqual(msg.oneofInt64, 101);
  1158. XCTAssertEqual(msg.oneofUint32, 102U);
  1159. XCTAssertEqual(msg.oneofUint64, 103U);
  1160. XCTAssertEqual(msg.oneofSint32, 104);
  1161. XCTAssertEqual(msg.oneofSint64, 105);
  1162. XCTAssertEqual(msg.oneofFixed32, 106U);
  1163. XCTAssertEqual(msg.oneofFixed64, 107U);
  1164. XCTAssertEqual(msg.oneofSfixed32, 108);
  1165. XCTAssertEqual(msg.oneofSfixed64, 109);
  1166. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1167. XCTAssertEqual(msg.oneofDouble, 111.0);
  1168. XCTAssertEqual(msg.oneofBool, YES);
  1169. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1170. XCTAssertEqualObjects(msg.oneofBytes,
  1171. [@"bar" dataUsingEncoding:NSUTF8StringEncoding]);
  1172. XCTAssertNotNil(msg.oneofGroup);
  1173. XCTAssertNotNil(msg.oneofMessage);
  1174. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1175. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofBytes);
  1176. Message2_OneofGroup *group = [Message2_OneofGroup message];
  1177. msg.oneofGroup = group;
  1178. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofGroup);
  1179. XCTAssertEqual(msg.oneofInt32, 100);
  1180. XCTAssertEqual(msg.oneofInt64, 101);
  1181. XCTAssertEqual(msg.oneofUint32, 102U);
  1182. XCTAssertEqual(msg.oneofUint64, 103U);
  1183. XCTAssertEqual(msg.oneofSint32, 104);
  1184. XCTAssertEqual(msg.oneofSint64, 105);
  1185. XCTAssertEqual(msg.oneofFixed32, 106U);
  1186. XCTAssertEqual(msg.oneofFixed64, 107U);
  1187. XCTAssertEqual(msg.oneofSfixed32, 108);
  1188. XCTAssertEqual(msg.oneofSfixed64, 109);
  1189. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1190. XCTAssertEqual(msg.oneofDouble, 111.0);
  1191. XCTAssertEqual(msg.oneofBool, YES);
  1192. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1193. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1194. XCTAssertEqual(msg.oneofGroup, group); // Pointer compare.
  1195. XCTAssertNotNil(msg.oneofMessage);
  1196. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1197. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofGroup);
  1198. Message2 *subMessage = [Message2 message];
  1199. msg.oneofMessage = subMessage;
  1200. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofMessage);
  1201. XCTAssertEqual(msg.oneofInt32, 100);
  1202. XCTAssertEqual(msg.oneofInt64, 101);
  1203. XCTAssertEqual(msg.oneofUint32, 102U);
  1204. XCTAssertEqual(msg.oneofUint64, 103U);
  1205. XCTAssertEqual(msg.oneofSint32, 104);
  1206. XCTAssertEqual(msg.oneofSint64, 105);
  1207. XCTAssertEqual(msg.oneofFixed32, 106U);
  1208. XCTAssertEqual(msg.oneofFixed64, 107U);
  1209. XCTAssertEqual(msg.oneofSfixed32, 108);
  1210. XCTAssertEqual(msg.oneofSfixed64, 109);
  1211. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1212. XCTAssertEqual(msg.oneofDouble, 111.0);
  1213. XCTAssertEqual(msg.oneofBool, YES);
  1214. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1215. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1216. XCTAssertNotNil(msg.oneofGroup);
  1217. XCTAssertNotEqual(msg.oneofGroup, group); // Pointer compare.
  1218. XCTAssertEqual(msg.oneofMessage, subMessage); // Pointer compare.
  1219. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz);
  1220. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofMessage);
  1221. msg.oneofEnum = Message2_Enum_Bar;
  1222. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofEnum);
  1223. XCTAssertEqual(msg.oneofInt32, 100);
  1224. XCTAssertEqual(msg.oneofInt64, 101);
  1225. XCTAssertEqual(msg.oneofUint32, 102U);
  1226. XCTAssertEqual(msg.oneofUint64, 103U);
  1227. XCTAssertEqual(msg.oneofSint32, 104);
  1228. XCTAssertEqual(msg.oneofSint64, 105);
  1229. XCTAssertEqual(msg.oneofFixed32, 106U);
  1230. XCTAssertEqual(msg.oneofFixed64, 107U);
  1231. XCTAssertEqual(msg.oneofSfixed32, 108);
  1232. XCTAssertEqual(msg.oneofSfixed64, 109);
  1233. XCTAssertEqual(msg.oneofFloat, 110.0f);
  1234. XCTAssertEqual(msg.oneofDouble, 111.0);
  1235. XCTAssertEqual(msg.oneofBool, YES);
  1236. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1237. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1238. XCTAssertNotNil(msg.oneofGroup);
  1239. XCTAssertNotEqual(msg.oneofGroup, group); // Pointer compare.
  1240. XCTAssertNotNil(msg.oneofMessage);
  1241. XCTAssertNotEqual(msg.oneofMessage, subMessage); // Pointer compare.
  1242. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Bar);
  1243. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofEnum);
  1244. // Test setting/calling clear clearing.
  1245. [msg release];
  1246. msg = [[Message2 alloc] init];
  1247. uint32_t values[] = {
  1248. Message2_O_OneOfCase_OneofInt32,
  1249. Message2_O_OneOfCase_OneofInt64,
  1250. Message2_O_OneOfCase_OneofUint32,
  1251. Message2_O_OneOfCase_OneofUint64,
  1252. Message2_O_OneOfCase_OneofSint32,
  1253. Message2_O_OneOfCase_OneofSint64,
  1254. Message2_O_OneOfCase_OneofFixed32,
  1255. Message2_O_OneOfCase_OneofFixed64,
  1256. Message2_O_OneOfCase_OneofSfixed32,
  1257. Message2_O_OneOfCase_OneofSfixed64,
  1258. Message2_O_OneOfCase_OneofFloat,
  1259. Message2_O_OneOfCase_OneofDouble,
  1260. Message2_O_OneOfCase_OneofBool,
  1261. Message2_O_OneOfCase_OneofString,
  1262. Message2_O_OneOfCase_OneofBytes,
  1263. Message2_O_OneOfCase_OneofGroup,
  1264. Message2_O_OneOfCase_OneofMessage,
  1265. Message2_O_OneOfCase_OneofEnum,
  1266. };
  1267. for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) {
  1268. switch (values[i]) {
  1269. case Message2_O_OneOfCase_OneofInt32:
  1270. msg.oneofInt32 = 1;
  1271. break;
  1272. case Message2_O_OneOfCase_OneofInt64:
  1273. msg.oneofInt64 = 2;
  1274. break;
  1275. case Message2_O_OneOfCase_OneofUint32:
  1276. msg.oneofUint32 = 3;
  1277. break;
  1278. case Message2_O_OneOfCase_OneofUint64:
  1279. msg.oneofUint64 = 4;
  1280. break;
  1281. case Message2_O_OneOfCase_OneofSint32:
  1282. msg.oneofSint32 = 5;
  1283. break;
  1284. case Message2_O_OneOfCase_OneofSint64:
  1285. msg.oneofSint64 = 6;
  1286. break;
  1287. case Message2_O_OneOfCase_OneofFixed32:
  1288. msg.oneofFixed32 = 7;
  1289. break;
  1290. case Message2_O_OneOfCase_OneofFixed64:
  1291. msg.oneofFixed64 = 8;
  1292. break;
  1293. case Message2_O_OneOfCase_OneofSfixed32:
  1294. msg.oneofSfixed32 = 9;
  1295. break;
  1296. case Message2_O_OneOfCase_OneofSfixed64:
  1297. msg.oneofSfixed64 = 10;
  1298. break;
  1299. case Message2_O_OneOfCase_OneofFloat:
  1300. msg.oneofFloat = 11.0f;
  1301. break;
  1302. case Message2_O_OneOfCase_OneofDouble:
  1303. msg.oneofDouble = 12.0;
  1304. break;
  1305. case Message2_O_OneOfCase_OneofBool:
  1306. msg.oneofBool = YES;
  1307. break;
  1308. case Message2_O_OneOfCase_OneofString:
  1309. msg.oneofString = @"foo";
  1310. break;
  1311. case Message2_O_OneOfCase_OneofBytes:
  1312. msg.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding];
  1313. break;
  1314. case Message2_O_OneOfCase_OneofGroup:
  1315. msg.oneofGroup = group;
  1316. break;
  1317. case Message2_O_OneOfCase_OneofMessage:
  1318. msg.oneofMessage = subMessage;
  1319. break;
  1320. case Message2_O_OneOfCase_OneofEnum:
  1321. msg.oneofEnum = Message2_Enum_Bar;
  1322. break;
  1323. default:
  1324. XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]);
  1325. break;
  1326. }
  1327. XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i);
  1328. // No need to check the value was set, the above tests did that.
  1329. Message2_ClearOOneOfCase(msg);
  1330. // Nothing in the case.
  1331. XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase,
  1332. "Loop: %zd", i);
  1333. // Confirm everything is back to defaults after a clear.
  1334. XCTAssertEqual(msg.oneofInt32, 100, "Loop: %zd", i);
  1335. XCTAssertEqual(msg.oneofInt64, 101, "Loop: %zd", i);
  1336. XCTAssertEqual(msg.oneofUint32, 102U, "Loop: %zd", i);
  1337. XCTAssertEqual(msg.oneofUint64, 103U, "Loop: %zd", i);
  1338. XCTAssertEqual(msg.oneofSint32, 104, "Loop: %zd", i);
  1339. XCTAssertEqual(msg.oneofSint64, 105, "Loop: %zd", i);
  1340. XCTAssertEqual(msg.oneofFixed32, 106U, "Loop: %zd", i);
  1341. XCTAssertEqual(msg.oneofFixed64, 107U, "Loop: %zd", i);
  1342. XCTAssertEqual(msg.oneofSfixed32, 108, "Loop: %zd", i);
  1343. XCTAssertEqual(msg.oneofSfixed64, 109, "Loop: %zd", i);
  1344. XCTAssertEqual(msg.oneofFloat, 110.0f, "Loop: %zd", i);
  1345. XCTAssertEqual(msg.oneofDouble, 111.0, "Loop: %zd", i);
  1346. XCTAssertEqual(msg.oneofBool, YES, "Loop: %zd", i);
  1347. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i);
  1348. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i);
  1349. XCTAssertNotNil(msg.oneofGroup, "Loop: %zd", i);
  1350. XCTAssertNotEqual(msg.oneofGroup, group, "Loop: %zd",
  1351. i); // Pointer compare.
  1352. XCTAssertNotNil(msg.oneofMessage, "Loop: %zd", i);
  1353. XCTAssertNotEqual(msg.oneofMessage, subMessage, "Loop: %zd",
  1354. i); // Pointer compare.
  1355. XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz, "Loop: %zd", i);
  1356. }
  1357. [msg release];
  1358. }
  1359. - (void)testProto3OneofBasicBehaviors {
  1360. Message3 *msg = [[Message3 alloc] init];
  1361. NSString *oneofStringDefault = @"";
  1362. NSData *oneofBytesDefault = [NSData data];
  1363. // Nothing set.
  1364. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase);
  1365. XCTAssertEqual(msg.oneofInt32, 0);
  1366. XCTAssertEqual(msg.oneofInt64, 0);
  1367. XCTAssertEqual(msg.oneofUint32, 0U);
  1368. XCTAssertEqual(msg.oneofUint64, 0U);
  1369. XCTAssertEqual(msg.oneofSint32, 0);
  1370. XCTAssertEqual(msg.oneofSint64, 0);
  1371. XCTAssertEqual(msg.oneofFixed32, 0U);
  1372. XCTAssertEqual(msg.oneofFixed64, 0U);
  1373. XCTAssertEqual(msg.oneofSfixed32, 0);
  1374. XCTAssertEqual(msg.oneofSfixed64, 0);
  1375. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1376. XCTAssertEqual(msg.oneofDouble, 0.0);
  1377. XCTAssertEqual(msg.oneofBool, NO);
  1378. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1379. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1380. XCTAssertNotNil(msg.oneofMessage);
  1381. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1382. // Set, check the case, check everyone has default but the one, confirm case
  1383. // didn't change.
  1384. msg.oneofInt32 = 1;
  1385. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofInt32);
  1386. XCTAssertEqual(msg.oneofInt32, 1);
  1387. XCTAssertEqual(msg.oneofInt64, 0);
  1388. XCTAssertEqual(msg.oneofUint32, 0U);
  1389. XCTAssertEqual(msg.oneofUint64, 0U);
  1390. XCTAssertEqual(msg.oneofSint32, 0);
  1391. XCTAssertEqual(msg.oneofSint64, 0);
  1392. XCTAssertEqual(msg.oneofFixed32, 0U);
  1393. XCTAssertEqual(msg.oneofFixed64, 0U);
  1394. XCTAssertEqual(msg.oneofSfixed32, 0);
  1395. XCTAssertEqual(msg.oneofSfixed64, 0);
  1396. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1397. XCTAssertEqual(msg.oneofDouble, 0.0);
  1398. XCTAssertEqual(msg.oneofBool, NO);
  1399. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1400. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1401. XCTAssertNotNil(msg.oneofMessage);
  1402. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1403. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofInt32);
  1404. msg.oneofInt64 = 2;
  1405. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofInt64);
  1406. XCTAssertEqual(msg.oneofInt32, 0);
  1407. XCTAssertEqual(msg.oneofInt64, 2);
  1408. XCTAssertEqual(msg.oneofUint32, 0U);
  1409. XCTAssertEqual(msg.oneofUint64, 0U);
  1410. XCTAssertEqual(msg.oneofSint32, 0);
  1411. XCTAssertEqual(msg.oneofSint64, 0);
  1412. XCTAssertEqual(msg.oneofFixed32, 0U);
  1413. XCTAssertEqual(msg.oneofFixed64, 0U);
  1414. XCTAssertEqual(msg.oneofSfixed32, 0);
  1415. XCTAssertEqual(msg.oneofSfixed64, 0);
  1416. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1417. XCTAssertEqual(msg.oneofDouble, 0.0);
  1418. XCTAssertEqual(msg.oneofBool, NO);
  1419. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1420. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1421. XCTAssertNotNil(msg.oneofMessage);
  1422. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1423. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofInt64);
  1424. msg.oneofUint32 = 3;
  1425. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofUint32);
  1426. XCTAssertEqual(msg.oneofInt32, 0);
  1427. XCTAssertEqual(msg.oneofInt64, 0);
  1428. XCTAssertEqual(msg.oneofUint32, 3U);
  1429. XCTAssertEqual(msg.oneofUint64, 0U);
  1430. XCTAssertEqual(msg.oneofSint32, 0);
  1431. XCTAssertEqual(msg.oneofSint64, 0);
  1432. XCTAssertEqual(msg.oneofFixed32, 0U);
  1433. XCTAssertEqual(msg.oneofFixed64, 0U);
  1434. XCTAssertEqual(msg.oneofSfixed32, 0);
  1435. XCTAssertEqual(msg.oneofSfixed64, 0);
  1436. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1437. XCTAssertEqual(msg.oneofDouble, 0.0);
  1438. XCTAssertEqual(msg.oneofBool, NO);
  1439. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1440. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1441. XCTAssertNotNil(msg.oneofMessage);
  1442. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1443. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofUint32);
  1444. msg.oneofUint64 = 4;
  1445. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofUint64);
  1446. XCTAssertEqual(msg.oneofInt32, 0);
  1447. XCTAssertEqual(msg.oneofInt64, 0);
  1448. XCTAssertEqual(msg.oneofUint32, 0U);
  1449. XCTAssertEqual(msg.oneofUint64, 4U);
  1450. XCTAssertEqual(msg.oneofSint32, 0);
  1451. XCTAssertEqual(msg.oneofSint64, 0);
  1452. XCTAssertEqual(msg.oneofFixed32, 0U);
  1453. XCTAssertEqual(msg.oneofFixed64, 0U);
  1454. XCTAssertEqual(msg.oneofSfixed32, 0);
  1455. XCTAssertEqual(msg.oneofSfixed64, 0);
  1456. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1457. XCTAssertEqual(msg.oneofDouble, 0.0);
  1458. XCTAssertEqual(msg.oneofBool, NO);
  1459. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1460. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1461. XCTAssertNotNil(msg.oneofMessage);
  1462. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1463. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofUint64);
  1464. msg.oneofSint32 = 5;
  1465. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSint32);
  1466. XCTAssertEqual(msg.oneofInt32, 0);
  1467. XCTAssertEqual(msg.oneofInt64, 0);
  1468. XCTAssertEqual(msg.oneofUint32, 0U);
  1469. XCTAssertEqual(msg.oneofUint64, 0U);
  1470. XCTAssertEqual(msg.oneofSint32, 5);
  1471. XCTAssertEqual(msg.oneofSint64, 0);
  1472. XCTAssertEqual(msg.oneofFixed32, 0U);
  1473. XCTAssertEqual(msg.oneofFixed64, 0U);
  1474. XCTAssertEqual(msg.oneofSfixed32, 0);
  1475. XCTAssertEqual(msg.oneofSfixed64, 0);
  1476. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1477. XCTAssertEqual(msg.oneofDouble, 0.0);
  1478. XCTAssertEqual(msg.oneofBool, NO);
  1479. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1480. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1481. XCTAssertNotNil(msg.oneofMessage);
  1482. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1483. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSint32);
  1484. msg.oneofSint64 = 6;
  1485. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSint64);
  1486. XCTAssertEqual(msg.oneofInt32, 0);
  1487. XCTAssertEqual(msg.oneofInt64, 0);
  1488. XCTAssertEqual(msg.oneofUint32, 0U);
  1489. XCTAssertEqual(msg.oneofUint64, 0U);
  1490. XCTAssertEqual(msg.oneofSint32, 0);
  1491. XCTAssertEqual(msg.oneofSint64, 6);
  1492. XCTAssertEqual(msg.oneofFixed32, 0U);
  1493. XCTAssertEqual(msg.oneofFixed64, 0U);
  1494. XCTAssertEqual(msg.oneofSfixed32, 0);
  1495. XCTAssertEqual(msg.oneofSfixed64, 0);
  1496. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1497. XCTAssertEqual(msg.oneofDouble, 0.0);
  1498. XCTAssertEqual(msg.oneofBool, NO);
  1499. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1500. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1501. XCTAssertNotNil(msg.oneofMessage);
  1502. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1503. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSint64);
  1504. msg.oneofFixed32 = 7;
  1505. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFixed32);
  1506. XCTAssertEqual(msg.oneofInt32, 0);
  1507. XCTAssertEqual(msg.oneofInt64, 0);
  1508. XCTAssertEqual(msg.oneofUint32, 0U);
  1509. XCTAssertEqual(msg.oneofUint64, 0U);
  1510. XCTAssertEqual(msg.oneofSint32, 0);
  1511. XCTAssertEqual(msg.oneofSint64, 0);
  1512. XCTAssertEqual(msg.oneofFixed32, 7U);
  1513. XCTAssertEqual(msg.oneofFixed64, 0U);
  1514. XCTAssertEqual(msg.oneofSfixed32, 0);
  1515. XCTAssertEqual(msg.oneofSfixed64, 0);
  1516. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1517. XCTAssertEqual(msg.oneofDouble, 0.0);
  1518. XCTAssertEqual(msg.oneofBool, NO);
  1519. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1520. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1521. XCTAssertNotNil(msg.oneofMessage);
  1522. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1523. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFixed32);
  1524. msg.oneofFixed64 = 8;
  1525. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFixed64);
  1526. XCTAssertEqual(msg.oneofInt32, 0);
  1527. XCTAssertEqual(msg.oneofInt64, 0);
  1528. XCTAssertEqual(msg.oneofUint32, 0U);
  1529. XCTAssertEqual(msg.oneofUint64, 0U);
  1530. XCTAssertEqual(msg.oneofSint32, 0);
  1531. XCTAssertEqual(msg.oneofSint64, 0);
  1532. XCTAssertEqual(msg.oneofFixed32, 0U);
  1533. XCTAssertEqual(msg.oneofFixed64, 8U);
  1534. XCTAssertEqual(msg.oneofSfixed32, 0);
  1535. XCTAssertEqual(msg.oneofSfixed64, 0);
  1536. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1537. XCTAssertEqual(msg.oneofDouble, 0.0);
  1538. XCTAssertEqual(msg.oneofBool, NO);
  1539. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1540. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1541. XCTAssertNotNil(msg.oneofMessage);
  1542. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1543. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFixed64);
  1544. msg.oneofSfixed32 = 9;
  1545. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSfixed32);
  1546. XCTAssertEqual(msg.oneofInt32, 0);
  1547. XCTAssertEqual(msg.oneofInt64, 0);
  1548. XCTAssertEqual(msg.oneofUint32, 0U);
  1549. XCTAssertEqual(msg.oneofUint64, 0U);
  1550. XCTAssertEqual(msg.oneofSint32, 0);
  1551. XCTAssertEqual(msg.oneofSint64, 0);
  1552. XCTAssertEqual(msg.oneofFixed32, 0U);
  1553. XCTAssertEqual(msg.oneofFixed64, 0U);
  1554. XCTAssertEqual(msg.oneofSfixed32, 9);
  1555. XCTAssertEqual(msg.oneofSfixed64, 0);
  1556. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1557. XCTAssertEqual(msg.oneofDouble, 0.0);
  1558. XCTAssertEqual(msg.oneofBool, NO);
  1559. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1560. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1561. XCTAssertNotNil(msg.oneofMessage);
  1562. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1563. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSfixed32);
  1564. msg.oneofSfixed64 = 10;
  1565. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSfixed64);
  1566. XCTAssertEqual(msg.oneofInt32, 0);
  1567. XCTAssertEqual(msg.oneofInt64, 0);
  1568. XCTAssertEqual(msg.oneofUint32, 0U);
  1569. XCTAssertEqual(msg.oneofUint64, 0U);
  1570. XCTAssertEqual(msg.oneofSint32, 0);
  1571. XCTAssertEqual(msg.oneofSint64, 0);
  1572. XCTAssertEqual(msg.oneofFixed32, 0U);
  1573. XCTAssertEqual(msg.oneofFixed64, 0U);
  1574. XCTAssertEqual(msg.oneofSfixed32, 0);
  1575. XCTAssertEqual(msg.oneofSfixed64, 10);
  1576. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1577. XCTAssertEqual(msg.oneofDouble, 0.0);
  1578. XCTAssertEqual(msg.oneofBool, NO);
  1579. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1580. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1581. XCTAssertNotNil(msg.oneofMessage);
  1582. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1583. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSfixed64);
  1584. msg.oneofFloat = 11.0f;
  1585. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFloat);
  1586. XCTAssertEqual(msg.oneofInt32, 0);
  1587. XCTAssertEqual(msg.oneofInt64, 0);
  1588. XCTAssertEqual(msg.oneofUint32, 0U);
  1589. XCTAssertEqual(msg.oneofUint64, 0U);
  1590. XCTAssertEqual(msg.oneofSint32, 0);
  1591. XCTAssertEqual(msg.oneofSint64, 0);
  1592. XCTAssertEqual(msg.oneofFixed32, 0U);
  1593. XCTAssertEqual(msg.oneofFixed64, 0U);
  1594. XCTAssertEqual(msg.oneofSfixed32, 0);
  1595. XCTAssertEqual(msg.oneofSfixed64, 0);
  1596. XCTAssertEqual(msg.oneofFloat, 11.0f);
  1597. XCTAssertEqual(msg.oneofDouble, 0.0);
  1598. XCTAssertEqual(msg.oneofBool, NO);
  1599. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1600. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1601. XCTAssertNotNil(msg.oneofMessage);
  1602. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1603. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFloat);
  1604. msg.oneofDouble = 12.0;
  1605. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofDouble);
  1606. XCTAssertEqual(msg.oneofInt32, 0);
  1607. XCTAssertEqual(msg.oneofInt64, 0);
  1608. XCTAssertEqual(msg.oneofUint32, 0U);
  1609. XCTAssertEqual(msg.oneofUint64, 0U);
  1610. XCTAssertEqual(msg.oneofSint32, 0);
  1611. XCTAssertEqual(msg.oneofSint64, 0);
  1612. XCTAssertEqual(msg.oneofFixed32, 0U);
  1613. XCTAssertEqual(msg.oneofFixed64, 0U);
  1614. XCTAssertEqual(msg.oneofSfixed32, 0);
  1615. XCTAssertEqual(msg.oneofSfixed64, 0);
  1616. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1617. XCTAssertEqual(msg.oneofDouble, 12.0);
  1618. XCTAssertEqual(msg.oneofBool, NO);
  1619. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1620. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1621. XCTAssertNotNil(msg.oneofMessage);
  1622. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1623. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofDouble);
  1624. msg.oneofBool = YES;
  1625. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofBool);
  1626. XCTAssertEqual(msg.oneofInt32, 0);
  1627. XCTAssertEqual(msg.oneofInt64, 0);
  1628. XCTAssertEqual(msg.oneofUint32, 0U);
  1629. XCTAssertEqual(msg.oneofUint64, 0U);
  1630. XCTAssertEqual(msg.oneofSint32, 0);
  1631. XCTAssertEqual(msg.oneofSint64, 0);
  1632. XCTAssertEqual(msg.oneofFixed32, 0U);
  1633. XCTAssertEqual(msg.oneofFixed64, 0U);
  1634. XCTAssertEqual(msg.oneofSfixed32, 0);
  1635. XCTAssertEqual(msg.oneofSfixed64, 0);
  1636. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1637. XCTAssertEqual(msg.oneofDouble, 0.0);
  1638. XCTAssertEqual(msg.oneofBool, YES);
  1639. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1640. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1641. XCTAssertNotNil(msg.oneofMessage);
  1642. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1643. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofBool);
  1644. msg.oneofString = @"foo";
  1645. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofString);
  1646. XCTAssertEqual(msg.oneofInt32, 0);
  1647. XCTAssertEqual(msg.oneofInt64, 0);
  1648. XCTAssertEqual(msg.oneofUint32, 0U);
  1649. XCTAssertEqual(msg.oneofUint64, 0U);
  1650. XCTAssertEqual(msg.oneofSint32, 0);
  1651. XCTAssertEqual(msg.oneofSint64, 0);
  1652. XCTAssertEqual(msg.oneofFixed32, 0U);
  1653. XCTAssertEqual(msg.oneofFixed64, 0U);
  1654. XCTAssertEqual(msg.oneofSfixed32, 0);
  1655. XCTAssertEqual(msg.oneofSfixed64, 0);
  1656. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1657. XCTAssertEqual(msg.oneofDouble, 0.0);
  1658. XCTAssertEqual(msg.oneofBool, NO);
  1659. XCTAssertEqualObjects(msg.oneofString, @"foo");
  1660. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1661. XCTAssertNotNil(msg.oneofMessage);
  1662. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1663. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofString);
  1664. msg.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding];
  1665. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofBytes);
  1666. XCTAssertEqual(msg.oneofInt32, 0);
  1667. XCTAssertEqual(msg.oneofInt64, 0);
  1668. XCTAssertEqual(msg.oneofUint32, 0U);
  1669. XCTAssertEqual(msg.oneofUint64, 0U);
  1670. XCTAssertEqual(msg.oneofSint32, 0);
  1671. XCTAssertEqual(msg.oneofSint64, 0);
  1672. XCTAssertEqual(msg.oneofFixed32, 0U);
  1673. XCTAssertEqual(msg.oneofFixed64, 0U);
  1674. XCTAssertEqual(msg.oneofSfixed32, 0);
  1675. XCTAssertEqual(msg.oneofSfixed64, 0);
  1676. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1677. XCTAssertEqual(msg.oneofDouble, 0.0);
  1678. XCTAssertEqual(msg.oneofBool, NO);
  1679. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1680. XCTAssertEqualObjects(msg.oneofBytes,
  1681. [@"bar" dataUsingEncoding:NSUTF8StringEncoding]);
  1682. XCTAssertNotNil(msg.oneofMessage);
  1683. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1684. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofBytes);
  1685. Message3 *subMessage = [Message3 message];
  1686. msg.oneofMessage = subMessage;
  1687. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofMessage);
  1688. XCTAssertEqual(msg.oneofInt32, 0);
  1689. XCTAssertEqual(msg.oneofInt64, 0);
  1690. XCTAssertEqual(msg.oneofUint32, 0U);
  1691. XCTAssertEqual(msg.oneofUint64, 0U);
  1692. XCTAssertEqual(msg.oneofSint32, 0);
  1693. XCTAssertEqual(msg.oneofSint64, 0);
  1694. XCTAssertEqual(msg.oneofFixed32, 0U);
  1695. XCTAssertEqual(msg.oneofFixed64, 0U);
  1696. XCTAssertEqual(msg.oneofSfixed32, 0);
  1697. XCTAssertEqual(msg.oneofSfixed64, 0);
  1698. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1699. XCTAssertEqual(msg.oneofDouble, 0.0);
  1700. XCTAssertEqual(msg.oneofBool, NO);
  1701. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1702. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1703. XCTAssertEqual(msg.oneofMessage, subMessage); // Pointer compare.
  1704. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo);
  1705. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofMessage);
  1706. msg.oneofEnum = Message3_Enum_Bar;
  1707. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofEnum);
  1708. XCTAssertEqual(msg.oneofInt32, 0);
  1709. XCTAssertEqual(msg.oneofInt64, 0);
  1710. XCTAssertEqual(msg.oneofUint32, 0U);
  1711. XCTAssertEqual(msg.oneofUint64, 0U);
  1712. XCTAssertEqual(msg.oneofSint32, 0);
  1713. XCTAssertEqual(msg.oneofSint64, 0);
  1714. XCTAssertEqual(msg.oneofFixed32, 0U);
  1715. XCTAssertEqual(msg.oneofFixed64, 0U);
  1716. XCTAssertEqual(msg.oneofSfixed32, 0);
  1717. XCTAssertEqual(msg.oneofSfixed64, 0);
  1718. XCTAssertEqual(msg.oneofFloat, 0.0f);
  1719. XCTAssertEqual(msg.oneofDouble, 0.0);
  1720. XCTAssertEqual(msg.oneofBool, NO);
  1721. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
  1722. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
  1723. XCTAssertNotNil(msg.oneofMessage);
  1724. XCTAssertNotEqual(msg.oneofMessage, subMessage); // Pointer compare.
  1725. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Bar);
  1726. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofEnum);
  1727. // Test setting/calling clear clearing.
  1728. [msg release];
  1729. msg = [[Message3 alloc] init];
  1730. uint32_t values[] = {
  1731. Message3_O_OneOfCase_OneofInt32,
  1732. Message3_O_OneOfCase_OneofInt64,
  1733. Message3_O_OneOfCase_OneofUint32,
  1734. Message3_O_OneOfCase_OneofUint64,
  1735. Message3_O_OneOfCase_OneofSint32,
  1736. Message3_O_OneOfCase_OneofSint64,
  1737. Message3_O_OneOfCase_OneofFixed32,
  1738. Message3_O_OneOfCase_OneofFixed64,
  1739. Message3_O_OneOfCase_OneofSfixed32,
  1740. Message3_O_OneOfCase_OneofSfixed64,
  1741. Message3_O_OneOfCase_OneofFloat,
  1742. Message3_O_OneOfCase_OneofDouble,
  1743. Message3_O_OneOfCase_OneofBool,
  1744. Message3_O_OneOfCase_OneofString,
  1745. Message3_O_OneOfCase_OneofBytes,
  1746. Message3_O_OneOfCase_OneofMessage,
  1747. Message3_O_OneOfCase_OneofEnum,
  1748. };
  1749. for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) {
  1750. switch (values[i]) {
  1751. case Message3_O_OneOfCase_OneofInt32:
  1752. msg.oneofInt32 = 1;
  1753. break;
  1754. case Message3_O_OneOfCase_OneofInt64:
  1755. msg.oneofInt64 = 2;
  1756. break;
  1757. case Message3_O_OneOfCase_OneofUint32:
  1758. msg.oneofUint32 = 3;
  1759. break;
  1760. case Message3_O_OneOfCase_OneofUint64:
  1761. msg.oneofUint64 = 4;
  1762. break;
  1763. case Message3_O_OneOfCase_OneofSint32:
  1764. msg.oneofSint32 = 5;
  1765. break;
  1766. case Message3_O_OneOfCase_OneofSint64:
  1767. msg.oneofSint64 = 6;
  1768. break;
  1769. case Message3_O_OneOfCase_OneofFixed32:
  1770. msg.oneofFixed32 = 7;
  1771. break;
  1772. case Message3_O_OneOfCase_OneofFixed64:
  1773. msg.oneofFixed64 = 8;
  1774. break;
  1775. case Message3_O_OneOfCase_OneofSfixed32:
  1776. msg.oneofSfixed32 = 9;
  1777. break;
  1778. case Message3_O_OneOfCase_OneofSfixed64:
  1779. msg.oneofSfixed64 = 10;
  1780. break;
  1781. case Message3_O_OneOfCase_OneofFloat:
  1782. msg.oneofFloat = 11.0f;
  1783. break;
  1784. case Message3_O_OneOfCase_OneofDouble:
  1785. msg.oneofDouble = 12.0;
  1786. break;
  1787. case Message3_O_OneOfCase_OneofBool:
  1788. msg.oneofBool = YES;
  1789. break;
  1790. case Message3_O_OneOfCase_OneofString:
  1791. msg.oneofString = @"foo";
  1792. break;
  1793. case Message3_O_OneOfCase_OneofBytes:
  1794. msg.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding];
  1795. break;
  1796. case Message3_O_OneOfCase_OneofMessage:
  1797. msg.oneofMessage = subMessage;
  1798. break;
  1799. case Message3_O_OneOfCase_OneofEnum:
  1800. msg.oneofEnum = Message3_Enum_Baz;
  1801. break;
  1802. default:
  1803. XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]);
  1804. break;
  1805. }
  1806. XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i);
  1807. // No need to check the value was set, the above tests did that.
  1808. Message3_ClearOOneOfCase(msg);
  1809. // Nothing in the case.
  1810. XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase,
  1811. "Loop: %zd", i);
  1812. // Confirm everything is back to defaults after a clear.
  1813. XCTAssertEqual(msg.oneofInt32, 0, "Loop: %zd", i);
  1814. XCTAssertEqual(msg.oneofInt64, 0, "Loop: %zd", i);
  1815. XCTAssertEqual(msg.oneofUint32, 0U, "Loop: %zd", i);
  1816. XCTAssertEqual(msg.oneofUint64, 0U, "Loop: %zd", i);
  1817. XCTAssertEqual(msg.oneofSint32, 0, "Loop: %zd", i);
  1818. XCTAssertEqual(msg.oneofSint64, 0, "Loop: %zd", i);
  1819. XCTAssertEqual(msg.oneofFixed32, 0U, "Loop: %zd", i);
  1820. XCTAssertEqual(msg.oneofFixed64, 0U, "Loop: %zd", i);
  1821. XCTAssertEqual(msg.oneofSfixed32, 0, "Loop: %zd", i);
  1822. XCTAssertEqual(msg.oneofSfixed64, 0, "Loop: %zd", i);
  1823. XCTAssertEqual(msg.oneofFloat, 0.0f, "Loop: %zd", i);
  1824. XCTAssertEqual(msg.oneofDouble, 0.0, "Loop: %zd", i);
  1825. XCTAssertEqual(msg.oneofBool, NO, "Loop: %zd", i);
  1826. XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i);
  1827. XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i);
  1828. XCTAssertNotNil(msg.oneofMessage, "Loop: %zd", i);
  1829. XCTAssertNotEqual(msg.oneofMessage, subMessage, "Loop: %zd",
  1830. i); // Pointer compare.
  1831. XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo, "Loop: %zd", i);
  1832. }
  1833. [msg release];
  1834. }
  1835. - (void)testCopyingMakesUniqueObjects {
  1836. const int repeatCount = 5;
  1837. TestAllTypes *msg1 = [TestAllTypes message];
  1838. [self setAllFields:msg1 repeatedCount:repeatCount];
  1839. TestAllTypes *msg2 = [[msg1 copy] autorelease];
  1840. XCTAssertNotEqual(msg1, msg2); // Ptr compare, new object.
  1841. XCTAssertEqualObjects(msg1, msg2); // Equal values.
  1842. // Pointer comparisions, different objects.
  1843. XCTAssertNotEqual(msg1.optionalGroup, msg2.optionalGroup);
  1844. XCTAssertNotEqual(msg1.optionalNestedMessage, msg2.optionalNestedMessage);
  1845. XCTAssertNotEqual(msg1.optionalForeignMessage, msg2.optionalForeignMessage);
  1846. XCTAssertNotEqual(msg1.optionalImportMessage, msg2.optionalImportMessage);
  1847. XCTAssertNotEqual(msg1.repeatedInt32Array, msg2.repeatedInt32Array);
  1848. XCTAssertNotEqual(msg1.repeatedInt64Array, msg2.repeatedInt64Array);
  1849. XCTAssertNotEqual(msg1.repeatedUint32Array, msg2.repeatedUint32Array);
  1850. XCTAssertNotEqual(msg1.repeatedUint64Array, msg2.repeatedUint64Array);
  1851. XCTAssertNotEqual(msg1.repeatedSint32Array, msg2.repeatedSint32Array);
  1852. XCTAssertNotEqual(msg1.repeatedSint64Array, msg2.repeatedSint64Array);
  1853. XCTAssertNotEqual(msg1.repeatedFixed32Array, msg2.repeatedFixed32Array);
  1854. XCTAssertNotEqual(msg1.repeatedFixed64Array, msg2.repeatedFixed64Array);
  1855. XCTAssertNotEqual(msg1.repeatedSfixed32Array, msg2.repeatedSfixed32Array);
  1856. XCTAssertNotEqual(msg1.repeatedSfixed64Array, msg2.repeatedSfixed64Array);
  1857. XCTAssertNotEqual(msg1.repeatedFloatArray, msg2.repeatedFloatArray);
  1858. XCTAssertNotEqual(msg1.repeatedDoubleArray, msg2.repeatedDoubleArray);
  1859. XCTAssertNotEqual(msg1.repeatedBoolArray, msg2.repeatedBoolArray);
  1860. XCTAssertNotEqual(msg1.repeatedStringArray, msg2.repeatedStringArray);
  1861. XCTAssertNotEqual(msg1.repeatedBytesArray, msg2.repeatedBytesArray);
  1862. XCTAssertNotEqual(msg1.repeatedGroupArray, msg2.repeatedGroupArray);
  1863. XCTAssertNotEqual(msg1.repeatedNestedMessageArray,
  1864. msg2.repeatedNestedMessageArray);
  1865. XCTAssertNotEqual(msg1.repeatedForeignMessageArray,
  1866. msg2.repeatedForeignMessageArray);
  1867. XCTAssertNotEqual(msg1.repeatedImportMessageArray,
  1868. msg2.repeatedImportMessageArray);
  1869. XCTAssertNotEqual(msg1.repeatedNestedEnumArray, msg2.repeatedNestedEnumArray);
  1870. XCTAssertNotEqual(msg1.repeatedForeignEnumArray,
  1871. msg2.repeatedForeignEnumArray);
  1872. XCTAssertNotEqual(msg1.repeatedImportEnumArray, msg2.repeatedImportEnumArray);
  1873. XCTAssertNotEqual(msg1.repeatedStringPieceArray,
  1874. msg2.repeatedStringPieceArray);
  1875. XCTAssertNotEqual(msg1.repeatedCordArray, msg2.repeatedCordArray);
  1876. for (int i = 0; i < repeatCount; i++) {
  1877. XCTAssertNotEqual(msg1.repeatedNestedMessageArray[i],
  1878. msg2.repeatedNestedMessageArray[i]);
  1879. XCTAssertNotEqual(msg1.repeatedForeignMessageArray[i],
  1880. msg2.repeatedForeignMessageArray[i]);
  1881. XCTAssertNotEqual(msg1.repeatedImportMessageArray[i],
  1882. msg2.repeatedImportMessageArray[i]);
  1883. }
  1884. }
  1885. - (void)testCopyingMapsMakesUniqueObjects {
  1886. TestMap *msg1 = [TestMap message];
  1887. [self setAllMapFields:msg1 numEntries:5];
  1888. TestMap *msg2 = [[msg1 copy] autorelease];
  1889. XCTAssertNotEqual(msg1, msg2); // Ptr compare, new object.
  1890. XCTAssertEqualObjects(msg1, msg2); // Equal values.
  1891. // Pointer comparisions, different objects.
  1892. XCTAssertNotEqual(msg1.mapInt32Int32, msg2.mapInt32Int32);
  1893. XCTAssertNotEqual(msg1.mapInt64Int64, msg2.mapInt64Int64);
  1894. XCTAssertNotEqual(msg1.mapUint32Uint32, msg2.mapUint32Uint32);
  1895. XCTAssertNotEqual(msg1.mapUint64Uint64, msg2.mapUint64Uint64);
  1896. XCTAssertNotEqual(msg1.mapSint32Sint32, msg2.mapSint32Sint32);
  1897. XCTAssertNotEqual(msg1.mapSint64Sint64, msg2.mapSint64Sint64);
  1898. XCTAssertNotEqual(msg1.mapFixed32Fixed32, msg2.mapFixed32Fixed32);
  1899. XCTAssertNotEqual(msg1.mapFixed64Fixed64, msg2.mapFixed64Fixed64);
  1900. XCTAssertNotEqual(msg1.mapSfixed32Sfixed32, msg2.mapSfixed32Sfixed32);
  1901. XCTAssertNotEqual(msg1.mapSfixed64Sfixed64, msg2.mapSfixed64Sfixed64);
  1902. XCTAssertNotEqual(msg1.mapInt32Float, msg2.mapInt32Float);
  1903. XCTAssertNotEqual(msg1.mapInt32Double, msg2.mapInt32Double);
  1904. XCTAssertNotEqual(msg1.mapBoolBool, msg2.mapBoolBool);
  1905. XCTAssertNotEqual(msg1.mapStringString, msg2.mapStringString);
  1906. XCTAssertNotEqual(msg1.mapInt32Bytes, msg2.mapInt32Bytes);
  1907. XCTAssertNotEqual(msg1.mapInt32Enum, msg2.mapInt32Enum);
  1908. XCTAssertNotEqual(msg1.mapInt32ForeignMessage, msg2.mapInt32ForeignMessage);
  1909. // Ensure the messages are unique per map.
  1910. [msg1.mapInt32ForeignMessage
  1911. enumerateKeysAndValuesUsingBlock:^(int32_t key, id value, BOOL *stop) {
  1912. #pragma unused(stop)
  1913. ForeignMessage *subMsg2 = [msg2.mapInt32ForeignMessage valueForKey:key];
  1914. XCTAssertNotEqual(value, subMsg2); // Ptr compare, new object.
  1915. }];
  1916. }
  1917. #pragma mark - Subset from from map_tests.cc
  1918. // TEST(GeneratedMapFieldTest, IsInitialized)
  1919. - (void)testMap_IsInitialized {
  1920. TestRequiredMessageMap *msg = [[TestRequiredMessageMap alloc] init];
  1921. // Add an uninitialized message.
  1922. TestRequired *subMsg = [[TestRequired alloc] init];
  1923. msg.mapField = [GPBInt32ObjectDictionary dictionary];
  1924. [msg.mapField setValue:subMsg forKey:0];
  1925. XCTAssertFalse(msg.initialized);
  1926. // Initialize uninitialized message
  1927. subMsg.a = 0;
  1928. subMsg.b = 0;
  1929. subMsg.c = 0;
  1930. XCTAssertTrue(msg.initialized);
  1931. [subMsg release];
  1932. [msg release];
  1933. }
  1934. @end