#region Copyright notice and license

// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc.  All rights reserved.
// http://github.com/jskeet/dotnet-protobufs/
// Original C++/Java/Python code:
// http://code.google.com/p/protobuf/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#endregion

using System;
using Google.ProtocolBuffers.Descriptors;
using Google.ProtocolBuffers.TestProtos;
using NUnit.Framework;

#pragma warning disable 618 // Disable warning about obsolete use miss-matched assert arguments

namespace Google.ProtocolBuffers
{
    /// <summary>
    /// Performs the same things that the methods of TestUtil do, but
    /// via the reflection interface.  This is its own class because it needs
    /// to know what descriptor to use.
    /// </summary>
    internal class ReflectionTester
    {
        private readonly MessageDescriptor baseDescriptor;
        private readonly ExtensionRegistry extensionRegistry;

        private readonly FileDescriptor file;
        private readonly FileDescriptor importFile;

        private readonly MessageDescriptor optionalGroup;
        private readonly MessageDescriptor repeatedGroup;
        private readonly MessageDescriptor nestedMessage;
        private readonly MessageDescriptor foreignMessage;
        private readonly MessageDescriptor importMessage;

        private readonly FieldDescriptor groupA;
        private readonly FieldDescriptor repeatedGroupA;
        private readonly FieldDescriptor nestedB;
        private readonly FieldDescriptor foreignC;
        private readonly FieldDescriptor importD;

        private readonly EnumDescriptor nestedEnum;
        private readonly EnumDescriptor foreignEnum;
        private readonly EnumDescriptor importEnum;

        private readonly EnumValueDescriptor nestedFoo;
        private readonly EnumValueDescriptor nestedBar;
        private readonly EnumValueDescriptor nestedBaz;
        private readonly EnumValueDescriptor foreignFoo;
        private readonly EnumValueDescriptor foreignBar;
        private readonly EnumValueDescriptor foreignBaz;
        private readonly EnumValueDescriptor importFoo;
        private readonly EnumValueDescriptor importBar;
        private readonly EnumValueDescriptor importBaz;

        /// <summary>
        /// Constructs an instance that will expect messages using the given
        /// descriptor. Normally <paramref name="baseDescriptor"/> should be
        /// a descriptor for TestAllTypes. However, if extensionRegistry is non-null,
        /// then baseDescriptor should be for TestAllExtensions instead, and instead of
        /// reading and writing normal fields, the tester will read and write extensions.
        /// All of the TestAllExtensions extensions must be registered in the registry.
        /// </summary>
        private ReflectionTester(MessageDescriptor baseDescriptor,
                                 ExtensionRegistry extensionRegistry)
        {
            this.baseDescriptor = baseDescriptor;
            this.extensionRegistry = extensionRegistry;

            this.file = baseDescriptor.File;
            Assert.AreEqual(1, file.Dependencies.Count);
            this.importFile = file.Dependencies[0];

            MessageDescriptor testAllTypes;
            if (baseDescriptor.Name == "TestAllTypes")
            {
                testAllTypes = baseDescriptor;
            }
            else
            {
                testAllTypes = file.FindTypeByName<MessageDescriptor>("TestAllTypes");
                Assert.NotNull(testAllTypes);
            }

            if (extensionRegistry == null)
            {
                // Use testAllTypes, rather than baseDescriptor, to allow
                // initialization using TestPackedTypes descriptors. These objects
                // won't be used by the methods for packed fields.
                this.optionalGroup =
                    testAllTypes.FindDescriptor<MessageDescriptor>("OptionalGroup");
                this.repeatedGroup =
                    testAllTypes.FindDescriptor<MessageDescriptor>("RepeatedGroup");
            }
            else
            {
                this.optionalGroup =
                    file.FindTypeByName<MessageDescriptor>("OptionalGroup_extension");
                this.repeatedGroup =
                    file.FindTypeByName<MessageDescriptor>("RepeatedGroup_extension");
            }
            this.nestedMessage = testAllTypes.FindDescriptor<MessageDescriptor>("NestedMessage");
            this.foreignMessage = file.FindTypeByName<MessageDescriptor>("ForeignMessage");
            this.importMessage = importFile.FindTypeByName<MessageDescriptor>("ImportMessage");

            this.nestedEnum = testAllTypes.FindDescriptor<EnumDescriptor>("NestedEnum");
            this.foreignEnum = file.FindTypeByName<EnumDescriptor>("ForeignEnum");
            this.importEnum = importFile.FindTypeByName<EnumDescriptor>("ImportEnum");

            Assert.NotNull(optionalGroup);
            Assert.NotNull(repeatedGroup);
            Assert.NotNull(nestedMessage);
            Assert.NotNull(foreignMessage);
            Assert.NotNull(importMessage);
            Assert.NotNull(nestedEnum);
            Assert.NotNull(foreignEnum);
            Assert.NotNull(importEnum);

            this.nestedB = nestedMessage.FindDescriptor<FieldDescriptor>("bb");
            this.foreignC = foreignMessage.FindDescriptor<FieldDescriptor>("c");
            this.importD = importMessage.FindDescriptor<FieldDescriptor>("d");
            this.nestedFoo = nestedEnum.FindValueByName("FOO");
            this.nestedBar = nestedEnum.FindValueByName("BAR");
            this.nestedBaz = nestedEnum.FindValueByName("BAZ");
            this.foreignFoo = foreignEnum.FindValueByName("FOREIGN_FOO");
            this.foreignBar = foreignEnum.FindValueByName("FOREIGN_BAR");
            this.foreignBaz = foreignEnum.FindValueByName("FOREIGN_BAZ");
            this.importFoo = importEnum.FindValueByName("IMPORT_FOO");
            this.importBar = importEnum.FindValueByName("IMPORT_BAR");
            this.importBaz = importEnum.FindValueByName("IMPORT_BAZ");

            this.groupA = optionalGroup.FindDescriptor<FieldDescriptor>("a");
            this.repeatedGroupA = repeatedGroup.FindDescriptor<FieldDescriptor>("a");

            Assert.NotNull(groupA);
            Assert.NotNull(repeatedGroupA);
            Assert.NotNull(nestedB);
            Assert.NotNull(foreignC);
            Assert.NotNull(importD);
            Assert.NotNull(nestedFoo);
            Assert.NotNull(nestedBar);
            Assert.NotNull(nestedBaz);
            Assert.NotNull(foreignFoo);
            Assert.NotNull(foreignBar);
            Assert.NotNull(foreignBaz);
            Assert.NotNull(importFoo);
            Assert.NotNull(importBar);
            Assert.NotNull(importBaz);
        }

