Summary

Class:WireMock.Util.BodyParser
Assembly:WireMock.Net
File(s):C:\Users\StefHeyenrath\Documents\GitHub\WireMock.Net\src\WireMock.Net\Util\BodyParser.cs
Covered lines:39
Uncovered lines:17
Coverable lines:56
Total lines:88
Line coverage:69.6%
Branch coverage:39.2%

Metrics

MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.cctor()0010
ReadStringAsync()0010.5
ReadBytesAsync()0000
Parse()000.6330.45

File(s)

C:\Users\StefHeyenrath\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[] JsonContentTypes =
 114        {
 115            "application/json",
 116            "application/vnd.api+json"
 117        };
 18
 119        private static readonly string[] TextContentTypes =
 120        {
 121            "text/",
 122            "application/javascript", "application/typescript",
 123            "application/xml", "application/xhtml+xml",
 124            "application/x-www-form-urlencoded"
 125        };
 26
 27        private static async Task<Tuple<string, Encoding>> ReadStringAsync(Stream stream)
 1028        {
 1029            using (var streamReader = new StreamReader(stream))
 1030            {
 1031                string content = await streamReader.ReadToEndAsync();
 32
 1033                return new Tuple<string, Encoding>(content, streamReader.CurrentEncoding);
 34            }
 1035        }
 36
 37        private static async Task<byte[]> ReadBytesAsync(Stream stream)
 038        {
 039            using (var memoryStream = new MemoryStream())
 040            {
 041                await stream.CopyToAsync(memoryStream);
 042                return memoryStream.ToArray();
 43            }
 044        }
 45
 46        public static async Task<BodyData> Parse([NotNull] Stream stream, [CanBeNull] string contentTypeHeaderValue)
 1047        {
 1048            var data = new BodyData();
 49
 6350            if (contentTypeHeaderValue != null && TextContentTypes.Any(text => contentTypeHeaderValue.StartsWith(text, S
 251            {
 52                try
 253                {
 254                    var stringData = await ReadStringAsync(stream);
 255                    data.BodyAsString = stringData.Item1;
 256                    data.Encoding = stringData.Item2;
 257                }
 058                catch
 059                {
 60                    // Reading as string failed, just get the ByteArray.
 061                    data.BodyAsBytes = await ReadBytesAsync(stream);
 062                }
 263            }
 1864            else if (contentTypeHeaderValue != null && JsonContentTypes.Any(json => contentTypeHeaderValue.StartsWith(js
 865            {
 866                var stringData = await ReadStringAsync(stream);
 867                data.BodyAsString = stringData.Item1;
 868                data.Encoding = stringData.Item2;
 69
 70                try
 871                {
 872                    data.BodyAsJson = JsonConvert.DeserializeObject(stringData.Item1, new JsonSerializerSettings { Forma
 873                }
 074                catch
 075                {
 76                    // JsonConvert failed, just set the Body as string.
 077                    data.BodyAsString = stringData.Item1;
 078                }
 879            }
 80            else
 081            {
 082                data.BodyAsBytes = await ReadBytesAsync(stream);
 083            }
 84
 1085            return data;
 1086        }
 87    }
 88}