Files
Common-VS2019/SacsCoreUnitTests/Standard/Base/Helpers/SacsCsvHelper_Tester.cs
T

129 lines
4.2 KiB
C#

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<String> data = new List<string>()
{
"A,B,C",
"D,\"E\",F,\"\"\"G\"\"\",H,\"I,\"",
"W,X,Y,Z"
};
// Parser configurations - all for 'standard' conversion.
List<SacsCsvHelper.ParserConfig> parserConfigs = new List<SacsCsvHelper.ParserConfig>()
{
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<String[]> 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<String> data = new List<string>()
{
"A,B,C",
"D,\"E,G,F,G,H,I",
"W,X,Y,Z"
};
SacsCsvHelper.ParserConfig config = new SacsCsvHelper.ParserConfig();
List<String[]> 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<String>() { "A", "B", "C" }), Is.EqualTo("A,B,C"));
Assert.That(SacsCsvHelper.ToCsv(new List<String>() { "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<String[]> dataRecords = new List<String[]>
{
new String[]{ "A", "B", "C" },
new String[]{ "D", "E", "F", "G", "H", "I" },
new String[]{ "W", "X", "Y", "Z" }
};
List<String> 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 ---
}
}