From 7f42d7c65b572c1f4abaf5552d22b092e28bb341 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Tue, 21 Apr 2020 14:44:13 +0200 Subject: [PATCH] increase MapField test coverage --- .../Collections/MapFieldTest.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs b/csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs index f64ebac4ef..d8cdee0f0f 100644 --- a/csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs +++ b/csharp/src/Google.Protobuf.Test/Collections/MapFieldTest.cs @@ -31,6 +31,7 @@ #endregion using System; +using System.IO; using System.Collections.Generic; using Google.Protobuf.TestProtos; using NUnit.Framework; @@ -583,6 +584,33 @@ namespace Google.Protobuf.Collections Assert.False(map.TryGetValue(SampleNaNs.PayloadFlipped, out ignored)); } + [Test] + public void AddEntriesFrom_CodedInputStream() + { + // map will have string key and string value + var keyTag = WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited); + var valueTag = WireFormat.MakeTag(2, WireFormat.WireType.LengthDelimited); + + var memoryStream = new MemoryStream(); + var output = new CodedOutputStream(memoryStream); + output.WriteLength(20); // total of keyTag + key + valueTag + value + output.WriteTag(keyTag); + output.WriteString("the_key"); + output.WriteTag(valueTag); + output.WriteString("the_value"); + output.Flush(); + + var field = new MapField(); + var mapCodec = new MapField.Codec(FieldCodec.ForString(keyTag, ""), FieldCodec.ForString(valueTag, ""), 10); + var input = new CodedInputStream(memoryStream.ToArray()); + + // test the legacy overload of AddEntriesFrom that takes a CodedInputStream + field.AddEntriesFrom(input, mapCodec); + CollectionAssert.AreEquivalent(new[] { "the_key" }, field.Keys); + CollectionAssert.AreEquivalent(new[] { "the_value" }, field.Values); + Assert.IsTrue(input.IsAtEnd); + } + #if !NET35 [Test] public void IDictionaryKeys_Equals_IReadOnlyDictionaryKeys()