129 lines
4.2 KiB
C#
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 ---
|
|
}
|
|
}
|