Skip to content

Commit

Permalink
Revert UnicodeDebug.cs to not depend on the Debug.Assert interpolated…
Browse files Browse the repository at this point in the history
… string handler (#55954)

Turns out we use this file outside of corelib, in projects that build for pre-.NET 6, and the change was causing lots of string formatting for asserts that pass.
  • Loading branch information
stephentoub committed Jul 20, 2021
1 parent 04072ff commit 3d14674
Showing 1 changed file with 28 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.

using System.Diagnostics;
using System.Globalization;

namespace System.Text
{
Expand All @@ -11,39 +10,55 @@ internal static class UnicodeDebug
[Conditional("DEBUG")]
internal static void AssertIsBmpCodePoint(uint codePoint)
{
Debug.Assert(UnicodeUtility.IsBmpCodePoint(codePoint), $"The value {ToHexString(codePoint)} is not a valid BMP code point.");
if (!UnicodeUtility.IsBmpCodePoint(codePoint))
{
Debug.Fail($"The value {ToHexString(codePoint)} is not a valid BMP code point.");
}
}

[Conditional("DEBUG")]
internal static void AssertIsHighSurrogateCodePoint(uint codePoint)
{
Debug.Assert(UnicodeUtility.IsHighSurrogateCodePoint(codePoint), $"The value {ToHexString(codePoint)} is not a valid UTF-16 high surrogate code point.");
if (!UnicodeUtility.IsHighSurrogateCodePoint(codePoint))
{
Debug.Fail($"The value {ToHexString(codePoint)} is not a valid UTF-16 high surrogate code point.");
}
}

[Conditional("DEBUG")]
internal static void AssertIsLowSurrogateCodePoint(uint codePoint)
{
Debug.Assert(UnicodeUtility.IsLowSurrogateCodePoint(codePoint), $"The value {ToHexString(codePoint)} is not a valid UTF-16 low surrogate code point.");
if (!UnicodeUtility.IsLowSurrogateCodePoint(codePoint))
{
Debug.Fail($"The value {ToHexString(codePoint)} is not a valid UTF-16 low surrogate code point.");
}
}

[Conditional("DEBUG")]
internal static void AssertIsValidCodePoint(uint codePoint)
{
Debug.Assert(UnicodeUtility.IsValidCodePoint(codePoint), $"The value {ToHexString(codePoint)} is not a valid Unicode code point.");
if (!UnicodeUtility.IsValidCodePoint(codePoint))
{
Debug.Fail($"The value {ToHexString(codePoint)} is not a valid Unicode code point.");
}
}

[Conditional("DEBUG")]
internal static void AssertIsValidScalar(uint scalarValue)
{
Debug.Assert(UnicodeUtility.IsValidUnicodeScalar(scalarValue), $"The value {ToHexString(scalarValue)} is not a valid Unicode scalar value.");
if (!UnicodeUtility.IsValidUnicodeScalar(scalarValue))
{
Debug.Fail($"The value {ToHexString(scalarValue)} is not a valid Unicode scalar value.");
}
}

[Conditional("DEBUG")]
internal static void AssertIsValidSupplementaryPlaneScalar(uint scalarValue)
{
Debug.Assert(
UnicodeUtility.IsValidUnicodeScalar(scalarValue) && !UnicodeUtility.IsBmpCodePoint(scalarValue),
$"The value {ToHexString(scalarValue)} is not a valid supplementary plane Unicode scalar value.");
if (!UnicodeUtility.IsValidUnicodeScalar(scalarValue) || UnicodeUtility.IsBmpCodePoint(scalarValue))
{
Debug.Fail($"The value {ToHexString(scalarValue)} is not a valid supplementary plane Unicode scalar value.");
}
}

/// <summary>
Expand All @@ -52,6 +67,9 @@ internal static void AssertIsValidSupplementaryPlaneScalar(uint scalarValue)
/// <remarks>
/// The input value doesn't have to be a real code point in the Unicode codespace. It can be any integer.
/// </remarks>
private static string ToHexString(uint codePoint) => $"U+{codePoint:X4}";
private static string ToHexString(uint codePoint)
{
return FormattableString.Invariant($"U+{codePoint:X4}");
}
}
}

0 comments on commit 3d14674

Please sign in to comment.