public void WriteCharArrayTest()
        {
            TextWriter             baseWriter        = new StringWriter();
            int                    maximumLineLength = 80;
            bool                   disposeBaseWriter = true;
            LineWrappingTextWriter target            = new LineWrappingTextWriter(baseWriter, maximumLineLength, disposeBaseWriter);

            char[] buffer = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est, porttitor eget posuere in, hendrerit in tortor. Nulla adipiscing turpis id nibh egestas eu facilisis lorem condimentum volutpat.".ToCharArray();
            int    index  = 0;
            int    count  = buffer.Length;

            target.Write(buffer, index, count);
            target.Flush();

            // write it again, in pieces exactly as long as the max line length
            for (int x = 0; x < buffer.Length; x += maximumLineLength)
            {
                target.Write(buffer, x, Math.Min(buffer.Length - x, maximumLineLength));
            }
            target.Flush();

            // And again, in pieces less than the max line length
            for (int x = 0; x < buffer.Length; x += 50)
            {
                target.Write(buffer, x, Math.Min(buffer.Length - x, 50));
            }
            target.Flush();

            string result = baseWriter.ToString();

            Assert.AreEqual("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\nporttitor eget posuere in, hendrerit in tortor. Nulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\nporttitor eget posuere in, hendrerit in tortor. Nulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\nporttitor eget posuere in, hendrerit in tortor. Nulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\n", result);

            baseWriter = new StringWriter();
            target     = new LineWrappingTextWriter(baseWriter, maximumLineLength, disposeBaseWriter);

            // With line endings embedded.
            buffer = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est, porttitor eget posuere in,\r\n hendrerit in tortor.\r\nNulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\n".ToCharArray();
            count  = buffer.Length;

            target.Write(buffer, 0, count);
            target.Flush();
            result = baseWriter.ToString();
            Assert.AreEqual("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\nporttitor eget posuere in,\r\n hendrerit in tortor.\r\nNulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\n", result);

            baseWriter = new StringWriter();
            target     = new LineWrappingTextWriter(baseWriter, maximumLineLength, disposeBaseWriter);

            // With no place to wrap.
            buffer = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789".ToCharArray();
            count  = buffer.Length;
            target.Write(buffer, 0, count);
            target.Flush();
            result = baseWriter.ToString();
            Assert.AreEqual("01234567890123456789012345678901234567890123456789012345678901234567890123456789\r\n01234567890123456789\r\n", result);
        }
        public void WriteStringTest()
        {
            int    maximumLineLength = 80;
            bool   disposeBaseWriter = true;
            string value;

            using (TextWriter baseWriter = new StringWriter())
                using (LineWrappingTextWriter target = new LineWrappingTextWriter(baseWriter, maximumLineLength, disposeBaseWriter))
                {
                    value = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est, porttitor eget posuere in, hendrerit in tortor. Nulla adipiscing turpis id nibh egestas eu facilisis lorem condimentum volutpat.";
                    target.Write(value);
                    target.Flush();

                    // write it again, in pieces exactly as long as the max line length
                    for (int x = 0; x < value.Length; x += maximumLineLength)
                    {
                        target.Write(value.Substring(x, Math.Min(value.Length - x, maximumLineLength)));
                    }
                    target.Flush();

                    // And again, in pieces less than the max line length
                    for (int x = 0; x < value.Length; x += 50)
                    {
                        target.Write(value.Substring(x, Math.Min(value.Length - x, 50)));
                    }
                    target.Flush();

                    string result = baseWriter.ToString();
                    Assert.AreEqual("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\nporttitor eget posuere in, hendrerit in tortor. Nulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\nporttitor eget posuere in, hendrerit in tortor. Nulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\nporttitor eget posuere in, hendrerit in tortor. Nulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\n", result);
                }

            using (var baseWriter = new StringWriter())
                using (var target = new LineWrappingTextWriter(baseWriter, maximumLineLength, disposeBaseWriter))
                {
                    // With line endings embedded.
                    value = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est, porttitor eget posuere in,\r\n hendrerit in tortor.\r\nNulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\n";

                    target.Write(value);
                    target.Flush();
                    string result = baseWriter.ToString();
                    Assert.AreEqual("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\nporttitor eget posuere in,\r\n hendrerit in tortor.\r\nNulla adipiscing turpis id nibh\r\negestas eu facilisis lorem condimentum volutpat.\r\n", result);
                }

            using (var baseWriter = new StringWriter())
                using (var target = new LineWrappingTextWriter(baseWriter, maximumLineLength, disposeBaseWriter))
                {
                    // With no place to wrap.
                    value = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
                    target.Write(value);
                    target.Flush();
                    string result = baseWriter.ToString();
                    Assert.AreEqual("01234567890123456789012345678901234567890123456789012345678901234567890123456789\r\n01234567890123456789\r\n", result);
                }
        }
        public void WriteStringUnixLineEndingTest()
        {
            using (LineWrappingTextWriter target = LineWrappingTextWriter.ForStringWriter(80))
            {
                target.NewLine            = "\n";
                target.BaseWriter.NewLine = "\n";
                string value = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est, porttitor eget posuere in,\n hendrerit in tortor.\nNulla adipiscing turpis id nibh\negestas eu facilisis lorem condimentum volutpat.\n";

                target.Write(value);
                target.Flush();
                string result = target.BaseWriter.ToString();
                Assert.AreEqual("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\nporttitor eget posuere in,\n hendrerit in tortor.\nNulla adipiscing turpis id nibh\negestas eu facilisis lorem condimentum volutpat.\n", result);
            }
        }
        public void IndentStringTest()
        {
            TextWriter             baseWriter        = new StringWriter();
            int                    maximumLineLength = 80;
            bool                   disposeBaseWriter = true;
            LineWrappingTextWriter target            = new LineWrappingTextWriter(baseWriter, maximumLineLength, disposeBaseWriter)
            {
                Indent = 10
            };

            target.WriteLine(); // Writing an empty line should not cause the second line to be indented
            string value = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est, porttitor eget posuere in, hendrerit in tortor. Nulla adipiscing turpis id nibh egestas eu facilisis lorem condimentum volutpat.";

            target.Write(value);
            target.ResetIndent(); // Should add a new line

            // write it again, in pieces exactly as long as the max line length
            for (int x = 0; x < value.Length; x += maximumLineLength)
            {
                target.Write(value.Substring(x, Math.Min(value.Length - x, maximumLineLength)));
            }
            target.WriteLine();
            target.ResetIndent(); // Should not add an additional new line


            // And again, in pieces less than the max line length
            for (int x = 0; x < value.Length; x += 50)
            {
                target.Write(value.Substring(x, Math.Min(value.Length - x, 50)));
            }
            target.Flush();

            string result = baseWriter.ToString();

            Assert.AreEqual("\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\n          porttitor eget posuere in, hendrerit in tortor. Nulla adipiscing\r\n          turpis id nibh egestas eu facilisis lorem condimentum volutpat.\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\n          porttitor eget posuere in, hendrerit in tortor. Nulla adipiscing\r\n          turpis id nibh egestas eu facilisis lorem condimentum volutpat.\r\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Nam dolor est,\r\n          porttitor eget posuere in, hendrerit in tortor. Nulla adipiscing\r\n          turpis id nibh egestas eu facilisis lorem condimentum volutpat.\r\n", result);
        }