Summary

Class:WireMock.Util.BodyParser
Assembly:WireMock.Net
File(s):C:\Users\azureuser\Documents\Github\WireMock.Net\src\WireMock.Net\Util\BodyParser.cs
Covered lines:42
Uncovered lines:8
Coverable lines:50
Total lines:81
Line coverage:84%
Branch coverage:83.3%

Metrics

MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
.cctor()10100100
ReadStringAsync()62100100
ReadBytesAsync()6210066.67
Parse()161679.3188.89

File(s)

C:\Users\azureuser\Documents\Github\WireMock.Net\src\WireMock.Net\Util\BodyParser.cs

#LineLine coverage
 1using System;
 2using System.IO;
 3using System.Linq;
 4using System.Text;
 5using System.Threading.Tasks;
 6using JetBrains.Annotations;
 7using Newtonsoft.Json;
 8
 9namespace WireMock.Util
 10{
 11    internal static class BodyParser
 12    {
 113        private static readonly string[] TextContentTypes =
 114        {
 115            "text/",
 116            "application/javascript", "application/typescript",
 117            "application/xml", "application/xhtml+xml",
 118            "application/x-www-form-urlencoded"
 119        };
 20
 21        private static async Task<Tuple<string, Encoding>> ReadStringAsync(Stream stream)
 1422        {
 1423             using (var streamReader = new StreamReader(stream))
 1424            {
 1425                string content = await streamReader.ReadToEndAsync();
 26
 1427                return new Tuple<string, Encoding>(content, streamReader.CurrentEncoding);
 28            }
 1429        }
 30
 31        private static async Task<byte[]> ReadBytesAsync(Stream stream)
 532        {
 533             using (var memoryStream = new MemoryStream())
 534            {
 535                await stream.CopyToAsync(memoryStream);
 536                return memoryStream.ToArray();
 37            }
 538        }
 39
 40        public static async Task<BodyData> Parse([NotNull] Stream stream, [CanBeNull] string contentTypeHeaderValue)
 1941        {
 1942            var data = new BodyData();
 43
 5144             if (contentTypeHeaderValue != null && TextContentTypes.Any(t => contentTypeHeaderValue.StartsWith(t, StringC
 1145             {
 46                try
 1147                {
 1148                    var stringData = await ReadStringAsync(stream);
 1149                    data.BodyAsString = stringData.Item1;
 1150                    data.Encoding = stringData.Item2;
 1151                }
 052                 catch
 053                {
 54                    // Reading as string failed, just get the ByteArray.
 055                    data.BodyAsBytes = await ReadBytesAsync(stream);
 056                }
 1157            }
 858             else if (contentTypeHeaderValue != null && contentTypeHeaderValue.StartsWith("application/json", StringCompa
 359            {
 360                var stringData = await ReadStringAsync(stream);
 361                data.Encoding = stringData.Item2;
 62
 63                try
 364                {
 365                    data.BodyAsJson = JsonConvert.DeserializeObject(stringData.Item1, new JsonSerializerSettings { Forma
 366                }
 067                catch
 068                {
 69                    // JsonConvert failed, just set the Body as string.
 070                    data.BodyAsString = stringData.Item1;
 071                }
 372            }
 73            else
 574            {
 575                data.BodyAsBytes = await ReadBytesAsync(stream);
 576            }
 77
 1978            return data;
 1979        }
 80    }
 81}