using System; using System.Linq; using Xunit; namespace Server.Tests; /// /// Tests for the Html.EscapeHtml extension methods. /// These tests verify correct HTML entity escaping and edge cases. /// [Collection("Sequential Server Tests")] public class HtmlEscapeTests { [Theory(DisplayName = "No escaping needed")] [InlineData("")] [InlineData("Hello World")] [InlineData("Plain text without special characters")] [InlineData("123456789")] [InlineData("!@#$%^*()_+-=[]{}|;:,.?")] public void EscapeHtml_NoSpecialCharacters_ReturnsUnchanged(string input) { var result = input.EscapeHtml(); Assert.Equal(input, result); } [Theory(DisplayName = "Single character escaping")] [InlineData("<", "<")] [InlineData(">", ">")] [InlineData("&", "&")] [InlineData("\"", """)] [InlineData("'", "'")] public void EscapeHtml_SingleSpecialCharacter_EscapesCorrectly(string input, string expected) { var result = input.EscapeHtml(); Assert.Equal(expected, result); } [Theory(DisplayName = "Complex mixed scenarios")] [InlineData("

Hello & goodbye

", "<p>Hello & goodbye</p>")] [InlineData("<already>", "&lt;already&gt;")] [InlineData("", "<tag attr="value" data='test'>")] [InlineData("ac&d\"e'f", "a<b>c&d"e'f")] [InlineData(" ", "&nbsp;")] public void EscapeHtml_ComplexScenarios_EscapesAllSpecialCharacters(string input, string expected) { var result = input.EscapeHtml(); Assert.Equal(expected, result); } [Fact(DisplayName = "Null string input")] public void EscapeHtml_NullString_ReturnsEmpty() { string? input = null; var result = input.EscapeHtml(); Assert.Empty(result); } [Fact(DisplayName = "Consecutive special characters")] public void EscapeHtml_ConsecutiveSpecialCharacters_EscapesAll() { const string input = "<<>>&&\"\"''"; const string expected = "<<>>&&""''"; var result = input.EscapeHtml(); Assert.Equal(expected, result); } [Fact(DisplayName = "Performance: long string with special characters")] public void EscapeHtml_LongStringWithSpecialCharacters_HandlesCorrectly() { var input = $"Start{new string('<', 100)}End{new string('&', 100)}Final"; var expected = $"Start{string.Join("", Enumerable.Repeat("<", 100))}End{string.Join("", Enumerable.Repeat("&", 100))}Final"; var result = input.EscapeHtml(); Assert.Equal(expected, result); } [Fact(DisplayName = "Unicode characters")] public void EscapeHtml_UnicodeCharacters_PreservedWithSpecialCharsEscaped() { const string input = "Hello δΈ–η•Œ & πŸŽ‰"; const string expected = "Hello δΈ–η•Œ <test> & πŸŽ‰"; var result = input.EscapeHtml(); Assert.Equal(expected, result); } }