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// Based on original Protocol Buffers design by 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Sanjay Ghemawat, Jeff Dean, and others. 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#ifndef GOOGLE_PROTOBUF_TEST_UTIL_H__ 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#define GOOGLE_PROTOBUF_TEST_UTIL_H__ 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <stack> 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <string> 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/message.h> 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include <google/protobuf/unittest.pb.h> 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace google { 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace protobuf { 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 46a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidsonnamespace unittest = ::protobuf_unittest; 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace unittest_import = protobuf_unittest_import; 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass TestUtil { 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public: 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Set every field in the message to a unique value. 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void SetAllFields(unittest::TestAllTypes* message); 53a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void SetOptionalFields(unittest::TestAllTypes* message); 54a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void AddRepeatedFields1(unittest::TestAllTypes* message); 55a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void AddRepeatedFields2(unittest::TestAllTypes* message); 56a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void SetDefaultFields(unittest::TestAllTypes* message); 57a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void SetOneofFields(unittest::TestAllTypes* message); 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void SetAllExtensions(unittest::TestAllExtensions* message); 59a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void SetOneofFields(unittest::TestAllExtensions* message); 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void SetAllFieldsAndExtensions(unittest::TestFieldOrderings* message); 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void SetPackedFields(unittest::TestPackedTypes* message); 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void SetPackedExtensions(unittest::TestPackedExtensions* message); 63d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville static void SetUnpackedFields(unittest::TestUnpackedTypes* message); 64a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void SetOneof1(unittest::TestOneof2* message); 65a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void SetOneof2(unittest::TestOneof2* message); 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Use the repeated versions of the set_*() accessors to modify all the 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // repeated fields of the messsage (which should already have been 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // initialized with Set*Fields()). Set*Fields() itself only tests 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // the add_*() accessors. 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ModifyRepeatedFields(unittest::TestAllTypes* message); 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ModifyRepeatedExtensions(unittest::TestAllExtensions* message); 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ModifyPackedFields(unittest::TestPackedTypes* message); 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ModifyPackedExtensions(unittest::TestPackedExtensions* message); 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Check that all fields have the values that they should have after 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Set*Fields() is called. 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectAllFieldsSet(const unittest::TestAllTypes& message); 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectAllExtensionsSet( 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestAllExtensions& message); 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectPackedFieldsSet(const unittest::TestPackedTypes& message); 82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectPackedExtensionsSet( 83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestPackedExtensions& message); 84d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville static void ExpectUnpackedFieldsSet( 85d0332953cda33fb4f8e24ebff9c49159b69c43d6Wink Saville const unittest::TestUnpackedTypes& message); 86a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void ExpectUnpackedExtensionsSet( 87a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const unittest::TestUnpackedExtensions& message); 88a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void ExpectOneofSet1(const unittest::TestOneof2& message); 89a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void ExpectOneofSet2(const unittest::TestOneof2& message); 90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Expect that the message is modified as would be expected from 92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Modify*Fields(). 93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectRepeatedFieldsModified( 94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestAllTypes& message); 95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectRepeatedExtensionsModified( 96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestAllExtensions& message); 97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectPackedFieldsModified( 98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestPackedTypes& message); 99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectPackedExtensionsModified( 100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestPackedExtensions& message); 101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Check that all fields have their default values. 103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectClear(const unittest::TestAllTypes& message); 104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectExtensionsClear(const unittest::TestAllExtensions& message); 105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectPackedClear(const unittest::TestPackedTypes& message); 106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectPackedExtensionsClear( 107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestPackedExtensions& message); 108a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void ExpectOneofClear(const unittest::TestOneof2& message); 109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Check that the passed-in serialization is the canonical serialization we 111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // expect for a TestFieldOrderings message filled in by 112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // SetAllFieldsAndExtensions(). 113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectAllFieldsAndExtensionsInOrder(const string& serialized); 114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Check that all repeated fields have had their last elements removed. 116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectLastRepeatedsRemoved( 117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestAllTypes& message); 118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectLastRepeatedExtensionsRemoved( 119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestAllExtensions& message); 120a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void ExpectLastRepeatedsReleased( 121a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const unittest::TestAllTypes& message); 122a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void ExpectLastRepeatedExtensionsReleased( 123a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const unittest::TestAllExtensions& message); 124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Check that all repeated fields have had their first and last elements 126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // swapped. 127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectRepeatedsSwapped(const unittest::TestAllTypes& message); 128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville static void ExpectRepeatedExtensionsSwapped( 129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const unittest::TestAllExtensions& message); 130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 131a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void ExpectAtMostOneFieldSetInOneof( 132a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const unittest::TestOneof2 &message); 133a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // Like above, but use the reflection interface. 135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville class ReflectionTester { 136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville public: 137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // base_descriptor must be a descriptor for TestAllTypes or 138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // TestAllExtensions. In the former case, ReflectionTester fetches from 139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // it the FieldDescriptors needed to use the reflection interface. In 140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // the latter case, ReflectionTester searches for extension fields in 141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // its file. 142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville explicit ReflectionTester(const Descriptor* base_descriptor); 143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void SetAllFieldsViaReflection(Message* message); 145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void ModifyRepeatedFieldsViaReflection(Message* message); 146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void ExpectAllFieldsSetViaReflection(const Message& message); 147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void ExpectClearViaReflection(const Message& message); 148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void SetPackedFieldsViaReflection(Message* message); 150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void ModifyPackedFieldsViaReflection(Message* message); 151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void ExpectPackedFieldsSetViaReflection(const Message& message); 152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void ExpectPackedClearViaReflection(const Message& message); 153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void RemoveLastRepeatedsViaReflection(Message* message); 155a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson void ReleaseLastRepeatedsViaReflection( 156a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Message* message, bool expect_extensions_notnull); 157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void SwapRepeatedsViaReflection(Message* message); 158a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson void SetAllocatedOptionalMessageFieldsToNullViaReflection( 159a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Message* message); 160a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void SetAllocatedOptionalMessageFieldsToMessageViaReflection( 161a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Message* from_message, 162a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Message* to_message); 163a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 164a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson enum MessageReleaseState { 165a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson IS_NULL, 166a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson CAN_BE_NULL, 167a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson NOT_NULL, 168a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson }; 169a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson void ExpectMessagesReleasedViaReflection( 170a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson Message* message, MessageReleaseState expected_release_state); 171a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson 172a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // Set and check functions for TestOneof2 messages. No need to construct 173a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson // the ReflectionTester by TestAllTypes nor TestAllExtensions. 174a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void SetOneofViaReflection(Message* message); 175a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson static void ExpectOneofSetViaReflection(const Message& message); 176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville private: 178fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const FieldDescriptor* F(const string& name); 179fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 180fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const Descriptor* base_descriptor_; 181fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 182fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const FieldDescriptor* group_a_; 183fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const FieldDescriptor* repeated_group_a_; 184fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const FieldDescriptor* nested_b_; 185fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const FieldDescriptor* foreign_c_; 186fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const FieldDescriptor* import_d_; 187a3b2a6da25a76f17c73d31def3952feb0fd2296eJeff Davidson const FieldDescriptor* import_e_; 188fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 189fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const EnumValueDescriptor* nested_foo_; 190fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const EnumValueDescriptor* nested_bar_; 191fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const EnumValueDescriptor* nested_baz_; 192fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const EnumValueDescriptor* foreign_foo_; 193fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const EnumValueDescriptor* foreign_bar_; 194fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const EnumValueDescriptor* foreign_baz_; 195fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const EnumValueDescriptor* import_foo_; 196fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const EnumValueDescriptor* import_bar_; 197fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville const EnumValueDescriptor* import_baz_; 198fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 199fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // We have to split this into three function otherwise it creates a stack 200fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // frame so large that it triggers a warning. 201fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void ExpectAllFieldsSetViaReflection1(const Message& message); 202fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void ExpectAllFieldsSetViaReflection2(const Message& message); 203fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville void ExpectAllFieldsSetViaReflection3(const Message& message); 204fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 205fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(ReflectionTester); 206fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville }; 207fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 208fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville private: 209fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TestUtil); 210fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}; 211fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 212fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace protobuf 213fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 214fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace google 215fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif // GOOGLE_PROTOBUF_TEST_UTIL_H__ 216