blob: 185f68d90162f3fc7b1f207535069ca004dce598 [file] [log] [blame]
Austin Schuh40c16522018-10-28 20:27:54 -07001// Protocol Buffers - Google's data interchange format
2// Copyright 2008 Google Inc. All rights reserved.
3// https://developers.google.com/protocol-buffers/
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright
10// notice, this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above
12// copyright notice, this list of conditions and the following disclaimer
13// in the documentation and/or other materials provided with the
14// distribution.
15// * Neither the name of Google Inc. nor the names of its
16// contributors may be used to endorse or promote products derived from
17// this software without specific prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31// Author: kenton@google.com (Kenton Varda)
32// Based on original Protocol Buffers design by
33// Sanjay Ghemawat, Jeff Dean, and others.
34//
35// This file needs to be included as .inc as it depends on the namespaces
36// (unittest and unittest_import) being set up properly. It is also included
37// within an enclosing namespace and requires header files to be included
38// out of this file.
39
40#include <google/protobuf/stubs/logging.h>
41#include <google/protobuf/stubs/common.h>
42#include <google/protobuf/descriptor.h>
43#include <google/protobuf/message.h>
44#include <google/protobuf/testing/googletest.h>
45#include <gtest/gtest.h>
46
47namespace google {
48namespace protobuf {
49namespace TestUtil {
50
51// Set every field in the message to a unique value.
52inline void SetAllFields(UNITTEST::TestAllTypes* message);
53inline void SetOptionalFields(UNITTEST::TestAllTypes* message);
54inline void AddRepeatedFields1(UNITTEST::TestAllTypes* message);
55inline void AddRepeatedFields2(UNITTEST::TestAllTypes* message);
56inline void SetDefaultFields(UNITTEST::TestAllTypes* message);
57inline void SetOneofFields(UNITTEST::TestAllTypes* message);
58inline void SetAllExtensions(UNITTEST::TestAllExtensions* message);
59inline void SetOneofFields(UNITTEST::TestAllExtensions* message);
60inline void SetAllFieldsAndExtensions(UNITTEST::TestFieldOrderings* message);
61inline void SetPackedFields(UNITTEST::TestPackedTypes* message);
62inline void SetPackedExtensions(UNITTEST::TestPackedExtensions* message);
63inline void SetUnpackedFields(UNITTEST::TestUnpackedTypes* message);
64inline void SetOneof1(UNITTEST::TestOneof2* message);
65inline void SetOneof2(UNITTEST::TestOneof2* message);
66
67// Use the repeated versions of the set_*() accessors to modify all the
68// repeated fields of the message (which should already have been
69// initialized with Set*Fields()). Set*Fields() itself only tests
70// the add_*() accessors.
71inline void ModifyRepeatedFields(UNITTEST::TestAllTypes* message);
72inline void ModifyRepeatedExtensions(UNITTEST::TestAllExtensions* message);
73inline void ModifyPackedFields(UNITTEST::TestPackedTypes* message);
74inline void ModifyPackedExtensions(UNITTEST::TestPackedExtensions* message);
75
76// Check that all fields have the values that they should have after
77// Set*Fields() is called.
78inline void ExpectAllFieldsSet(const UNITTEST::TestAllTypes& message);
79inline void ExpectAllExtensionsSet(const UNITTEST::TestAllExtensions& message);
80inline void ExpectPackedFieldsSet(const UNITTEST::TestPackedTypes& message);
81inline void ExpectPackedExtensionsSet(
82 const UNITTEST::TestPackedExtensions& message);
83inline void ExpectUnpackedFieldsSet(const UNITTEST::TestUnpackedTypes& message);
84inline void ExpectUnpackedExtensionsSet(
85 const UNITTEST::TestUnpackedExtensions& message);
86inline void ExpectOneofSet1(const UNITTEST::TestOneof2& message);
87inline void ExpectOneofSet2(const UNITTEST::TestOneof2& message);
88
89// Expect that the message is modified as would be expected from
90// Modify*Fields().
91inline void ExpectRepeatedFieldsModified(const UNITTEST::TestAllTypes& message);
92inline void ExpectRepeatedExtensionsModified(
93 const UNITTEST::TestAllExtensions& message);
94inline void ExpectPackedFieldsModified(
95 const UNITTEST::TestPackedTypes& message);
96inline void ExpectPackedExtensionsModified(
97 const UNITTEST::TestPackedExtensions& message);
98
99// Check that all fields have their default values.
100inline void ExpectClear(const UNITTEST::TestAllTypes& message);
101inline void ExpectExtensionsClear(const UNITTEST::TestAllExtensions& message);
102inline void ExpectPackedClear(const UNITTEST::TestPackedTypes& message);
103inline void ExpectPackedExtensionsClear(
104 const UNITTEST::TestPackedExtensions& message);
105inline void ExpectOneofClear(const UNITTEST::TestOneof2& message);
106
107// Check that all repeated fields have had their last elements removed.
108inline void ExpectLastRepeatedsRemoved(const UNITTEST::TestAllTypes& message);
109inline void ExpectLastRepeatedExtensionsRemoved(
110 const UNITTEST::TestAllExtensions& message);
111inline void ExpectLastRepeatedsReleased(const UNITTEST::TestAllTypes& message);
112inline void ExpectLastRepeatedExtensionsReleased(
113 const UNITTEST::TestAllExtensions& message);
114
115// Check that all repeated fields have had their first and last elements
116// swapped.
117inline void ExpectRepeatedsSwapped(const UNITTEST::TestAllTypes& message);
118inline void ExpectRepeatedExtensionsSwapped(
119 const UNITTEST::TestAllExtensions& message);
120
121inline void ExpectAtMostOneFieldSetInOneof(const UNITTEST::TestOneof2& message);
122
123} // namespace TestUtil
124
125inline void TestUtil::SetAllFields(UNITTEST::TestAllTypes* message) {
126 SetOptionalFields(message);
127 AddRepeatedFields1(message);
128 AddRepeatedFields2(message);
129 SetDefaultFields(message);
130 SetOneofFields(message);
131}
132
133inline void TestUtil::SetOptionalFields(UNITTEST::TestAllTypes* message) {
134 message->set_optional_int32(101);
135 message->set_optional_int64(102);
136 message->set_optional_uint32(103);
137 message->set_optional_uint64(104);
138 message->set_optional_sint32(105);
139 message->set_optional_sint64(106);
140 message->set_optional_fixed32(107);
141 message->set_optional_fixed64(108);
142 message->set_optional_sfixed32(109);
143 message->set_optional_sfixed64(110);
144 message->set_optional_float(111);
145 message->set_optional_double(112);
146 message->set_optional_bool(true);
147 message->set_optional_string("115");
148 message->set_optional_bytes("116");
149
150 message->mutable_optionalgroup()->set_a(117);
151 message->mutable_optional_nested_message()->set_bb(118);
152 message->mutable_optional_foreign_message()->set_c(119);
153 message->mutable_optional_import_message()->set_d(120);
154 message->mutable_optional_public_import_message()->set_e(126);
155 message->mutable_optional_lazy_message()->set_bb(127);
156
157 message->set_optional_nested_enum(UNITTEST::TestAllTypes::BAZ);
158 message->set_optional_foreign_enum(UNITTEST::FOREIGN_BAZ);
159 message->set_optional_import_enum(UNITTEST_IMPORT::IMPORT_BAZ);
160
161 // StringPiece and Cord fields are only accessible via reflection in the
162 // open source release; see comments in compiler/cpp/string_field.cc.
163#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
164 message->GetReflection()->SetString(
165 message,
166 message->GetDescriptor()->FindFieldByName("optional_string_piece"),
167 "124");
168 message->GetReflection()->SetString(
169 message, message->GetDescriptor()->FindFieldByName("optional_cord"),
170 "125");
171#endif // !PROTOBUF_TEST_NO_DESCRIPTORS
172}
173
174// -------------------------------------------------------------------
175
176inline void TestUtil::AddRepeatedFields1(UNITTEST::TestAllTypes* message) {
177 message->add_repeated_int32(201);
178 message->add_repeated_int64(202);
179 message->add_repeated_uint32(203);
180 message->add_repeated_uint64(204);
181 message->add_repeated_sint32(205);
182 message->add_repeated_sint64(206);
183 message->add_repeated_fixed32(207);
184 message->add_repeated_fixed64(208);
185 message->add_repeated_sfixed32(209);
186 message->add_repeated_sfixed64(210);
187 message->add_repeated_float(211);
188 message->add_repeated_double(212);
189 message->add_repeated_bool(true);
190 message->add_repeated_string("215");
191 message->add_repeated_bytes("216");
192
193 message->add_repeatedgroup()->set_a(217);
194 message->add_repeated_nested_message()->set_bb(218);
195 message->add_repeated_foreign_message()->set_c(219);
196 message->add_repeated_import_message()->set_d(220);
197 message->add_repeated_lazy_message()->set_bb(227);
198
199 message->add_repeated_nested_enum(UNITTEST::TestAllTypes::BAR);
200 message->add_repeated_foreign_enum(UNITTEST::FOREIGN_BAR);
201 message->add_repeated_import_enum(UNITTEST_IMPORT::IMPORT_BAR);
202
203#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
204 message->GetReflection()->AddString(
205 message,
206 message->GetDescriptor()->FindFieldByName("repeated_string_piece"),
207 "224");
208 message->GetReflection()->AddString(
209 message, message->GetDescriptor()->FindFieldByName("repeated_cord"),
210 "225");
211#endif // !PROTOBUF_TEST_NO_DESCRIPTORS
212}
213
214inline void TestUtil::AddRepeatedFields2(UNITTEST::TestAllTypes* message) {
215 // Add a second one of each field.
216 message->add_repeated_int32(301);
217 message->add_repeated_int64(302);
218 message->add_repeated_uint32(303);
219 message->add_repeated_uint64(304);
220 message->add_repeated_sint32(305);
221 message->add_repeated_sint64(306);
222 message->add_repeated_fixed32(307);
223 message->add_repeated_fixed64(308);
224 message->add_repeated_sfixed32(309);
225 message->add_repeated_sfixed64(310);
226 message->add_repeated_float(311);
227 message->add_repeated_double(312);
228 message->add_repeated_bool(false);
229 message->add_repeated_string("315");
230 message->add_repeated_bytes("316");
231
232 message->add_repeatedgroup()->set_a(317);
233 message->add_repeated_nested_message()->set_bb(318);
234 message->add_repeated_foreign_message()->set_c(319);
235 message->add_repeated_import_message()->set_d(320);
236 message->add_repeated_lazy_message()->set_bb(327);
237
238 message->add_repeated_nested_enum(UNITTEST::TestAllTypes::BAZ);
239 message->add_repeated_foreign_enum(UNITTEST::FOREIGN_BAZ);
240 message->add_repeated_import_enum(UNITTEST_IMPORT::IMPORT_BAZ);
241
242#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
243 message->GetReflection()->AddString(
244 message,
245 message->GetDescriptor()->FindFieldByName("repeated_string_piece"),
246 "324");
247 message->GetReflection()->AddString(
248 message, message->GetDescriptor()->FindFieldByName("repeated_cord"),
249 "325");
250#endif // !PROTOBUF_TEST_NO_DESCRIPTORS
251}
252
253// -------------------------------------------------------------------
254
255inline void TestUtil::SetDefaultFields(UNITTEST::TestAllTypes* message) {
256 message->set_default_int32(401);
257 message->set_default_int64(402);
258 message->set_default_uint32(403);
259 message->set_default_uint64(404);
260 message->set_default_sint32(405);
261 message->set_default_sint64(406);
262 message->set_default_fixed32(407);
263 message->set_default_fixed64(408);
264 message->set_default_sfixed32(409);
265 message->set_default_sfixed64(410);
266 message->set_default_float(411);
267 message->set_default_double(412);
268 message->set_default_bool(false);
269 message->set_default_string("415");
270 message->set_default_bytes("416");
271
272 message->set_default_nested_enum(UNITTEST::TestAllTypes::FOO);
273 message->set_default_foreign_enum(UNITTEST::FOREIGN_FOO);
274 message->set_default_import_enum(UNITTEST_IMPORT::IMPORT_FOO);
275
276#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
277 message->GetReflection()->SetString(
278 message,
279 message->GetDescriptor()->FindFieldByName("default_string_piece"), "424");
280 message->GetReflection()->SetString(
281 message, message->GetDescriptor()->FindFieldByName("default_cord"),
282 "425");
283#endif // !PROTOBUF_TEST_NO_DESCRIPTORS
284}
285
286// -------------------------------------------------------------------
287
288inline void TestUtil::ModifyRepeatedFields(UNITTEST::TestAllTypes* message) {
289 message->set_repeated_int32(1, 501);
290 message->set_repeated_int64(1, 502);
291 message->set_repeated_uint32(1, 503);
292 message->set_repeated_uint64(1, 504);
293 message->set_repeated_sint32(1, 505);
294 message->set_repeated_sint64(1, 506);
295 message->set_repeated_fixed32(1, 507);
296 message->set_repeated_fixed64(1, 508);
297 message->set_repeated_sfixed32(1, 509);
298 message->set_repeated_sfixed64(1, 510);
299 message->set_repeated_float(1, 511);
300 message->set_repeated_double(1, 512);
301 message->set_repeated_bool(1, true);
302 message->set_repeated_string(1, "515");
303 message->set_repeated_bytes(1, "516");
304
305 message->mutable_repeatedgroup(1)->set_a(517);
306 message->mutable_repeated_nested_message(1)->set_bb(518);
307 message->mutable_repeated_foreign_message(1)->set_c(519);
308 message->mutable_repeated_import_message(1)->set_d(520);
309 message->mutable_repeated_lazy_message(1)->set_bb(527);
310
311 message->set_repeated_nested_enum(1, UNITTEST::TestAllTypes::FOO);
312 message->set_repeated_foreign_enum(1, UNITTEST::FOREIGN_FOO);
313 message->set_repeated_import_enum(1, UNITTEST_IMPORT::IMPORT_FOO);
314
315#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
316 message->GetReflection()->SetRepeatedString(
317 message,
318 message->GetDescriptor()->FindFieldByName("repeated_string_piece"), 1,
319 "524");
320 message->GetReflection()->SetRepeatedString(
321 message, message->GetDescriptor()->FindFieldByName("repeated_cord"), 1,
322 "525");
323#endif // !PROTOBUF_TEST_NO_DESCRIPTORS
324}
325
326// ------------------------------------------------------------------
327inline void TestUtil::SetOneofFields(UNITTEST::TestAllTypes* message) {
328 message->set_oneof_uint32(601);
329 message->mutable_oneof_nested_message()->set_bb(602);
330 message->set_oneof_string("603");
331 message->set_oneof_bytes("604");
332}
333
334// -------------------------------------------------------------------
335
336inline void TestUtil::ExpectAllFieldsSet(
337 const UNITTEST::TestAllTypes& message) {
338 EXPECT_TRUE(message.has_optional_int32());
339 EXPECT_TRUE(message.has_optional_int64());
340 EXPECT_TRUE(message.has_optional_uint32());
341 EXPECT_TRUE(message.has_optional_uint64());
342 EXPECT_TRUE(message.has_optional_sint32());
343 EXPECT_TRUE(message.has_optional_sint64());
344 EXPECT_TRUE(message.has_optional_fixed32());
345 EXPECT_TRUE(message.has_optional_fixed64());
346 EXPECT_TRUE(message.has_optional_sfixed32());
347 EXPECT_TRUE(message.has_optional_sfixed64());
348 EXPECT_TRUE(message.has_optional_float());
349 EXPECT_TRUE(message.has_optional_double());
350 EXPECT_TRUE(message.has_optional_bool());
351 EXPECT_TRUE(message.has_optional_string());
352 EXPECT_TRUE(message.has_optional_bytes());
353
354 EXPECT_TRUE(message.has_optionalgroup());
355 EXPECT_TRUE(message.has_optional_nested_message());
356 EXPECT_TRUE(message.has_optional_foreign_message());
357 EXPECT_TRUE(message.has_optional_import_message());
358 EXPECT_TRUE(message.has_optional_public_import_message());
359 EXPECT_TRUE(message.has_optional_lazy_message());
360
361 EXPECT_TRUE(message.optionalgroup().has_a());
362 EXPECT_TRUE(message.optional_nested_message().has_bb());
363 EXPECT_TRUE(message.optional_foreign_message().has_c());
364 EXPECT_TRUE(message.optional_import_message().has_d());
365 EXPECT_TRUE(message.optional_public_import_message().has_e());
366 EXPECT_TRUE(message.optional_lazy_message().has_bb());
367
368 EXPECT_TRUE(message.has_optional_nested_enum());
369 EXPECT_TRUE(message.has_optional_foreign_enum());
370 EXPECT_TRUE(message.has_optional_import_enum());
371
372#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
373 EXPECT_TRUE(message.has_optional_string_piece());
374 EXPECT_TRUE(message.has_optional_cord());
375#endif
376
377 EXPECT_EQ(101, message.optional_int32());
378 EXPECT_EQ(102, message.optional_int64());
379 EXPECT_EQ(103, message.optional_uint32());
380 EXPECT_EQ(104, message.optional_uint64());
381 EXPECT_EQ(105, message.optional_sint32());
382 EXPECT_EQ(106, message.optional_sint64());
383 EXPECT_EQ(107, message.optional_fixed32());
384 EXPECT_EQ(108, message.optional_fixed64());
385 EXPECT_EQ(109, message.optional_sfixed32());
386 EXPECT_EQ(110, message.optional_sfixed64());
387 EXPECT_EQ(111, message.optional_float());
388 EXPECT_EQ(112, message.optional_double());
389 EXPECT_TRUE(message.optional_bool());
390 EXPECT_EQ("115", message.optional_string());
391 EXPECT_EQ("116", message.optional_bytes());
392
393 EXPECT_EQ(117, message.optionalgroup().a());
394 EXPECT_EQ(118, message.optional_nested_message().bb());
395 EXPECT_EQ(119, message.optional_foreign_message().c());
396 EXPECT_EQ(120, message.optional_import_message().d());
397 EXPECT_EQ(126, message.optional_public_import_message().e());
398 EXPECT_EQ(127, message.optional_lazy_message().bb());
399
400 EXPECT_EQ(UNITTEST::TestAllTypes::BAZ, message.optional_nested_enum());
401 EXPECT_EQ(UNITTEST::FOREIGN_BAZ, message.optional_foreign_enum());
402 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAZ, message.optional_import_enum());
403
404
405 // -----------------------------------------------------------------
406
407 ASSERT_EQ(2, message.repeated_int32_size());
408 ASSERT_EQ(2, message.repeated_int64_size());
409 ASSERT_EQ(2, message.repeated_uint32_size());
410 ASSERT_EQ(2, message.repeated_uint64_size());
411 ASSERT_EQ(2, message.repeated_sint32_size());
412 ASSERT_EQ(2, message.repeated_sint64_size());
413 ASSERT_EQ(2, message.repeated_fixed32_size());
414 ASSERT_EQ(2, message.repeated_fixed64_size());
415 ASSERT_EQ(2, message.repeated_sfixed32_size());
416 ASSERT_EQ(2, message.repeated_sfixed64_size());
417 ASSERT_EQ(2, message.repeated_float_size());
418 ASSERT_EQ(2, message.repeated_double_size());
419 ASSERT_EQ(2, message.repeated_bool_size());
420 ASSERT_EQ(2, message.repeated_string_size());
421 ASSERT_EQ(2, message.repeated_bytes_size());
422
423 ASSERT_EQ(2, message.repeatedgroup_size());
424 ASSERT_EQ(2, message.repeated_nested_message_size());
425 ASSERT_EQ(2, message.repeated_foreign_message_size());
426 ASSERT_EQ(2, message.repeated_import_message_size());
427 ASSERT_EQ(2, message.repeated_lazy_message_size());
428 ASSERT_EQ(2, message.repeated_nested_enum_size());
429 ASSERT_EQ(2, message.repeated_foreign_enum_size());
430 ASSERT_EQ(2, message.repeated_import_enum_size());
431
432#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
433 ASSERT_EQ(2, message.repeated_string_piece_size());
434 ASSERT_EQ(2, message.repeated_cord_size());
435#endif
436
437 EXPECT_EQ(201, message.repeated_int32(0));
438 EXPECT_EQ(202, message.repeated_int64(0));
439 EXPECT_EQ(203, message.repeated_uint32(0));
440 EXPECT_EQ(204, message.repeated_uint64(0));
441 EXPECT_EQ(205, message.repeated_sint32(0));
442 EXPECT_EQ(206, message.repeated_sint64(0));
443 EXPECT_EQ(207, message.repeated_fixed32(0));
444 EXPECT_EQ(208, message.repeated_fixed64(0));
445 EXPECT_EQ(209, message.repeated_sfixed32(0));
446 EXPECT_EQ(210, message.repeated_sfixed64(0));
447 EXPECT_EQ(211, message.repeated_float(0));
448 EXPECT_EQ(212, message.repeated_double(0));
449 EXPECT_TRUE(message.repeated_bool(0));
450 EXPECT_EQ("215", message.repeated_string(0));
451 EXPECT_EQ("216", message.repeated_bytes(0));
452
453 EXPECT_EQ(217, message.repeatedgroup(0).a());
454 EXPECT_EQ(218, message.repeated_nested_message(0).bb());
455 EXPECT_EQ(219, message.repeated_foreign_message(0).c());
456 EXPECT_EQ(220, message.repeated_import_message(0).d());
457 EXPECT_EQ(227, message.repeated_lazy_message(0).bb());
458
459
460 EXPECT_EQ(UNITTEST::TestAllTypes::BAR, message.repeated_nested_enum(0));
461 EXPECT_EQ(UNITTEST::FOREIGN_BAR, message.repeated_foreign_enum(0));
462 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR, message.repeated_import_enum(0));
463
464 EXPECT_EQ(301, message.repeated_int32(1));
465 EXPECT_EQ(302, message.repeated_int64(1));
466 EXPECT_EQ(303, message.repeated_uint32(1));
467 EXPECT_EQ(304, message.repeated_uint64(1));
468 EXPECT_EQ(305, message.repeated_sint32(1));
469 EXPECT_EQ(306, message.repeated_sint64(1));
470 EXPECT_EQ(307, message.repeated_fixed32(1));
471 EXPECT_EQ(308, message.repeated_fixed64(1));
472 EXPECT_EQ(309, message.repeated_sfixed32(1));
473 EXPECT_EQ(310, message.repeated_sfixed64(1));
474 EXPECT_EQ(311, message.repeated_float(1));
475 EXPECT_EQ(312, message.repeated_double(1));
476 EXPECT_FALSE(message.repeated_bool(1));
477 EXPECT_EQ("315", message.repeated_string(1));
478 EXPECT_EQ("316", message.repeated_bytes(1));
479
480 EXPECT_EQ(317, message.repeatedgroup(1).a());
481 EXPECT_EQ(318, message.repeated_nested_message(1).bb());
482 EXPECT_EQ(319, message.repeated_foreign_message(1).c());
483 EXPECT_EQ(320, message.repeated_import_message(1).d());
484 EXPECT_EQ(327, message.repeated_lazy_message(1).bb());
485
486 EXPECT_EQ(UNITTEST::TestAllTypes::BAZ, message.repeated_nested_enum(1));
487 EXPECT_EQ(UNITTEST::FOREIGN_BAZ, message.repeated_foreign_enum(1));
488 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAZ, message.repeated_import_enum(1));
489
490
491 // -----------------------------------------------------------------
492
493 EXPECT_TRUE(message.has_default_int32());
494 EXPECT_TRUE(message.has_default_int64());
495 EXPECT_TRUE(message.has_default_uint32());
496 EXPECT_TRUE(message.has_default_uint64());
497 EXPECT_TRUE(message.has_default_sint32());
498 EXPECT_TRUE(message.has_default_sint64());
499 EXPECT_TRUE(message.has_default_fixed32());
500 EXPECT_TRUE(message.has_default_fixed64());
501 EXPECT_TRUE(message.has_default_sfixed32());
502 EXPECT_TRUE(message.has_default_sfixed64());
503 EXPECT_TRUE(message.has_default_float());
504 EXPECT_TRUE(message.has_default_double());
505 EXPECT_TRUE(message.has_default_bool());
506 EXPECT_TRUE(message.has_default_string());
507 EXPECT_TRUE(message.has_default_bytes());
508
509 EXPECT_TRUE(message.has_default_nested_enum());
510 EXPECT_TRUE(message.has_default_foreign_enum());
511 EXPECT_TRUE(message.has_default_import_enum());
512
513
514 EXPECT_EQ(401, message.default_int32());
515 EXPECT_EQ(402, message.default_int64());
516 EXPECT_EQ(403, message.default_uint32());
517 EXPECT_EQ(404, message.default_uint64());
518 EXPECT_EQ(405, message.default_sint32());
519 EXPECT_EQ(406, message.default_sint64());
520 EXPECT_EQ(407, message.default_fixed32());
521 EXPECT_EQ(408, message.default_fixed64());
522 EXPECT_EQ(409, message.default_sfixed32());
523 EXPECT_EQ(410, message.default_sfixed64());
524 EXPECT_EQ(411, message.default_float());
525 EXPECT_EQ(412, message.default_double());
526 EXPECT_FALSE(message.default_bool());
527 EXPECT_EQ("415", message.default_string());
528 EXPECT_EQ("416", message.default_bytes());
529
530 EXPECT_EQ(UNITTEST::TestAllTypes::FOO, message.default_nested_enum());
531 EXPECT_EQ(UNITTEST::FOREIGN_FOO, message.default_foreign_enum());
532 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_FOO, message.default_import_enum());
533
534
535 EXPECT_FALSE(message.has_oneof_uint32());
536 EXPECT_FALSE(message.has_oneof_nested_message());
537 EXPECT_FALSE(message.has_oneof_string());
538 EXPECT_TRUE(message.has_oneof_bytes());
539
540 EXPECT_EQ("604", message.oneof_bytes());
541}
542
543// -------------------------------------------------------------------
544
545inline void TestUtil::ExpectClear(const UNITTEST::TestAllTypes& message) {
546 // has_blah() should initially be false for all optional fields.
547 EXPECT_FALSE(message.has_optional_int32());
548 EXPECT_FALSE(message.has_optional_int64());
549 EXPECT_FALSE(message.has_optional_uint32());
550 EXPECT_FALSE(message.has_optional_uint64());
551 EXPECT_FALSE(message.has_optional_sint32());
552 EXPECT_FALSE(message.has_optional_sint64());
553 EXPECT_FALSE(message.has_optional_fixed32());
554 EXPECT_FALSE(message.has_optional_fixed64());
555 EXPECT_FALSE(message.has_optional_sfixed32());
556 EXPECT_FALSE(message.has_optional_sfixed64());
557 EXPECT_FALSE(message.has_optional_float());
558 EXPECT_FALSE(message.has_optional_double());
559 EXPECT_FALSE(message.has_optional_bool());
560 EXPECT_FALSE(message.has_optional_string());
561 EXPECT_FALSE(message.has_optional_bytes());
562
563 EXPECT_FALSE(message.has_optionalgroup());
564 EXPECT_FALSE(message.has_optional_nested_message());
565 EXPECT_FALSE(message.has_optional_foreign_message());
566 EXPECT_FALSE(message.has_optional_import_message());
567 EXPECT_FALSE(message.has_optional_public_import_message());
568 EXPECT_FALSE(message.has_optional_lazy_message());
569
570 EXPECT_FALSE(message.has_optional_nested_enum());
571 EXPECT_FALSE(message.has_optional_foreign_enum());
572 EXPECT_FALSE(message.has_optional_import_enum());
573
574 EXPECT_FALSE(message.has_optional_string_piece());
575 EXPECT_FALSE(message.has_optional_cord());
576
577 // Optional fields without defaults are set to zero or something like it.
578 EXPECT_EQ(0, message.optional_int32());
579 EXPECT_EQ(0, message.optional_int64());
580 EXPECT_EQ(0, message.optional_uint32());
581 EXPECT_EQ(0, message.optional_uint64());
582 EXPECT_EQ(0, message.optional_sint32());
583 EXPECT_EQ(0, message.optional_sint64());
584 EXPECT_EQ(0, message.optional_fixed32());
585 EXPECT_EQ(0, message.optional_fixed64());
586 EXPECT_EQ(0, message.optional_sfixed32());
587 EXPECT_EQ(0, message.optional_sfixed64());
588 EXPECT_EQ(0, message.optional_float());
589 EXPECT_EQ(0, message.optional_double());
590 EXPECT_FALSE(message.optional_bool());
591 EXPECT_EQ("", message.optional_string());
592 EXPECT_EQ("", message.optional_bytes());
593
594 // Embedded messages should also be clear.
595 EXPECT_FALSE(message.optionalgroup().has_a());
596 EXPECT_FALSE(message.optional_nested_message().has_bb());
597 EXPECT_FALSE(message.optional_foreign_message().has_c());
598 EXPECT_FALSE(message.optional_import_message().has_d());
599 EXPECT_FALSE(message.optional_public_import_message().has_e());
600 EXPECT_FALSE(message.optional_lazy_message().has_bb());
601
602 EXPECT_EQ(0, message.optionalgroup().a());
603 EXPECT_EQ(0, message.optional_nested_message().bb());
604 EXPECT_EQ(0, message.optional_foreign_message().c());
605 EXPECT_EQ(0, message.optional_import_message().d());
606 EXPECT_EQ(0, message.optional_public_import_message().e());
607 EXPECT_EQ(0, message.optional_lazy_message().bb());
608
609 // Enums without defaults are set to the first value in the enum.
610 EXPECT_EQ(UNITTEST::TestAllTypes::FOO, message.optional_nested_enum());
611 EXPECT_EQ(UNITTEST::FOREIGN_FOO, message.optional_foreign_enum());
612 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_FOO, message.optional_import_enum());
613
614
615 // Repeated fields are empty.
616 EXPECT_EQ(0, message.repeated_int32_size());
617 EXPECT_EQ(0, message.repeated_int64_size());
618 EXPECT_EQ(0, message.repeated_uint32_size());
619 EXPECT_EQ(0, message.repeated_uint64_size());
620 EXPECT_EQ(0, message.repeated_sint32_size());
621 EXPECT_EQ(0, message.repeated_sint64_size());
622 EXPECT_EQ(0, message.repeated_fixed32_size());
623 EXPECT_EQ(0, message.repeated_fixed64_size());
624 EXPECT_EQ(0, message.repeated_sfixed32_size());
625 EXPECT_EQ(0, message.repeated_sfixed64_size());
626 EXPECT_EQ(0, message.repeated_float_size());
627 EXPECT_EQ(0, message.repeated_double_size());
628 EXPECT_EQ(0, message.repeated_bool_size());
629 EXPECT_EQ(0, message.repeated_string_size());
630 EXPECT_EQ(0, message.repeated_bytes_size());
631
632 EXPECT_EQ(0, message.repeatedgroup_size());
633 EXPECT_EQ(0, message.repeated_nested_message_size());
634 EXPECT_EQ(0, message.repeated_foreign_message_size());
635 EXPECT_EQ(0, message.repeated_import_message_size());
636 EXPECT_EQ(0, message.repeated_lazy_message_size());
637 EXPECT_EQ(0, message.repeated_nested_enum_size());
638 EXPECT_EQ(0, message.repeated_foreign_enum_size());
639 EXPECT_EQ(0, message.repeated_import_enum_size());
640
641 EXPECT_EQ(0, message.repeated_string_piece_size());
642 EXPECT_EQ(0, message.repeated_cord_size());
643
644 // has_blah() should also be false for all default fields.
645 EXPECT_FALSE(message.has_default_int32());
646 EXPECT_FALSE(message.has_default_int64());
647 EXPECT_FALSE(message.has_default_uint32());
648 EXPECT_FALSE(message.has_default_uint64());
649 EXPECT_FALSE(message.has_default_sint32());
650 EXPECT_FALSE(message.has_default_sint64());
651 EXPECT_FALSE(message.has_default_fixed32());
652 EXPECT_FALSE(message.has_default_fixed64());
653 EXPECT_FALSE(message.has_default_sfixed32());
654 EXPECT_FALSE(message.has_default_sfixed64());
655 EXPECT_FALSE(message.has_default_float());
656 EXPECT_FALSE(message.has_default_double());
657 EXPECT_FALSE(message.has_default_bool());
658 EXPECT_FALSE(message.has_default_string());
659 EXPECT_FALSE(message.has_default_bytes());
660
661 EXPECT_FALSE(message.has_default_nested_enum());
662 EXPECT_FALSE(message.has_default_foreign_enum());
663 EXPECT_FALSE(message.has_default_import_enum());
664
665
666 // Fields with defaults have their default values (duh).
667 EXPECT_EQ(41, message.default_int32());
668 EXPECT_EQ(42, message.default_int64());
669 EXPECT_EQ(43, message.default_uint32());
670 EXPECT_EQ(44, message.default_uint64());
671 EXPECT_EQ(-45, message.default_sint32());
672 EXPECT_EQ(46, message.default_sint64());
673 EXPECT_EQ(47, message.default_fixed32());
674 EXPECT_EQ(48, message.default_fixed64());
675 EXPECT_EQ(49, message.default_sfixed32());
676 EXPECT_EQ(-50, message.default_sfixed64());
677 EXPECT_EQ(51.5, message.default_float());
678 EXPECT_EQ(52e3, message.default_double());
679 EXPECT_TRUE(message.default_bool());
680 EXPECT_EQ("hello", message.default_string());
681 EXPECT_EQ("world", message.default_bytes());
682
683 EXPECT_EQ(UNITTEST::TestAllTypes::BAR, message.default_nested_enum());
684 EXPECT_EQ(UNITTEST::FOREIGN_BAR, message.default_foreign_enum());
685 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR, message.default_import_enum());
686
687
688 EXPECT_FALSE(message.has_oneof_uint32());
689 EXPECT_FALSE(message.has_oneof_nested_message());
690 EXPECT_FALSE(message.has_oneof_string());
691 EXPECT_FALSE(message.has_oneof_bytes());
692}
693
694// -------------------------------------------------------------------
695
696inline void TestUtil::ExpectRepeatedFieldsModified(
697 const UNITTEST::TestAllTypes& message) {
698 // ModifyRepeatedFields only sets the second repeated element of each
699 // field. In addition to verifying this, we also verify that the first
700 // element and size were *not* modified.
701 ASSERT_EQ(2, message.repeated_int32_size());
702 ASSERT_EQ(2, message.repeated_int64_size());
703 ASSERT_EQ(2, message.repeated_uint32_size());
704 ASSERT_EQ(2, message.repeated_uint64_size());
705 ASSERT_EQ(2, message.repeated_sint32_size());
706 ASSERT_EQ(2, message.repeated_sint64_size());
707 ASSERT_EQ(2, message.repeated_fixed32_size());
708 ASSERT_EQ(2, message.repeated_fixed64_size());
709 ASSERT_EQ(2, message.repeated_sfixed32_size());
710 ASSERT_EQ(2, message.repeated_sfixed64_size());
711 ASSERT_EQ(2, message.repeated_float_size());
712 ASSERT_EQ(2, message.repeated_double_size());
713 ASSERT_EQ(2, message.repeated_bool_size());
714 ASSERT_EQ(2, message.repeated_string_size());
715 ASSERT_EQ(2, message.repeated_bytes_size());
716
717 ASSERT_EQ(2, message.repeatedgroup_size());
718 ASSERT_EQ(2, message.repeated_nested_message_size());
719 ASSERT_EQ(2, message.repeated_foreign_message_size());
720 ASSERT_EQ(2, message.repeated_import_message_size());
721 ASSERT_EQ(2, message.repeated_lazy_message_size());
722 ASSERT_EQ(2, message.repeated_nested_enum_size());
723 ASSERT_EQ(2, message.repeated_foreign_enum_size());
724 ASSERT_EQ(2, message.repeated_import_enum_size());
725
726#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
727 ASSERT_EQ(2, message.repeated_string_piece_size());
728 ASSERT_EQ(2, message.repeated_cord_size());
729#endif
730
731 EXPECT_EQ(201, message.repeated_int32(0));
732 EXPECT_EQ(202, message.repeated_int64(0));
733 EXPECT_EQ(203, message.repeated_uint32(0));
734 EXPECT_EQ(204, message.repeated_uint64(0));
735 EXPECT_EQ(205, message.repeated_sint32(0));
736 EXPECT_EQ(206, message.repeated_sint64(0));
737 EXPECT_EQ(207, message.repeated_fixed32(0));
738 EXPECT_EQ(208, message.repeated_fixed64(0));
739 EXPECT_EQ(209, message.repeated_sfixed32(0));
740 EXPECT_EQ(210, message.repeated_sfixed64(0));
741 EXPECT_EQ(211, message.repeated_float(0));
742 EXPECT_EQ(212, message.repeated_double(0));
743 EXPECT_TRUE(message.repeated_bool(0));
744 EXPECT_EQ("215", message.repeated_string(0));
745 EXPECT_EQ("216", message.repeated_bytes(0));
746
747 EXPECT_EQ(217, message.repeatedgroup(0).a());
748 EXPECT_EQ(218, message.repeated_nested_message(0).bb());
749 EXPECT_EQ(219, message.repeated_foreign_message(0).c());
750 EXPECT_EQ(220, message.repeated_import_message(0).d());
751 EXPECT_EQ(227, message.repeated_lazy_message(0).bb());
752
753 EXPECT_EQ(UNITTEST::TestAllTypes::BAR, message.repeated_nested_enum(0));
754 EXPECT_EQ(UNITTEST::FOREIGN_BAR, message.repeated_foreign_enum(0));
755 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR, message.repeated_import_enum(0));
756
757
758 // Actually verify the second (modified) elements now.
759 EXPECT_EQ(501, message.repeated_int32(1));
760 EXPECT_EQ(502, message.repeated_int64(1));
761 EXPECT_EQ(503, message.repeated_uint32(1));
762 EXPECT_EQ(504, message.repeated_uint64(1));
763 EXPECT_EQ(505, message.repeated_sint32(1));
764 EXPECT_EQ(506, message.repeated_sint64(1));
765 EXPECT_EQ(507, message.repeated_fixed32(1));
766 EXPECT_EQ(508, message.repeated_fixed64(1));
767 EXPECT_EQ(509, message.repeated_sfixed32(1));
768 EXPECT_EQ(510, message.repeated_sfixed64(1));
769 EXPECT_EQ(511, message.repeated_float(1));
770 EXPECT_EQ(512, message.repeated_double(1));
771 EXPECT_TRUE(message.repeated_bool(1));
772 EXPECT_EQ("515", message.repeated_string(1));
773 EXPECT_EQ("516", message.repeated_bytes(1));
774
775 EXPECT_EQ(517, message.repeatedgroup(1).a());
776 EXPECT_EQ(518, message.repeated_nested_message(1).bb());
777 EXPECT_EQ(519, message.repeated_foreign_message(1).c());
778 EXPECT_EQ(520, message.repeated_import_message(1).d());
779 EXPECT_EQ(527, message.repeated_lazy_message(1).bb());
780
781 EXPECT_EQ(UNITTEST::TestAllTypes::FOO, message.repeated_nested_enum(1));
782 EXPECT_EQ(UNITTEST::FOREIGN_FOO, message.repeated_foreign_enum(1));
783 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_FOO, message.repeated_import_enum(1));
784
785}
786
787// -------------------------------------------------------------------
788
789inline void TestUtil::SetPackedFields(UNITTEST::TestPackedTypes* message) {
790 message->add_packed_int32(601);
791 message->add_packed_int64(602);
792 message->add_packed_uint32(603);
793 message->add_packed_uint64(604);
794 message->add_packed_sint32(605);
795 message->add_packed_sint64(606);
796 message->add_packed_fixed32(607);
797 message->add_packed_fixed64(608);
798 message->add_packed_sfixed32(609);
799 message->add_packed_sfixed64(610);
800 message->add_packed_float(611);
801 message->add_packed_double(612);
802 message->add_packed_bool(true);
803 message->add_packed_enum(UNITTEST::FOREIGN_BAR);
804 // add a second one of each field
805 message->add_packed_int32(701);
806 message->add_packed_int64(702);
807 message->add_packed_uint32(703);
808 message->add_packed_uint64(704);
809 message->add_packed_sint32(705);
810 message->add_packed_sint64(706);
811 message->add_packed_fixed32(707);
812 message->add_packed_fixed64(708);
813 message->add_packed_sfixed32(709);
814 message->add_packed_sfixed64(710);
815 message->add_packed_float(711);
816 message->add_packed_double(712);
817 message->add_packed_bool(false);
818 message->add_packed_enum(UNITTEST::FOREIGN_BAZ);
819}
820
821inline void TestUtil::SetUnpackedFields(UNITTEST::TestUnpackedTypes* message) {
822 // The values applied here must match those of SetPackedFields.
823
824 message->add_unpacked_int32(601);
825 message->add_unpacked_int64(602);
826 message->add_unpacked_uint32(603);
827 message->add_unpacked_uint64(604);
828 message->add_unpacked_sint32(605);
829 message->add_unpacked_sint64(606);
830 message->add_unpacked_fixed32(607);
831 message->add_unpacked_fixed64(608);
832 message->add_unpacked_sfixed32(609);
833 message->add_unpacked_sfixed64(610);
834 message->add_unpacked_float(611);
835 message->add_unpacked_double(612);
836 message->add_unpacked_bool(true);
837 message->add_unpacked_enum(UNITTEST::FOREIGN_BAR);
838 // add a second one of each field
839 message->add_unpacked_int32(701);
840 message->add_unpacked_int64(702);
841 message->add_unpacked_uint32(703);
842 message->add_unpacked_uint64(704);
843 message->add_unpacked_sint32(705);
844 message->add_unpacked_sint64(706);
845 message->add_unpacked_fixed32(707);
846 message->add_unpacked_fixed64(708);
847 message->add_unpacked_sfixed32(709);
848 message->add_unpacked_sfixed64(710);
849 message->add_unpacked_float(711);
850 message->add_unpacked_double(712);
851 message->add_unpacked_bool(false);
852 message->add_unpacked_enum(UNITTEST::FOREIGN_BAZ);
853}
854
855// -------------------------------------------------------------------
856
857inline void TestUtil::ModifyPackedFields(UNITTEST::TestPackedTypes* message) {
858 message->set_packed_int32(1, 801);
859 message->set_packed_int64(1, 802);
860 message->set_packed_uint32(1, 803);
861 message->set_packed_uint64(1, 804);
862 message->set_packed_sint32(1, 805);
863 message->set_packed_sint64(1, 806);
864 message->set_packed_fixed32(1, 807);
865 message->set_packed_fixed64(1, 808);
866 message->set_packed_sfixed32(1, 809);
867 message->set_packed_sfixed64(1, 810);
868 message->set_packed_float(1, 811);
869 message->set_packed_double(1, 812);
870 message->set_packed_bool(1, true);
871 message->set_packed_enum(1, UNITTEST::FOREIGN_FOO);
872}
873
874// -------------------------------------------------------------------
875
876inline void TestUtil::ExpectPackedFieldsSet(
877 const UNITTEST::TestPackedTypes& message) {
878 ASSERT_EQ(2, message.packed_int32_size());
879 ASSERT_EQ(2, message.packed_int64_size());
880 ASSERT_EQ(2, message.packed_uint32_size());
881 ASSERT_EQ(2, message.packed_uint64_size());
882 ASSERT_EQ(2, message.packed_sint32_size());
883 ASSERT_EQ(2, message.packed_sint64_size());
884 ASSERT_EQ(2, message.packed_fixed32_size());
885 ASSERT_EQ(2, message.packed_fixed64_size());
886 ASSERT_EQ(2, message.packed_sfixed32_size());
887 ASSERT_EQ(2, message.packed_sfixed64_size());
888 ASSERT_EQ(2, message.packed_float_size());
889 ASSERT_EQ(2, message.packed_double_size());
890 ASSERT_EQ(2, message.packed_bool_size());
891 ASSERT_EQ(2, message.packed_enum_size());
892
893 EXPECT_EQ(601, message.packed_int32(0));
894 EXPECT_EQ(602, message.packed_int64(0));
895 EXPECT_EQ(603, message.packed_uint32(0));
896 EXPECT_EQ(604, message.packed_uint64(0));
897 EXPECT_EQ(605, message.packed_sint32(0));
898 EXPECT_EQ(606, message.packed_sint64(0));
899 EXPECT_EQ(607, message.packed_fixed32(0));
900 EXPECT_EQ(608, message.packed_fixed64(0));
901 EXPECT_EQ(609, message.packed_sfixed32(0));
902 EXPECT_EQ(610, message.packed_sfixed64(0));
903 EXPECT_EQ(611, message.packed_float(0));
904 EXPECT_EQ(612, message.packed_double(0));
905 EXPECT_TRUE(message.packed_bool(0));
906 EXPECT_EQ(UNITTEST::FOREIGN_BAR, message.packed_enum(0));
907
908 EXPECT_EQ(701, message.packed_int32(1));
909 EXPECT_EQ(702, message.packed_int64(1));
910 EXPECT_EQ(703, message.packed_uint32(1));
911 EXPECT_EQ(704, message.packed_uint64(1));
912 EXPECT_EQ(705, message.packed_sint32(1));
913 EXPECT_EQ(706, message.packed_sint64(1));
914 EXPECT_EQ(707, message.packed_fixed32(1));
915 EXPECT_EQ(708, message.packed_fixed64(1));
916 EXPECT_EQ(709, message.packed_sfixed32(1));
917 EXPECT_EQ(710, message.packed_sfixed64(1));
918 EXPECT_EQ(711, message.packed_float(1));
919 EXPECT_EQ(712, message.packed_double(1));
920 EXPECT_FALSE(message.packed_bool(1));
921 EXPECT_EQ(UNITTEST::FOREIGN_BAZ, message.packed_enum(1));
922}
923
924inline void TestUtil::ExpectUnpackedFieldsSet(
925 const UNITTEST::TestUnpackedTypes& message) {
926 // The values expected here must match those of ExpectPackedFieldsSet.
927
928 ASSERT_EQ(2, message.unpacked_int32_size());
929 ASSERT_EQ(2, message.unpacked_int64_size());
930 ASSERT_EQ(2, message.unpacked_uint32_size());
931 ASSERT_EQ(2, message.unpacked_uint64_size());
932 ASSERT_EQ(2, message.unpacked_sint32_size());
933 ASSERT_EQ(2, message.unpacked_sint64_size());
934 ASSERT_EQ(2, message.unpacked_fixed32_size());
935 ASSERT_EQ(2, message.unpacked_fixed64_size());
936 ASSERT_EQ(2, message.unpacked_sfixed32_size());
937 ASSERT_EQ(2, message.unpacked_sfixed64_size());
938 ASSERT_EQ(2, message.unpacked_float_size());
939 ASSERT_EQ(2, message.unpacked_double_size());
940 ASSERT_EQ(2, message.unpacked_bool_size());
941 ASSERT_EQ(2, message.unpacked_enum_size());
942
943 EXPECT_EQ(601, message.unpacked_int32(0));
944 EXPECT_EQ(602, message.unpacked_int64(0));
945 EXPECT_EQ(603, message.unpacked_uint32(0));
946 EXPECT_EQ(604, message.unpacked_uint64(0));
947 EXPECT_EQ(605, message.unpacked_sint32(0));
948 EXPECT_EQ(606, message.unpacked_sint64(0));
949 EXPECT_EQ(607, message.unpacked_fixed32(0));
950 EXPECT_EQ(608, message.unpacked_fixed64(0));
951 EXPECT_EQ(609, message.unpacked_sfixed32(0));
952 EXPECT_EQ(610, message.unpacked_sfixed64(0));
953 EXPECT_EQ(611, message.unpacked_float(0));
954 EXPECT_EQ(612, message.unpacked_double(0));
955 EXPECT_TRUE(message.unpacked_bool(0));
956 EXPECT_EQ(UNITTEST::FOREIGN_BAR, message.unpacked_enum(0));
957
958 EXPECT_EQ(701, message.unpacked_int32(1));
959 EXPECT_EQ(702, message.unpacked_int64(1));
960 EXPECT_EQ(703, message.unpacked_uint32(1));
961 EXPECT_EQ(704, message.unpacked_uint64(1));
962 EXPECT_EQ(705, message.unpacked_sint32(1));
963 EXPECT_EQ(706, message.unpacked_sint64(1));
964 EXPECT_EQ(707, message.unpacked_fixed32(1));
965 EXPECT_EQ(708, message.unpacked_fixed64(1));
966 EXPECT_EQ(709, message.unpacked_sfixed32(1));
967 EXPECT_EQ(710, message.unpacked_sfixed64(1));
968 EXPECT_EQ(711, message.unpacked_float(1));
969 EXPECT_EQ(712, message.unpacked_double(1));
970 EXPECT_FALSE(message.unpacked_bool(1));
971 EXPECT_EQ(UNITTEST::FOREIGN_BAZ, message.unpacked_enum(1));
972}
973
974// -------------------------------------------------------------------
975
976inline void TestUtil::ExpectPackedClear(
977 const UNITTEST::TestPackedTypes& message) {
978 // Packed repeated fields are empty.
979 EXPECT_EQ(0, message.packed_int32_size());
980 EXPECT_EQ(0, message.packed_int64_size());
981 EXPECT_EQ(0, message.packed_uint32_size());
982 EXPECT_EQ(0, message.packed_uint64_size());
983 EXPECT_EQ(0, message.packed_sint32_size());
984 EXPECT_EQ(0, message.packed_sint64_size());
985 EXPECT_EQ(0, message.packed_fixed32_size());
986 EXPECT_EQ(0, message.packed_fixed64_size());
987 EXPECT_EQ(0, message.packed_sfixed32_size());
988 EXPECT_EQ(0, message.packed_sfixed64_size());
989 EXPECT_EQ(0, message.packed_float_size());
990 EXPECT_EQ(0, message.packed_double_size());
991 EXPECT_EQ(0, message.packed_bool_size());
992 EXPECT_EQ(0, message.packed_enum_size());
993}
994
995// -------------------------------------------------------------------
996
997inline void TestUtil::ExpectPackedFieldsModified(
998 const UNITTEST::TestPackedTypes& message) {
999 // Do the same for packed repeated fields.
1000 ASSERT_EQ(2, message.packed_int32_size());
1001 ASSERT_EQ(2, message.packed_int64_size());
1002 ASSERT_EQ(2, message.packed_uint32_size());
1003 ASSERT_EQ(2, message.packed_uint64_size());
1004 ASSERT_EQ(2, message.packed_sint32_size());
1005 ASSERT_EQ(2, message.packed_sint64_size());
1006 ASSERT_EQ(2, message.packed_fixed32_size());
1007 ASSERT_EQ(2, message.packed_fixed64_size());
1008 ASSERT_EQ(2, message.packed_sfixed32_size());
1009 ASSERT_EQ(2, message.packed_sfixed64_size());
1010 ASSERT_EQ(2, message.packed_float_size());
1011 ASSERT_EQ(2, message.packed_double_size());
1012 ASSERT_EQ(2, message.packed_bool_size());
1013 ASSERT_EQ(2, message.packed_enum_size());
1014
1015 EXPECT_EQ(601, message.packed_int32(0));
1016 EXPECT_EQ(602, message.packed_int64(0));
1017 EXPECT_EQ(603, message.packed_uint32(0));
1018 EXPECT_EQ(604, message.packed_uint64(0));
1019 EXPECT_EQ(605, message.packed_sint32(0));
1020 EXPECT_EQ(606, message.packed_sint64(0));
1021 EXPECT_EQ(607, message.packed_fixed32(0));
1022 EXPECT_EQ(608, message.packed_fixed64(0));
1023 EXPECT_EQ(609, message.packed_sfixed32(0));
1024 EXPECT_EQ(610, message.packed_sfixed64(0));
1025 EXPECT_EQ(611, message.packed_float(0));
1026 EXPECT_EQ(612, message.packed_double(0));
1027 EXPECT_TRUE(message.packed_bool(0));
1028 EXPECT_EQ(UNITTEST::FOREIGN_BAR, message.packed_enum(0));
1029 // Actually verify the second (modified) elements now.
1030 EXPECT_EQ(801, message.packed_int32(1));
1031 EXPECT_EQ(802, message.packed_int64(1));
1032 EXPECT_EQ(803, message.packed_uint32(1));
1033 EXPECT_EQ(804, message.packed_uint64(1));
1034 EXPECT_EQ(805, message.packed_sint32(1));
1035 EXPECT_EQ(806, message.packed_sint64(1));
1036 EXPECT_EQ(807, message.packed_fixed32(1));
1037 EXPECT_EQ(808, message.packed_fixed64(1));
1038 EXPECT_EQ(809, message.packed_sfixed32(1));
1039 EXPECT_EQ(810, message.packed_sfixed64(1));
1040 EXPECT_EQ(811, message.packed_float(1));
1041 EXPECT_EQ(812, message.packed_double(1));
1042 EXPECT_TRUE(message.packed_bool(1));
1043 EXPECT_EQ(UNITTEST::FOREIGN_FOO, message.packed_enum(1));
1044}
1045
1046// ===================================================================
1047// Extensions
1048//
1049// All this code is exactly equivalent to the above code except that it's
1050// manipulating extension fields instead of normal ones.
1051
1052inline void TestUtil::SetAllExtensions(UNITTEST::TestAllExtensions* message) {
1053 message->SetExtension(UNITTEST::optional_int32_extension, 101);
1054 message->SetExtension(UNITTEST::optional_int64_extension, 102);
1055 message->SetExtension(UNITTEST::optional_uint32_extension, 103);
1056 message->SetExtension(UNITTEST::optional_uint64_extension, 104);
1057 message->SetExtension(UNITTEST::optional_sint32_extension, 105);
1058 message->SetExtension(UNITTEST::optional_sint64_extension, 106);
1059 message->SetExtension(UNITTEST::optional_fixed32_extension, 107);
1060 message->SetExtension(UNITTEST::optional_fixed64_extension, 108);
1061 message->SetExtension(UNITTEST::optional_sfixed32_extension, 109);
1062 message->SetExtension(UNITTEST::optional_sfixed64_extension, 110);
1063 message->SetExtension(UNITTEST::optional_float_extension, 111);
1064 message->SetExtension(UNITTEST::optional_double_extension, 112);
1065 message->SetExtension(UNITTEST::optional_bool_extension, true);
1066 message->SetExtension(UNITTEST::optional_string_extension, "115");
1067 message->SetExtension(UNITTEST::optional_bytes_extension, "116");
1068
1069 message->MutableExtension(UNITTEST::optionalgroup_extension)->set_a(117);
1070 message->MutableExtension(UNITTEST::optional_nested_message_extension)
1071 ->set_bb(118);
1072 message->MutableExtension(UNITTEST::optional_foreign_message_extension)
1073 ->set_c(119);
1074 message->MutableExtension(UNITTEST::optional_import_message_extension)
1075 ->set_d(120);
1076
1077 message->SetExtension(UNITTEST::optional_nested_enum_extension,
1078 UNITTEST::TestAllTypes::BAZ);
1079 message->SetExtension(UNITTEST::optional_foreign_enum_extension,
1080 UNITTEST::FOREIGN_BAZ);
1081 message->SetExtension(UNITTEST::optional_import_enum_extension,
1082 UNITTEST_IMPORT::IMPORT_BAZ);
1083
1084 message->SetExtension(UNITTEST::optional_string_piece_extension, "124");
1085 message->SetExtension(UNITTEST::optional_cord_extension, "125");
1086
1087 message->MutableExtension(UNITTEST::optional_public_import_message_extension)
1088 ->set_e(126);
1089 message->MutableExtension(UNITTEST::optional_lazy_message_extension)
1090 ->set_bb(127);
1091
1092 // -----------------------------------------------------------------
1093
1094 message->AddExtension(UNITTEST::repeated_int32_extension, 201);
1095 message->AddExtension(UNITTEST::repeated_int64_extension, 202);
1096 message->AddExtension(UNITTEST::repeated_uint32_extension, 203);
1097 message->AddExtension(UNITTEST::repeated_uint64_extension, 204);
1098 message->AddExtension(UNITTEST::repeated_sint32_extension, 205);
1099 message->AddExtension(UNITTEST::repeated_sint64_extension, 206);
1100 message->AddExtension(UNITTEST::repeated_fixed32_extension, 207);
1101 message->AddExtension(UNITTEST::repeated_fixed64_extension, 208);
1102 message->AddExtension(UNITTEST::repeated_sfixed32_extension, 209);
1103 message->AddExtension(UNITTEST::repeated_sfixed64_extension, 210);
1104 message->AddExtension(UNITTEST::repeated_float_extension, 211);
1105 message->AddExtension(UNITTEST::repeated_double_extension, 212);
1106 message->AddExtension(UNITTEST::repeated_bool_extension, true);
1107 message->AddExtension(UNITTEST::repeated_string_extension, "215");
1108 message->AddExtension(UNITTEST::repeated_bytes_extension, "216");
1109
1110 message->AddExtension(UNITTEST::repeatedgroup_extension)->set_a(217);
1111 message->AddExtension(UNITTEST::repeated_nested_message_extension)
1112 ->set_bb(218);
1113 message->AddExtension(UNITTEST::repeated_foreign_message_extension)
1114 ->set_c(219);
1115 message->AddExtension(UNITTEST::repeated_import_message_extension)
1116 ->set_d(220);
1117 message->AddExtension(UNITTEST::repeated_lazy_message_extension)->set_bb(227);
1118
1119 message->AddExtension(UNITTEST::repeated_nested_enum_extension,
1120 UNITTEST::TestAllTypes::BAR);
1121 message->AddExtension(UNITTEST::repeated_foreign_enum_extension,
1122 UNITTEST::FOREIGN_BAR);
1123 message->AddExtension(UNITTEST::repeated_import_enum_extension,
1124 UNITTEST_IMPORT::IMPORT_BAR);
1125
1126 message->AddExtension(UNITTEST::repeated_string_piece_extension, "224");
1127 message->AddExtension(UNITTEST::repeated_cord_extension, "225");
1128
1129 // Add a second one of each field.
1130 message->AddExtension(UNITTEST::repeated_int32_extension, 301);
1131 message->AddExtension(UNITTEST::repeated_int64_extension, 302);
1132 message->AddExtension(UNITTEST::repeated_uint32_extension, 303);
1133 message->AddExtension(UNITTEST::repeated_uint64_extension, 304);
1134 message->AddExtension(UNITTEST::repeated_sint32_extension, 305);
1135 message->AddExtension(UNITTEST::repeated_sint64_extension, 306);
1136 message->AddExtension(UNITTEST::repeated_fixed32_extension, 307);
1137 message->AddExtension(UNITTEST::repeated_fixed64_extension, 308);
1138 message->AddExtension(UNITTEST::repeated_sfixed32_extension, 309);
1139 message->AddExtension(UNITTEST::repeated_sfixed64_extension, 310);
1140 message->AddExtension(UNITTEST::repeated_float_extension, 311);
1141 message->AddExtension(UNITTEST::repeated_double_extension, 312);
1142 message->AddExtension(UNITTEST::repeated_bool_extension, false);
1143 message->AddExtension(UNITTEST::repeated_string_extension, "315");
1144 message->AddExtension(UNITTEST::repeated_bytes_extension, "316");
1145
1146 message->AddExtension(UNITTEST::repeatedgroup_extension)->set_a(317);
1147 message->AddExtension(UNITTEST::repeated_nested_message_extension)
1148 ->set_bb(318);
1149 message->AddExtension(UNITTEST::repeated_foreign_message_extension)
1150 ->set_c(319);
1151 message->AddExtension(UNITTEST::repeated_import_message_extension)
1152 ->set_d(320);
1153 message->AddExtension(UNITTEST::repeated_lazy_message_extension)->set_bb(327);
1154
1155 message->AddExtension(UNITTEST::repeated_nested_enum_extension,
1156 UNITTEST::TestAllTypes::BAZ);
1157 message->AddExtension(UNITTEST::repeated_foreign_enum_extension,
1158 UNITTEST::FOREIGN_BAZ);
1159 message->AddExtension(UNITTEST::repeated_import_enum_extension,
1160 UNITTEST_IMPORT::IMPORT_BAZ);
1161
1162 message->AddExtension(UNITTEST::repeated_string_piece_extension, "324");
1163 message->AddExtension(UNITTEST::repeated_cord_extension, "325");
1164
1165 // -----------------------------------------------------------------
1166
1167 message->SetExtension(UNITTEST::default_int32_extension, 401);
1168 message->SetExtension(UNITTEST::default_int64_extension, 402);
1169 message->SetExtension(UNITTEST::default_uint32_extension, 403);
1170 message->SetExtension(UNITTEST::default_uint64_extension, 404);
1171 message->SetExtension(UNITTEST::default_sint32_extension, 405);
1172 message->SetExtension(UNITTEST::default_sint64_extension, 406);
1173 message->SetExtension(UNITTEST::default_fixed32_extension, 407);
1174 message->SetExtension(UNITTEST::default_fixed64_extension, 408);
1175 message->SetExtension(UNITTEST::default_sfixed32_extension, 409);
1176 message->SetExtension(UNITTEST::default_sfixed64_extension, 410);
1177 message->SetExtension(UNITTEST::default_float_extension, 411);
1178 message->SetExtension(UNITTEST::default_double_extension, 412);
1179 message->SetExtension(UNITTEST::default_bool_extension, false);
1180 message->SetExtension(UNITTEST::default_string_extension, "415");
1181 message->SetExtension(UNITTEST::default_bytes_extension, "416");
1182
1183 message->SetExtension(UNITTEST::default_nested_enum_extension,
1184 UNITTEST::TestAllTypes::FOO);
1185 message->SetExtension(UNITTEST::default_foreign_enum_extension,
1186 UNITTEST::FOREIGN_FOO);
1187 message->SetExtension(UNITTEST::default_import_enum_extension,
1188 UNITTEST_IMPORT::IMPORT_FOO);
1189
1190 message->SetExtension(UNITTEST::default_string_piece_extension, "424");
1191 message->SetExtension(UNITTEST::default_cord_extension, "425");
1192
1193 SetOneofFields(message);
1194}
1195
1196inline void TestUtil::SetOneofFields(UNITTEST::TestAllExtensions* message) {
1197 message->SetExtension(UNITTEST::oneof_uint32_extension, 601);
1198 message->MutableExtension(UNITTEST::oneof_nested_message_extension)
1199 ->set_bb(602);
1200 message->SetExtension(UNITTEST::oneof_string_extension, "603");
1201 message->SetExtension(UNITTEST::oneof_bytes_extension, "604");
1202}
1203
1204// -------------------------------------------------------------------
1205
1206inline void TestUtil::SetAllFieldsAndExtensions(
1207 UNITTEST::TestFieldOrderings* message) {
1208 GOOGLE_CHECK(message);
1209 message->set_my_int(1);
1210 message->set_my_string("foo");
1211 message->set_my_float(1.0);
1212 message->SetExtension(UNITTEST::my_extension_int, 23);
1213 message->SetExtension(UNITTEST::my_extension_string, "bar");
1214}
1215
1216// -------------------------------------------------------------------
1217
1218inline void TestUtil::ModifyRepeatedExtensions(
1219 UNITTEST::TestAllExtensions* message) {
1220 message->SetExtension(UNITTEST::repeated_int32_extension, 1, 501);
1221 message->SetExtension(UNITTEST::repeated_int64_extension, 1, 502);
1222 message->SetExtension(UNITTEST::repeated_uint32_extension, 1, 503);
1223 message->SetExtension(UNITTEST::repeated_uint64_extension, 1, 504);
1224 message->SetExtension(UNITTEST::repeated_sint32_extension, 1, 505);
1225 message->SetExtension(UNITTEST::repeated_sint64_extension, 1, 506);
1226 message->SetExtension(UNITTEST::repeated_fixed32_extension, 1, 507);
1227 message->SetExtension(UNITTEST::repeated_fixed64_extension, 1, 508);
1228 message->SetExtension(UNITTEST::repeated_sfixed32_extension, 1, 509);
1229 message->SetExtension(UNITTEST::repeated_sfixed64_extension, 1, 510);
1230 message->SetExtension(UNITTEST::repeated_float_extension, 1, 511);
1231 message->SetExtension(UNITTEST::repeated_double_extension, 1, 512);
1232 message->SetExtension(UNITTEST::repeated_bool_extension, 1, true);
1233 message->SetExtension(UNITTEST::repeated_string_extension, 1, "515");
1234 message->SetExtension(UNITTEST::repeated_bytes_extension, 1, "516");
1235
1236 message->MutableExtension(UNITTEST::repeatedgroup_extension, 1)->set_a(517);
1237 message->MutableExtension(UNITTEST::repeated_nested_message_extension, 1)
1238 ->set_bb(518);
1239 message->MutableExtension(UNITTEST::repeated_foreign_message_extension, 1)
1240 ->set_c(519);
1241 message->MutableExtension(UNITTEST::repeated_import_message_extension, 1)
1242 ->set_d(520);
1243 message->MutableExtension(UNITTEST::repeated_lazy_message_extension, 1)
1244 ->set_bb(527);
1245
1246 message->SetExtension(UNITTEST::repeated_nested_enum_extension, 1,
1247 UNITTEST::TestAllTypes::FOO);
1248 message->SetExtension(UNITTEST::repeated_foreign_enum_extension, 1,
1249 UNITTEST::FOREIGN_FOO);
1250 message->SetExtension(UNITTEST::repeated_import_enum_extension, 1,
1251 UNITTEST_IMPORT::IMPORT_FOO);
1252
1253 message->SetExtension(UNITTEST::repeated_string_piece_extension, 1, "524");
1254 message->SetExtension(UNITTEST::repeated_cord_extension, 1, "525");
1255}
1256
1257// -------------------------------------------------------------------
1258
1259inline void TestUtil::ExpectAllExtensionsSet(
1260 const UNITTEST::TestAllExtensions& message) {
1261 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_int32_extension));
1262 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_int64_extension));
1263 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_uint32_extension));
1264 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_uint64_extension));
1265 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_sint32_extension));
1266 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_sint64_extension));
1267 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_fixed32_extension));
1268 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_fixed64_extension));
1269 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_sfixed32_extension));
1270 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_sfixed64_extension));
1271 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_float_extension));
1272 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_double_extension));
1273 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_bool_extension));
1274 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_string_extension));
1275 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_bytes_extension));
1276
1277 EXPECT_TRUE(message.HasExtension(UNITTEST::optionalgroup_extension));
1278 EXPECT_TRUE(
1279 message.HasExtension(UNITTEST::optional_nested_message_extension));
1280 EXPECT_TRUE(
1281 message.HasExtension(UNITTEST::optional_foreign_message_extension));
1282 EXPECT_TRUE(
1283 message.HasExtension(UNITTEST::optional_import_message_extension));
1284 EXPECT_TRUE(
1285 message.HasExtension(UNITTEST::optional_public_import_message_extension));
1286 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_lazy_message_extension));
1287
1288 EXPECT_TRUE(message.GetExtension(UNITTEST::optionalgroup_extension).has_a());
1289 EXPECT_TRUE(message.GetExtension(UNITTEST::optional_nested_message_extension)
1290 .has_bb());
1291 EXPECT_TRUE(message.GetExtension(UNITTEST::optional_foreign_message_extension)
1292 .has_c());
1293 EXPECT_TRUE(message.GetExtension(UNITTEST::optional_import_message_extension)
1294 .has_d());
1295 EXPECT_TRUE(
1296 message.GetExtension(UNITTEST::optional_public_import_message_extension)
1297 .has_e());
1298 EXPECT_TRUE(
1299 message.GetExtension(UNITTEST::optional_lazy_message_extension).has_bb());
1300
1301 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_nested_enum_extension));
1302 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_foreign_enum_extension));
1303 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_import_enum_extension));
1304
1305 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_string_piece_extension));
1306 EXPECT_TRUE(message.HasExtension(UNITTEST::optional_cord_extension));
1307
1308 EXPECT_EQ(101, message.GetExtension(UNITTEST::optional_int32_extension));
1309 EXPECT_EQ(102, message.GetExtension(UNITTEST::optional_int64_extension));
1310 EXPECT_EQ(103, message.GetExtension(UNITTEST::optional_uint32_extension));
1311 EXPECT_EQ(104, message.GetExtension(UNITTEST::optional_uint64_extension));
1312 EXPECT_EQ(105, message.GetExtension(UNITTEST::optional_sint32_extension));
1313 EXPECT_EQ(106, message.GetExtension(UNITTEST::optional_sint64_extension));
1314 EXPECT_EQ(107, message.GetExtension(UNITTEST::optional_fixed32_extension));
1315 EXPECT_EQ(108, message.GetExtension(UNITTEST::optional_fixed64_extension));
1316 EXPECT_EQ(109, message.GetExtension(UNITTEST::optional_sfixed32_extension));
1317 EXPECT_EQ(110, message.GetExtension(UNITTEST::optional_sfixed64_extension));
1318 EXPECT_EQ(111, message.GetExtension(UNITTEST::optional_float_extension));
1319 EXPECT_EQ(112, message.GetExtension(UNITTEST::optional_double_extension));
1320 EXPECT_TRUE(message.GetExtension(UNITTEST::optional_bool_extension));
1321 EXPECT_EQ("115", message.GetExtension(UNITTEST::optional_string_extension));
1322 EXPECT_EQ("116", message.GetExtension(UNITTEST::optional_bytes_extension));
1323
1324 EXPECT_EQ(117, message.GetExtension(UNITTEST::optionalgroup_extension).a());
1325 EXPECT_EQ(
1326 118,
1327 message.GetExtension(UNITTEST::optional_nested_message_extension).bb());
1328 EXPECT_EQ(
1329 119,
1330 message.GetExtension(UNITTEST::optional_foreign_message_extension).c());
1331 EXPECT_EQ(
1332 120,
1333 message.GetExtension(UNITTEST::optional_import_message_extension).d());
1334
1335 EXPECT_EQ(UNITTEST::TestAllTypes::BAZ,
1336 message.GetExtension(UNITTEST::optional_nested_enum_extension));
1337 EXPECT_EQ(UNITTEST::FOREIGN_BAZ,
1338 message.GetExtension(UNITTEST::optional_foreign_enum_extension));
1339 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAZ,
1340 message.GetExtension(UNITTEST::optional_import_enum_extension));
1341
1342 EXPECT_EQ("124",
1343 message.GetExtension(UNITTEST::optional_string_piece_extension));
1344 EXPECT_EQ("125", message.GetExtension(UNITTEST::optional_cord_extension));
1345 EXPECT_EQ(
1346 126,
1347 message.GetExtension(UNITTEST::optional_public_import_message_extension)
1348 .e());
1349 EXPECT_EQ(
1350 127,
1351 message.GetExtension(UNITTEST::optional_lazy_message_extension).bb());
1352
1353 // -----------------------------------------------------------------
1354
1355 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_int32_extension));
1356 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_int64_extension));
1357 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_uint32_extension));
1358 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_uint64_extension));
1359 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sint32_extension));
1360 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sint64_extension));
1361 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_fixed32_extension));
1362 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_fixed64_extension));
1363 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sfixed32_extension));
1364 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sfixed64_extension));
1365 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_float_extension));
1366 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_double_extension));
1367 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_bool_extension));
1368 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_string_extension));
1369 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_bytes_extension));
1370
1371 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeatedgroup_extension));
1372 ASSERT_EQ(2,
1373 message.ExtensionSize(UNITTEST::repeated_nested_message_extension));
1374 ASSERT_EQ(
1375 2, message.ExtensionSize(UNITTEST::repeated_foreign_message_extension));
1376 ASSERT_EQ(2,
1377 message.ExtensionSize(UNITTEST::repeated_import_message_extension));
1378 ASSERT_EQ(2,
1379 message.ExtensionSize(UNITTEST::repeated_lazy_message_extension));
1380 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_nested_enum_extension));
1381 ASSERT_EQ(2,
1382 message.ExtensionSize(UNITTEST::repeated_foreign_enum_extension));
1383 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_import_enum_extension));
1384
1385 ASSERT_EQ(2,
1386 message.ExtensionSize(UNITTEST::repeated_string_piece_extension));
1387 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_cord_extension));
1388
1389 EXPECT_EQ(201, message.GetExtension(UNITTEST::repeated_int32_extension, 0));
1390 EXPECT_EQ(202, message.GetExtension(UNITTEST::repeated_int64_extension, 0));
1391 EXPECT_EQ(203, message.GetExtension(UNITTEST::repeated_uint32_extension, 0));
1392 EXPECT_EQ(204, message.GetExtension(UNITTEST::repeated_uint64_extension, 0));
1393 EXPECT_EQ(205, message.GetExtension(UNITTEST::repeated_sint32_extension, 0));
1394 EXPECT_EQ(206, message.GetExtension(UNITTEST::repeated_sint64_extension, 0));
1395 EXPECT_EQ(207, message.GetExtension(UNITTEST::repeated_fixed32_extension, 0));
1396 EXPECT_EQ(208, message.GetExtension(UNITTEST::repeated_fixed64_extension, 0));
1397 EXPECT_EQ(209,
1398 message.GetExtension(UNITTEST::repeated_sfixed32_extension, 0));
1399 EXPECT_EQ(210,
1400 message.GetExtension(UNITTEST::repeated_sfixed64_extension, 0));
1401 EXPECT_EQ(211, message.GetExtension(UNITTEST::repeated_float_extension, 0));
1402 EXPECT_EQ(212, message.GetExtension(UNITTEST::repeated_double_extension, 0));
1403 EXPECT_TRUE(message.GetExtension(UNITTEST::repeated_bool_extension, 0));
1404 EXPECT_EQ("215",
1405 message.GetExtension(UNITTEST::repeated_string_extension, 0));
1406 EXPECT_EQ("216", message.GetExtension(UNITTEST::repeated_bytes_extension, 0));
1407
1408 EXPECT_EQ(217,
1409 message.GetExtension(UNITTEST::repeatedgroup_extension, 0).a());
1410 EXPECT_EQ(218,
1411 message.GetExtension(UNITTEST::repeated_nested_message_extension, 0)
1412 .bb());
1413 EXPECT_EQ(
1414 219, message.GetExtension(UNITTEST::repeated_foreign_message_extension, 0)
1415 .c());
1416 EXPECT_EQ(
1417 220,
1418 message.GetExtension(UNITTEST::repeated_import_message_extension, 0).d());
1419 EXPECT_EQ(
1420 227,
1421 message.GetExtension(UNITTEST::repeated_lazy_message_extension, 0).bb());
1422
1423 EXPECT_EQ(UNITTEST::TestAllTypes::BAR,
1424 message.GetExtension(UNITTEST::repeated_nested_enum_extension, 0));
1425 EXPECT_EQ(UNITTEST::FOREIGN_BAR,
1426 message.GetExtension(UNITTEST::repeated_foreign_enum_extension, 0));
1427 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR,
1428 message.GetExtension(UNITTEST::repeated_import_enum_extension, 0));
1429
1430 EXPECT_EQ("224",
1431 message.GetExtension(UNITTEST::repeated_string_piece_extension, 0));
1432 EXPECT_EQ("225", message.GetExtension(UNITTEST::repeated_cord_extension, 0));
1433
1434 EXPECT_EQ(301, message.GetExtension(UNITTEST::repeated_int32_extension, 1));
1435 EXPECT_EQ(302, message.GetExtension(UNITTEST::repeated_int64_extension, 1));
1436 EXPECT_EQ(303, message.GetExtension(UNITTEST::repeated_uint32_extension, 1));
1437 EXPECT_EQ(304, message.GetExtension(UNITTEST::repeated_uint64_extension, 1));
1438 EXPECT_EQ(305, message.GetExtension(UNITTEST::repeated_sint32_extension, 1));
1439 EXPECT_EQ(306, message.GetExtension(UNITTEST::repeated_sint64_extension, 1));
1440 EXPECT_EQ(307, message.GetExtension(UNITTEST::repeated_fixed32_extension, 1));
1441 EXPECT_EQ(308, message.GetExtension(UNITTEST::repeated_fixed64_extension, 1));
1442 EXPECT_EQ(309,
1443 message.GetExtension(UNITTEST::repeated_sfixed32_extension, 1));
1444 EXPECT_EQ(310,
1445 message.GetExtension(UNITTEST::repeated_sfixed64_extension, 1));
1446 EXPECT_EQ(311, message.GetExtension(UNITTEST::repeated_float_extension, 1));
1447 EXPECT_EQ(312, message.GetExtension(UNITTEST::repeated_double_extension, 1));
1448 EXPECT_FALSE(message.GetExtension(UNITTEST::repeated_bool_extension, 1));
1449 EXPECT_EQ("315",
1450 message.GetExtension(UNITTEST::repeated_string_extension, 1));
1451 EXPECT_EQ("316", message.GetExtension(UNITTEST::repeated_bytes_extension, 1));
1452
1453 EXPECT_EQ(317,
1454 message.GetExtension(UNITTEST::repeatedgroup_extension, 1).a());
1455 EXPECT_EQ(318,
1456 message.GetExtension(UNITTEST::repeated_nested_message_extension, 1)
1457 .bb());
1458 EXPECT_EQ(
1459 319, message.GetExtension(UNITTEST::repeated_foreign_message_extension, 1)
1460 .c());
1461 EXPECT_EQ(
1462 320,
1463 message.GetExtension(UNITTEST::repeated_import_message_extension, 1).d());
1464 EXPECT_EQ(
1465 327,
1466 message.GetExtension(UNITTEST::repeated_lazy_message_extension, 1).bb());
1467
1468 EXPECT_EQ(UNITTEST::TestAllTypes::BAZ,
1469 message.GetExtension(UNITTEST::repeated_nested_enum_extension, 1));
1470 EXPECT_EQ(UNITTEST::FOREIGN_BAZ,
1471 message.GetExtension(UNITTEST::repeated_foreign_enum_extension, 1));
1472 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAZ,
1473 message.GetExtension(UNITTEST::repeated_import_enum_extension, 1));
1474
1475 EXPECT_EQ("324",
1476 message.GetExtension(UNITTEST::repeated_string_piece_extension, 1));
1477 EXPECT_EQ("325", message.GetExtension(UNITTEST::repeated_cord_extension, 1));
1478
1479 // -----------------------------------------------------------------
1480
1481 EXPECT_TRUE(message.HasExtension(UNITTEST::default_int32_extension));
1482 EXPECT_TRUE(message.HasExtension(UNITTEST::default_int64_extension));
1483 EXPECT_TRUE(message.HasExtension(UNITTEST::default_uint32_extension));
1484 EXPECT_TRUE(message.HasExtension(UNITTEST::default_uint64_extension));
1485 EXPECT_TRUE(message.HasExtension(UNITTEST::default_sint32_extension));
1486 EXPECT_TRUE(message.HasExtension(UNITTEST::default_sint64_extension));
1487 EXPECT_TRUE(message.HasExtension(UNITTEST::default_fixed32_extension));
1488 EXPECT_TRUE(message.HasExtension(UNITTEST::default_fixed64_extension));
1489 EXPECT_TRUE(message.HasExtension(UNITTEST::default_sfixed32_extension));
1490 EXPECT_TRUE(message.HasExtension(UNITTEST::default_sfixed64_extension));
1491 EXPECT_TRUE(message.HasExtension(UNITTEST::default_float_extension));
1492 EXPECT_TRUE(message.HasExtension(UNITTEST::default_double_extension));
1493 EXPECT_TRUE(message.HasExtension(UNITTEST::default_bool_extension));
1494 EXPECT_TRUE(message.HasExtension(UNITTEST::default_string_extension));
1495 EXPECT_TRUE(message.HasExtension(UNITTEST::default_bytes_extension));
1496
1497 EXPECT_TRUE(message.HasExtension(UNITTEST::default_nested_enum_extension));
1498 EXPECT_TRUE(message.HasExtension(UNITTEST::default_foreign_enum_extension));
1499 EXPECT_TRUE(message.HasExtension(UNITTEST::default_import_enum_extension));
1500
1501 EXPECT_TRUE(message.HasExtension(UNITTEST::default_string_piece_extension));
1502 EXPECT_TRUE(message.HasExtension(UNITTEST::default_cord_extension));
1503
1504 EXPECT_EQ(401, message.GetExtension(UNITTEST::default_int32_extension));
1505 EXPECT_EQ(402, message.GetExtension(UNITTEST::default_int64_extension));
1506 EXPECT_EQ(403, message.GetExtension(UNITTEST::default_uint32_extension));
1507 EXPECT_EQ(404, message.GetExtension(UNITTEST::default_uint64_extension));
1508 EXPECT_EQ(405, message.GetExtension(UNITTEST::default_sint32_extension));
1509 EXPECT_EQ(406, message.GetExtension(UNITTEST::default_sint64_extension));
1510 EXPECT_EQ(407, message.GetExtension(UNITTEST::default_fixed32_extension));
1511 EXPECT_EQ(408, message.GetExtension(UNITTEST::default_fixed64_extension));
1512 EXPECT_EQ(409, message.GetExtension(UNITTEST::default_sfixed32_extension));
1513 EXPECT_EQ(410, message.GetExtension(UNITTEST::default_sfixed64_extension));
1514 EXPECT_EQ(411, message.GetExtension(UNITTEST::default_float_extension));
1515 EXPECT_EQ(412, message.GetExtension(UNITTEST::default_double_extension));
1516 EXPECT_FALSE(message.GetExtension(UNITTEST::default_bool_extension));
1517 EXPECT_EQ("415", message.GetExtension(UNITTEST::default_string_extension));
1518 EXPECT_EQ("416", message.GetExtension(UNITTEST::default_bytes_extension));
1519
1520 EXPECT_EQ(UNITTEST::TestAllTypes::FOO,
1521 message.GetExtension(UNITTEST::default_nested_enum_extension));
1522 EXPECT_EQ(UNITTEST::FOREIGN_FOO,
1523 message.GetExtension(UNITTEST::default_foreign_enum_extension));
1524 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_FOO,
1525 message.GetExtension(UNITTEST::default_import_enum_extension));
1526
1527 EXPECT_EQ("424",
1528 message.GetExtension(UNITTEST::default_string_piece_extension));
1529 EXPECT_EQ("425", message.GetExtension(UNITTEST::default_cord_extension));
1530
1531 EXPECT_TRUE(message.HasExtension(UNITTEST::oneof_uint32_extension));
1532 EXPECT_TRUE(
1533 message.GetExtension(UNITTEST::oneof_nested_message_extension).has_bb());
1534 EXPECT_TRUE(message.HasExtension(UNITTEST::oneof_string_extension));
1535 EXPECT_TRUE(message.HasExtension(UNITTEST::oneof_bytes_extension));
1536
1537 EXPECT_EQ(601, message.GetExtension(UNITTEST::oneof_uint32_extension));
1538 EXPECT_EQ(
1539 602, message.GetExtension(UNITTEST::oneof_nested_message_extension).bb());
1540 EXPECT_EQ("603", message.GetExtension(UNITTEST::oneof_string_extension));
1541 EXPECT_EQ("604", message.GetExtension(UNITTEST::oneof_bytes_extension));
1542}
1543
1544// -------------------------------------------------------------------
1545
1546inline void TestUtil::ExpectExtensionsClear(
1547 const UNITTEST::TestAllExtensions& message) {
1548 string serialized;
1549 ASSERT_TRUE(message.SerializeToString(&serialized));
1550 EXPECT_EQ("", serialized);
1551 EXPECT_EQ(0, message.ByteSizeLong());
1552
1553 // has_blah() should initially be false for all optional fields.
1554 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_int32_extension));
1555 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_int64_extension));
1556 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_uint32_extension));
1557 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_uint64_extension));
1558 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_sint32_extension));
1559 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_sint64_extension));
1560 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_fixed32_extension));
1561 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_fixed64_extension));
1562 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_sfixed32_extension));
1563 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_sfixed64_extension));
1564 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_float_extension));
1565 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_double_extension));
1566 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_bool_extension));
1567 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_string_extension));
1568 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_bytes_extension));
1569
1570 EXPECT_FALSE(message.HasExtension(UNITTEST::optionalgroup_extension));
1571 EXPECT_FALSE(
1572 message.HasExtension(UNITTEST::optional_nested_message_extension));
1573 EXPECT_FALSE(
1574 message.HasExtension(UNITTEST::optional_foreign_message_extension));
1575 EXPECT_FALSE(
1576 message.HasExtension(UNITTEST::optional_import_message_extension));
1577 EXPECT_FALSE(
1578 message.HasExtension(UNITTEST::optional_public_import_message_extension));
1579 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_lazy_message_extension));
1580
1581 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_nested_enum_extension));
1582 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_foreign_enum_extension));
1583 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_import_enum_extension));
1584
1585 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_string_piece_extension));
1586 EXPECT_FALSE(message.HasExtension(UNITTEST::optional_cord_extension));
1587
1588 // Optional fields without defaults are set to zero or something like it.
1589 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_int32_extension));
1590 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_int64_extension));
1591 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_uint32_extension));
1592 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_uint64_extension));
1593 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_sint32_extension));
1594 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_sint64_extension));
1595 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_fixed32_extension));
1596 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_fixed64_extension));
1597 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_sfixed32_extension));
1598 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_sfixed64_extension));
1599 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_float_extension));
1600 EXPECT_EQ(0, message.GetExtension(UNITTEST::optional_double_extension));
1601 EXPECT_FALSE(message.GetExtension(UNITTEST::optional_bool_extension));
1602 EXPECT_EQ("", message.GetExtension(UNITTEST::optional_string_extension));
1603 EXPECT_EQ("", message.GetExtension(UNITTEST::optional_bytes_extension));
1604
1605 // Embedded messages should also be clear.
1606 EXPECT_FALSE(message.GetExtension(UNITTEST::optionalgroup_extension).has_a());
1607 EXPECT_FALSE(message.GetExtension(UNITTEST::optional_nested_message_extension)
1608 .has_bb());
1609 EXPECT_FALSE(
1610 message.GetExtension(UNITTEST::optional_foreign_message_extension)
1611 .has_c());
1612 EXPECT_FALSE(message.GetExtension(UNITTEST::optional_import_message_extension)
1613 .has_d());
1614 EXPECT_FALSE(
1615 message.GetExtension(UNITTEST::optional_public_import_message_extension)
1616 .has_e());
1617 EXPECT_FALSE(
1618 message.GetExtension(UNITTEST::optional_lazy_message_extension).has_bb());
1619
1620 EXPECT_EQ(0, message.GetExtension(UNITTEST::optionalgroup_extension).a());
1621 EXPECT_EQ(
1622 0,
1623 message.GetExtension(UNITTEST::optional_nested_message_extension).bb());
1624 EXPECT_EQ(
1625 0,
1626 message.GetExtension(UNITTEST::optional_foreign_message_extension).c());
1627 EXPECT_EQ(
1628 0, message.GetExtension(UNITTEST::optional_import_message_extension).d());
1629 EXPECT_EQ(
1630 0,
1631 message.GetExtension(UNITTEST::optional_public_import_message_extension)
1632 .e());
1633 EXPECT_EQ(
1634 0, message.GetExtension(UNITTEST::optional_lazy_message_extension).bb());
1635
1636 // Enums without defaults are set to the first value in the enum.
1637 EXPECT_EQ(UNITTEST::TestAllTypes::FOO,
1638 message.GetExtension(UNITTEST::optional_nested_enum_extension));
1639 EXPECT_EQ(UNITTEST::FOREIGN_FOO,
1640 message.GetExtension(UNITTEST::optional_foreign_enum_extension));
1641 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_FOO,
1642 message.GetExtension(UNITTEST::optional_import_enum_extension));
1643
1644 EXPECT_EQ("",
1645 message.GetExtension(UNITTEST::optional_string_piece_extension));
1646 EXPECT_EQ("", message.GetExtension(UNITTEST::optional_cord_extension));
1647
1648 // Repeated fields are empty.
1649 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_int32_extension));
1650 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_int64_extension));
1651 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_uint32_extension));
1652 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_uint64_extension));
1653 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_sint32_extension));
1654 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_sint64_extension));
1655 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_fixed32_extension));
1656 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_fixed64_extension));
1657 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_sfixed32_extension));
1658 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_sfixed64_extension));
1659 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_float_extension));
1660 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_double_extension));
1661 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_bool_extension));
1662 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_string_extension));
1663 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_bytes_extension));
1664
1665 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeatedgroup_extension));
1666 EXPECT_EQ(0,
1667 message.ExtensionSize(UNITTEST::repeated_nested_message_extension));
1668 EXPECT_EQ(
1669 0, message.ExtensionSize(UNITTEST::repeated_foreign_message_extension));
1670 EXPECT_EQ(0,
1671 message.ExtensionSize(UNITTEST::repeated_import_message_extension));
1672 EXPECT_EQ(0,
1673 message.ExtensionSize(UNITTEST::repeated_lazy_message_extension));
1674 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_nested_enum_extension));
1675 EXPECT_EQ(0,
1676 message.ExtensionSize(UNITTEST::repeated_foreign_enum_extension));
1677 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_import_enum_extension));
1678
1679 EXPECT_EQ(0,
1680 message.ExtensionSize(UNITTEST::repeated_string_piece_extension));
1681 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::repeated_cord_extension));
1682
1683 // has_blah() should also be false for all default fields.
1684 EXPECT_FALSE(message.HasExtension(UNITTEST::default_int32_extension));
1685 EXPECT_FALSE(message.HasExtension(UNITTEST::default_int64_extension));
1686 EXPECT_FALSE(message.HasExtension(UNITTEST::default_uint32_extension));
1687 EXPECT_FALSE(message.HasExtension(UNITTEST::default_uint64_extension));
1688 EXPECT_FALSE(message.HasExtension(UNITTEST::default_sint32_extension));
1689 EXPECT_FALSE(message.HasExtension(UNITTEST::default_sint64_extension));
1690 EXPECT_FALSE(message.HasExtension(UNITTEST::default_fixed32_extension));
1691 EXPECT_FALSE(message.HasExtension(UNITTEST::default_fixed64_extension));
1692 EXPECT_FALSE(message.HasExtension(UNITTEST::default_sfixed32_extension));
1693 EXPECT_FALSE(message.HasExtension(UNITTEST::default_sfixed64_extension));
1694 EXPECT_FALSE(message.HasExtension(UNITTEST::default_float_extension));
1695 EXPECT_FALSE(message.HasExtension(UNITTEST::default_double_extension));
1696 EXPECT_FALSE(message.HasExtension(UNITTEST::default_bool_extension));
1697 EXPECT_FALSE(message.HasExtension(UNITTEST::default_string_extension));
1698 EXPECT_FALSE(message.HasExtension(UNITTEST::default_bytes_extension));
1699
1700 EXPECT_FALSE(message.HasExtension(UNITTEST::default_nested_enum_extension));
1701 EXPECT_FALSE(message.HasExtension(UNITTEST::default_foreign_enum_extension));
1702 EXPECT_FALSE(message.HasExtension(UNITTEST::default_import_enum_extension));
1703
1704 EXPECT_FALSE(message.HasExtension(UNITTEST::default_string_piece_extension));
1705 EXPECT_FALSE(message.HasExtension(UNITTEST::default_cord_extension));
1706
1707 // Fields with defaults have their default values (duh).
1708 EXPECT_EQ(41, message.GetExtension(UNITTEST::default_int32_extension));
1709 EXPECT_EQ(42, message.GetExtension(UNITTEST::default_int64_extension));
1710 EXPECT_EQ(43, message.GetExtension(UNITTEST::default_uint32_extension));
1711 EXPECT_EQ(44, message.GetExtension(UNITTEST::default_uint64_extension));
1712 EXPECT_EQ(-45, message.GetExtension(UNITTEST::default_sint32_extension));
1713 EXPECT_EQ(46, message.GetExtension(UNITTEST::default_sint64_extension));
1714 EXPECT_EQ(47, message.GetExtension(UNITTEST::default_fixed32_extension));
1715 EXPECT_EQ(48, message.GetExtension(UNITTEST::default_fixed64_extension));
1716 EXPECT_EQ(49, message.GetExtension(UNITTEST::default_sfixed32_extension));
1717 EXPECT_EQ(-50, message.GetExtension(UNITTEST::default_sfixed64_extension));
1718 EXPECT_EQ(51.5, message.GetExtension(UNITTEST::default_float_extension));
1719 EXPECT_EQ(52e3, message.GetExtension(UNITTEST::default_double_extension));
1720 EXPECT_TRUE(message.GetExtension(UNITTEST::default_bool_extension));
1721 EXPECT_EQ("hello", message.GetExtension(UNITTEST::default_string_extension));
1722 EXPECT_EQ("world", message.GetExtension(UNITTEST::default_bytes_extension));
1723
1724 EXPECT_EQ(UNITTEST::TestAllTypes::BAR,
1725 message.GetExtension(UNITTEST::default_nested_enum_extension));
1726 EXPECT_EQ(UNITTEST::FOREIGN_BAR,
1727 message.GetExtension(UNITTEST::default_foreign_enum_extension));
1728 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR,
1729 message.GetExtension(UNITTEST::default_import_enum_extension));
1730
1731 EXPECT_EQ("abc",
1732 message.GetExtension(UNITTEST::default_string_piece_extension));
1733 EXPECT_EQ("123", message.GetExtension(UNITTEST::default_cord_extension));
1734
1735 EXPECT_FALSE(message.HasExtension(UNITTEST::oneof_uint32_extension));
1736 EXPECT_FALSE(
1737 message.GetExtension(UNITTEST::oneof_nested_message_extension).has_bb());
1738 EXPECT_FALSE(message.HasExtension(UNITTEST::oneof_string_extension));
1739 EXPECT_FALSE(message.HasExtension(UNITTEST::oneof_bytes_extension));
1740}
1741
1742// -------------------------------------------------------------------
1743
1744inline void TestUtil::ExpectRepeatedExtensionsModified(
1745 const UNITTEST::TestAllExtensions& message) {
1746 // ModifyRepeatedFields only sets the second repeated element of each
1747 // field. In addition to verifying this, we also verify that the first
1748 // element and size were *not* modified.
1749 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_int32_extension));
1750 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_int64_extension));
1751 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_uint32_extension));
1752 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_uint64_extension));
1753 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sint32_extension));
1754 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sint64_extension));
1755 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_fixed32_extension));
1756 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_fixed64_extension));
1757 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sfixed32_extension));
1758 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sfixed64_extension));
1759 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_float_extension));
1760 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_double_extension));
1761 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_bool_extension));
1762 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_string_extension));
1763 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_bytes_extension));
1764
1765 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeatedgroup_extension));
1766 ASSERT_EQ(2,
1767 message.ExtensionSize(UNITTEST::repeated_nested_message_extension));
1768 ASSERT_EQ(
1769 2, message.ExtensionSize(UNITTEST::repeated_foreign_message_extension));
1770 ASSERT_EQ(2,
1771 message.ExtensionSize(UNITTEST::repeated_import_message_extension));
1772 ASSERT_EQ(2,
1773 message.ExtensionSize(UNITTEST::repeated_lazy_message_extension));
1774 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_nested_enum_extension));
1775 ASSERT_EQ(2,
1776 message.ExtensionSize(UNITTEST::repeated_foreign_enum_extension));
1777 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_import_enum_extension));
1778
1779 ASSERT_EQ(2,
1780 message.ExtensionSize(UNITTEST::repeated_string_piece_extension));
1781 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_cord_extension));
1782
1783 EXPECT_EQ(201, message.GetExtension(UNITTEST::repeated_int32_extension, 0));
1784 EXPECT_EQ(202, message.GetExtension(UNITTEST::repeated_int64_extension, 0));
1785 EXPECT_EQ(203, message.GetExtension(UNITTEST::repeated_uint32_extension, 0));
1786 EXPECT_EQ(204, message.GetExtension(UNITTEST::repeated_uint64_extension, 0));
1787 EXPECT_EQ(205, message.GetExtension(UNITTEST::repeated_sint32_extension, 0));
1788 EXPECT_EQ(206, message.GetExtension(UNITTEST::repeated_sint64_extension, 0));
1789 EXPECT_EQ(207, message.GetExtension(UNITTEST::repeated_fixed32_extension, 0));
1790 EXPECT_EQ(208, message.GetExtension(UNITTEST::repeated_fixed64_extension, 0));
1791 EXPECT_EQ(209,
1792 message.GetExtension(UNITTEST::repeated_sfixed32_extension, 0));
1793 EXPECT_EQ(210,
1794 message.GetExtension(UNITTEST::repeated_sfixed64_extension, 0));
1795 EXPECT_EQ(211, message.GetExtension(UNITTEST::repeated_float_extension, 0));
1796 EXPECT_EQ(212, message.GetExtension(UNITTEST::repeated_double_extension, 0));
1797 EXPECT_TRUE(message.GetExtension(UNITTEST::repeated_bool_extension, 0));
1798 EXPECT_EQ("215",
1799 message.GetExtension(UNITTEST::repeated_string_extension, 0));
1800 EXPECT_EQ("216", message.GetExtension(UNITTEST::repeated_bytes_extension, 0));
1801
1802 EXPECT_EQ(217,
1803 message.GetExtension(UNITTEST::repeatedgroup_extension, 0).a());
1804 EXPECT_EQ(218,
1805 message.GetExtension(UNITTEST::repeated_nested_message_extension, 0)
1806 .bb());
1807 EXPECT_EQ(
1808 219, message.GetExtension(UNITTEST::repeated_foreign_message_extension, 0)
1809 .c());
1810 EXPECT_EQ(
1811 220,
1812 message.GetExtension(UNITTEST::repeated_import_message_extension, 0).d());
1813 EXPECT_EQ(
1814 227,
1815 message.GetExtension(UNITTEST::repeated_lazy_message_extension, 0).bb());
1816
1817 EXPECT_EQ(UNITTEST::TestAllTypes::BAR,
1818 message.GetExtension(UNITTEST::repeated_nested_enum_extension, 0));
1819 EXPECT_EQ(UNITTEST::FOREIGN_BAR,
1820 message.GetExtension(UNITTEST::repeated_foreign_enum_extension, 0));
1821 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR,
1822 message.GetExtension(UNITTEST::repeated_import_enum_extension, 0));
1823
1824 EXPECT_EQ("224",
1825 message.GetExtension(UNITTEST::repeated_string_piece_extension, 0));
1826 EXPECT_EQ("225", message.GetExtension(UNITTEST::repeated_cord_extension, 0));
1827
1828 // Actually verify the second (modified) elements now.
1829 EXPECT_EQ(501, message.GetExtension(UNITTEST::repeated_int32_extension, 1));
1830 EXPECT_EQ(502, message.GetExtension(UNITTEST::repeated_int64_extension, 1));
1831 EXPECT_EQ(503, message.GetExtension(UNITTEST::repeated_uint32_extension, 1));
1832 EXPECT_EQ(504, message.GetExtension(UNITTEST::repeated_uint64_extension, 1));
1833 EXPECT_EQ(505, message.GetExtension(UNITTEST::repeated_sint32_extension, 1));
1834 EXPECT_EQ(506, message.GetExtension(UNITTEST::repeated_sint64_extension, 1));
1835 EXPECT_EQ(507, message.GetExtension(UNITTEST::repeated_fixed32_extension, 1));
1836 EXPECT_EQ(508, message.GetExtension(UNITTEST::repeated_fixed64_extension, 1));
1837 EXPECT_EQ(509,
1838 message.GetExtension(UNITTEST::repeated_sfixed32_extension, 1));
1839 EXPECT_EQ(510,
1840 message.GetExtension(UNITTEST::repeated_sfixed64_extension, 1));
1841 EXPECT_EQ(511, message.GetExtension(UNITTEST::repeated_float_extension, 1));
1842 EXPECT_EQ(512, message.GetExtension(UNITTEST::repeated_double_extension, 1));
1843 EXPECT_TRUE(message.GetExtension(UNITTEST::repeated_bool_extension, 1));
1844 EXPECT_EQ("515",
1845 message.GetExtension(UNITTEST::repeated_string_extension, 1));
1846 EXPECT_EQ("516", message.GetExtension(UNITTEST::repeated_bytes_extension, 1));
1847
1848 EXPECT_EQ(517,
1849 message.GetExtension(UNITTEST::repeatedgroup_extension, 1).a());
1850 EXPECT_EQ(518,
1851 message.GetExtension(UNITTEST::repeated_nested_message_extension, 1)
1852 .bb());
1853 EXPECT_EQ(
1854 519, message.GetExtension(UNITTEST::repeated_foreign_message_extension, 1)
1855 .c());
1856 EXPECT_EQ(
1857 520,
1858 message.GetExtension(UNITTEST::repeated_import_message_extension, 1).d());
1859 EXPECT_EQ(
1860 527,
1861 message.GetExtension(UNITTEST::repeated_lazy_message_extension, 1).bb());
1862
1863 EXPECT_EQ(UNITTEST::TestAllTypes::FOO,
1864 message.GetExtension(UNITTEST::repeated_nested_enum_extension, 1));
1865 EXPECT_EQ(UNITTEST::FOREIGN_FOO,
1866 message.GetExtension(UNITTEST::repeated_foreign_enum_extension, 1));
1867 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_FOO,
1868 message.GetExtension(UNITTEST::repeated_import_enum_extension, 1));
1869
1870 EXPECT_EQ("524",
1871 message.GetExtension(UNITTEST::repeated_string_piece_extension, 1));
1872 EXPECT_EQ("525", message.GetExtension(UNITTEST::repeated_cord_extension, 1));
1873}
1874
1875// -------------------------------------------------------------------
1876
1877inline void TestUtil::SetPackedExtensions(
1878 UNITTEST::TestPackedExtensions* message) {
1879 message->AddExtension(UNITTEST::packed_int32_extension, 601);
1880 message->AddExtension(UNITTEST::packed_int64_extension, 602);
1881 message->AddExtension(UNITTEST::packed_uint32_extension, 603);
1882 message->AddExtension(UNITTEST::packed_uint64_extension, 604);
1883 message->AddExtension(UNITTEST::packed_sint32_extension, 605);
1884 message->AddExtension(UNITTEST::packed_sint64_extension, 606);
1885 message->AddExtension(UNITTEST::packed_fixed32_extension, 607);
1886 message->AddExtension(UNITTEST::packed_fixed64_extension, 608);
1887 message->AddExtension(UNITTEST::packed_sfixed32_extension, 609);
1888 message->AddExtension(UNITTEST::packed_sfixed64_extension, 610);
1889 message->AddExtension(UNITTEST::packed_float_extension, 611);
1890 message->AddExtension(UNITTEST::packed_double_extension, 612);
1891 message->AddExtension(UNITTEST::packed_bool_extension, true);
1892 message->AddExtension(UNITTEST::packed_enum_extension, UNITTEST::FOREIGN_BAR);
1893 // add a second one of each field
1894 message->AddExtension(UNITTEST::packed_int32_extension, 701);
1895 message->AddExtension(UNITTEST::packed_int64_extension, 702);
1896 message->AddExtension(UNITTEST::packed_uint32_extension, 703);
1897 message->AddExtension(UNITTEST::packed_uint64_extension, 704);
1898 message->AddExtension(UNITTEST::packed_sint32_extension, 705);
1899 message->AddExtension(UNITTEST::packed_sint64_extension, 706);
1900 message->AddExtension(UNITTEST::packed_fixed32_extension, 707);
1901 message->AddExtension(UNITTEST::packed_fixed64_extension, 708);
1902 message->AddExtension(UNITTEST::packed_sfixed32_extension, 709);
1903 message->AddExtension(UNITTEST::packed_sfixed64_extension, 710);
1904 message->AddExtension(UNITTEST::packed_float_extension, 711);
1905 message->AddExtension(UNITTEST::packed_double_extension, 712);
1906 message->AddExtension(UNITTEST::packed_bool_extension, false);
1907 message->AddExtension(UNITTEST::packed_enum_extension, UNITTEST::FOREIGN_BAZ);
1908}
1909
1910// -------------------------------------------------------------------
1911
1912inline void TestUtil::ModifyPackedExtensions(
1913 UNITTEST::TestPackedExtensions* message) {
1914 message->SetExtension(UNITTEST::packed_int32_extension, 1, 801);
1915 message->SetExtension(UNITTEST::packed_int64_extension, 1, 802);
1916 message->SetExtension(UNITTEST::packed_uint32_extension, 1, 803);
1917 message->SetExtension(UNITTEST::packed_uint64_extension, 1, 804);
1918 message->SetExtension(UNITTEST::packed_sint32_extension, 1, 805);
1919 message->SetExtension(UNITTEST::packed_sint64_extension, 1, 806);
1920 message->SetExtension(UNITTEST::packed_fixed32_extension, 1, 807);
1921 message->SetExtension(UNITTEST::packed_fixed64_extension, 1, 808);
1922 message->SetExtension(UNITTEST::packed_sfixed32_extension, 1, 809);
1923 message->SetExtension(UNITTEST::packed_sfixed64_extension, 1, 810);
1924 message->SetExtension(UNITTEST::packed_float_extension, 1, 811);
1925 message->SetExtension(UNITTEST::packed_double_extension, 1, 812);
1926 message->SetExtension(UNITTEST::packed_bool_extension, 1, true);
1927 message->SetExtension(UNITTEST::packed_enum_extension, 1,
1928 UNITTEST::FOREIGN_FOO);
1929}
1930
1931// -------------------------------------------------------------------
1932
1933inline void TestUtil::ExpectPackedExtensionsSet(
1934 const UNITTEST::TestPackedExtensions& message) {
1935 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_int32_extension));
1936 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_int64_extension));
1937 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_uint32_extension));
1938 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_uint64_extension));
1939 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_sint32_extension));
1940 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_sint64_extension));
1941 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_fixed32_extension));
1942 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_fixed64_extension));
1943 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_sfixed32_extension));
1944 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_sfixed64_extension));
1945 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_float_extension));
1946 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_double_extension));
1947 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_bool_extension));
1948 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_enum_extension));
1949
1950 EXPECT_EQ(601, message.GetExtension(UNITTEST::packed_int32_extension, 0));
1951 EXPECT_EQ(602, message.GetExtension(UNITTEST::packed_int64_extension, 0));
1952 EXPECT_EQ(603, message.GetExtension(UNITTEST::packed_uint32_extension, 0));
1953 EXPECT_EQ(604, message.GetExtension(UNITTEST::packed_uint64_extension, 0));
1954 EXPECT_EQ(605, message.GetExtension(UNITTEST::packed_sint32_extension, 0));
1955 EXPECT_EQ(606, message.GetExtension(UNITTEST::packed_sint64_extension, 0));
1956 EXPECT_EQ(607, message.GetExtension(UNITTEST::packed_fixed32_extension, 0));
1957 EXPECT_EQ(608, message.GetExtension(UNITTEST::packed_fixed64_extension, 0));
1958 EXPECT_EQ(609, message.GetExtension(UNITTEST::packed_sfixed32_extension, 0));
1959 EXPECT_EQ(610, message.GetExtension(UNITTEST::packed_sfixed64_extension, 0));
1960 EXPECT_EQ(611, message.GetExtension(UNITTEST::packed_float_extension, 0));
1961 EXPECT_EQ(612, message.GetExtension(UNITTEST::packed_double_extension, 0));
1962 EXPECT_TRUE(message.GetExtension(UNITTEST::packed_bool_extension, 0));
1963 EXPECT_EQ(UNITTEST::FOREIGN_BAR,
1964 message.GetExtension(UNITTEST::packed_enum_extension, 0));
1965 EXPECT_EQ(701, message.GetExtension(UNITTEST::packed_int32_extension, 1));
1966 EXPECT_EQ(702, message.GetExtension(UNITTEST::packed_int64_extension, 1));
1967 EXPECT_EQ(703, message.GetExtension(UNITTEST::packed_uint32_extension, 1));
1968 EXPECT_EQ(704, message.GetExtension(UNITTEST::packed_uint64_extension, 1));
1969 EXPECT_EQ(705, message.GetExtension(UNITTEST::packed_sint32_extension, 1));
1970 EXPECT_EQ(706, message.GetExtension(UNITTEST::packed_sint64_extension, 1));
1971 EXPECT_EQ(707, message.GetExtension(UNITTEST::packed_fixed32_extension, 1));
1972 EXPECT_EQ(708, message.GetExtension(UNITTEST::packed_fixed64_extension, 1));
1973 EXPECT_EQ(709, message.GetExtension(UNITTEST::packed_sfixed32_extension, 1));
1974 EXPECT_EQ(710, message.GetExtension(UNITTEST::packed_sfixed64_extension, 1));
1975 EXPECT_EQ(711, message.GetExtension(UNITTEST::packed_float_extension, 1));
1976 EXPECT_EQ(712, message.GetExtension(UNITTEST::packed_double_extension, 1));
1977 EXPECT_FALSE(message.GetExtension(UNITTEST::packed_bool_extension, 1));
1978 EXPECT_EQ(UNITTEST::FOREIGN_BAZ,
1979 message.GetExtension(UNITTEST::packed_enum_extension, 1));
1980}
1981
1982// -------------------------------------------------------------------
1983
1984inline void TestUtil::ExpectPackedExtensionsClear(
1985 const UNITTEST::TestPackedExtensions& message) {
1986 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_int32_extension));
1987 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_int64_extension));
1988 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_uint32_extension));
1989 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_uint64_extension));
1990 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_sint32_extension));
1991 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_sint64_extension));
1992 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_fixed32_extension));
1993 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_fixed64_extension));
1994 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_sfixed32_extension));
1995 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_sfixed64_extension));
1996 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_float_extension));
1997 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_double_extension));
1998 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_bool_extension));
1999 EXPECT_EQ(0, message.ExtensionSize(UNITTEST::packed_enum_extension));
2000}
2001
2002// -------------------------------------------------------------------
2003
2004inline void TestUtil::ExpectPackedExtensionsModified(
2005 const UNITTEST::TestPackedExtensions& message) {
2006 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_int32_extension));
2007 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_int64_extension));
2008 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_uint32_extension));
2009 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_uint64_extension));
2010 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_sint32_extension));
2011 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_sint64_extension));
2012 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_fixed32_extension));
2013 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_fixed64_extension));
2014 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_sfixed32_extension));
2015 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_sfixed64_extension));
2016 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_float_extension));
2017 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_double_extension));
2018 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_bool_extension));
2019 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::packed_enum_extension));
2020 EXPECT_EQ(601, message.GetExtension(UNITTEST::packed_int32_extension, 0));
2021 EXPECT_EQ(602, message.GetExtension(UNITTEST::packed_int64_extension, 0));
2022 EXPECT_EQ(603, message.GetExtension(UNITTEST::packed_uint32_extension, 0));
2023 EXPECT_EQ(604, message.GetExtension(UNITTEST::packed_uint64_extension, 0));
2024 EXPECT_EQ(605, message.GetExtension(UNITTEST::packed_sint32_extension, 0));
2025 EXPECT_EQ(606, message.GetExtension(UNITTEST::packed_sint64_extension, 0));
2026 EXPECT_EQ(607, message.GetExtension(UNITTEST::packed_fixed32_extension, 0));
2027 EXPECT_EQ(608, message.GetExtension(UNITTEST::packed_fixed64_extension, 0));
2028 EXPECT_EQ(609, message.GetExtension(UNITTEST::packed_sfixed32_extension, 0));
2029 EXPECT_EQ(610, message.GetExtension(UNITTEST::packed_sfixed64_extension, 0));
2030 EXPECT_EQ(611, message.GetExtension(UNITTEST::packed_float_extension, 0));
2031 EXPECT_EQ(612, message.GetExtension(UNITTEST::packed_double_extension, 0));
2032 EXPECT_TRUE(message.GetExtension(UNITTEST::packed_bool_extension, 0));
2033 EXPECT_EQ(UNITTEST::FOREIGN_BAR,
2034 message.GetExtension(UNITTEST::packed_enum_extension, 0));
2035
2036 // Actually verify the second (modified) elements now.
2037 EXPECT_EQ(801, message.GetExtension(UNITTEST::packed_int32_extension, 1));
2038 EXPECT_EQ(802, message.GetExtension(UNITTEST::packed_int64_extension, 1));
2039 EXPECT_EQ(803, message.GetExtension(UNITTEST::packed_uint32_extension, 1));
2040 EXPECT_EQ(804, message.GetExtension(UNITTEST::packed_uint64_extension, 1));
2041 EXPECT_EQ(805, message.GetExtension(UNITTEST::packed_sint32_extension, 1));
2042 EXPECT_EQ(806, message.GetExtension(UNITTEST::packed_sint64_extension, 1));
2043 EXPECT_EQ(807, message.GetExtension(UNITTEST::packed_fixed32_extension, 1));
2044 EXPECT_EQ(808, message.GetExtension(UNITTEST::packed_fixed64_extension, 1));
2045 EXPECT_EQ(809, message.GetExtension(UNITTEST::packed_sfixed32_extension, 1));
2046 EXPECT_EQ(810, message.GetExtension(UNITTEST::packed_sfixed64_extension, 1));
2047 EXPECT_EQ(811, message.GetExtension(UNITTEST::packed_float_extension, 1));
2048 EXPECT_EQ(812, message.GetExtension(UNITTEST::packed_double_extension, 1));
2049 EXPECT_TRUE(message.GetExtension(UNITTEST::packed_bool_extension, 1));
2050 EXPECT_EQ(UNITTEST::FOREIGN_FOO,
2051 message.GetExtension(UNITTEST::packed_enum_extension, 1));
2052}
2053
2054// -------------------------------------------------------------------
2055
2056inline void TestUtil::ExpectUnpackedExtensionsSet(
2057 const UNITTEST::TestUnpackedExtensions& message) {
2058 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_int32_extension));
2059 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_int64_extension));
2060 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_uint32_extension));
2061 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_uint64_extension));
2062 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_sint32_extension));
2063 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_sint64_extension));
2064 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_fixed32_extension));
2065 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_fixed64_extension));
2066 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_sfixed32_extension));
2067 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_sfixed64_extension));
2068 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_float_extension));
2069 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_double_extension));
2070 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_bool_extension));
2071 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::unpacked_enum_extension));
2072
2073 EXPECT_EQ(601, message.GetExtension(UNITTEST::unpacked_int32_extension, 0));
2074 EXPECT_EQ(602, message.GetExtension(UNITTEST::unpacked_int64_extension, 0));
2075 EXPECT_EQ(603, message.GetExtension(UNITTEST::unpacked_uint32_extension, 0));
2076 EXPECT_EQ(604, message.GetExtension(UNITTEST::unpacked_uint64_extension, 0));
2077 EXPECT_EQ(605, message.GetExtension(UNITTEST::unpacked_sint32_extension, 0));
2078 EXPECT_EQ(606, message.GetExtension(UNITTEST::unpacked_sint64_extension, 0));
2079 EXPECT_EQ(607, message.GetExtension(UNITTEST::unpacked_fixed32_extension, 0));
2080 EXPECT_EQ(608, message.GetExtension(UNITTEST::unpacked_fixed64_extension, 0));
2081 EXPECT_EQ(609,
2082 message.GetExtension(UNITTEST::unpacked_sfixed32_extension, 0));
2083 EXPECT_EQ(610,
2084 message.GetExtension(UNITTEST::unpacked_sfixed64_extension, 0));
2085 EXPECT_EQ(611, message.GetExtension(UNITTEST::unpacked_float_extension, 0));
2086 EXPECT_EQ(612, message.GetExtension(UNITTEST::unpacked_double_extension, 0));
2087 EXPECT_EQ(true, message.GetExtension(UNITTEST::unpacked_bool_extension, 0));
2088 EXPECT_EQ(UNITTEST::FOREIGN_BAR,
2089 message.GetExtension(UNITTEST::unpacked_enum_extension, 0));
2090 EXPECT_EQ(701, message.GetExtension(UNITTEST::unpacked_int32_extension, 1));
2091 EXPECT_EQ(702, message.GetExtension(UNITTEST::unpacked_int64_extension, 1));
2092 EXPECT_EQ(703, message.GetExtension(UNITTEST::unpacked_uint32_extension, 1));
2093 EXPECT_EQ(704, message.GetExtension(UNITTEST::unpacked_uint64_extension, 1));
2094 EXPECT_EQ(705, message.GetExtension(UNITTEST::unpacked_sint32_extension, 1));
2095 EXPECT_EQ(706, message.GetExtension(UNITTEST::unpacked_sint64_extension, 1));
2096 EXPECT_EQ(707, message.GetExtension(UNITTEST::unpacked_fixed32_extension, 1));
2097 EXPECT_EQ(708, message.GetExtension(UNITTEST::unpacked_fixed64_extension, 1));
2098 EXPECT_EQ(709,
2099 message.GetExtension(UNITTEST::unpacked_sfixed32_extension, 1));
2100 EXPECT_EQ(710,
2101 message.GetExtension(UNITTEST::unpacked_sfixed64_extension, 1));
2102 EXPECT_EQ(711, message.GetExtension(UNITTEST::unpacked_float_extension, 1));
2103 EXPECT_EQ(712, message.GetExtension(UNITTEST::unpacked_double_extension, 1));
2104 EXPECT_EQ(false, message.GetExtension(UNITTEST::unpacked_bool_extension, 1));
2105 EXPECT_EQ(UNITTEST::FOREIGN_BAZ,
2106 message.GetExtension(UNITTEST::unpacked_enum_extension, 1));
2107}
2108
2109// -------------------------------------------------------------------
2110
2111inline void TestUtil::ExpectLastRepeatedsRemoved(
2112 const UNITTEST::TestAllTypes& message) {
2113 ASSERT_EQ(1, message.repeated_int32_size());
2114 ASSERT_EQ(1, message.repeated_int64_size());
2115 ASSERT_EQ(1, message.repeated_uint32_size());
2116 ASSERT_EQ(1, message.repeated_uint64_size());
2117 ASSERT_EQ(1, message.repeated_sint32_size());
2118 ASSERT_EQ(1, message.repeated_sint64_size());
2119 ASSERT_EQ(1, message.repeated_fixed32_size());
2120 ASSERT_EQ(1, message.repeated_fixed64_size());
2121 ASSERT_EQ(1, message.repeated_sfixed32_size());
2122 ASSERT_EQ(1, message.repeated_sfixed64_size());
2123 ASSERT_EQ(1, message.repeated_float_size());
2124 ASSERT_EQ(1, message.repeated_double_size());
2125 ASSERT_EQ(1, message.repeated_bool_size());
2126 ASSERT_EQ(1, message.repeated_string_size());
2127 ASSERT_EQ(1, message.repeated_bytes_size());
2128
2129 ASSERT_EQ(1, message.repeatedgroup_size());
2130 ASSERT_EQ(1, message.repeated_nested_message_size());
2131 ASSERT_EQ(1, message.repeated_foreign_message_size());
2132 ASSERT_EQ(1, message.repeated_import_message_size());
2133 ASSERT_EQ(1, message.repeated_import_message_size());
2134 ASSERT_EQ(1, message.repeated_nested_enum_size());
2135 ASSERT_EQ(1, message.repeated_foreign_enum_size());
2136 ASSERT_EQ(1, message.repeated_import_enum_size());
2137
2138#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
2139 ASSERT_EQ(1, message.repeated_string_piece_size());
2140 ASSERT_EQ(1, message.repeated_cord_size());
2141#endif
2142
2143 // Test that the remaining element is the correct one.
2144 EXPECT_EQ(201, message.repeated_int32(0));
2145 EXPECT_EQ(202, message.repeated_int64(0));
2146 EXPECT_EQ(203, message.repeated_uint32(0));
2147 EXPECT_EQ(204, message.repeated_uint64(0));
2148 EXPECT_EQ(205, message.repeated_sint32(0));
2149 EXPECT_EQ(206, message.repeated_sint64(0));
2150 EXPECT_EQ(207, message.repeated_fixed32(0));
2151 EXPECT_EQ(208, message.repeated_fixed64(0));
2152 EXPECT_EQ(209, message.repeated_sfixed32(0));
2153 EXPECT_EQ(210, message.repeated_sfixed64(0));
2154 EXPECT_EQ(211, message.repeated_float(0));
2155 EXPECT_EQ(212, message.repeated_double(0));
2156 EXPECT_TRUE(message.repeated_bool(0));
2157 EXPECT_EQ("215", message.repeated_string(0));
2158 EXPECT_EQ("216", message.repeated_bytes(0));
2159
2160 EXPECT_EQ(217, message.repeatedgroup(0).a());
2161 EXPECT_EQ(218, message.repeated_nested_message(0).bb());
2162 EXPECT_EQ(219, message.repeated_foreign_message(0).c());
2163 EXPECT_EQ(220, message.repeated_import_message(0).d());
2164 EXPECT_EQ(220, message.repeated_import_message(0).d());
2165
2166 EXPECT_EQ(UNITTEST::TestAllTypes::BAR, message.repeated_nested_enum(0));
2167 EXPECT_EQ(UNITTEST::FOREIGN_BAR, message.repeated_foreign_enum(0));
2168 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR, message.repeated_import_enum(0));
2169}
2170
2171inline void TestUtil::ExpectLastRepeatedExtensionsRemoved(
2172 const UNITTEST::TestAllExtensions& message) {
2173 // Test that one element was removed.
2174 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_int32_extension));
2175 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_int64_extension));
2176 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_uint32_extension));
2177 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_uint64_extension));
2178 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_sint32_extension));
2179 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_sint64_extension));
2180 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_fixed32_extension));
2181 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_fixed64_extension));
2182 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_sfixed32_extension));
2183 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_sfixed64_extension));
2184 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_float_extension));
2185 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_double_extension));
2186 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_bool_extension));
2187 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_string_extension));
2188 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_bytes_extension));
2189
2190 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeatedgroup_extension));
2191 ASSERT_EQ(1,
2192 message.ExtensionSize(UNITTEST::repeated_nested_message_extension));
2193 ASSERT_EQ(
2194 1, message.ExtensionSize(UNITTEST::repeated_foreign_message_extension));
2195 ASSERT_EQ(1,
2196 message.ExtensionSize(UNITTEST::repeated_import_message_extension));
2197 ASSERT_EQ(1,
2198 message.ExtensionSize(UNITTEST::repeated_lazy_message_extension));
2199 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_nested_enum_extension));
2200 ASSERT_EQ(1,
2201 message.ExtensionSize(UNITTEST::repeated_foreign_enum_extension));
2202 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_import_enum_extension));
2203
2204 ASSERT_EQ(1,
2205 message.ExtensionSize(UNITTEST::repeated_string_piece_extension));
2206 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeated_cord_extension));
2207
2208 // Test that the remaining element is the correct one.
2209 EXPECT_EQ(201, message.GetExtension(UNITTEST::repeated_int32_extension, 0));
2210 EXPECT_EQ(202, message.GetExtension(UNITTEST::repeated_int64_extension, 0));
2211 EXPECT_EQ(203, message.GetExtension(UNITTEST::repeated_uint32_extension, 0));
2212 EXPECT_EQ(204, message.GetExtension(UNITTEST::repeated_uint64_extension, 0));
2213 EXPECT_EQ(205, message.GetExtension(UNITTEST::repeated_sint32_extension, 0));
2214 EXPECT_EQ(206, message.GetExtension(UNITTEST::repeated_sint64_extension, 0));
2215 EXPECT_EQ(207, message.GetExtension(UNITTEST::repeated_fixed32_extension, 0));
2216 EXPECT_EQ(208, message.GetExtension(UNITTEST::repeated_fixed64_extension, 0));
2217 EXPECT_EQ(209,
2218 message.GetExtension(UNITTEST::repeated_sfixed32_extension, 0));
2219 EXPECT_EQ(210,
2220 message.GetExtension(UNITTEST::repeated_sfixed64_extension, 0));
2221 EXPECT_EQ(211, message.GetExtension(UNITTEST::repeated_float_extension, 0));
2222 EXPECT_EQ(212, message.GetExtension(UNITTEST::repeated_double_extension, 0));
2223 EXPECT_TRUE(message.GetExtension(UNITTEST::repeated_bool_extension, 0));
2224 EXPECT_EQ("215",
2225 message.GetExtension(UNITTEST::repeated_string_extension, 0));
2226 EXPECT_EQ("216", message.GetExtension(UNITTEST::repeated_bytes_extension, 0));
2227
2228 EXPECT_EQ(217,
2229 message.GetExtension(UNITTEST::repeatedgroup_extension, 0).a());
2230 EXPECT_EQ(218,
2231 message.GetExtension(UNITTEST::repeated_nested_message_extension, 0)
2232 .bb());
2233 EXPECT_EQ(
2234 219, message.GetExtension(UNITTEST::repeated_foreign_message_extension, 0)
2235 .c());
2236 EXPECT_EQ(
2237 220,
2238 message.GetExtension(UNITTEST::repeated_import_message_extension, 0).d());
2239 EXPECT_EQ(
2240 227,
2241 message.GetExtension(UNITTEST::repeated_lazy_message_extension, 0).bb());
2242
2243 EXPECT_EQ(UNITTEST::TestAllTypes::BAR,
2244 message.GetExtension(UNITTEST::repeated_nested_enum_extension, 0));
2245 EXPECT_EQ(UNITTEST::FOREIGN_BAR,
2246 message.GetExtension(UNITTEST::repeated_foreign_enum_extension, 0));
2247 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR,
2248 message.GetExtension(UNITTEST::repeated_import_enum_extension, 0));
2249
2250 EXPECT_EQ("224",
2251 message.GetExtension(UNITTEST::repeated_string_piece_extension, 0));
2252 EXPECT_EQ("225", message.GetExtension(UNITTEST::repeated_cord_extension, 0));
2253}
2254
2255inline void TestUtil::ExpectLastRepeatedsReleased(
2256 const UNITTEST::TestAllTypes& message) {
2257 ASSERT_EQ(1, message.repeatedgroup_size());
2258 ASSERT_EQ(1, message.repeated_nested_message_size());
2259 ASSERT_EQ(1, message.repeated_foreign_message_size());
2260 ASSERT_EQ(1, message.repeated_import_message_size());
2261 ASSERT_EQ(1, message.repeated_import_message_size());
2262
2263 EXPECT_EQ(217, message.repeatedgroup(0).a());
2264 EXPECT_EQ(218, message.repeated_nested_message(0).bb());
2265 EXPECT_EQ(219, message.repeated_foreign_message(0).c());
2266 EXPECT_EQ(220, message.repeated_import_message(0).d());
2267 EXPECT_EQ(220, message.repeated_import_message(0).d());
2268}
2269
2270inline void TestUtil::ExpectLastRepeatedExtensionsReleased(
2271 const UNITTEST::TestAllExtensions& message) {
2272 ASSERT_EQ(1, message.ExtensionSize(UNITTEST::repeatedgroup_extension));
2273 ASSERT_EQ(1,
2274 message.ExtensionSize(UNITTEST::repeated_nested_message_extension));
2275 ASSERT_EQ(
2276 1, message.ExtensionSize(UNITTEST::repeated_foreign_message_extension));
2277 ASSERT_EQ(1,
2278 message.ExtensionSize(UNITTEST::repeated_import_message_extension));
2279 ASSERT_EQ(1,
2280 message.ExtensionSize(UNITTEST::repeated_lazy_message_extension));
2281
2282 EXPECT_EQ(217,
2283 message.GetExtension(UNITTEST::repeatedgroup_extension, 0).a());
2284 EXPECT_EQ(218,
2285 message.GetExtension(UNITTEST::repeated_nested_message_extension, 0)
2286 .bb());
2287 EXPECT_EQ(
2288 219, message.GetExtension(UNITTEST::repeated_foreign_message_extension, 0)
2289 .c());
2290 EXPECT_EQ(
2291 220,
2292 message.GetExtension(UNITTEST::repeated_import_message_extension, 0).d());
2293 EXPECT_EQ(
2294 227,
2295 message.GetExtension(UNITTEST::repeated_lazy_message_extension, 0).bb());
2296}
2297
2298inline void TestUtil::ExpectRepeatedsSwapped(
2299 const UNITTEST::TestAllTypes& message) {
2300 ASSERT_EQ(2, message.repeated_int32_size());
2301 ASSERT_EQ(2, message.repeated_int64_size());
2302 ASSERT_EQ(2, message.repeated_uint32_size());
2303 ASSERT_EQ(2, message.repeated_uint64_size());
2304 ASSERT_EQ(2, message.repeated_sint32_size());
2305 ASSERT_EQ(2, message.repeated_sint64_size());
2306 ASSERT_EQ(2, message.repeated_fixed32_size());
2307 ASSERT_EQ(2, message.repeated_fixed64_size());
2308 ASSERT_EQ(2, message.repeated_sfixed32_size());
2309 ASSERT_EQ(2, message.repeated_sfixed64_size());
2310 ASSERT_EQ(2, message.repeated_float_size());
2311 ASSERT_EQ(2, message.repeated_double_size());
2312 ASSERT_EQ(2, message.repeated_bool_size());
2313 ASSERT_EQ(2, message.repeated_string_size());
2314 ASSERT_EQ(2, message.repeated_bytes_size());
2315
2316 ASSERT_EQ(2, message.repeatedgroup_size());
2317 ASSERT_EQ(2, message.repeated_nested_message_size());
2318 ASSERT_EQ(2, message.repeated_foreign_message_size());
2319 ASSERT_EQ(2, message.repeated_import_message_size());
2320 ASSERT_EQ(2, message.repeated_import_message_size());
2321 ASSERT_EQ(2, message.repeated_nested_enum_size());
2322 ASSERT_EQ(2, message.repeated_foreign_enum_size());
2323 ASSERT_EQ(2, message.repeated_import_enum_size());
2324
2325#ifndef PROTOBUF_TEST_NO_DESCRIPTORS
2326 ASSERT_EQ(2, message.repeated_string_piece_size());
2327 ASSERT_EQ(2, message.repeated_cord_size());
2328#endif
2329
2330 // Test that the first element and second element are flipped.
2331 EXPECT_EQ(201, message.repeated_int32(1));
2332 EXPECT_EQ(202, message.repeated_int64(1));
2333 EXPECT_EQ(203, message.repeated_uint32(1));
2334 EXPECT_EQ(204, message.repeated_uint64(1));
2335 EXPECT_EQ(205, message.repeated_sint32(1));
2336 EXPECT_EQ(206, message.repeated_sint64(1));
2337 EXPECT_EQ(207, message.repeated_fixed32(1));
2338 EXPECT_EQ(208, message.repeated_fixed64(1));
2339 EXPECT_EQ(209, message.repeated_sfixed32(1));
2340 EXPECT_EQ(210, message.repeated_sfixed64(1));
2341 EXPECT_EQ(211, message.repeated_float(1));
2342 EXPECT_EQ(212, message.repeated_double(1));
2343 EXPECT_TRUE(message.repeated_bool(1));
2344 EXPECT_EQ("215", message.repeated_string(1));
2345 EXPECT_EQ("216", message.repeated_bytes(1));
2346
2347 EXPECT_EQ(217, message.repeatedgroup(1).a());
2348 EXPECT_EQ(218, message.repeated_nested_message(1).bb());
2349 EXPECT_EQ(219, message.repeated_foreign_message(1).c());
2350 EXPECT_EQ(220, message.repeated_import_message(1).d());
2351 EXPECT_EQ(220, message.repeated_import_message(1).d());
2352
2353 EXPECT_EQ(UNITTEST::TestAllTypes::BAR, message.repeated_nested_enum(1));
2354 EXPECT_EQ(UNITTEST::FOREIGN_BAR, message.repeated_foreign_enum(1));
2355 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR, message.repeated_import_enum(1));
2356
2357 EXPECT_EQ(301, message.repeated_int32(0));
2358 EXPECT_EQ(302, message.repeated_int64(0));
2359 EXPECT_EQ(303, message.repeated_uint32(0));
2360 EXPECT_EQ(304, message.repeated_uint64(0));
2361 EXPECT_EQ(305, message.repeated_sint32(0));
2362 EXPECT_EQ(306, message.repeated_sint64(0));
2363 EXPECT_EQ(307, message.repeated_fixed32(0));
2364 EXPECT_EQ(308, message.repeated_fixed64(0));
2365 EXPECT_EQ(309, message.repeated_sfixed32(0));
2366 EXPECT_EQ(310, message.repeated_sfixed64(0));
2367 EXPECT_EQ(311, message.repeated_float(0));
2368 EXPECT_EQ(312, message.repeated_double(0));
2369 EXPECT_FALSE(message.repeated_bool(0));
2370 EXPECT_EQ("315", message.repeated_string(0));
2371 EXPECT_EQ("316", message.repeated_bytes(0));
2372
2373 EXPECT_EQ(317, message.repeatedgroup(0).a());
2374 EXPECT_EQ(318, message.repeated_nested_message(0).bb());
2375 EXPECT_EQ(319, message.repeated_foreign_message(0).c());
2376 EXPECT_EQ(320, message.repeated_import_message(0).d());
2377 EXPECT_EQ(320, message.repeated_import_message(0).d());
2378
2379 EXPECT_EQ(UNITTEST::TestAllTypes::BAZ, message.repeated_nested_enum(0));
2380 EXPECT_EQ(UNITTEST::FOREIGN_BAZ, message.repeated_foreign_enum(0));
2381 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAZ, message.repeated_import_enum(0));
2382}
2383
2384inline void TestUtil::ExpectRepeatedExtensionsSwapped(
2385 const UNITTEST::TestAllExtensions& message) {
2386 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_int32_extension));
2387 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_int64_extension));
2388 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_uint32_extension));
2389 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_uint64_extension));
2390 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sint32_extension));
2391 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sint64_extension));
2392 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_fixed32_extension));
2393 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_fixed64_extension));
2394 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sfixed32_extension));
2395 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_sfixed64_extension));
2396 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_float_extension));
2397 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_double_extension));
2398 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_bool_extension));
2399 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_string_extension));
2400 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_bytes_extension));
2401
2402 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeatedgroup_extension));
2403 ASSERT_EQ(2,
2404 message.ExtensionSize(UNITTEST::repeated_nested_message_extension));
2405 ASSERT_EQ(
2406 2, message.ExtensionSize(UNITTEST::repeated_foreign_message_extension));
2407 ASSERT_EQ(2,
2408 message.ExtensionSize(UNITTEST::repeated_import_message_extension));
2409 ASSERT_EQ(2,
2410 message.ExtensionSize(UNITTEST::repeated_lazy_message_extension));
2411 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_nested_enum_extension));
2412 ASSERT_EQ(2,
2413 message.ExtensionSize(UNITTEST::repeated_foreign_enum_extension));
2414 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_import_enum_extension));
2415
2416 ASSERT_EQ(2,
2417 message.ExtensionSize(UNITTEST::repeated_string_piece_extension));
2418 ASSERT_EQ(2, message.ExtensionSize(UNITTEST::repeated_cord_extension));
2419
2420 EXPECT_EQ(201, message.GetExtension(UNITTEST::repeated_int32_extension, 1));
2421 EXPECT_EQ(202, message.GetExtension(UNITTEST::repeated_int64_extension, 1));
2422 EXPECT_EQ(203, message.GetExtension(UNITTEST::repeated_uint32_extension, 1));
2423 EXPECT_EQ(204, message.GetExtension(UNITTEST::repeated_uint64_extension, 1));
2424 EXPECT_EQ(205, message.GetExtension(UNITTEST::repeated_sint32_extension, 1));
2425 EXPECT_EQ(206, message.GetExtension(UNITTEST::repeated_sint64_extension, 1));
2426 EXPECT_EQ(207, message.GetExtension(UNITTEST::repeated_fixed32_extension, 1));
2427 EXPECT_EQ(208, message.GetExtension(UNITTEST::repeated_fixed64_extension, 1));
2428 EXPECT_EQ(209,
2429 message.GetExtension(UNITTEST::repeated_sfixed32_extension, 1));
2430 EXPECT_EQ(210,
2431 message.GetExtension(UNITTEST::repeated_sfixed64_extension, 1));
2432 EXPECT_EQ(211, message.GetExtension(UNITTEST::repeated_float_extension, 1));
2433 EXPECT_EQ(212, message.GetExtension(UNITTEST::repeated_double_extension, 1));
2434 EXPECT_TRUE(message.GetExtension(UNITTEST::repeated_bool_extension, 1));
2435 EXPECT_EQ("215",
2436 message.GetExtension(UNITTEST::repeated_string_extension, 1));
2437 EXPECT_EQ("216", message.GetExtension(UNITTEST::repeated_bytes_extension, 1));
2438
2439 EXPECT_EQ(217,
2440 message.GetExtension(UNITTEST::repeatedgroup_extension, 1).a());
2441 EXPECT_EQ(218,
2442 message.GetExtension(UNITTEST::repeated_nested_message_extension, 1)
2443 .bb());
2444 EXPECT_EQ(
2445 219, message.GetExtension(UNITTEST::repeated_foreign_message_extension, 1)
2446 .c());
2447 EXPECT_EQ(
2448 220,
2449 message.GetExtension(UNITTEST::repeated_import_message_extension, 1).d());
2450 EXPECT_EQ(
2451 227,
2452 message.GetExtension(UNITTEST::repeated_lazy_message_extension, 1).bb());
2453
2454 EXPECT_EQ(UNITTEST::TestAllTypes::BAR,
2455 message.GetExtension(UNITTEST::repeated_nested_enum_extension, 1));
2456 EXPECT_EQ(UNITTEST::FOREIGN_BAR,
2457 message.GetExtension(UNITTEST::repeated_foreign_enum_extension, 1));
2458 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAR,
2459 message.GetExtension(UNITTEST::repeated_import_enum_extension, 1));
2460
2461 EXPECT_EQ("224",
2462 message.GetExtension(UNITTEST::repeated_string_piece_extension, 1));
2463 EXPECT_EQ("225", message.GetExtension(UNITTEST::repeated_cord_extension, 1));
2464
2465 EXPECT_EQ(301, message.GetExtension(UNITTEST::repeated_int32_extension, 0));
2466 EXPECT_EQ(302, message.GetExtension(UNITTEST::repeated_int64_extension, 0));
2467 EXPECT_EQ(303, message.GetExtension(UNITTEST::repeated_uint32_extension, 0));
2468 EXPECT_EQ(304, message.GetExtension(UNITTEST::repeated_uint64_extension, 0));
2469 EXPECT_EQ(305, message.GetExtension(UNITTEST::repeated_sint32_extension, 0));
2470 EXPECT_EQ(306, message.GetExtension(UNITTEST::repeated_sint64_extension, 0));
2471 EXPECT_EQ(307, message.GetExtension(UNITTEST::repeated_fixed32_extension, 0));
2472 EXPECT_EQ(308, message.GetExtension(UNITTEST::repeated_fixed64_extension, 0));
2473 EXPECT_EQ(309,
2474 message.GetExtension(UNITTEST::repeated_sfixed32_extension, 0));
2475 EXPECT_EQ(310,
2476 message.GetExtension(UNITTEST::repeated_sfixed64_extension, 0));
2477 EXPECT_EQ(311, message.GetExtension(UNITTEST::repeated_float_extension, 0));
2478 EXPECT_EQ(312, message.GetExtension(UNITTEST::repeated_double_extension, 0));
2479 EXPECT_FALSE(message.GetExtension(UNITTEST::repeated_bool_extension, 0));
2480 EXPECT_EQ("315",
2481 message.GetExtension(UNITTEST::repeated_string_extension, 0));
2482 EXPECT_EQ("316", message.GetExtension(UNITTEST::repeated_bytes_extension, 0));
2483
2484 EXPECT_EQ(317,
2485 message.GetExtension(UNITTEST::repeatedgroup_extension, 0).a());
2486 EXPECT_EQ(318,
2487 message.GetExtension(UNITTEST::repeated_nested_message_extension, 0)
2488 .bb());
2489 EXPECT_EQ(
2490 319, message.GetExtension(UNITTEST::repeated_foreign_message_extension, 0)
2491 .c());
2492 EXPECT_EQ(
2493 320,
2494 message.GetExtension(UNITTEST::repeated_import_message_extension, 0).d());
2495 EXPECT_EQ(
2496 327,
2497 message.GetExtension(UNITTEST::repeated_lazy_message_extension, 0).bb());
2498
2499 EXPECT_EQ(UNITTEST::TestAllTypes::BAZ,
2500 message.GetExtension(UNITTEST::repeated_nested_enum_extension, 0));
2501 EXPECT_EQ(UNITTEST::FOREIGN_BAZ,
2502 message.GetExtension(UNITTEST::repeated_foreign_enum_extension, 0));
2503 EXPECT_EQ(UNITTEST_IMPORT::IMPORT_BAZ,
2504 message.GetExtension(UNITTEST::repeated_import_enum_extension, 0));
2505
2506 EXPECT_EQ("324",
2507 message.GetExtension(UNITTEST::repeated_string_piece_extension, 0));
2508 EXPECT_EQ("325", message.GetExtension(UNITTEST::repeated_cord_extension, 0));
2509}
2510
2511inline void TestUtil::SetOneof1(UNITTEST::TestOneof2* message) {
2512 message->mutable_foo_lazy_message()->set_qux_int(100);
2513 message->set_bar_string("101");
2514 message->set_baz_int(102);
2515 message->set_baz_string("103");
2516}
2517
2518inline void TestUtil::SetOneof2(UNITTEST::TestOneof2* message) {
2519 message->set_foo_int(200);
2520 message->set_bar_enum(UNITTEST::TestOneof2::BAZ);
2521 message->set_baz_int(202);
2522 message->set_baz_string("203");
2523}
2524
2525inline void TestUtil::ExpectOneofSet1(const UNITTEST::TestOneof2& message) {
2526 ExpectAtMostOneFieldSetInOneof(message);
2527
2528 EXPECT_TRUE(message.has_foo_lazy_message());
2529 EXPECT_TRUE(message.foo_lazy_message().has_qux_int());
2530
2531 EXPECT_TRUE(message.has_bar_string());
2532 EXPECT_TRUE(message.has_baz_int());
2533 EXPECT_TRUE(message.has_baz_string());
2534
2535 ASSERT_EQ(0, message.foo_lazy_message().corge_int_size());
2536
2537 EXPECT_EQ(100, message.foo_lazy_message().qux_int());
2538 EXPECT_EQ("101", message.bar_string());
2539 EXPECT_EQ(102, message.baz_int());
2540 EXPECT_EQ("103", message.baz_string());
2541}
2542
2543inline void TestUtil::ExpectOneofSet2(const UNITTEST::TestOneof2& message) {
2544 ExpectAtMostOneFieldSetInOneof(message);
2545
2546 EXPECT_TRUE(message.has_foo_int());
2547 EXPECT_TRUE(message.has_bar_enum());
2548 EXPECT_TRUE(message.has_baz_int());
2549 EXPECT_TRUE(message.has_baz_string());
2550
2551 EXPECT_EQ(200, message.foo_int());
2552 EXPECT_EQ(UNITTEST::TestOneof2::BAZ, message.bar_enum());
2553 EXPECT_EQ(202, message.baz_int());
2554 EXPECT_EQ("203", message.baz_string());
2555}
2556
2557inline void TestUtil::ExpectOneofClear(const UNITTEST::TestOneof2& message) {
2558 EXPECT_FALSE(message.has_foo_int());
2559 EXPECT_FALSE(message.has_foo_string());
2560 EXPECT_FALSE(message.has_foo_bytes());
2561 EXPECT_FALSE(message.has_foo_enum());
2562 EXPECT_FALSE(message.has_foo_message());
2563 EXPECT_FALSE(message.has_foogroup());
2564 EXPECT_FALSE(message.has_foo_lazy_message());
2565
2566 EXPECT_FALSE(message.has_bar_int());
2567 EXPECT_FALSE(message.has_bar_string());
2568 EXPECT_FALSE(message.has_bar_bytes());
2569 EXPECT_FALSE(message.has_bar_enum());
2570
2571 EXPECT_FALSE(message.has_baz_int());
2572 EXPECT_FALSE(message.has_baz_string());
2573
2574 EXPECT_EQ(UNITTEST::TestOneof2::FOO_NOT_SET, message.foo_case());
2575 EXPECT_EQ(UNITTEST::TestOneof2::BAR_NOT_SET, message.bar_case());
2576}
2577
2578inline void TestUtil::ExpectAtMostOneFieldSetInOneof(
2579 const UNITTEST::TestOneof2& message) {
2580 int count = 0;
2581 if (message.has_foo_int()) count++;
2582 if (message.has_foo_string()) count++;
2583 if (message.has_foo_bytes()) count++;
2584 if (message.has_foo_enum()) count++;
2585 if (message.has_foo_message()) count++;
2586 if (message.has_foogroup()) count++;
2587 if (message.has_foo_lazy_message()) count++;
2588 EXPECT_LE(count, 1);
2589 count = 0;
2590 if (message.has_bar_int()) count++;
2591 if (message.has_bar_string()) count++;
2592 if (message.has_bar_bytes()) count++;
2593 if (message.has_bar_enum()) count++;
2594 EXPECT_TRUE(count == 0 || count == 1);
2595}
2596
2597// ===================================================================
2598
2599} // namespace protobuf
2600} // namespace google