示例#1
0
        public void RemoveTextQualifierWithEscaped_String_CorrectString(string item, string result)
        {
            var reader = new CsvReaderProxy();
            var value  = reader.RemoveTextQualifier(item, '\'', '`');

            Assert.That(value, Is.EqualTo(result));
        }
示例#2
0
        public void NextRecords_CsvWithCsvProfileEmptyCell_CorrectResults(string text, char fieldSeparator, string recordSeparator, string emptyCell)
        {
            using (var stream = new MemoryStream())
            {
                var writer = new StreamWriter(stream);
                writer.Write(text);
                writer.Flush();

                stream.Position = 0;
                var reader    = new CsvReaderProxy();
                var dataTable = reader.Read(stream, Encoding.UTF8, 0, false, recordSeparator, fieldSeparator, '\"', '\"', emptyCell, "_");

                Assert.That(dataTable.Rows[0].ItemArray[0], Is.EqualTo("a"));
                Assert.That(dataTable.Rows[0].ItemArray[1], Is.EqualTo("b"));
                Assert.That(dataTable.Rows[0].ItemArray[2], Is.EqualTo("c"));

                Assert.That(dataTable.Rows[1].ItemArray[0], Is.EqualTo("a"));
                Assert.That(dataTable.Rows[1].ItemArray[1], Is.EqualTo("?"));
                Assert.That(dataTable.Rows[1].ItemArray[2], Is.EqualTo("c"));

                Assert.That(dataTable.Rows[2].ItemArray[0], Is.EqualTo("?"));
                Assert.That(dataTable.Rows[2].ItemArray[1], Is.EqualTo("b"));
                Assert.That(dataTable.Rows[2].ItemArray[2], Is.EqualTo("c"));

                Assert.That(dataTable.Rows[3].ItemArray[0], Is.EqualTo("?"));
                Assert.That(dataTable.Rows[3].ItemArray[1], Is.EqualTo("b"));
                Assert.That(dataTable.Rows[3].ItemArray[2], Is.EqualTo("?"));

                writer.Dispose();
            }
        }
示例#3
0
        public void IdentifyPartialRecordSeparator_Csv_CorrectResult(string text, string recordSeparator, int result)
        {
            var reader = new CsvReaderProxy(20);
            var value  = reader.IdentifyPartialRecordSeparator(text, recordSeparator);

            Assert.That(value, Is.EqualTo(result));
        }
示例#4
0
        public void CleanRecord_Record_CorrectResult(string text, string recordSeparator, string result)
        {
            var reader = new CsvReaderProxy();
            var value  = reader.CleanRecord(text, recordSeparator);

            Assert.That(value, Is.EqualTo(result));
        }
示例#5
0
        public void IsLastRecord_Record_CorrectResult(string record, bool result)
        {
            var reader = new CsvReaderProxy();
            var value  = reader.IsLastRecord(record);

            Assert.That(value, Is.EqualTo(result));
        }
示例#6
0
        public void SplitLine_NullField_NullValue()
        {
            var reader = new CsvReaderProxy();
            var values = reader.SplitLine("a;(null)", ';', char.MinValue, char.MinValue, string.Empty);

            Assert.That(values.ElementAt(1), Is.Null);
        }
示例#7
0
        public void SplitLine_RecordWithThreeFields_CorrectParsing(string record, string thirdToken)
        {
            var reader = new CsvReaderProxy();
            var values = reader.SplitLine(record, ';', '\'', '\'', string.Empty).ToList();

            Assert.That(values[2], Is.EqualTo(thirdToken));
        }
示例#8
0
        public void SplitLine_RecordWithTwoFields_CorrectParsing(string record, string firstToken)
        {
            var reader = new CsvReaderProxy();
            var values = reader.SplitLine(record, ';', '\'', '\'', string.Empty).ToList();

            Assert.That(values[0], Is.EqualTo(firstToken));
            Assert.That(values[1], Is.EqualTo("xyz"));
        }
示例#9
0
        public void Read_MissingValue_MatchWithNullValue()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write("a;b;c\r\na;b\r\na;b;c");
                    writer.Flush();

                    stream.Position = 0;

                    var profile   = new CsvProfile(';', '"', "\r\n", false, true, 512, string.Empty, "(null)");
                    var reader    = new CsvReaderProxy(profile);
                    var dataTable = reader.Read(stream);
                    Assert.That(dataTable.Rows[1][2], Is.EqualTo("(null)"));
                }
            }
        }
示例#10
0
        public void Read_EmptyValue_MatchWithEmpty()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write("a;;c");
                    writer.Flush();

                    stream.Position = 0;

                    var profile   = CsvProfile.SemiColumnDoubleQuote;
                    var reader    = new CsvReaderProxy(profile);
                    var dataTable = reader.Read(stream);
                    Assert.That(dataTable.Rows[0][1], Is.EqualTo(string.Empty));
                }
            }
        }
