142
CsvLib.Tests/CsvFieldIndexerTests.cs
Normal file
142
CsvLib.Tests/CsvFieldIndexerTests.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
using CsvLib;
|
||||
|
||||
namespace CvsLib;
|
||||
|
||||
public class CsvFieldIndexerTests
|
||||
{
|
||||
#region GenerateIndex
|
||||
|
||||
[Fact]
|
||||
public void GenerateIndex__Empty()
|
||||
{
|
||||
// --- Arrange
|
||||
StringReader sr = new(string.Empty);
|
||||
|
||||
// --- Act
|
||||
CsvFieldIndexer indexer = new();
|
||||
indexer.GenerateIndex(sr);
|
||||
|
||||
// --- Assert
|
||||
|
||||
Assert.Single(indexer.Index);
|
||||
|
||||
Assert.Equal(0, indexer.Index[0]);
|
||||
Assert.Empty(indexer.FieldIndex);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GenerateIndex__PlainText__OneRow()
|
||||
{
|
||||
// --- Arrange
|
||||
StringReader sr = new("Hello World");
|
||||
|
||||
// --- Act
|
||||
CsvFieldIndexer indexer = new();
|
||||
indexer.GenerateIndex(sr);
|
||||
|
||||
// --- Assert
|
||||
|
||||
Assert.Equal(2, indexer.Index.Count);
|
||||
Assert.Equal(0, indexer.Index[0]);
|
||||
Assert.Equal(12, indexer.Index[1]);
|
||||
|
||||
Assert.Single(indexer.FieldIndex);
|
||||
Assert.Equal(0, indexer.FieldIndex[0][0]);
|
||||
Assert.Equal(10, indexer.FieldIndex[0][1]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GenerateIndex__TwoLinesOfPainText__TwoRows()
|
||||
{
|
||||
// --- Arrange
|
||||
StringReader sr = new("""
|
||||
Hello World
|
||||
Hello World
|
||||
""");
|
||||
|
||||
// --- Act
|
||||
CsvFieldIndexer indexer = new();
|
||||
indexer.GenerateIndex(sr);
|
||||
|
||||
// --- Assert
|
||||
|
||||
Assert.Equal(3, indexer.Index.Count);
|
||||
Assert.Equal(0, indexer.Index[0]);
|
||||
Assert.Equal(12, indexer.Index[1]);
|
||||
Assert.Equal(24, indexer.Index[2]);
|
||||
|
||||
Assert.Equal(2, indexer.FieldIndex.Count);
|
||||
Assert.Equal(2, indexer.FieldIndex[0].Count);
|
||||
Assert.Equal(0, indexer.FieldIndex[0][0]);
|
||||
Assert.Equal(10, indexer.FieldIndex[0][1]);
|
||||
Assert.Equal(2, indexer.FieldIndex[1].Count);
|
||||
Assert.Equal(12, indexer.FieldIndex[1][0]);
|
||||
Assert.Equal(22, indexer.FieldIndex[1][1]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GenerateIndex__TwoLinesOfQuotedText__TwoRows()
|
||||
{
|
||||
// --- Arrange
|
||||
StringReader sr = new("""
|
||||
"Hello World"
|
||||
"Hello World"
|
||||
""");
|
||||
|
||||
// --- Act
|
||||
CsvFieldIndexer indexer = new();
|
||||
indexer.GenerateIndex(sr);
|
||||
|
||||
// --- Assert
|
||||
|
||||
Assert.Equal(3, indexer.Index.Count);
|
||||
Assert.Equal(0, indexer.Index[0]);
|
||||
Assert.Equal(14, indexer.Index[1]);
|
||||
Assert.Equal(28, indexer.Index[2]);
|
||||
|
||||
Assert.Equal(2, indexer.FieldIndex.Count);
|
||||
Assert.Equal(2, indexer.FieldIndex[0].Count);
|
||||
Assert.Equal(1, indexer.FieldIndex[0][0]);
|
||||
Assert.Equal(11, indexer.FieldIndex[0][1]);
|
||||
Assert.Equal(2, indexer.FieldIndex[1].Count);
|
||||
Assert.Equal(15, indexer.FieldIndex[1][0]);
|
||||
Assert.Equal(25, indexer.FieldIndex[1][1]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GenerateIndex__TwoLinesWithTwoQuotedColumns__TwoRowsTwoFields()
|
||||
{
|
||||
// --- Arrange
|
||||
StringReader sr = new("""
|
||||
"Hello","World"
|
||||
"Hello","World"
|
||||
""");
|
||||
|
||||
// --- Act
|
||||
CsvFieldIndexer indexer = new();
|
||||
indexer.GenerateIndex(sr);
|
||||
|
||||
// --- Assert
|
||||
|
||||
Assert.Equal(3, indexer.Index.Count);
|
||||
Assert.Equal(0, indexer.Index[0]);
|
||||
Assert.Equal(16, indexer.Index[1]);
|
||||
Assert.Equal(32, indexer.Index[2]);
|
||||
|
||||
Assert.Equal(2, indexer.FieldIndex.Count);
|
||||
Assert.Equal(4, indexer.FieldIndex[0].Count);
|
||||
Assert.Equal(1, indexer.FieldIndex[0][0]);
|
||||
Assert.Equal(5, indexer.FieldIndex[0][1]);
|
||||
Assert.Equal(9, indexer.FieldIndex[0][2]);
|
||||
Assert.Equal(13, indexer.FieldIndex[0][3]);
|
||||
Assert.Equal(4, indexer.FieldIndex[1].Count);
|
||||
Assert.Equal(17, indexer.FieldIndex[1][0]);
|
||||
Assert.Equal(21, indexer.FieldIndex[1][1]);
|
||||
Assert.Equal(25, indexer.FieldIndex[1][2]);
|
||||
Assert.Equal(29, indexer.FieldIndex[1][3]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion GenerateIndex
|
||||
}
|
||||
29
CsvLib.Tests/CsvLib.Tests.csproj
Normal file
29
CsvLib.Tests/CsvLib.Tests.csproj
Normal file
@@ -0,0 +1,29 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>CvsLib</RootNamespace>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
|
||||
<PackageReference Include="xunit" Version="2.4.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="coverlet.collector" Version="3.1.2">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CsvLib\CsvLib.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
1
CsvLib.Tests/Usings.cs
Normal file
1
CsvLib.Tests/Usings.cs
Normal file
@@ -0,0 +1 @@
|
||||
global using Xunit;
|
||||
Reference in New Issue
Block a user