using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using NUnit.Framework; using Sarand.Net.Standard.Base.Helpers; using Sarand.Net.Standard.Base.Utils; namespace Sacs.UnitTests.Net.Standard.Base.Helpers { [TestFixture] public class SacsCsvHelper_Tester { // --- CSV Parsing --- // --- Tests --- [Test] public void ParseCsv_Data () { List data = new List() { "A,B,C", "D,\"E\",F,\"\"\"G\"\"\",H,\"I,\"", "W,X,Y,Z" }; // Parser configurations - all for 'standard' conversion. List parserConfigs = new List() { null, new SacsCsvHelper.ParserConfig() { BufferSize = 1024 }, new SacsCsvHelper.ParserConfig() { CountBytes = true }, new SacsCsvHelper.ParserConfig() { Encoding = Encoding.ASCII }, new SacsCsvHelper.ParserConfig() { LineBreakInQuotedFieldIsBadData = true }, new SacsCsvHelper.ParserConfig() { Comment = '\'' }, new SacsCsvHelper.ParserConfig() { AllowComments = true }, new SacsCsvHelper.ParserConfig() { IgnoreBlankLines = false }, new SacsCsvHelper.ParserConfig() { IgnoreQuotes = false }, new SacsCsvHelper.ParserConfig() { Quote = '"' }, new SacsCsvHelper.ParserConfig() { Delimiter = "," }, new SacsCsvHelper.ParserConfig() { Escape = '"' }, //new SacsCsvHelper.ParserConfig() { TrimOptions = TrimOptions.Trim }, }; foreach (SacsCsvHelper.ParserConfig parserConfig in parserConfigs) { List records = SacsCsvHelper.ParseCsv(data.Concat(Environment.NewLine), parserConfig); Assert.That(records, Is.Not.Null); // Record count. Assert.That(records.Count, Is.EqualTo(data.Count)); // Field counts. Assert.That(records[0].Length, Is.EqualTo(3)); Assert.That(records[1].Length, Is.EqualTo(6)); Assert.That(records[2].Length, Is.EqualTo(4)); // Field values. Assert.That(records[0][1], Is.EqualTo("B")); Assert.That(records[1][1], Is.EqualTo("E")); Assert.That(records[1][3], Is.EqualTo("\"G\"")); Assert.That(records[1][5], Is.EqualTo("I,")); Assert.That(records[2][1], Is.EqualTo("X")); } } [Test] public void ParseCsv_Data_InvalidQuotes () { List data = new List() { "A,B,C", "D,\"E,G,F,G,H,I", "W,X,Y,Z" }; SacsCsvHelper.ParserConfig config = new SacsCsvHelper.ParserConfig(); List records = SacsCsvHelper.ParseCsv(data.Concat(Environment.NewLine)); Assert.That(records, Is.Not.Null); // 1 invalid record ignored. Assert.That(records.Count, Is.EqualTo(data.Count - 1)); } // --- CSV Formatting --- [Test] public void ToCsv_Fields () { //SaCsvHelper csvHelper = new SaCsvHelper(); // Single record, alternative collections. Assert.That(SacsCsvHelper.ToCsv(new String[] { "A", "B", "C" }), Is.EqualTo("A,B,C")); Assert.That(SacsCsvHelper.ToCsv(new Collection() { "A", "B", "C" }), Is.EqualTo("A,B,C")); Assert.That(SacsCsvHelper.ToCsv(new List() { "A", "B", "C" }), Is.EqualTo("A,B,C")); Assert.That(SacsCsvHelper.ToCsv(new String[] { "D", "E", "F" }), Is.EqualTo("D,E,F")); // Embedded delimiter. Assert.That(SacsCsvHelper.ToCsv(new String[] { "A,", "B", "C" }), Is.EqualTo("\"A,\",B,C")); Assert.That(SacsCsvHelper.ToCsv(new String[] { "A", ",B", "C" }), Is.EqualTo("A,\",B\",C")); // Embedded quotes. Assert.That(SacsCsvHelper.ToCsv(new String[] { "\"A\"", "B", "C" }), Is.EqualTo("\"\"\"A\"\"\",B,C")); } [Test] public void ToCsv_Records () { //SaCsvHelper csvHelper = new SaCsvHelper(); List dataRecords = new List { new String[]{ "A", "B", "C" }, new String[]{ "D", "E", "F", "G", "H", "I" }, new String[]{ "W", "X", "Y", "Z" } }; List records = SacsCsvHelper.ToCsv(dataRecords); // Multiple records, multiple times to verify clearing of data each time. for (int i = 0; i < 10; i++) { Assert.That(records.Count, Is.EqualTo(3)); Assert.That(records[0], Is.EqualTo("A,B,C")); Assert.That(records[1], Is.EqualTo("D,E,F,G,H,I")); Assert.That(records[2], Is.EqualTo("W,X,Y,Z")); } } // --- The End --- } }