1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Protocol Buffers - Google's data interchange format 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Copyright 2008 Google Inc. All rights reserved. 3afb4b72037e3f13db208590fc782c4bc8e27f862Jeff Davidson// https://developers.google.com/protocol-buffers/ 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Redistribution and use in source and binary forms, with or without 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// modification, are permitted provided that the following conditions are 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// met: 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions of source code must retain the above copyright 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// notice, this list of conditions and the following disclaimer. 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Redistributions in binary form must reproduce the above 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// copyright notice, this list of conditions and the following disclaimer 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// in the documentation and/or other materials provided with the 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// distribution. 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// * Neither the name of Google Inc. nor the names of its 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// contributors may be used to endorse or promote products derived from 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// this software without specific prior written permission. 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Author: kenton@google.com (Kenton Varda) 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <string> 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <iostream> 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 36b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/stubs/logging.h> 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/stubs/common.h> 38b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/arena_test_util.h> 39b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/map_lite_unittest.pb.h> 40b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/map_lite_test_util.h> 41a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/test_util_lite.h> 42a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/unittest_lite.pb.h> 43a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/io/coded_stream.h> 44a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/io/zero_copy_stream_impl_lite.h> 45a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/wire_format_lite.h> 46a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#include <google/protobuf/wire_format_lite_inl.h> 47b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#include <google/protobuf/stubs/strutil.h> 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleusing namespace std; 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 51a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonnamespace { 52a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson// Helper methods to test parsing merge behavior. 53a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid ExpectMessageMerged(const google::protobuf::unittest::TestAllTypesLite& message) { 54a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK(message.optional_int32() == 3); 55a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK(message.optional_int64() == 2); 56a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK(message.optional_string() == "hello"); 57a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 58a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 59a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid AssignParsingMergeMessages( 60a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestAllTypesLite* msg1, 61a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestAllTypesLite* msg2, 62a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestAllTypesLite* msg3) { 63a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg1->set_optional_int32(1); 64a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg2->set_optional_int64(2); 65a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg3->set_optional_int32(3); 66a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg3->set_optional_string("hello"); 67a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 68a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 69a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid SetAllTypesInEmptyMessageUnknownFields( 70a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestEmptyMessageLite* empty_message) { 71a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestAllTypesLite message; 72a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectClear(message); 73a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::SetAllFields(&message); 74a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson string data = message.SerializeAsString(); 75a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message->ParseFromString(data); 76a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 77a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 78a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonvoid SetSomeTypesInEmptyMessageUnknownFields( 79a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestEmptyMessageLite* empty_message) { 80a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestAllTypesLite message; 81a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectClear(message); 82a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.set_optional_int32(101); 83a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.set_optional_int64(102); 84a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.set_optional_uint32(103); 85a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.set_optional_uint64(104); 86a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson string data = message.SerializeAsString(); 87a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message->ParseFromString(data); 88a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} 89a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 90a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson} // namespace 91a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 92b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define EXPECT_TRUE GOOGLE_CHECK 93b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define ASSERT_TRUE GOOGLE_CHECK 94b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define EXPECT_FALSE(COND) GOOGLE_CHECK(!(COND)) 95b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define EXPECT_EQ GOOGLE_CHECK_EQ 96b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer#define ASSERT_EQ GOOGLE_CHECK_EQ 97b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleint main(int argc, char* argv[]) { 99a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson string data, data2, packed_data; 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville { 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protobuf_unittest::TestAllTypesLite message, message2, message3; 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectClear(message); 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::SetAllFields(&message); 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2.CopyFrom(message); 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville data = message.SerializeAsString(); 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message3.ParseFromString(data); 108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectAllFieldsSet(message); 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectAllFieldsSet(message2); 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectAllFieldsSet(message3); 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ModifyRepeatedFields(&message); 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectRepeatedFieldsModified(message); 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message.Clear(); 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectClear(message); 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville { 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protobuf_unittest::TestAllExtensionsLite message, message2, message3; 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectExtensionsClear(message); 120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::SetAllExtensions(&message); 121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2.CopyFrom(message); 122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string extensions_data = message.SerializeAsString(); 123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message3.ParseFromString(extensions_data); 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectAllExtensionsSet(message); 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectAllExtensionsSet(message2); 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectAllExtensionsSet(message3); 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ModifyRepeatedExtensions(&message); 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectRepeatedExtensionsModified(message); 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message.Clear(); 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectExtensionsClear(message); 131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville { 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protobuf_unittest::TestPackedTypesLite message, message2, message3; 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedClear(message); 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::SetPackedFields(&message); 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2.CopyFrom(message); 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville packed_data = message.SerializeAsString(); 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message3.ParseFromString(packed_data); 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedFieldsSet(message); 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedFieldsSet(message2); 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedFieldsSet(message3); 143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ModifyPackedFields(&message); 144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedFieldsModified(message); 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message.Clear(); 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedClear(message); 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville { 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville protobuf_unittest::TestPackedExtensionsLite message, message2, message3; 151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedExtensionsClear(message); 152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::SetPackedExtensions(&message); 153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message2.CopyFrom(message); 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville string packed_extensions_data = message.SerializeAsString(); 155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville GOOGLE_CHECK(packed_extensions_data == packed_data); 156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message3.ParseFromString(packed_extensions_data); 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedExtensionsSet(message); 158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedExtensionsSet(message2); 159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedExtensionsSet(message3); 160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ModifyPackedExtensions(&message); 161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedExtensionsModified(message); 162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville message.Clear(); 163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville google::protobuf::TestUtilLite::ExpectPackedExtensionsClear(message); 164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville } 165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 166a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 167a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Test that if an optional or required message/group field appears multiple 168a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // times in the input, they need to be merged. 169a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestParsingMergeLite::RepeatedFieldsGenerator generator; 170a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestAllTypesLite* msg1; 171a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestAllTypesLite* msg2; 172a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestAllTypesLite* msg3; 173a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 174a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#define ASSIGN_REPEATED_FIELD(FIELD) \ 175a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg1 = generator.add_##FIELD(); \ 176a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg2 = generator.add_##FIELD(); \ 177a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg3 = generator.add_##FIELD(); \ 178a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson AssignParsingMergeMessages(msg1, msg2, msg3) 179a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 180a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ASSIGN_REPEATED_FIELD(field1); 181a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ASSIGN_REPEATED_FIELD(field2); 182a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ASSIGN_REPEATED_FIELD(field3); 183a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ASSIGN_REPEATED_FIELD(ext1); 184a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ASSIGN_REPEATED_FIELD(ext2); 185a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 186a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#undef ASSIGN_REPEATED_FIELD 187a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#define ASSIGN_REPEATED_GROUP(FIELD) \ 188a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg1 = generator.add_##FIELD()->mutable_field1(); \ 189a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg2 = generator.add_##FIELD()->mutable_field1(); \ 190a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson msg3 = generator.add_##FIELD()->mutable_field1(); \ 191a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson AssignParsingMergeMessages(msg1, msg2, msg3) 192a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 193a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ASSIGN_REPEATED_GROUP(group1); 194a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ASSIGN_REPEATED_GROUP(group2); 195a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 196a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson#undef ASSIGN_REPEATED_GROUP 197a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 198a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson string buffer; 199a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson generator.SerializeToString(&buffer); 200a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestParsingMergeLite parsing_merge; 201a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson parsing_merge.ParseFromString(buffer); 202a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 203a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Required and optional fields should be merged. 204a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ExpectMessageMerged(parsing_merge.required_all_types()); 205a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ExpectMessageMerged(parsing_merge.optional_all_types()); 206a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ExpectMessageMerged( 207a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson parsing_merge.optionalgroup().optional_group_all_types()); 208a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson ExpectMessageMerged(parsing_merge.GetExtension( 209a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestParsingMergeLite::optional_ext)); 210a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 211a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Repeated fields should not be merged. 212a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK(parsing_merge.repeated_all_types_size() == 3); 213a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK(parsing_merge.repeatedgroup_size() == 3); 214a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK(parsing_merge.ExtensionSize( 215a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::unittest::TestParsingMergeLite::repeated_ext) == 3); 216a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 217a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 218a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Test unknown fields support for lite messages. 219a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 220a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestAllTypesLite message, message2; 221a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestEmptyMessageLite empty_message; 222a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectClear(message); 223a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::SetAllFields(&message); 224a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message.SerializeAsString(); 225a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message.ParseFromString(data); 226a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data.clear(); 227a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = empty_message.SerializeAsString(); 228a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message2.ParseFromString(data); 229a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message2.SerializeAsString(); 230a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectAllFieldsSet(message2); 231a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.Clear(); 232a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectClear(message); 233a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 234a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 235a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 236a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestAllExtensionsLite message, message2; 237a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestEmptyMessageLite empty_message; 238a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectExtensionsClear(message); 239a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::SetAllExtensions(&message); 240a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message.SerializeAsString(); 241a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message.ParseFromString(data); 242a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data.clear(); 243a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = empty_message.SerializeAsString(); 244a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message2.ParseFromString(data); 245a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message2.SerializeAsString(); 246a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectAllExtensionsSet(message2); 247a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.Clear(); 248a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectExtensionsClear(message); 249a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 250a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 251a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 252a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestPackedTypesLite message, message2; 253a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestEmptyMessageLite empty_message; 254a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectPackedClear(message); 255a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::SetPackedFields(&message); 256a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message.SerializeAsString(); 257a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message.ParseFromString(data); 258a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data.clear(); 259a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = empty_message.SerializeAsString(); 260a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message2.ParseFromString(data); 261a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message2.SerializeAsString(); 262a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectPackedFieldsSet(message2); 263a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.Clear(); 264a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectPackedClear(message); 265a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 266a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 267a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 268a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestPackedExtensionsLite message, message2; 269a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestEmptyMessageLite empty_message; 270a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectPackedExtensionsClear(message); 271a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::SetPackedExtensions(&message); 272a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message.SerializeAsString(); 273a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message.ParseFromString(data); 274a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data.clear(); 275a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = empty_message.SerializeAsString(); 276a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message2.ParseFromString(data); 277a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message2.SerializeAsString(); 278a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectPackedExtensionsSet(message2); 279a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.Clear(); 280a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::TestUtilLite::ExpectPackedExtensionsClear(message); 281a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 282a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 283a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 284a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Test Unknown fields swap 285a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestEmptyMessageLite empty_message, empty_message2; 286a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetAllTypesInEmptyMessageUnknownFields(&empty_message); 287a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetSomeTypesInEmptyMessageUnknownFields(&empty_message2); 288a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = empty_message.SerializeAsString(); 289a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data2 = empty_message2.SerializeAsString(); 290a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message.Swap(&empty_message2); 291a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK_EQ(data, empty_message2.SerializeAsString()); 292a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK_EQ(data2, empty_message.SerializeAsString()); 293a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 294a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 295a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 296a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Test unknown fields swap with self 297a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestEmptyMessageLite empty_message; 298a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetAllTypesInEmptyMessageUnknownFields(&empty_message); 299a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = empty_message.SerializeAsString(); 300a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message.Swap(&empty_message); 301a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK_EQ(data, empty_message.SerializeAsString()); 302a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 303a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 304a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 305a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Test MergeFrom with unknown fields 306a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestAllTypesLite message, message2; 307a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestEmptyMessageLite empty_message, empty_message2; 308a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.set_optional_int32(101); 309a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.add_repeated_int32(201); 310a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.set_optional_nested_enum(google::protobuf::unittest::TestAllTypesLite::BAZ); 311a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message2.set_optional_int64(102); 312a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message2.add_repeated_int64(202); 313a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message2.set_optional_foreign_enum(google::protobuf::unittest::FOREIGN_LITE_BAZ); 314a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 315a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message.SerializeAsString(); 316a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message.ParseFromString(data); 317a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message2.SerializeAsString(); 318a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message2.ParseFromString(data); 319a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.MergeFrom(message2); 320a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message.MergeFrom(empty_message2); 321a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 322a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = empty_message.SerializeAsString(); 323a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message2.ParseFromString(data); 324a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // We do not compare the serialized output of a normal message and a lite 325a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // message because the order of fields do not match. We convert lite message 326a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // back into normal message, then compare. 327a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK_EQ(message.SerializeAsString(), message2.SerializeAsString()); 328a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 329a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 330a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 331a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Test unknown enum value 332a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestAllTypesLite message; 333a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson string buffer; 334a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 335a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::io::StringOutputStream output_stream(&buffer); 336a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::io::CodedOutputStream coded_output(&output_stream); 337a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::internal::WireFormatLite::WriteTag( 338a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestAllTypesLite::kOptionalNestedEnumFieldNumber, 339a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT, &coded_output); 340a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson coded_output.WriteVarint32(10); 341a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::internal::WireFormatLite::WriteTag( 342a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestAllTypesLite::kRepeatedNestedEnumFieldNumber, 343a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT, &coded_output); 344a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson coded_output.WriteVarint32(20); 345a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 346a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson message.ParseFromString(buffer); 347a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson data = message.SerializeAsString(); 348a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK_EQ(data, buffer); 349a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 350a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 351a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson { 352a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Test Clear with unknown fields 353a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson protobuf_unittest::TestEmptyMessageLite empty_message; 354a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson SetAllTypesInEmptyMessageUnknownFields(&empty_message); 355a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson empty_message.Clear(); 356a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson GOOGLE_CHECK_EQ(0, empty_message.unknown_fields().size()); 357a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson } 358a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 359b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Tests for map lite ============================================= 360b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 361b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 362b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Accessors 363b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 364b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 365b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message); 366b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message); 367b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 368b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ModifyMapFields(&message); 369b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsModified(message); 370b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 371b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 372b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 373b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // SetMapFieldsInitialized 374b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 375b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 376b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFieldsInitialized(&message); 377b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSetInitialized(message); 378b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 379b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 380b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 381b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Clear 382b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 383b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 384b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message); 385b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message.Clear(); 386b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectClear(message); 387b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 388b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 389b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 390b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // ClearMessageMap 391b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMessageMapLite message; 392b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 393b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Creates a TestAllTypes with default value 394b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::TestUtilLite::ExpectClear( 395b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*message.mutable_map_int32_message())[0]); 396b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 397b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 398b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 399b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // CopyFrom 400b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message1, message2; 401b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 402b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message1); 403b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message2.CopyFrom(message1); 404b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); 405b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 406b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Copying from self should be a no-op. 407b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message2.CopyFrom(message2); 408b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); 409b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 410b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 411b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 412b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // CopyFromMessageMap 413b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMessageMapLite message1, message2; 414b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 415b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*message1.mutable_map_int32_message())[0].add_repeated_int32(100); 416b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*message2.mutable_map_int32_message())[0].add_repeated_int32(101); 417b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 418b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message1.CopyFrom(message2); 419b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 420b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Checks repeated field is overwritten. 421b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message1.map_int32_message().at(0).repeated_int32_size()); 422b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(101, message1.map_int32_message().at(0).repeated_int32(0)); 423b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 424b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 425b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 426b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // SwapWithEmpty 427b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message1, message2; 428b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 429b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message1); 430b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message1); 431b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectClear(message2); 432b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 433b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message1.Swap(&message2); 434b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); 435b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectClear(message1); 436b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 437b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 438b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 439b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // SwapWithSelf 440b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 441b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 442b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message); 443b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message); 444b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 445b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message.Swap(&message); 446b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message); 447b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 448b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 449b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 450b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // SwapWithOther 451b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message1, message2; 452b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 453b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message1); 454b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message2); 455b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ModifyMapFields(&message2); 456b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 457b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message1.Swap(&message2); 458b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsModified(message1); 459b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); 460b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 461b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 462b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 463b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // CopyConstructor 464b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message1; 465b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message1); 466b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 467b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message2(message1); 468b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); 469b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 470b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 471b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 472b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // CopyAssignmentOperator 473b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message1; 474b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message1); 475b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 476b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message2; 477b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message2 = message1; 478b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); 479b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 480b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Make sure that self-assignment does something sane. 481b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message2.operator=(message2); 482b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); 483b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 484b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 485b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 486b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // NonEmptyMergeFrom 487b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message1, message2; 488b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 489b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message1); 490b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 491b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // This field will test merging into an empty spot. 492b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*message2.mutable_map_int32_int32())[1] = 1; 493b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message1.mutable_map_int32_int32()->erase(1); 494b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 495b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // This tests overwriting. 496b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*message2.mutable_map_int32_double())[1] = 1; 497b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*message1.mutable_map_int32_double())[1] = 2; 498b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 499b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message1.MergeFrom(message2); 500b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message1); 501b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 502b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 503b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 504b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // MergeFromMessageMap 505b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMessageMapLite message1, message2; 506b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 507b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*message1.mutable_map_int32_message())[0].add_repeated_int32(100); 508b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*message2.mutable_map_int32_message())[0].add_repeated_int32(101); 509b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 510b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message1.MergeFrom(message2); 511b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 512b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Checks repeated field is overwritten. 513b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message1.map_int32_message().at(0).repeated_int32_size()); 514b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(101, message1.map_int32_message().at(0).repeated_int32(0)); 515b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 516b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 517b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 518b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Test the generated SerializeWithCachedSizesToArray() 519b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message1, message2; 520b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data; 521b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message1); 522b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer int size = message1.ByteSize(); 523b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer data.resize(size); 524b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ::google::protobuf::uint8* start = reinterpret_cast< ::google::protobuf::uint8*>(::google::protobuf::string_as_array(&data)); 525b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ::google::protobuf::uint8* end = message1.SerializeWithCachedSizesToArray(start); 526b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(size, end - start); 527b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(message2.ParseFromString(data)); 528b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); 529b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 530b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 531b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 532b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Test the generated SerializeWithCachedSizes() 533b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message1, message2; 534b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::SetMapFields(&message1); 535b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer int size = message1.ByteSize(); 536b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data; 537b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer data.resize(size); 538b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 539b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Allow the output stream to buffer only one byte at a time. 540b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::io::ArrayOutputStream array_stream( 541b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer ::google::protobuf::string_as_array(&data), size, 1); 542b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::io::CodedOutputStream output_stream(&array_stream); 543b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer message1.SerializeWithCachedSizes(&output_stream); 544b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_FALSE(output_stream.HadError()); 545b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(size, output_stream.ByteCount()); 546b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 547b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(message2.ParseFromString(data)); 548b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer google::protobuf::MapLiteTestUtil::ExpectMapFieldsSet(message2); 549b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 550b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 551b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 552b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 553b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Proto2UnknownEnum 554b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestEnumMapPlusExtraLite from; 555b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*from.mutable_known_map_field())[0] = 556b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::E_PROTO2_MAP_ENUM_FOO_LITE; 557b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*from.mutable_unknown_map_field())[0] = 558b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::E_PROTO2_MAP_ENUM_EXTRA_LITE; 559b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data; 560b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer from.SerializeToString(&data); 561b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 562b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestEnumMapLite to; 563b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(to.ParseFromString(data)); 564b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(0, to.unknown_map_field().size()); 565b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_FALSE(to.mutable_unknown_fields()->empty()); 566b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, to.known_map_field().size()); 567b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(protobuf_unittest::PROTO2_MAP_ENUM_FOO_LITE, 568b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer to.known_map_field().at(0)); 569b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 570b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer data.clear(); 571b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer from.Clear(); 572b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer to.SerializeToString(&data); 573b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(from.ParseFromString(data)); 574b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, from.known_map_field().size()); 575b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(protobuf_unittest::E_PROTO2_MAP_ENUM_FOO_LITE, 576b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer from.known_map_field().at(0)); 577b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, from.unknown_map_field().size()); 578b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(protobuf_unittest::E_PROTO2_MAP_ENUM_EXTRA_LITE, 579b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer from.unknown_map_field().at(0)); 580b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 581b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 582b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 583b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // StandardWireFormat 584b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 585b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data = "\x0A\x04\x08\x01\x10\x01"; 586b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 587b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(message.ParseFromString(data)); 588b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().size()); 589b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().at(1)); 590b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 591b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 592b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 593b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // UnorderedWireFormat 594b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 595b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 596b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // put value before key in wire format 597b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data = "\x0A\x04\x10\x01\x08\x02"; 598b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 599b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(message.ParseFromString(data)); 600b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().size()); 601b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().at(2)); 602b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 603b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 604b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 605b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // DuplicatedKeyWireFormat 606b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 607b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 608b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Two key fields in wire format 609b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data = "\x0A\x06\x08\x01\x08\x02\x10\x01"; 610b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 611b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(message.ParseFromString(data)); 612b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().size()); 613b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().at(2)); 614b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 615b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 616b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 617b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // DuplicatedValueWireFormat 618b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 619b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 620b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Two value fields in wire format 621b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data = "\x0A\x06\x08\x01\x10\x01\x10\x02"; 622b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 623b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(message.ParseFromString(data)); 624b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().size()); 625b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(2, message.map_int32_int32().at(1)); 626b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 627b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 628b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 629b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // MissedKeyWireFormat 630b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 631b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 632b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // No key field in wire format 633b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data = "\x0A\x02\x10\x01"; 634b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 635b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(message.ParseFromString(data)); 636b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().size()); 637b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().at(0)); 638b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 639b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 640b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 641b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // MissedValueWireFormat 642b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 643b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 644b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // No value field in wire format 645b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data = "\x0A\x02\x08\x01"; 646b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 647b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(message.ParseFromString(data)); 648b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().size()); 649b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(0, message.map_int32_int32().at(1)); 650b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 651b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 652b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 653b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // UnknownFieldWireFormat 654b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 655b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 656b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Unknown field in wire format 657b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data = "\x0A\x06\x08\x02\x10\x03\x18\x01"; 658b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 659b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(message.ParseFromString(data)); 660b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(1, message.map_int32_int32().size()); 661b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(3, message.map_int32_int32().at(2)); 662b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 663b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 664b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 665b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // CorruptedWireFormat 666b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestMapLite message; 667b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 668b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // corrupted data in wire format 669b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string data = "\x0A\x06\x08\x02\x11\x03"; 670b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 671b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_FALSE(message.ParseFromString(data)); 672b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 673b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 674b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 675b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // IsInitialized 676b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::TestRequiredMessageMapLite map_message; 677b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 678b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Add an uninitialized message. 679b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*map_message.mutable_map_field())[0]; 680b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_FALSE(map_message.IsInitialized()); 681b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 682b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Initialize uninitialized message 683b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*map_message.mutable_map_field())[0].set_a(0); 684b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*map_message.mutable_map_field())[0].set_b(0); 685b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer (*map_message.mutable_map_field())[0].set_c(0); 686b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(map_message.IsInitialized()); 687b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 688b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 689b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer { 690b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Check that adding more values to enum does not corrupt message 691b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // when passed through an old client. 692b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::V2MessageLite v2_message; 693b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer v2_message.set_int_field(800); 694b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // Set enum field to the value not understood by the old client. 695b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer v2_message.set_enum_field(protobuf_unittest::V2_SECOND); 696b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string v2_bytes = v2_message.SerializeAsString(); 697b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 698b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::V1MessageLite v1_message; 699b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer v1_message.ParseFromString(v2_bytes); 700b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_TRUE(v1_message.IsInitialized()); 701b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(v1_message.int_field(), v2_message.int_field()); 702b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // V1 client does not understand V2_SECOND value, so it discards it and 703b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // uses default value instead. 704b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(v1_message.enum_field(), protobuf_unittest::V1_FIRST); 705b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 706b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer // However, when re-serialized, it should preserve enum value. 707b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer string v1_bytes = v1_message.SerializeAsString(); 708b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 709b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer protobuf_unittest::V2MessageLite same_v2_message; 710b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer same_v2_message.ParseFromString(v1_bytes); 711b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 712b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(v2_message.int_field(), same_v2_message.int_field()); 713b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer EXPECT_EQ(v2_message.enum_field(), same_v2_message.enum_field()); 714b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer } 715b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer 716b0575e93e4c39dec69365b850088a1eb7f82c5b3Tamas Berghammer std::cout << "PASS" << std::endl; 717fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville return 0; 718fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 719