public void DynamicMessageCopy()
        {
            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();
            TestUtil.SetAllFields(builder);
            TestAllTypes message = builder.Build();

            DynamicMessage copy = DynamicMessage.CreateBuilder(message).Build();

            reflectionTester.AssertAllFieldsSetViaReflection(copy);

            // Oneof
            FieldDescriptor bytesField =
                TestAllTypes.Descriptor.FindFieldByName("oneof_bytes");
            FieldDescriptor uint32Field =
                TestAllTypes.Descriptor.FindFieldByName("oneof_uint32");

            Assert.True(copy.HasField(bytesField));
            Assert.False(copy.HasField(uint32Field));

            DynamicMessage.Builder dynamicBuilder = DynamicMessage.CreateBuilder(message);
            dynamicBuilder[uint32Field] = 123U;
            DynamicMessage copy2 = dynamicBuilder.Build();

            Assert.IsFalse(copy2.HasField(bytesField));
            Assert.IsTrue(copy2.HasField(uint32Field));
            Assert.AreEqual(123U, copy2[uint32Field]);
        }