public static IEnumerable<object[]> HtmlEncode_TestData()
{
// Single quotes need to be encoded as ' rather than ' since ' is valid both for
// HTML and XHTML, but ' is valid only for XHTML.
// For more info: http://fishbowl.pastiche.org/2003/07/01/the_curse_of_apos/
yield return new object[] { "'", "'" };
yield return new object[] { "Hello! '\"<&>\u2665\u00E7 World", "Hello! '"<&>\u2665ç World" };
yield return new object[] { "<>\"\\&", "<>"\\&" };
yield return new object[] { "\u00A0", " " };
yield return new object[] { "\u00FF", "ÿ" };
yield return new object[] { "\u0100", "\u0100" };
yield return new object[] { "\u0021\u0023\u003D\u003F", "!#=?" };
// Surrogate pairs - default strict settings
yield return new object[] { char.ConvertFromUtf32(144308), "𣎴" };
yield return new object[] { "\uD800\uDC00", "𐀀" };
yield return new object[] { "a\uD800\uDC00b", "a𐀀b" };
// High BMP non-chars
yield return new object[] { "\uFFFD", "\uFFFD" };
yield return new object[] { "\uFFFE", "\uFFFE" };
yield return new object[] { "\uFFFF", "\uFFFF" };
// Lone high surrogate
yield return new object[] { "\uD800", "\uFFFD" };
yield return new object[] { "\uD800a", "\uFFFDa" };
// Lone low surrogate
yield return new object[] { "\uDC00", "\uFFFD" };
yield return new object[] { "\uDC00a", "\uFFFDa" };
// Invalid surrogate pair
yield return new object[] { "\uD800\uD800", "\uFFFD\uFFFD" }; // High, high
yield return new object[] { "\uDC00\uD800", "\uFFFD\uFFFD" }; // Low, high
yield return new object[] { "\uDC00\uDC00", "\uFFFD\uFFFD" }; // Low, low
// Basic
yield return new object[] { "Hello, world!", "Hello, world!" };
yield return new object[] { " ", " " };
// Empty string
yield return new object[] { "", "" };
yield return new object[] { null, null };
}