public void BufferSmallTest()
        {
            // 10 rows with 5 fields each containing 100 characters each.
            // = 5000 characters.
            const string fieldData =
                "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
            var rowData = new[] { fieldData, fieldData, fieldData, fieldData, fieldData };
            var csvData = new[]
            { rowData, rowData, rowData, rowData, rowData, rowData, rowData, rowData, rowData, rowData };
            var csvToWrite = WriteCsv(csvData, ';', "tooLong" + NEW_LINE);

            stringReader = new StringReader(csvToWrite);
            csvReader    = CsvReader.Builder(stringReader).ColumnSeparator(';').RowSeparator("tooLong" + NEW_LINE)
                           .FieldDelimiter('\"').ChunkSize(1).Build();
            // ChunkSize should be RowSeparator.length after this constructor call ("tooLong\r\n" = 9 characters).
            // ReadAllRows calls ReadRow consecutively...
            var csv = csvReader.ReadAllRows();

            Assert.IsNotNull(csv);
            CheckCsvValues(csv, csvData);
            // all following read-attempts should return null...
            var row = csvReader.ReadRow();

            Assert.IsNull(row);
            var rows = csvReader.ReadAllRows();

            Assert.IsNull(rows);
        }
 public void SpecifyingEncodingWithATextReaderThrowsException()
 {
     Assert.Throws <ArgumentException>(delegate
     {
         CsvReader.Builder(new StringReader("A;;A;T;;\r\nGreat")).Encoding(Encoding.UTF8).Build();
     });
 }
        public void ThreeLineFileWithLineBreaksAndEvilDelimitersTest()
        {
            stringReader = new StringReader("\"Great\";\"Totally\";\"Cool\"" + NEW_LINE + "\"Gr" + NEW_LINE +
                                            "eat\";\"Totally\";Cool" + NEW_LINE + "Great;Totally;Cool");

            csvReader = CsvReader.Builder(stringReader).ColumnSeparator(';').RowSeparator(NEW_LINE).FieldDelimiter('\"')
                        .Build();
            Assert.IsNotNull(csvReader);

            var row = csvReader.ReadRow();

            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "Great", "Totally", "Cool" }.ToList(), row);

            row = csvReader.ReadRow();
            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "Gr" + NEW_LINE + "eat", "Totally", "Cool" }.ToList(), row);

            row = csvReader.ReadRow();
            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "Great", "Totally", "Cool" }.ToList(), row);

            row = csvReader.ReadRow();
            Assert.IsNull(row);
        }
        public void TwoLinesWithEmptyLastLineAndPreviousFieldDelimiterTest()
        {
            stringReader = new StringReader("Great;Totally;");
            csvReader    = CsvReader.Builder(stringReader).ColumnSeparator(';').RowSeparator(NEW_LINE).FieldDelimiter(null)
                           .Build();

            var row = csvReader.ReadRow();

            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "Great", "Totally", "" }.ToList(), row);

            row = csvReader.ReadRow();
            Assert.IsNull(row);
        }
        public void EmptyFieldsTest()
        {
            stringReader = new StringReader("\"test\";test1;A 01;t;;");

            csvReader = CsvReader.Builder(stringReader).ColumnSeparator(';').RowSeparator(NEW_LINE).FieldDelimiter('\"')
                        .Build();
            Assert.IsNotNull(csvReader);

            var row = csvReader.ReadRow();

            Assert.IsNotNull(row);

            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "test", "test1", "A 01", "t", "", "" }, row);
        }
        public void BreaksBetweenDelimitersTest()
        {
            stringReader = new StringReader("test;\"test\r\nnewlineTest\";test2\r\ntest4;test5;test6");

            csvReader = CsvReader.Builder(stringReader).Build();
            Assert.IsNotNull(csvReader);

            var row = csvReader.ReadRow();

            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "test", "test\r\nnewlineTest", "test2" }.ToList(), row);

            row = csvReader.ReadRow();
            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "test4", "test5", "test6" }.ToList(), row);
        }
        public void ReadRowTest()
        {
            stringReader = new StringReader("test;test1;test2\r\ntest4;test5;test6");

            csvReader = CsvReader.Builder(stringReader).Build();
            Assert.IsNotNull(csvReader);

            var row = csvReader.ReadRow();

            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "test", "test1", "test2" }.ToList(), row);

            row = csvReader.ReadRow();
            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "test4", "test5", "test6" }.ToList(), row);
        }
        public void SpecialCharactersTest()
        {
            stringReader = new StringReader("����;\"!\"\"�$%&/()=?\"\r\n\"_:;'*\";<>.-,,#+");

            csvReader = CsvReader.Builder(stringReader).ColumnSeparator(';').RowSeparator("\r\n").FieldDelimiter('\"')
                        .Build();
            Assert.IsNotNull(csvReader);

            var row = csvReader.ReadRow();

            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "����", "!\"�$%&/()=?" }.ToList(), row);

            row = csvReader.ReadRow();
            Assert.IsNotNull(row);
            Assert.AreEqual(new[] { "_:;'*", "<>.-,,#+" }.ToList(), row);
        }
        public void QuoteSpecialTest()
        {
            stringReader = new StringReader("9008390101544,öäü,\"Normal\" Test a string.,,");

            csvReader = CsvReader.Builder(stringReader).ColumnSeparator(',').RowSeparator(NEW_LINE).FieldDelimiter(null)
                        .Build();
            Assert.IsNotNull(csvReader);

            var row = csvReader.ReadRow();

            Assert.IsNotNull(row);

            Assert.AreEqual(new[] { "9008390101544", "öäü", "\"Normal\" Test a string.", "", "" }.ToList(), row);

            row = csvReader.ReadRow();
            Assert.IsNull(row);
        }
        public void EscapedFieldDelimitersTest()
        {
            stringReader = new StringReader("\"A\",01,\"A\"\" \"\"01\",\"t\"\"\",,\"\"");

            csvReader = CsvReader.Builder(stringReader).ColumnSeparator(',').RowSeparator(NEW_LINE).FieldDelimiter('\"')
                        .Build();
            Assert.IsNotNull(csvReader);

            var row = csvReader.ReadRow();

            Assert.IsNotNull(row);

            Assert.AreEqual(new[] { "A", "01", "A\" \"01", "t\"", "", "" }.ToList(), row);

            row = csvReader.ReadRow();
            Assert.IsNull(row);
        }
        public void ReadAllRowsTest()
        {
            stringReader = new StringReader("test;test1;test5\r\n\"test2\";test3\r\ntest6;;\"test8\"");

            csvReader = CsvReader.Builder(stringReader).Build();
            Assert.IsNotNull(csvReader);

            var data = csvReader.ReadAllRows();

            Assert.IsNotNull(data);

            var d = new List <List <string> >
            {
                new[] { "test", "test1", "test5" }.ToList(),
                new[] { "test2", "test3" }.ToList(),
                new[] { "test6", "", "test8" }.ToList()
            };

            Assert.AreEqual(d, data);
        }