< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 15
Coverable lines: 15
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%
Fallback(...)100%110%
Fallback(...)0%440%
GetNextChar()100%110%
MovePrevious()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    {
 034        public EncoderExceptionFallbackBuffer() { }
 35        public override bool Fallback(char charUnknown, int index)
 36        {
 37            // Fall back our char
 038            throw new EncoderFallbackException(
 039                SR.Format(SR.Argument_InvalidCodePageConversionIndex, (int)charUnknown, index), charUnknown, index);
 40        }
 41
 42        public override bool Fallback(char charUnknownHigh, char charUnknownLow, int index)
 43        {
 044            if (!char.IsHighSurrogate(charUnknownHigh))
 45            {
 046                throw new ArgumentOutOfRangeException(nameof(charUnknownHigh),
 047                    SR.Format(SR.ArgumentOutOfRange_Range, 0xD800, 0xDBFF));
 48            }
 049            if (!char.IsLowSurrogate(charUnknownLow))
 50            {
 051                throw new ArgumentOutOfRangeException(nameof(charUnknownLow),
 052                    SR.Format(SR.ArgumentOutOfRange_Range, 0xDC00, 0xDFFF));
 53            }
 54
 055            int iTemp = char.ConvertToUtf32(charUnknownHigh, charUnknownLow);
 56
 57            // Fall back our char
 058            throw new EncoderFallbackException(
 059                SR.Format(SR.Argument_InvalidCodePageConversionIndex, iTemp, index), charUnknownHigh, charUnknownLow, in
 60        }
 61
 062        public override char GetNextChar() => (char)0;
 63
 64        // Exception fallback doesn't have anywhere to back up to.
 065        public override bool MovePrevious() => false;
 66
 67        // Exceptions are always empty
 068        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()
 81            : base(SR.Arg_ArgumentException)
 82        {
 83            HResult = HResults.COR_E_ARGUMENT;
 84        }
 85
 86        public EncoderFallbackException(string? message)
 87            : base(message)
 88        {
 89            HResult = HResults.COR_E_ARGUMENT;
 90        }
 91
 92        public EncoderFallbackException(string? message, Exception? innerException)
 93            : base(message, innerException)
 94        {
 95            HResult = HResults.COR_E_ARGUMENT;
 96        }
 97
 98        internal EncoderFallbackException(
 99            string? message, char charUnknown, int index) : base(message)
 100        {
 101            _charUnknown = charUnknown;
 102            _index = index;
 103        }
 104
 105        internal EncoderFallbackException(
 106            string message, char charUnknownHigh, char charUnknownLow, int index) : base(message)
 107        {
 108            if (!char.IsHighSurrogate(charUnknownHigh))
 109            {
 110                throw new ArgumentOutOfRangeException(nameof(charUnknownHigh),
 111                    SR.Format(SR.ArgumentOutOfRange_Range, 0xD800, 0xDBFF));
 112            }
 113            if (!char.IsLowSurrogate(charUnknownLow))
 114            {
 115                throw new ArgumentOutOfRangeException(nameof(CharUnknownLow),
 116                    SR.Format(SR.ArgumentOutOfRange_Range, 0xDC00, 0xDFFF));
 117            }
 118
 119            _charUnknownHigh = charUnknownHigh;
 120            _charUnknownLow = charUnknownLow;
 121            _index = index;
 122        }
 123
 124        [Obsolete(Obsoletions.LegacyFormatterImplMessage, DiagnosticId = Obsoletions.LegacyFormatterImplDiagId, UrlForma
 125        private EncoderFallbackException(SerializationInfo serializationInfo, StreamingContext streamingContext)
 126            : base(serializationInfo, streamingContext)
 127        {
 128        }
 129
 130        public char CharUnknown => _charUnknown;
 131
 132        public char CharUnknownHigh => _charUnknownHigh;
 133
 134        public char CharUnknownLow => _charUnknownLow;
 135
 136        public int Index => _index;
 137
 138        // Return true if the unknown character is a surrogate pair.
 139        public bool IsUnknownSurrogate() => _charUnknownHigh != '\0';
 140    }
 141}
 142