|
@@ -36,6 +36,8 @@ using Google.Protobuf.TestProtos;
|
|
using NUnit.Framework;
|
|
using NUnit.Framework;
|
|
using System.Collections;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Generic;
|
|
|
|
+using System.Linq;
|
|
|
|
+using Google.Protobuf.WellKnownTypes;
|
|
|
|
|
|
namespace Google.Protobuf
|
|
namespace Google.Protobuf
|
|
{
|
|
{
|
|
@@ -590,5 +592,32 @@ namespace Google.Protobuf
|
|
Assert.AreEqual(message, message2);
|
|
Assert.AreEqual(message, message2);
|
|
Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.OneofUint32, message2.OneofFieldCase);
|
|
Assert.AreEqual(TestAllTypes.OneofFieldOneofCase.OneofUint32, message2.OneofFieldCase);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ [Test]
|
|
|
|
+ public void IgnoreUnknownFields_RealDataStillRead()
|
|
|
|
+ {
|
|
|
|
+ var message = SampleMessages.CreateFullTestAllTypes();
|
|
|
|
+ var stream = new MemoryStream();
|
|
|
|
+ var output = new CodedOutputStream(stream);
|
|
|
|
+ var unusedFieldNumber = 23456;
|
|
|
|
+ Assert.IsFalse(TestAllTypes.Descriptor.Fields.InDeclarationOrder().Select(x => x.FieldNumber).Contains(unusedFieldNumber));
|
|
|
|
+ output.WriteTag(unusedFieldNumber, WireFormat.WireType.LengthDelimited);
|
|
|
|
+ output.WriteString("ignore me");
|
|
|
|
+ message.WriteTo(output);
|
|
|
|
+ output.Flush();
|
|
|
|
+
|
|
|
|
+ stream.Position = 0;
|
|
|
|
+ var parsed = TestAllTypes.Parser.ParseFrom(stream);
|
|
|
|
+ Assert.AreEqual(message, parsed);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ [Test]
|
|
|
|
+ public void IgnoreUnknownFields_AllTypes()
|
|
|
|
+ {
|
|
|
|
+ // Simple way of ensuring we can skip all kinds of fields.
|
|
|
|
+ var data = SampleMessages.CreateFullTestAllTypes().ToByteArray();
|
|
|
|
+ var empty = Empty.Parser.ParseFrom(data);
|
|
|
|
+ Assert.AreEqual(new Empty(), empty);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|