示例#1
0
        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)));
        }