public static void TestTextEscapes() { const string Separators = ",a#SsNn?\t"; var testStrings = new[] { "aaa", "aab", "baa", "aaaa", "a" + char.MaxValue, "a" + (char)(char.MaxValue - 1), "a" + char.MaxValue + ",", "Sn#S\nab,c", "#?E#?e\n###?>??ee", "\n", "\t", } .OrderBy(s => s, StringComparer.Ordinal) .ToList() .AsReadOnly(); foreach (var sep in Separators) { var escaper = new TextEncodingEscaper(sep); // test you can escape and unescape foreach (var s in testStrings) { var keyEscaped = escaper.EscapeKeyString(s); keyEscaped.Contains(sep).ShouldEqual(false); keyEscaped.Contains('\n').ShouldEqual(false); var keyUnescaped = escaper.UnescapeKeyString(keyEscaped); keyUnescaped.ShouldEqual(s); var valueEscaped = escaper.EscapeValueString(s); valueEscaped.Contains(sep).ShouldEqual(false); valueEscaped.Contains('\n').ShouldEqual(false); var valueUnescaped = escaper.UnescapeValueString(valueEscaped); valueUnescaped.ShouldEqual(s); } // test that ordering is preserved for keys var reorderdEscaped = testStrings.Reverse() .Select(escaper.EscapeKeyString) .OrderBy(s => s, StringComparer.Ordinal) .ToList() .AsReadOnly(); reorderdEscaped.Select(escaper.UnescapeKeyString) .SequenceEqual(testStrings) .Assert(testStrings + " != " + reorderdEscaped); } }
public TextDecoder(TextReader reader, char separator = TextEncodingEscaper.DefaultSeparator) { this._reader = reader; this._escaper = new TextEncodingEscaper(separator); }
public TextEncoder(TextWriter writer, char separator = TextEncodingEscaper.DefaultSeparator) { this._writer = writer; this._escaper = new TextEncodingEscaper(separator); }