Files
Common-VS2019/SacsCoreUnitTests/Standard/Base/Helpers/SacsCsvHelper_Tester.cs
T
2021-05-05 15:36:28 +01:00

134 lines
4.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Sarand.Net.Standard.Base.Helpers;
using Sarand.Net.Standard.Base.Utils;
namespace Sacs.UnitTests.Net.Standard.Base.Helpers
{
//=======================================================================
[TestClass]
public class SacsCsvHelper_Tester
{
//-------------------------------------------------------------------
// C o n v e r t F r o m C S V
//-------------------------------------------------------------------
[TestMethod]
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.IsNotNull(records);
// Record count.
Assert.AreEqual(data.Count, records.Count);
// Field counts.
Assert.AreEqual(3, records[0].Length);
Assert.AreEqual(6, records[1].Length);
Assert.AreEqual(4, records[2].Length);
// Field values.
Assert.AreEqual("B", records[0][1]);
Assert.AreEqual("E", records[1][1]);
Assert.AreEqual("\"G\"", records[1][3]);
Assert.AreEqual("I,", records[1][5]);
Assert.AreEqual("X", records[2][1]);
}
}
//-------------------------------------------------------------------
[TestMethod]
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.IsNotNull(records);
// 1 invalid record ignored.
Assert.AreEqual(data.Count - 1, records.Count);
}
//-------------------------------------------------------------------
// C o n v e r t T o C S V
//-------------------------------------------------------------------
[TestMethod]
public void ToCsv_Fields ()
{
//SaCsvHelper csvHelper = new SaCsvHelper();
// Single record, alternative collections.
Assert.AreEqual("A,B,C", SacsCsvHelper.ToCsv(new String[] { "A", "B", "C" }));
Assert.AreEqual("A,B,C", SacsCsvHelper.ToCsv(new Collection<String>() { "A", "B", "C" }));
Assert.AreEqual("A,B,C", SacsCsvHelper.ToCsv(new List<String>() { "A", "B", "C" }));
Assert.AreEqual("D,E,F", SacsCsvHelper.ToCsv(new String[] { "D", "E", "F" }));
// Embedded delimiter.
Assert.AreEqual("\"A,\",B,C", SacsCsvHelper.ToCsv(new String[] { "A,", "B", "C" }));
Assert.AreEqual("A,\",B\",C", SacsCsvHelper.ToCsv(new String[] { "A", ",B", "C" }));
// Embedded quotes.
Assert.AreEqual("\"\"\"A\"\"\",B,C", SacsCsvHelper.ToCsv(new String[] { "\"A\"", "B", "C" }));
}
//-------------------------------------------------------------------
[TestMethod]
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.AreEqual(3, records.Count);
Assert.AreEqual("A,B,C", records[0]);
Assert.AreEqual("D,E,F,G,H,I", records[1]);
Assert.AreEqual("W,X,Y,Z", records[2]);
}
}
//-------------------------------------------------------------------
}
//=======================================================================
}