public void TestDiscardUnknownFields() { var message = SampleMessages.CreateFullTestAllTypes(); var goldenEmptyMessage = new TestEmptyMessage(); byte[] data = message.ToByteArray(); int fullSize = message.CalculateSize(); Action <IMessage> assertEmpty = msg => { Assert.AreEqual(0, msg.CalculateSize()); Assert.AreEqual(goldenEmptyMessage, msg); }; Action <IMessage> assertFull = msg => Assert.AreEqual(fullSize, msg.CalculateSize()); // Test the behavior of the parsers with and without discarding, both generic and non-generic. MessageParser <TestEmptyMessage> retainingParser1 = TestEmptyMessage.Parser; MessageParser retainingParser2 = retainingParser1; MessageParser <TestEmptyMessage> discardingParser1 = retainingParser1.WithDiscardUnknownFields(true); MessageParser discardingParser2 = retainingParser2.WithDiscardUnknownFields(true); // Test parse from byte[] assertFull(retainingParser1.ParseFrom(data)); assertFull(retainingParser2.ParseFrom(data)); assertEmpty(discardingParser1.ParseFrom(data)); assertEmpty(discardingParser2.ParseFrom(data)); // Test parse from byte[] with offset assertFull(retainingParser1.ParseFrom(data, 0, data.Length)); assertFull(retainingParser2.ParseFrom(data, 0, data.Length)); assertEmpty(discardingParser1.ParseFrom(data, 0, data.Length)); assertEmpty(discardingParser2.ParseFrom(data, 0, data.Length)); // Test parse from CodedInputStream assertFull(retainingParser1.ParseFrom(new CodedInputStream(data))); assertFull(retainingParser2.ParseFrom(new CodedInputStream(data))); assertEmpty(discardingParser1.ParseFrom(new CodedInputStream(data))); assertEmpty(discardingParser2.ParseFrom(new CodedInputStream(data))); // Test parse from Stream assertFull(retainingParser1.ParseFrom(new MemoryStream(data))); assertFull(retainingParser2.ParseFrom(new MemoryStream(data))); assertEmpty(discardingParser1.ParseFrom(new MemoryStream(data))); assertEmpty(discardingParser2.ParseFrom(new MemoryStream(data))); }
public void TestDiscardUnknownFields(IMessage message) { var goldenEmptyMessage = new TestEmptyMessage(); byte[] data = message.ToByteArray(); int fullSize = message.CalculateSize(); void AssertEmpty(IMessage msg) { Assert.AreEqual(0, msg.CalculateSize()); Assert.AreEqual(goldenEmptyMessage, msg); } void AssertFull(IMessage msg) => Assert.AreEqual(fullSize, msg.CalculateSize()); // Test the behavior of the parsers with and without discarding, both generic and non-generic. MessageParser <TestEmptyMessage> retainingParser1 = TestEmptyMessage.Parser; MessageParser retainingParser2 = retainingParser1; MessageParser <TestEmptyMessage> discardingParser1 = retainingParser1.WithDiscardUnknownFields(true); MessageParser discardingParser2 = retainingParser2.WithDiscardUnknownFields(true); // Test parse from byte[] MessageParsingHelpers.AssertReadingMessage(retainingParser1, data, m => AssertFull(m)); MessageParsingHelpers.AssertReadingMessage(retainingParser2, data, m => AssertFull(m)); MessageParsingHelpers.AssertReadingMessage(discardingParser1, data, m => AssertEmpty(m)); MessageParsingHelpers.AssertReadingMessage(discardingParser2, data, m => AssertEmpty(m)); // Test parse from byte[] with offset AssertFull(retainingParser1.ParseFrom(data, 0, data.Length)); AssertFull(retainingParser2.ParseFrom(data, 0, data.Length)); AssertEmpty(discardingParser1.ParseFrom(data, 0, data.Length)); AssertEmpty(discardingParser2.ParseFrom(data, 0, data.Length)); // Test parse from CodedInputStream AssertFull(retainingParser1.ParseFrom(new CodedInputStream(data))); AssertFull(retainingParser2.ParseFrom(new CodedInputStream(data))); AssertEmpty(discardingParser1.ParseFrom(new CodedInputStream(data))); AssertEmpty(discardingParser2.ParseFrom(new CodedInputStream(data))); // Test parse from Stream AssertFull(retainingParser1.ParseFrom(new MemoryStream(data))); AssertFull(retainingParser2.ParseFrom(new MemoryStream(data))); AssertEmpty(discardingParser1.ParseFrom(new MemoryStream(data))); AssertEmpty(discardingParser2.ParseFrom(new MemoryStream(data))); }