< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 31
Coverable lines: 31
Total lines: 142
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor()100%110%
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)0%440%
.ctor(...)100%110%
IsUnknownSurrogate()100%110%

File(s)

https://raw.githubusercontent.com/dotnet/runtime/811a7eabb75c42db53440e8ba3f60c07511cfd1f/src/libraries/System.Private.CoreLib/src/System/Text/EncoderExceptionFallback.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Diagnostics.CodeAnalysis;
 5using System.Runtime.CompilerServices;
 6using System.Runtime.Serialization;
 7
 8namespace System.Text
 9{
 10    public sealed class EncoderExceptionFallback : EncoderFallback
 11    {
 12        internal static readonly EncoderExceptionFallback s_default = new EncoderExceptionFallback();
 13
 14        // Construction
 15        public EncoderExceptionFallback()
 16        {
 17        }
 18
 19        public override EncoderFallbackBuffer CreateFallbackBuffer() =>
 20            new EncoderExceptionFallbackBuffer();
 21
 22        // Maximum number of characters that this instance of this fallback could return
 23        public override int MaxCharCount => 0;
 24
 25        public override bool Equals([NotNullWhen(true)] object? value) =>
 26            value is EncoderExceptionFallback;
 27
 28        public override int GetHashCode() => 654;
 29    }
 30
 31
 32    public sealed class EncoderExceptionFallbackBuffer : EncoderFallbackBuffer
 33    {
 34        public EncoderExceptionFallbackBuffer() { }
 35        public override bool Fallback(char charUnknown, int index)
 36        {
 37            // Fall back our char
 38            throw new EncoderFallbackException(
 39                SR.Format(SR.Argument_InvalidCodePageConversionIndex, (int)charUnknown, index), charUnknown, index);
 40        }
 41
 42        public override bool Fallback(char charUnknownHigh, char charUnknownLow, int index)
 43        {
 44            if (!char.IsHighSurrogate(charUnknownHigh))
 45            {
 46                throw new ArgumentOutOfRangeException(nameof(charUnknownHigh),
 47                    SR.Format(SR.ArgumentOutOfRange_Range, 0xD800, 0xDBFF));
 48            }
 49            if (!char.IsLowSurrogate(charUnknownLow))
 50            {
 51                throw new ArgumentOutOfRangeException(nameof(charUnknownLow),
 52                    SR.Format(SR.ArgumentOutOfRange_Range, 0xDC00, 0xDFFF));
 53            }
 54
 55            int iTemp = char.ConvertToUtf32(charUnknownHigh, charUnknownLow);
 56
 57            // Fall back our char
 58            throw new EncoderFallbackException(
 59                SR.Format(SR.Argument_InvalidCodePageConversionIndex, iTemp, index), charUnknownHigh, charUnknownLow, in
 60        }
 61
 62        public override char GetNextChar() => (char)0;
 63
 64        // Exception fallback doesn't have anywhere to back up to.
 65        public override bool MovePrevious() => false;
 66
 67        // Exceptions are always empty
 68        public override int Remaining => 0;
 69    }
 70
 71    [Serializable]
 72    [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
 73    public sealed class EncoderFallbackException : ArgumentException
 74    {
 75        private readonly char _charUnknown;
 76        private readonly char _charUnknownHigh;
 77        private readonly char _charUnknownLow;
 78        private readonly int _index;
 79
 80        public EncoderFallbackException()
 081            : base(SR.Arg_ArgumentException)
 82        {
 083            HResult = HResults.COR_E_ARGUMENT;
 084        }
 85
 86        public EncoderFallbackException(string? message)
 087            : base(message)
 88        {
 089            HResult = HResults.COR_E_ARGUMENT;
 090        }
 91
 92        public EncoderFallbackException(string? message, Exception? innerException)
 093            : base(message, innerException)
 94        {
 095            HResult = HResults.COR_E_ARGUMENT;
 096        }
 97
 98        internal EncoderFallbackException(
 099            string? message, char charUnknown, int index) : base(message)
 100        {
 0101            _charUnknown = charUnknown;
 0102            _index = index;
 0103        }
 104
 105        internal EncoderFallbackException(
 0106            string message, char charUnknownHigh, char charUnknownLow, int index) : base(message)
 107        {
 0108            if (!char.IsHighSurrogate(charUnknownHigh))
 109            {
 0110                throw new ArgumentOutOfRangeException(nameof(charUnknownHigh),
 0111                    SR.Format(SR.ArgumentOutOfRange_Range, 0xD800, 0xDBFF));
 112            }
 0113            if (!char.IsLowSurrogate(charUnknownLow))
 114            {
 0115                throw new ArgumentOutOfRangeException(nameof(CharUnknownLow),
 0116                    SR.Format(SR.ArgumentOutOfRange_Range, 0xDC00, 0xDFFF));
 117            }
 118
 0119            _charUnknownHigh = charUnknownHigh;
 0120            _charUnknownLow = charUnknownLow;
 0121            _index = index;
 0122        }
 123
 124        [Obsolete(Obsoletions.LegacyFormatterImplMessage, DiagnosticId = Obsoletions.LegacyFormatterImplDiagId, UrlForma
 125        private EncoderFallbackException(SerializationInfo serializationInfo, StreamingContext streamingContext)
 0126            : base(serializationInfo, streamingContext)
 127        {
 0128        }
 129
 0130        public char CharUnknown => _charUnknown;
 131
 0132        public char CharUnknownHigh => _charUnknownHigh;
 133
 0134        public char CharUnknownLow => _charUnknownLow;
 135
 0136        public int Index => _index;
 137
 138        // Return true if the unknown character is a surrogate pair.
 0139        public bool IsUnknownSurrogate() => _charUnknownHigh != '\0';
 140    }
 141}
 142