Prepare for partial CurveData parsing

This commit is contained in:
2018-08-23 09:23:14 -04:00
parent 6702834204
commit cc49f05d7e
7 changed files with 139 additions and 9 deletions
+127
View File
@@ -0,0 +1,127 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LeafWeb.Core.Charter;
using LeafWeb.Core.Entities;
using LeafWeb.Core.Parsers;
using LeafWeb.Core.Utility;
using NUnit.Framework;
namespace LeafWeb.Core.Tests.Charter
{
[TestFixture]
public class ChartInputTests
{
private const string ContentDirectory = @"C:\temp\leafgascomparison\";
private struct Stats
{
public FileInfo FileInfo;
public int Lines;
public int LeafGasComparisonCount;
public int CurveDataCount;
public string FailureLocation;
public Exception Exception;
}
[Test]
public void LeafGasComparison_Stats()
{
var leafgasComparisonFiles = Directory.GetFiles(ContentDirectory);
var stats = new List<Stats>();
foreach (var file in leafgasComparisonFiles.OrderBy(f => f))//.Take(10))
{
//var fileInfo = FileUtility.GetContentFile(ContentDirectory, file);
var fileInfo = new FileInfo(file);
stats.Add(GetStats(fileInfo));
}
Console.WriteLine("Filename\tLine Count\tLeafGasComparisonDataCount\tCurveDataCount\tStatus");
foreach (var stat in stats)
{
string output = stat.FileInfo.Name;
output += $"\t{stat.Lines}";
output += $"\t{stat.LeafGasComparisonCount}";
output += $"\t{stat.CurveDataCount}";
if (string.IsNullOrEmpty(stat.FailureLocation))
{
output += "\tsuccess";
}
else
{
output += $"\tfailed at {stat.FailureLocation}: {stat.Exception.Message}";
}
Console.WriteLine(output);
}
foreach (var stat in stats)
{
if (string.IsNullOrEmpty(stat.FailureLocation))
{
if (stat.CurveDataCount > 0)
{
File.Copy(stat.FileInfo.FullName, @"C:\temp\leafgascomparison\Good\" + stat.FileInfo.Name);
}
else
{
File.Copy(stat.FileInfo.FullName, @"C:\temp\leafgascomparison\NoCurveData\" + stat.FileInfo.Name);
}
}
else
{
if (stat.FailureLocation == "LeafGasComparisonParser")
{
File.Copy(stat.FileInfo.FullName, @"C:\temp\leafgascomparison\CannotParse\" + stat.FileInfo.Name);
}
else if (stat.FailureLocation == "CurveDataConverter")
{
File.Copy(stat.FileInfo.FullName, @"C:\temp\leafgascomparison\PartialCurveData\" + stat.FileInfo.Name);
}
}
}
}
private Stats GetStats(FileInfo fileInfo)
{
var stats = new Stats {FileInfo = fileInfo};
stats.Lines = File.ReadLines(fileInfo.FullName).Count();
LeafGasComparison[] leafGasComparisons;
try
{
using (var parser = new LeafGasComparisonParser(fileInfo))
leafGasComparisons = parser.Parse();
}
catch (Exception e)
{
stats.FailureLocation = "LeafGasComparisonParser";
stats.Exception = e;
return stats;
}
stats.LeafGasComparisonCount = leafGasComparisons.Length;
IEnumerable<CurveData> curves;
try
{
curves = CurveDataConverter.Convert(leafGasComparisons);
stats.CurveDataCount = curves.Count();
}
catch (Exception e)
{
stats.FailureLocation = "CurveDataConverter";
stats.Exception = e;
return stats;
}
return stats;
}
}
}
@@ -24,9 +24,9 @@ namespace LeafWeb.Core.Tests.Charter
}
[Test]
public void Convert_Papaya()
public void Convert_NoCurveData()
{
var fileInfo = FileUtility.GetContentFile(ContentDirectory, "Papaya_leafgascomparison.csv");
var fileInfo = FileUtility.GetContentFile(ContentDirectory, "leafgascomparison_NoCurveData.csv");
LeafGasComparison[] leafGasComparisons;
using (var parser = new LeafGasComparisonParser(fileInfo))
leafGasComparisons = parser.Parse();
@@ -38,13 +38,15 @@ namespace LeafWeb.Core.Tests.Charter
[Test]
public void Convert_ThrowsExpectionWhenNotEnoughDataSets()
{
var fileInfo = FileUtility.GetContentFile(ContentDirectory, "Sample4_leafgascomparison.csv");
var fileInfo = FileUtility.GetContentFile(ContentDirectory, "leafgascomparison_PartialCurveData.csv");
LeafGasComparison[] leafGasComparisons;
using (var parser = new LeafGasComparisonParser(fileInfo))
leafGasComparisons = parser.Parse();
Assert.Throws<ParseException>(() => CurveDataConverter.Convert(leafGasComparisons).ToArray());
//var h = CurveDataConverter.Convert(leafGasComparisons).ToArray();
Assert.Throws<ParseException>(() => CurveDataConverter.Convert(leafGasComparisons).ToArray());
}
}
}
+3 -2
View File
@@ -52,6 +52,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Charter\ChartInputTests.cs" />
<Compile Include="Charter\CurveDataConverterTests.cs" />
<Compile Include="Parsers\LeafGasComparisonParserTests.cs" />
<Compile Include="Parsers\FluxnetSiteCsvParserTests.cs" />
@@ -99,13 +100,13 @@
<Content Include="Parsers\LeafOutputData\leafgascomparison.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Parsers\LeafOutputData\Sample4_leafgascomparison.csv">
<Content Include="Parsers\LeafOutputData\leafgascomparison_PartialCurveData.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Parsers\LeafOutputData\multiple_leafgascomparison.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Parsers\LeafOutputData\Papaya_leafgascomparison.csv">
<Content Include="Parsers\LeafOutputData\leafgascomparison_NoCurveData.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Include="Parsers\LeafOutputData\leafgascomparison_extragroups.csv" />
+2 -2
View File
@@ -72,8 +72,8 @@ namespace LeafWeb.Core.Parsers
{
var values = GetNextCsvRowValues();
if (CsvReader.IsRecordEmpty())
//continue;
throw new ParseException($"Encountered empty line while reading fitting info on line {CsvReader.Row}");
continue;
//throw new ParseException($"Encountered empty line while reading fitting info on line {CsvReader.Row}");
if (values == null) // end of file
yield break;
if (matcher.IsPropertiesTitlesMatch(values))
+1 -1
View File
@@ -1 +1 @@
C:\Users\poprhythm\AppData\Local\Temp\Temporary ASP.NET Files\vs\f80e29bb\faae20bf\App_Web_all.generated.cs.8f9494c4.v5ghxtap.dll
C:\Users\poprhythm\AppData\Local\Temp\Temporary ASP.NET Files\vs\f80e29bb\faae20bf\App_Web_all.generated.cs.8f9494c4.wqlgo3gh.dll