public void DynamicOneofMessage() { DynamicMessage.Builder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor); OneofDescriptor oneof = TestAllTypes.Descriptor.Oneofs[0]; Assert.False(builder.HasOneof(oneof)); Assert.AreSame(null, builder.OneofFieldDescriptor(oneof)); reflectionTester.SetAllFieldsViaReflection(builder); Assert.True(builder.HasOneof(oneof)); FieldDescriptor field = oneof.Field(3); Assert.AreSame(field, builder.OneofFieldDescriptor(oneof)); Assert.AreEqual(TestUtil.ToBytes("604"), builder[field]); DynamicMessage message = builder.BuildPartial(); Assert.IsTrue(message.HasOneof(oneof)); DynamicMessage.Builder mergedBuilder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor); FieldDescriptor mergedField = oneof.Field(0); mergedBuilder[mergedField] = 123U; Assert.IsTrue(mergedBuilder.HasField(mergedField)); mergedBuilder.MergeFrom(message); Assert.IsTrue(mergedBuilder.HasField(field)); Assert.IsFalse(mergedBuilder.HasField(mergedField)); mergedBuilder.ClearOneof(oneof); Assert.AreSame(null, mergedBuilder.OneofFieldDescriptor(oneof)); message = mergedBuilder.Build(); Assert.AreSame(null, message.OneofFieldDescriptor(oneof)); }