134 lines
4.7 KiB
C#
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]);
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|