public void HtmlEncode_AllRangesAllowed_StillEncodesForbiddenChars_Extended() { // Arrange HtmlEncoder encoder = HtmlEncoder.Create(UnicodeRanges.All); // Act & assert - BMP chars for (int i = 0; i <= 0xFFFF; i++) { string input = new string((char)i, 1); string expected; if (IsSurrogateCodePoint(i)) { expected = "�"; // unpaired surrogate -> Unicode replacement char (escaped) } else { if (input == "<") { expected = "<"; } else if (input == ">") { expected = ">"; } else if (input == "&") { expected = "&"; } else if (input == "\"") { expected = """; } else { bool mustEncode = false; if (i == '\'' || i == '+') { mustEncode = true; // apostrophe, plus } else if (i <= 0x001F || (0x007F <= i && i <= 0x9F)) { mustEncode = true; // control char } else if (!UnicodeTestHelpers.IsCharacterDefined((char)i)) { mustEncode = true; // undefined (or otherwise disallowed) char } if (mustEncode) { expected = string.Format(CultureInfo.InvariantCulture, "&#x{0:X};", i); } else { expected = input; // no encoding } } } string retVal = encoder.Encode(input); Assert.Equal(expected, retVal); } // Act & assert - astral chars for (int i = 0x10000; i <= 0x10FFFF; i++) { string input = char.ConvertFromUtf32(i); string expected = string.Format(CultureInfo.InvariantCulture, "&#x{0:X};", i); string retVal = encoder.Encode(input); Assert.Equal(expected, retVal); } }