diff --git a/src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs b/src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs new file mode 100644 index 0000000000..9af5b25d27 --- /dev/null +++ b/src/Umbraco.Core/Extensions/HtmlEncodedStringExtensions.cs @@ -0,0 +1,19 @@ +using System.Diagnostics.CodeAnalysis; +using Umbraco.Cms.Core.Strings; + +namespace Umbraco.Extensions; + +public static class HtmlEncodedStringExtensions +{ + /// + /// Checks if the specified is null or only contains whitespace, optionally after all HTML tags have been stripped/removed. + /// + /// The encoded HTML string. + /// If set to true strips/removes all HTML tags. + /// + /// Returns true if the HTML string is null or only contains whitespace, optionally after all HTML tags have been stripped/removed. + /// + public static bool IsNullOrWhiteSpace([NotNullWhen(false)] this IHtmlEncodedString? htmlEncodedString, bool stripHtml = false) + => (htmlEncodedString?.ToHtmlString() is var htmlString && string.IsNullOrWhiteSpace(htmlString)) || + (stripHtml && string.IsNullOrWhiteSpace(htmlString.StripHtml())); +} diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs new file mode 100644 index 0000000000..4703cebb40 --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Extensions/HtmlEncodedStringExtensionsTests.cs @@ -0,0 +1,26 @@ +using Moq; +using NUnit.Framework; +using Umbraco.Cms.Core.Strings; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Extensions; + +[TestFixture] +public class HtmlEncodedStringExtensionsTests +{ + [TestCase(null, false, true)] + [TestCase("", false, true)] + [TestCase(" ", false, true)] + [TestCase("This is a non-empty string", false, false)] + [TestCase("

This is a non-empty string

", true,false)] + [TestCase("

This is a non-empty string

", false,false)] + [TestCase("

", true, true)] + [TestCase("

", false, false)] + public void IsNullOrWhiteSpace(string? htmlString, bool stripHtml, bool expectedResult) + { + var htmlEncodedString = htmlString == null ? null : Mock.Of(x => x.ToHtmlString() == htmlString); + var result = htmlEncodedString.IsNullOrWhiteSpace(stripHtml: stripHtml); + + Assert.AreEqual(expectedResult, result); + } +}