        /// <summary>
        /// Creates an instance for the TestAllTypes message, with no extension registry.
        /// </summary>
        public static ReflectionTester CreateTestAllTypesInstance()
        {
            return new ReflectionTester(TestAllTypes.Descriptor, null);
        }

        /// <summary>
        /// Creates an instance for the TestAllExtensions message, with an
        /// extension registry from TestUtil.CreateExtensionRegistry.
        /// </summary>
        public static ReflectionTester CreateTestAllExtensionsInstance()
        {
            return new ReflectionTester(TestAllExtensions.Descriptor, TestUtil.CreateExtensionRegistry());
        }

        /// <summary>
        /// Creates an instance for the TestPackedTypes message, with no extensions.
        /// </summary>
        public static ReflectionTester CreateTestPackedTypesInstance()
        {
            return new ReflectionTester(TestPackedTypes.Descriptor, null);
        }

        /// <summary>
        /// Shorthand to get a FieldDescriptor for a field of unittest::TestAllTypes.
        /// </summary>
        private FieldDescriptor f(String name)
        {
            FieldDescriptor result;
            if (extensionRegistry == null)
            {
                result = baseDescriptor.FindDescriptor<FieldDescriptor>(name);
            }
            else
            {
                result = file.FindTypeByName<FieldDescriptor>(name + "_extension");
            }
            Assert.NotNull(result);
            return result;
        }

        /// <summary>
        /// Calls parent.CreateBuilderForField() or uses the extension registry
        /// to find an appropriate builder, depending on what type is being tested.
        /// </summary>
        private IBuilder CreateBuilderForField(IBuilder parent, FieldDescriptor field)
        {
            if (extensionRegistry == null)
            {
                return parent.CreateBuilderForField(field);
            }
            else
            {
                ExtensionInfo extension = extensionRegistry[field.ContainingType, field.FieldNumber];
                Assert.NotNull(extension);
                Assert.NotNull(extension.DefaultInstance);
                return (IBuilder) extension.DefaultInstance.WeakCreateBuilderForType();
            }
        }

        /// <summary>
        /// Sets every field of the message to the values expected by
        /// AssertAllFieldsSet, using the reflection interface.
        /// </summary>
        /// <param name="message"></param>
        internal void SetAllFieldsViaReflection(IBuilder message)
        {
            message[f("optional_int32")] = 101;
            message[f("optional_int64")] = 102L;
            message[f("optional_uint32")] = 103U;
            message[f("optional_uint64")] = 104UL;
            message[f("optional_sint32")] = 105;
            message[f("optional_sint64")] = 106L;
            message[f("optional_fixed32")] = 107U;
            message[f("optional_fixed64")] = 108UL;
            message[f("optional_sfixed32")] = 109;
            message[f("optional_sfixed64")] = 110L;
            message[f("optional_float")] = 111F;
            message[f("optional_double")] = 112D;
            message[f("optional_bool")] = true;
            message[f("optional_string")] = "115";
            message[f("optional_bytes")] = TestUtil.ToBytes("116");

            message[f("optionalgroup")] =
                CreateBuilderForField(message, f("optionalgroup")).SetField(groupA, 117).WeakBuild();
            message[f("optional_nested_message")] =
                CreateBuilderForField(message, f("optional_nested_message")).SetField(nestedB, 118).WeakBuild();
            message[f("optional_foreign_message")] =
                CreateBuilderForField(message, f("optional_foreign_message")).SetField(foreignC, 119).WeakBuild();
            message[f("optional_import_message")] =
                CreateBuilderForField(message, f("optional_import_message")).SetField(importD, 120).WeakBuild();

            message[f("optional_nested_enum")] = nestedBaz;
            message[f("optional_foreign_enum")] = foreignBaz;
            message[f("optional_import_enum")] = importBaz;

            message[f("optional_string_piece")] = "124";
            message[f("optional_cord")] = "125";

            // -----------------------------------------------------------------

            message.WeakAddRepeatedField(f("repeated_int32"), 201);
            message.WeakAddRepeatedField(f("repeated_int64"), 202L);
            message.WeakAddRepeatedField(f("repeated_uint32"), 203U);
            message.WeakAddRepeatedField(f("repeated_uint64"), 204UL);
            message.WeakAddRepeatedField(f("repeated_sint32"), 205);
            message.WeakAddRepeatedField(f("repeated_sint64"), 206L);
            message.WeakAddRepeatedField(f("repeated_fixed32"), 207U);
            message.WeakAddRepeatedField(f("repeated_fixed64"), 208UL);
            message.WeakAddRepeatedField(f("repeated_sfixed32"), 209);
            message.WeakAddRepeatedField(f("repeated_sfixed64"), 210L);
            message.WeakAddRepeatedField(f("repeated_float"), 211F);
            message.WeakAddRepeatedField(f("repeated_double"), 212D);
            message.WeakAddRepeatedField(f("repeated_bool"), true);
            message.WeakAddRepeatedField(f("repeated_string"), "215");
            message.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("216"));


            message.WeakAddRepeatedField(f("repeatedgroup"),
                                         CreateBuilderForField(message, f("repeatedgroup")).SetField(repeatedGroupA, 217)
                                             .WeakBuild());
            message.WeakAddRepeatedField(f("repeated_nested_message"),
                                         CreateBuilderForField(message, f("repeated_nested_message")).SetField(nestedB,
                                                                                                               218).
                                             WeakBuild());
            message.WeakAddRepeatedField(f("repeated_foreign_message"),
                                         CreateBuilderForField(message, f("repeated_foreign_message")).SetField(
                                             foreignC, 219).WeakBuild());
            message.WeakAddRepeatedField(f("repeated_import_message"),
                                         CreateBuilderForField(message, f("repeated_import_message")).SetField(importD,
                                                                                                               220).
                                             WeakBuild());