示例#11
0
        public void Read_MissingValue_MatchWithNullValue()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write("a;b;c\r\na;b\r\na;b;c");
                    writer.Flush();

                    stream.Position = 0;

                    var profile   = CsvProfile.SemiColumnDoubleQuote;
                    var reader    = new CsvReaderProxy(profile);
                    var dataTable = reader.Read(stream);
                    Assert.That(dataTable.Rows[1][2], Is.EqualTo("(null)"));
                }
            }
        }
示例#12
0
        public void GetFirstRecord_CsvWithSemiSeparator_CorrectResult(string text, string recordSeparator, int bufferSize)
        {
            using (var stream = new MemoryStream())
            {
                var writer = new StreamWriter(stream);
                writer.Write(text);
                writer.Flush();

                stream.Position = 0;

                var reader = new CsvReaderProxy();
                using (StreamReader streamReader = new StreamReader(stream, Encoding.UTF8, true))
                {
                    var value = reader.GetFirstRecord(streamReader, recordSeparator, bufferSize);
                    Assert.That(value, Is.EqualTo("abc+abc" + recordSeparator).Or.EqualTo("abc+abc"));
                }
                writer.Dispose();
            }
        }
示例#13
0
        public void CountRecordSeparator_Csv_CorrectCount(string text, string recordSeparator, int bufferSize, int result)
        {
            using (var stream = new MemoryStream())
            {
                var writer = new StreamWriter(stream);
                writer.Write(text);
                writer.Flush();

                stream.Position = 0;

                var reader = new CsvReaderProxy();
                using (StreamReader streamReader = new StreamReader(stream, Encoding.UTF8, true))
                {
                    var value = reader.CountRecordSeparators(streamReader, recordSeparator, '#', bufferSize);
                    Assert.That(value, Is.EqualTo(result));
                }
                writer.Dispose();
            }
        }
示例#14
0
        public void Read_MoreFieldThanExpected_ExceptionMessage(string text, int rowNumber, int moreField)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write(text);
                    writer.Flush();

                    stream.Position = 0;

                    var profile = CsvProfile.SemiColumnDoubleQuote;
                    var reader  = new CsvReaderProxy(profile);

                    var ex = Assert.Throws <InvalidDataException>(delegate { reader.Read(stream); });
                    Assert.That(ex.Message, Is.StringContaining(string.Format("record {0} ", rowNumber + 1)));
                    Assert.That(ex.Message, Is.StringContaining(string.Format("{0} more", moreField)));
                }
            }
        }
示例#15
0
        public void Read_Comment_CommentedLinesSkipped(string content)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write(content);
                    writer.Flush();

                    stream.Position = 0;

                    var profile = new CsvProfile(new CsvDialectDescriptor {
                        Header = false, Delimiter = ';', CommentChar = '#', DoubleQuote = false
                    });
                    var reader    = new CsvReaderProxy(profile);
                    var dataTable = reader.Read(stream);
                    Assert.That(dataTable.Rows.Count, Is.EqualTo(2));
                    Assert.That(dataTable.Columns.Count, Is.EqualTo(3));
                }
            }
        }
示例#16
0
        public void NextRecords_Csv_CorrectResults(string text, string recordSeparator, int bufferSize)
        {
            using (var stream = new MemoryStream())
            {
                var writer = new StreamWriter(stream);
                writer.Write(text);
                writer.Flush();

                stream.Position = 0;

                var reader = new CsvReaderProxy();
                using (var streamReader = new StreamReader(stream, Encoding.UTF8, true))
                {
                    var(values, extraRead, eof) = reader.GetNextRecords(streamReader, recordSeparator, '#', bufferSize, string.Empty);
                    foreach (var value in values)
                    {
                        Assert.That(value, Does.StartWith("abc"));
                        Assert.That(value, Does.EndWith("abc").Or.EndWith("\0").Or.EndWith(recordSeparator));
                    }
                }
                writer.Dispose();
            }
        }
示例#17
0
        public void Read_Csv_CorrectResult(string text, int bufferSize, int columnCount)
        {
            using (var stream = new MemoryStream())
            {
                var writer = new StreamWriter(stream);
                writer.Write(text);
                writer.Flush();

                stream.Position = 0;

                var reader    = new CsvReaderProxy(new CsvProfile(';', '\"', "\r\n", false, false, "(empty)", "(null)"), bufferSize);
                var dataTable = reader.Read(stream);
                Assert.That(dataTable.Rows, Has.Count.EqualTo(4));
                Assert.That(dataTable.Columns, Has.Count.EqualTo(columnCount));
                foreach (DataRow row in dataTable.Rows)
                {
                    foreach (var cell in row.ItemArray)
                    {
                        Assert.That(cell.ToString(), Has.Length.EqualTo(3).Or.EqualTo("(empty)").Or.EqualTo("(null)"));
                    }
                }
                writer.Dispose();
            }
        }
示例#18
0
        public void SplitLine_RecordWithUnescapedTextQualifier_ThrowException(string record)
        {
            var reader = new CsvReaderProxy();

            Assert.Throws <ArgumentException>(() => reader.SplitLine(record, ';', '\'', '\'', string.Empty).ToList());
        }