예제 #1
0
        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);
            }
        }
예제 #2
0
 public TextDecoder(TextReader reader, char separator = TextEncodingEscaper.DefaultSeparator)
 {
     this._reader = reader;
     this._escaper = new TextEncodingEscaper(separator);
 }
예제 #3
0
 public TextEncoder(TextWriter writer, char separator = TextEncodingEscaper.DefaultSeparator)
 {
     this._writer = writer;
     this._escaper = new TextEncodingEscaper(separator);
 }