            message.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBar);
            message.WeakAddRepeatedField(f("repeated_foreign_enum"), foreignBar);
            message.WeakAddRepeatedField(f("repeated_import_enum"), importBar);

            message.WeakAddRepeatedField(f("repeated_string_piece"), "224");
            message.WeakAddRepeatedField(f("repeated_cord"), "225");

            // Add a second one of each field.
            message.WeakAddRepeatedField(f("repeated_int32"), 301);
            message.WeakAddRepeatedField(f("repeated_int64"), 302L);
            message.WeakAddRepeatedField(f("repeated_uint32"), 303U);
            message.WeakAddRepeatedField(f("repeated_uint64"), 304UL);
            message.WeakAddRepeatedField(f("repeated_sint32"), 305);
            message.WeakAddRepeatedField(f("repeated_sint64"), 306L);
            message.WeakAddRepeatedField(f("repeated_fixed32"), 307U);
            message.WeakAddRepeatedField(f("repeated_fixed64"), 308UL);
            message.WeakAddRepeatedField(f("repeated_sfixed32"), 309);
            message.WeakAddRepeatedField(f("repeated_sfixed64"), 310L);
            message.WeakAddRepeatedField(f("repeated_float"), 311F);
            message.WeakAddRepeatedField(f("repeated_double"), 312D);
            message.WeakAddRepeatedField(f("repeated_bool"), false);
            message.WeakAddRepeatedField(f("repeated_string"), "315");
            message.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("316"));

            message.WeakAddRepeatedField(f("repeatedgroup"),
                                         CreateBuilderForField(message, f("repeatedgroup"))
                                             .SetField(repeatedGroupA, 317).WeakBuild());
            message.WeakAddRepeatedField(f("repeated_nested_message"),
                                         CreateBuilderForField(message, f("repeated_nested_message"))
                                             .SetField(nestedB, 318).WeakBuild());
            message.WeakAddRepeatedField(f("repeated_foreign_message"),
                                         CreateBuilderForField(message, f("repeated_foreign_message"))
                                             .SetField(foreignC, 319).WeakBuild());
            message.WeakAddRepeatedField(f("repeated_import_message"),
                                         CreateBuilderForField(message, f("repeated_import_message"))
                                             .SetField(importD, 320).WeakBuild());

            message.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBaz);
            message.WeakAddRepeatedField(f("repeated_foreign_enum"), foreignBaz);
            message.WeakAddRepeatedField(f("repeated_import_enum"), importBaz);

            message.WeakAddRepeatedField(f("repeated_string_piece"), "324");
            message.WeakAddRepeatedField(f("repeated_cord"), "325");

            // -----------------------------------------------------------------

            message[f("default_int32")] = 401;
            message[f("default_int64")] = 402L;
            message[f("default_uint32")] = 403U;
            message[f("default_uint64")] = 404UL;
            message[f("default_sint32")] = 405;
            message[f("default_sint64")] = 406L;
            message[f("default_fixed32")] = 407U;
            message[f("default_fixed64")] = 408UL;
            message[f("default_sfixed32")] = 409;
            message[f("default_sfixed64")] = 410L;
            message[f("default_float")] = 411F;
            message[f("default_double")] = 412D;
            message[f("default_bool")] = false;
            message[f("default_string")] = "415";
            message[f("default_bytes")] = TestUtil.ToBytes("416");

            message[f("default_nested_enum")] = nestedFoo;
            message[f("default_foreign_enum")] = foreignFoo;
            message[f("default_import_enum")] = importFoo;

            message[f("default_string_piece")] = "424";
            message[f("default_cord")] = "425";
        }

        /// <summary>
        /// Clears every field of the message, using the reflection interface.
        /// </summary>
        /// <param name="message"></param>
        internal void ClearAllFieldsViaReflection(IBuilder message)
        {
            foreach (FieldDescriptor field in message.AllFields.Keys)
            {
                message.WeakClearField(field);
            }
        }

        // -------------------------------------------------------------------

        /// <summary>
        /// Modify the repeated fields of the specified message to contain the
        /// values expected by AssertRepeatedFieldsModified, using the IBuilder
        /// reflection interface.
        /// </summary>
        internal void ModifyRepeatedFieldsViaReflection(IBuilder message)
        {
            message[f("repeated_int32"), 1] = 501;
            message[f("repeated_int64"), 1] = 502L;
            message[f("repeated_uint32"), 1] = 503U;
            message[f("repeated_uint64"), 1] = 504UL;
            message[f("repeated_sint32"), 1] = 505;
            message[f("repeated_sint64"), 1] = 506L;
            message[f("repeated_fixed32"), 1] = 507U;
            message[f("repeated_fixed64"), 1] = 508UL;
            message[f("repeated_sfixed32"), 1] = 509;
            message[f("repeated_sfixed64"), 1] = 510L;
            message[f("repeated_float"), 1] = 511F;
            message[f("repeated_double"), 1] = 512D;
            message[f("repeated_bool"), 1] = true;
            message[f("repeated_string"), 1] = "515";
            message.SetRepeatedField(f("repeated_bytes"), 1, TestUtil.ToBytes("516"));

            message.SetRepeatedField(f("repeatedgroup"), 1,
                                     CreateBuilderForField(message, f("repeatedgroup")).SetField(repeatedGroupA, 517).
                                         WeakBuild());
            message.SetRepeatedField(f("repeated_nested_message"), 1,
                                     CreateBuilderForField(message, f("repeated_nested_message")).SetField(nestedB, 518)
                                         .WeakBuild());
            message.SetRepeatedField(f("repeated_foreign_message"), 1,
                                     CreateBuilderForField(message, f("repeated_foreign_message")).SetField(foreignC,
                                                                                                            519).
                                         WeakBuild());
            message.SetRepeatedField(f("repeated_import_message"), 1,
                                     CreateBuilderForField(message, f("repeated_import_message")).SetField(importD, 520)
                                         .WeakBuild());

            message[f("repeated_nested_enum"), 1] = nestedFoo;
            message[f("repeated_foreign_enum"), 1] = foreignFoo;
            message[f("repeated_import_enum"), 1] = importFoo;

            message[f("repeated_string_piece"), 1] = "524";
            message[f("repeated_cord"), 1] = "525";
        }

        // -------------------------------------------------------------------

        /// <summary>
        /// Asserts that all fields of the specified message are set to the values
        /// assigned by SetAllFields, using the IMessage reflection interface.
        /// </summary>
        public void AssertAllFieldsSetViaReflection(IMessage message)
        {
            Assert.IsTrue(message.HasField(f("optional_int32")));
            Assert.IsTrue(message.HasField(f("optional_int64")));
            Assert.IsTrue(message.HasField(f("optional_uint32")));
            Assert.IsTrue(message.HasField(f("optional_uint64")));
            Assert.IsTrue(message.HasField(f("optional_sint32")));
            Assert.IsTrue(message.HasField(f("optional_sint64")));
            Assert.IsTrue(message.HasField(f("optional_fixed32")));
            Assert.IsTrue(message.HasField(f("optional_fixed64")));
            Assert.IsTrue(message.HasField(f("optional_sfixed32")));
            Assert.IsTrue(message.HasField(f("optional_sfixed64")));
            Assert.IsTrue(message.HasField(f("optional_float")));
            Assert.IsTrue(message.HasField(f("optional_double")));
            Assert.IsTrue(message.HasField(f("optional_bool")));
            Assert.IsTrue(message.HasField(f("optional_string")));
            Assert.IsTrue(message.HasField(f("optional_bytes")));

            Assert.IsTrue(message.HasField(f("optionalgroup")));
            Assert.IsTrue(message.HasField(f("optional_nested_message")));
            Assert.IsTrue(message.HasField(f("optional_foreign_message")));
            Assert.IsTrue(message.HasField(f("optional_import_message")));

            Assert.IsTrue(((IMessage) message[f("optionalgroup")]).HasField(groupA));
            Assert.IsTrue(((IMessage) message[f("optional_nested_message")]).HasField(nestedB));
            Assert.IsTrue(((IMessage) message[f("optional_foreign_message")]).HasField(foreignC));
            Assert.IsTrue(((IMessage) message[f("optional_import_message")]).HasField(importD));

            Assert.IsTrue(message.HasField(f("optional_nested_enum")));
            Assert.IsTrue(message.HasField(f("optional_foreign_enum")));
            Assert.IsTrue(message.HasField(f("optional_import_enum")));

            Assert.IsTrue(message.HasField(f("optional_string_piece")));
            Assert.IsTrue(message.HasField(f("optional_cord")));

            Assert.AreEqual(101, message[f("optional_int32")]);
            Assert.AreEqual(102L, message[f("optional_int64")]);
            Assert.AreEqual(103u, message[f("optional_uint32")]);
            Assert.AreEqual(104UL, message[f("optional_uint64")]);
            Assert.AreEqual(105, message[f("optional_sint32")]);
            Assert.AreEqual(106L, message[f("optional_sint64")]);
            Assert.AreEqual(107U, message[f("optional_fixed32")]);
            Assert.AreEqual(108UL, message[f("optional_fixed64")]);
            Assert.AreEqual(109, message[f("optional_sfixed32")]);
            Assert.AreEqual(110L, message[f("optional_sfixed64")]);
            Assert.AreEqual(111F, message[f("optional_float")]);
            Assert.AreEqual(112D, message[f("optional_double")]);
            Assert.AreEqual(true, message[f("optional_bool")]);
            Assert.AreEqual("115", message[f("optional_string")]);
            Assert.AreEqual(TestUtil.ToBytes("116"), message[f("optional_bytes")]);

            Assert.AreEqual(117, ((IMessage) message[f("optionalgroup")])[groupA]);
            Assert.AreEqual(118, ((IMessage) message[f("optional_nested_message")])[nestedB]);
            Assert.AreEqual(119, ((IMessage) message[f("optional_foreign_message")])[foreignC]);
            Assert.AreEqual(120, ((IMessage) message[f("optional_import_message")])[importD]);

            Assert.AreEqual(nestedBaz, message[f("optional_nested_enum")]);
            Assert.AreEqual(foreignBaz, message[f("optional_foreign_enum")]);
            Assert.AreEqual(importBaz, message[f("optional_import_enum")]);

            Assert.AreEqual("124", message[f("optional_string_piece")]);
            Assert.AreEqual("125", message[f("optional_cord")]);

            // -----------------------------------------------------------------

            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_float")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_double")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bool")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bytes")));

            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeatedgroup")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_message")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_message")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_message")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_enum")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_enum")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_enum")));

            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string_piece")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_cord")));

            Assert.AreEqual(201, message[f("repeated_int32"), 0]);
            Assert.AreEqual(202L, message[f("repeated_int64"), 0]);
            Assert.AreEqual(203U, message[f("repeated_uint32"), 0]);
            Assert.AreEqual(204UL, message[f("repeated_uint64"), 0]);
            Assert.AreEqual(205, message[f("repeated_sint32"), 0]);
            Assert.AreEqual(206L, message[f("repeated_sint64"), 0]);
            Assert.AreEqual(207U, message[f("repeated_fixed32"), 0]);
            Assert.AreEqual(208UL, message[f("repeated_fixed64"), 0]);
            Assert.AreEqual(209, message[f("repeated_sfixed32"), 0]);
            Assert.AreEqual(210L, message[f("repeated_sfixed64"), 0]);
            Assert.AreEqual(211F, message[f("repeated_float"), 0]);
            Assert.AreEqual(212D, message[f("repeated_double"), 0]);
            Assert.AreEqual(true, message[f("repeated_bool"), 0]);
            Assert.AreEqual("215", message[f("repeated_string"), 0]);
            Assert.AreEqual(TestUtil.ToBytes("216"), message[f("repeated_bytes"), 0]);

            Assert.AreEqual(217, ((IMessage) message[f("repeatedgroup"), 0])[repeatedGroupA]);
            Assert.AreEqual(218, ((IMessage) message[f("repeated_nested_message"), 0])[nestedB]);
            Assert.AreEqual(219, ((IMessage) message[f("repeated_foreign_message"), 0])[foreignC]);
            Assert.AreEqual(220, ((IMessage) message[f("repeated_import_message"), 0])[importD]);

            Assert.AreEqual(nestedBar, message[f("repeated_nested_enum"), 0]);
            Assert.AreEqual(foreignBar, message[f("repeated_foreign_enum"), 0]);
            Assert.AreEqual(importBar, message[f("repeated_import_enum"), 0]);

            Assert.AreEqual("224", message[f("repeated_string_piece"), 0]);
            Assert.AreEqual("225", message[f("repeated_cord"), 0]);

            Assert.AreEqual(301, message[f("repeated_int32"), 1]);
            Assert.AreEqual(302L, message[f("repeated_int64"), 1]);
            Assert.AreEqual(303U, message[f("repeated_uint32"), 1]);
            Assert.AreEqual(304UL, message[f("repeated_uint64"), 1]);
            Assert.AreEqual(305, message[f("repeated_sint32"), 1]);
            Assert.AreEqual(306L, message[f("repeated_sint64"), 1]);
            Assert.AreEqual(307U, message[f("repeated_fixed32"), 1]);
            Assert.AreEqual(308UL, message[f("repeated_fixed64"), 1]);
            Assert.AreEqual(309, message[f("repeated_sfixed32"), 1]);
            Assert.AreEqual(310L, message[f("repeated_sfixed64"), 1]);
            Assert.AreEqual(311F, message[f("repeated_float"), 1]);
            Assert.AreEqual(312D, message[f("repeated_double"), 1]);
            Assert.AreEqual(false, message[f("repeated_bool"), 1]);
            Assert.AreEqual("315", message[f("repeated_string"), 1]);
            Assert.AreEqual(TestUtil.ToBytes("316"), message[f("repeated_bytes"), 1]);

            Assert.AreEqual(317, ((IMessage) message[f("repeatedgroup"), 1])[repeatedGroupA]);
            Assert.AreEqual(318, ((IMessage) message[f("repeated_nested_message"), 1])[nestedB]);
            Assert.AreEqual(319, ((IMessage) message[f("repeated_foreign_message"), 1])[foreignC]);
            Assert.AreEqual(320, ((IMessage) message[f("repeated_import_message"), 1])[importD]);

            Assert.AreEqual(nestedBaz, message[f("repeated_nested_enum"), 1]);
            Assert.AreEqual(foreignBaz, message[f("repeated_foreign_enum"), 1]);
            Assert.AreEqual(importBaz, message[f("repeated_import_enum"), 1]);

            Assert.AreEqual("324", message[f("repeated_string_piece"), 1]);
            Assert.AreEqual("325", message[f("repeated_cord"), 1]);

            // -----------------------------------------------------------------

            Assert.IsTrue(message.HasField(f("default_int32")));
            Assert.IsTrue(message.HasField(f("default_int64")));
            Assert.IsTrue(message.HasField(f("default_uint32")));
            Assert.IsTrue(message.HasField(f("default_uint64")));
            Assert.IsTrue(message.HasField(f("default_sint32")));
            Assert.IsTrue(message.HasField(f("default_sint64")));
            Assert.IsTrue(message.HasField(f("default_fixed32")));
            Assert.IsTrue(message.HasField(f("default_fixed64")));
            Assert.IsTrue(message.HasField(f("default_sfixed32")));
            Assert.IsTrue(message.HasField(f("default_sfixed64")));
            Assert.IsTrue(message.HasField(f("default_float")));
            Assert.IsTrue(message.HasField(f("default_double")));
            Assert.IsTrue(message.HasField(f("default_bool")));
            Assert.IsTrue(message.HasField(f("default_string")));
            Assert.IsTrue(message.HasField(f("default_bytes")));

            Assert.IsTrue(message.HasField(f("default_nested_enum")));
            Assert.IsTrue(message.HasField(f("default_foreign_enum")));
            Assert.IsTrue(message.HasField(f("default_import_enum")));

            Assert.IsTrue(message.HasField(f("default_string_piece")));
            Assert.IsTrue(message.HasField(f("default_cord")));

            Assert.AreEqual(401, message[f("default_int32")]);
            Assert.AreEqual(402L, message[f("default_int64")]);
            Assert.AreEqual(403U, message[f("default_uint32")]);
            Assert.AreEqual(404UL, message[f("default_uint64")]);
            Assert.AreEqual(405, message[f("default_sint32")]);
            Assert.AreEqual(406L, message[f("default_sint64")]);
            Assert.AreEqual(407U, message[f("default_fixed32")]);
            Assert.AreEqual(408UL, message[f("default_fixed64")]);
            Assert.AreEqual(409, message[f("default_sfixed32")]);
            Assert.AreEqual(410L, message[f("default_sfixed64")]);
            Assert.AreEqual(411F, message[f("default_float")]);
            Assert.AreEqual(412D, message[f("default_double")]);
            Assert.AreEqual(false, message[f("default_bool")]);
            Assert.AreEqual("415", message[f("default_string")]);
            Assert.AreEqual(TestUtil.ToBytes("416"), message[f("default_bytes")]);

            Assert.AreEqual(nestedFoo, message[f("default_nested_enum")]);
            Assert.AreEqual(foreignFoo, message[f("default_foreign_enum")]);
            Assert.AreEqual(importFoo, message[f("default_import_enum")]);

            Assert.AreEqual("424", message[f("default_string_piece")]);
            Assert.AreEqual("425", message[f("default_cord")]);
        }

        /// <summary>
        /// Assert that all fields of the message are cleared, and that
        /// getting the fields returns their default values, using the reflection interface.
        /// </summary>
        public void AssertClearViaReflection(IMessage message)
        {
            // has_blah() should initially be false for all optional fields.
            Assert.IsFalse(message.HasField(f("optional_int32")));
            Assert.IsFalse(message.HasField(f("optional_int64")));
            Assert.IsFalse(message.HasField(f("optional_uint32")));
            Assert.IsFalse(message.HasField(f("optional_uint64")));
            Assert.IsFalse(message.HasField(f("optional_sint32")));
            Assert.IsFalse(message.HasField(f("optional_sint64")));
            Assert.IsFalse(message.HasField(f("optional_fixed32")));
            Assert.IsFalse(message.HasField(f("optional_fixed64")));
            Assert.IsFalse(message.HasField(f("optional_sfixed32")));
            Assert.IsFalse(message.HasField(f("optional_sfixed64")));
            Assert.IsFalse(message.HasField(f("optional_float")));
            Assert.IsFalse(message.HasField(f("optional_double")));
            Assert.IsFalse(message.HasField(f("optional_bool")));
            Assert.IsFalse(message.HasField(f("optional_string")));
            Assert.IsFalse(message.HasField(f("optional_bytes")));

            Assert.IsFalse(message.HasField(f("optionalgroup")));
            Assert.IsFalse(message.HasField(f("optional_nested_message")));
            Assert.IsFalse(message.HasField(f("optional_foreign_message")));
            Assert.IsFalse(message.HasField(f("optional_import_message")));

            Assert.IsFalse(message.HasField(f("optional_nested_enum")));
            Assert.IsFalse(message.HasField(f("optional_foreign_enum")));
            Assert.IsFalse(message.HasField(f("optional_import_enum")));

            Assert.IsFalse(message.HasField(f("optional_string_piece")));
            Assert.IsFalse(message.HasField(f("optional_cord")));

            // Optional fields without defaults are set to zero or something like it.
            Assert.AreEqual(0, message[f("optional_int32")]);
            Assert.AreEqual(0L, message[f("optional_int64")]);
            Assert.AreEqual(0U, message[f("optional_uint32")]);
            Assert.AreEqual(0UL, message[f("optional_uint64")]);
            Assert.AreEqual(0, message[f("optional_sint32")]);
            Assert.AreEqual(0L, message[f("optional_sint64")]);
            Assert.AreEqual(0U, message[f("optional_fixed32")]);
            Assert.AreEqual(0UL, message[f("optional_fixed64")]);
            Assert.AreEqual(0, message[f("optional_sfixed32")]);
            Assert.AreEqual(0L, message[f("optional_sfixed64")]);
            Assert.AreEqual(0F, message[f("optional_float")]);
            Assert.AreEqual(0D, message[f("optional_double")]);
            Assert.AreEqual(false, message[f("optional_bool")]);
            Assert.AreEqual("", message[f("optional_string")]);
            Assert.AreEqual(ByteString.Empty, message[f("optional_bytes")]);

            // Embedded messages should also be clear.
            Assert.IsFalse(((IMessage) message[f("optionalgroup")]).HasField(groupA));
            Assert.IsFalse(((IMessage) message[f("optional_nested_message")])
                               .HasField(nestedB));
            Assert.IsFalse(((IMessage) message[f("optional_foreign_message")])
                               .HasField(foreignC));
            Assert.IsFalse(((IMessage) message[f("optional_import_message")])
                               .HasField(importD));

            Assert.AreEqual(0, ((IMessage) message[f("optionalgroup")])[groupA]);
            Assert.AreEqual(0, ((IMessage) message[f("optional_nested_message")])[nestedB]);
            Assert.AreEqual(0, ((IMessage) message[f("optional_foreign_message")])[foreignC]);
            Assert.AreEqual(0, ((IMessage) message[f("optional_import_message")])[importD]);

            // Enums without defaults are set to the first value in the enum.
            Assert.AreEqual(nestedFoo, message[f("optional_nested_enum")]);
            Assert.AreEqual(foreignFoo, message[f("optional_foreign_enum")]);
            Assert.AreEqual(importFoo, message[f("optional_import_enum")]);

            Assert.AreEqual("", message[f("optional_string_piece")]);
            Assert.AreEqual("", message[f("optional_cord")]);

            // Repeated fields are empty.
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_int32")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_int64")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_uint32")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_uint64")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sint32")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sint64")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_fixed32")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_fixed64")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sfixed32")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sfixed64")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_float")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_double")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_bool")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_string")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_bytes")));

            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeatedgroup")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_nested_message")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_foreign_message")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_import_message")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_nested_enum")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_foreign_enum")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_import_enum")));

            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_string_piece")));
            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_cord")));

            // has_blah() should also be false for all default fields.
            Assert.IsFalse(message.HasField(f("default_int32")));
            Assert.IsFalse(message.HasField(f("default_int64")));
            Assert.IsFalse(message.HasField(f("default_uint32")));
            Assert.IsFalse(message.HasField(f("default_uint64")));
            Assert.IsFalse(message.HasField(f("default_sint32")));
            Assert.IsFalse(message.HasField(f("default_sint64")));
            Assert.IsFalse(message.HasField(f("default_fixed32")));
            Assert.IsFalse(message.HasField(f("default_fixed64")));
            Assert.IsFalse(message.HasField(f("default_sfixed32")));
            Assert.IsFalse(message.HasField(f("default_sfixed64")));
            Assert.IsFalse(message.HasField(f("default_float")));
            Assert.IsFalse(message.HasField(f("default_double")));
            Assert.IsFalse(message.HasField(f("default_bool")));
            Assert.IsFalse(message.HasField(f("default_string")));
            Assert.IsFalse(message.HasField(f("default_bytes")));

            Assert.IsFalse(message.HasField(f("default_nested_enum")));
            Assert.IsFalse(message.HasField(f("default_foreign_enum")));
            Assert.IsFalse(message.HasField(f("default_import_enum")));

            Assert.IsFalse(message.HasField(f("default_string_piece")));
            Assert.IsFalse(message.HasField(f("default_cord")));

            // Fields with defaults have their default values (duh).
            Assert.AreEqual(41, message[f("default_int32")]);
            Assert.AreEqual(42L, message[f("default_int64")]);
            Assert.AreEqual(43U, message[f("default_uint32")]);
            Assert.AreEqual(44UL, message[f("default_uint64")]);
            Assert.AreEqual(-45, message[f("default_sint32")]);
            Assert.AreEqual(46L, message[f("default_sint64")]);
            Assert.AreEqual(47U, message[f("default_fixed32")]);
            Assert.AreEqual(48UL, message[f("default_fixed64")]);
            Assert.AreEqual(49, message[f("default_sfixed32")]);
            Assert.AreEqual(-50L, message[f("default_sfixed64")]);
            Assert.AreEqual(51.5F, message[f("default_float")]);
            Assert.AreEqual(52e3D, message[f("default_double")]);
            Assert.AreEqual(true, message[f("default_bool")]);
            Assert.AreEqual("hello", message[f("default_string")]);
            Assert.AreEqual(TestUtil.ToBytes("world"), message[f("default_bytes")]);

            Assert.AreEqual(nestedBar, message[f("default_nested_enum")]);
            Assert.AreEqual(foreignBar, message[f("default_foreign_enum")]);
            Assert.AreEqual(importBar, message[f("default_import_enum")]);

            Assert.AreEqual("abc", message[f("default_string_piece")]);
            Assert.AreEqual("123", message[f("default_cord")]);
        }

        // ---------------------------------------------------------------

        internal void AssertRepeatedFieldsModifiedViaReflection(IMessage message)
        {
            // ModifyRepeatedFields only sets the second repeated element of each
            // field.  In addition to verifying this, we also verify that the first
            // element and size were *not* modified.
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_float")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_double")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bool")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bytes")));

            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeatedgroup")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_message")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_message")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_message")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_enum")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_enum")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_enum")));

            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string_piece")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_cord")));

            Assert.AreEqual(201, message[f("repeated_int32"), 0]);
            Assert.AreEqual(202L, message[f("repeated_int64"), 0]);
            Assert.AreEqual(203U, message[f("repeated_uint32"), 0]);
            Assert.AreEqual(204UL, message[f("repeated_uint64"), 0]);
            Assert.AreEqual(205, message[f("repeated_sint32"), 0]);
            Assert.AreEqual(206L, message[f("repeated_sint64"), 0]);
            Assert.AreEqual(207U, message[f("repeated_fixed32"), 0]);
            Assert.AreEqual(208UL, message[f("repeated_fixed64"), 0]);
            Assert.AreEqual(209, message[f("repeated_sfixed32"), 0]);
            Assert.AreEqual(210L, message[f("repeated_sfixed64"), 0]);
            Assert.AreEqual(211F, message[f("repeated_float"), 0]);
            Assert.AreEqual(212D, message[f("repeated_double"), 0]);
            Assert.AreEqual(true, message[f("repeated_bool"), 0]);
            Assert.AreEqual("215", message[f("repeated_string"), 0]);
            Assert.AreEqual(TestUtil.ToBytes("216"), message[f("repeated_bytes"), 0]);

            Assert.AreEqual(217, ((IMessage) message[f("repeatedgroup"), 0])[repeatedGroupA]);
            Assert.AreEqual(218, ((IMessage) message[f("repeated_nested_message"), 0])[nestedB]);
            Assert.AreEqual(219, ((IMessage) message[f("repeated_foreign_message"), 0])[foreignC]);
            Assert.AreEqual(220, ((IMessage) message[f("repeated_import_message"), 0])[importD]);

            Assert.AreEqual(nestedBar, message[f("repeated_nested_enum"), 0]);
            Assert.AreEqual(foreignBar, message[f("repeated_foreign_enum"), 0]);
            Assert.AreEqual(importBar, message[f("repeated_import_enum"), 0]);

            Assert.AreEqual("224", message[f("repeated_string_piece"), 0]);
            Assert.AreEqual("225", message[f("repeated_cord"), 0]);

            Assert.AreEqual(501, message[f("repeated_int32"), 1]);
            Assert.AreEqual(502L, message[f("repeated_int64"), 1]);
            Assert.AreEqual(503U, message[f("repeated_uint32"), 1]);
            Assert.AreEqual(504UL, message[f("repeated_uint64"), 1]);
            Assert.AreEqual(505, message[f("repeated_sint32"), 1]);
            Assert.AreEqual(506L, message[f("repeated_sint64"), 1]);
            Assert.AreEqual(507U, message[f("repeated_fixed32"), 1]);
            Assert.AreEqual(508UL, message[f("repeated_fixed64"), 1]);
            Assert.AreEqual(509, message[f("repeated_sfixed32"), 1]);
            Assert.AreEqual(510L, message[f("repeated_sfixed64"), 1]);
            Assert.AreEqual(511F, message[f("repeated_float"), 1]);
            Assert.AreEqual(512D, message[f("repeated_double"), 1]);
            Assert.AreEqual(true, message[f("repeated_bool"), 1]);
            Assert.AreEqual("515", message[f("repeated_string"), 1]);
            Assert.AreEqual(TestUtil.ToBytes("516"), message[f("repeated_bytes"), 1]);

            Assert.AreEqual(517, ((IMessage) message[f("repeatedgroup"), 1])[repeatedGroupA]);
            Assert.AreEqual(518, ((IMessage) message[f("repeated_nested_message"), 1])[nestedB]);
            Assert.AreEqual(519, ((IMessage) message[f("repeated_foreign_message"), 1])[foreignC]);
            Assert.AreEqual(520, ((IMessage) message[f("repeated_import_message"), 1])[importD]);

            Assert.AreEqual(nestedFoo, message[f("repeated_nested_enum"), 1]);
            Assert.AreEqual(foreignFoo, message[f("repeated_foreign_enum"), 1]);
            Assert.AreEqual(importFoo, message[f("repeated_import_enum"), 1]);

            Assert.AreEqual("524", message[f("repeated_string_piece"), 1]);
            Assert.AreEqual("525", message[f("repeated_cord"), 1]);
        }

        /// <summary>
        /// Verifies that the reflection setters for the given Builder object throw an
        /// ArgumentNullException if they are passed a null value. 
        /// </summary>
        public void AssertReflectionSettersRejectNull(IBuilder builder)
        {
            Assert.Throws<ArgumentNullException>(() => builder[f("optional_string")] = null);
            Assert.Throws<ArgumentNullException>(() => builder[f("optional_bytes")] = null);
            Assert.Throws<ArgumentNullException>(() => builder[f("optional_nested_enum")] = null);
            Assert.Throws<ArgumentNullException>(() => builder[f("optional_nested_message")] = null);
            Assert.Throws<ArgumentNullException>(() => builder[f("optional_nested_message")] = null);
            Assert.Throws<ArgumentNullException>(() => builder.WeakAddRepeatedField(f("repeated_string"), null));
            Assert.Throws<ArgumentNullException>(() => builder.WeakAddRepeatedField(f("repeated_bytes"), null));
            Assert.Throws<ArgumentNullException>(() => builder.WeakAddRepeatedField(f("repeated_nested_enum"), null));
            Assert.Throws<ArgumentNullException>(() => builder.WeakAddRepeatedField(f("repeated_nested_message"), null));
        }

        /// <summary>
        /// Verifies that the reflection repeated setters for the given Builder object throw an
        /// ArgumentNullException if they are passed a null value.
        /// </summary>
        public void AssertReflectionRepeatedSettersRejectNull(IBuilder builder)
        {
            builder.WeakAddRepeatedField(f("repeated_string"), "one");
            Assert.Throws<ArgumentNullException>(() => builder.SetRepeatedField(f("repeated_string"), 0, null));
            builder.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("one"));
            Assert.Throws<ArgumentNullException>(() => builder.SetRepeatedField(f("repeated_bytes"), 0, null));
            builder.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBaz);
            Assert.Throws<ArgumentNullException>(() => builder.SetRepeatedField(f("repeated_nested_enum"), 0, null));
            builder.WeakAddRepeatedField(f("repeated_nested_message"),
                                         new TestAllTypes.Types.NestedMessage.Builder {Bb = 218}.Build());
            Assert.Throws<ArgumentNullException>(() => builder.SetRepeatedField(f("repeated_nested_message"), 0, null));
        }

        public void SetPackedFieldsViaReflection(IBuilder message)
        {
            message.WeakAddRepeatedField(f("packed_int32"), 601);
            message.WeakAddRepeatedField(f("packed_int64"), 602L);
            message.WeakAddRepeatedField(f("packed_uint32"), 603U);
            message.WeakAddRepeatedField(f("packed_uint64"), 604UL);
            message.WeakAddRepeatedField(f("packed_sint32"), 605);
            message.WeakAddRepeatedField(f("packed_sint64"), 606L);
            message.WeakAddRepeatedField(f("packed_fixed32"), 607U);
            message.WeakAddRepeatedField(f("packed_fixed64"), 608UL);
            message.WeakAddRepeatedField(f("packed_sfixed32"), 609);
            message.WeakAddRepeatedField(f("packed_sfixed64"), 610L);
            message.WeakAddRepeatedField(f("packed_float"), 611F);
            message.WeakAddRepeatedField(f("packed_double"), 612D);
            message.WeakAddRepeatedField(f("packed_bool"), true);
            message.WeakAddRepeatedField(f("packed_enum"), foreignBar);
            // Add a second one of each field.
            message.WeakAddRepeatedField(f("packed_int32"), 701);
            message.WeakAddRepeatedField(f("packed_int64"), 702L);
            message.WeakAddRepeatedField(f("packed_uint32"), 703U);
            message.WeakAddRepeatedField(f("packed_uint64"), 704UL);
            message.WeakAddRepeatedField(f("packed_sint32"), 705);
            message.WeakAddRepeatedField(f("packed_sint64"), 706L);
            message.WeakAddRepeatedField(f("packed_fixed32"), 707U);
            message.WeakAddRepeatedField(f("packed_fixed64"), 708UL);
            message.WeakAddRepeatedField(f("packed_sfixed32"), 709);
            message.WeakAddRepeatedField(f("packed_sfixed64"), 710L);
            message.WeakAddRepeatedField(f("packed_float"), 711F);
            message.WeakAddRepeatedField(f("packed_double"), 712D);
            message.WeakAddRepeatedField(f("packed_bool"), false);
            message.WeakAddRepeatedField(f("packed_enum"), foreignBaz);
        }

        public void AssertPackedFieldsSetViaReflection(IMessage message)
        {
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_int32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_int64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_uint32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_uint64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sint32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sint64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_fixed32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_fixed64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sfixed32")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sfixed64")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_float")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_double")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_bool")));
            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_enum")));

            Assert.AreEqual(601, message[f("packed_int32"), 0]);
            Assert.AreEqual(602L, message[f("packed_int64"), 0]);
            Assert.AreEqual(603u, message[f("packed_uint32"), 0]);
            Assert.AreEqual(604uL, message[f("packed_uint64"), 0]);
            Assert.AreEqual(605, message[f("packed_sint32"), 0]);
            Assert.AreEqual(606L, message[f("packed_sint64"), 0]);
            Assert.AreEqual(607u, message[f("packed_fixed32"), 0]);
            Assert.AreEqual(608uL, message[f("packed_fixed64"), 0]);
            Assert.AreEqual(609, message[f("packed_sfixed32"), 0]);
            Assert.AreEqual(610L, message[f("packed_sfixed64"), 0]);
            Assert.AreEqual(611F, message[f("packed_float"), 0]);
            Assert.AreEqual(612D, message[f("packed_double"), 0]);
            Assert.AreEqual(true, message[f("packed_bool"), 0]);
            Assert.AreEqual(foreignBar, message[f("packed_enum"), 0]);

            Assert.AreEqual(701, message[f("packed_int32"), 1]);
            Assert.AreEqual(702L, message[f("packed_int64"), 1]);
            Assert.AreEqual(703u, message[f("packed_uint32"), 1]);
            Assert.AreEqual(704uL, message[f("packed_uint64"), 1]);
            Assert.AreEqual(705, message[f("packed_sint32"), 1]);
            Assert.AreEqual(706L, message[f("packed_sint64"), 1]);
            Assert.AreEqual(707u, message[f("packed_fixed32"), 1]);
            Assert.AreEqual(708uL, message[f("packed_fixed64"), 1]);
            Assert.AreEqual(709, message[f("packed_sfixed32"), 1]);
            Assert.AreEqual(710L, message[f("packed_sfixed64"), 1]);
            Assert.AreEqual(711F, message[f("packed_float"), 1]);
            Assert.AreEqual(712D, message[f("packed_double"), 1]);
            Assert.AreEqual(false, message[f("packed_bool"), 1]);
            Assert.AreEqual(foreignBaz, message[f("packed_enum"), 1]);
        }
    }
}