< Summary

Class:Azure.Core.Pipeline.ContentTypeUtilities
Assembly:Azure.Security.KeyVault.Administration
File(s):C:\Git\azure-sdk-for-net\sdk\core\Azure.Core\src\Shared\ContentTypeUtilities.cs
Covered lines:11
Uncovered lines:8
Coverable lines:19
Total lines:58
Line coverage:57.8% (11 of 19)
Covered branches:10
Total branches:18
Branch coverage:55.5% (10 of 18)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
TryGetTextEncoding(...)-57.89%55.56%

File(s)

C:\Git\azure-sdk-for-net\sdk\core\Azure.Core\src\Shared\ContentTypeUtilities.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4#nullable disable
 5
 6using System;
 7using System.Text;
 8
 9namespace Azure.Core.Pipeline
 10{
 11    internal static class ContentTypeUtilities
 12    {
 13        public static bool TryGetTextEncoding(string contentType, out Encoding encoding)
 14        {
 15            const string charsetMarker = "; charset=";
 16            const string utf8Charset = "utf-8";
 17            const string textContentTypePrefix = "text/";
 18            const string jsonSuffix = "json";
 19            const string appJsonPrefix = "application/json";
 20            const string xmlSuffix = "xml";
 21            const string urlEncodedSuffix = "-urlencoded";
 22
 23            // Default is technically US-ASCII, but will default to UTF-8 which is a superset.
 24            const string appFormUrlEncoded = "application/x-www-form-urlencoded";
 25
 226            if (contentType == null)
 27            {
 028                encoding = null;
 029                return false;
 30            }
 31
 232            var charsetIndex = contentType.IndexOf(charsetMarker, StringComparison.OrdinalIgnoreCase);
 233            if (charsetIndex != -1)
 34            {
 035                ReadOnlySpan<char> charset = contentType.AsSpan().Slice(charsetIndex + charsetMarker.Length);
 036                if (charset.StartsWith(utf8Charset.AsSpan(), StringComparison.OrdinalIgnoreCase))
 37                {
 038                    encoding = Encoding.UTF8;
 039                    return true;
 40                }
 41            }
 42
 243            if (contentType.StartsWith(textContentTypePrefix, StringComparison.OrdinalIgnoreCase) ||
 244                contentType.EndsWith(jsonSuffix, StringComparison.OrdinalIgnoreCase) ||
 245                contentType.EndsWith(xmlSuffix, StringComparison.OrdinalIgnoreCase) ||
 246                contentType.EndsWith(urlEncodedSuffix, StringComparison.OrdinalIgnoreCase) ||
 247                contentType.StartsWith(appJsonPrefix, StringComparison.OrdinalIgnoreCase) ||
 248                contentType.StartsWith(appFormUrlEncoded, StringComparison.OrdinalIgnoreCase))
 49            {
 250                encoding = Encoding.UTF8;
 251                return true;
 52            }
 53
 054            encoding = null;
 055            return false;
 56        }
 57    }
 58}

Methods/Properties

TryGetTextEncoding(...)