From 2cb84c00ef850148b517513e059436907b8269c6 Mon Sep 17 00:00:00 2001 From: Anthony Truskinger Date: Fri, 8 Dec 2017 16:19:25 +1000 Subject: [PATCH] Had to downcast events specifically The CSV parser is being really annoying and not automatically downcasting base type arrays. This "fix" is unfortunately quite ugly and will likely need to be applied to many other `WriteToCsv` calls in the future. :angry: Original hash: 92be685e3d59f3aa903288bcd4abba5a200553ef --- Acoustics/Acoustics.Test/Shared/CsvTests.cs | 22 +++++++++++++++++++++ AudioAnalysis/AnalysisPrograms/KoalaMale.cs | 6 ++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Acoustics/Acoustics.Test/Shared/CsvTests.cs b/Acoustics/Acoustics.Test/Shared/CsvTests.cs index 1765014b9..9510fbaa0 100644 --- a/Acoustics/Acoustics.Test/Shared/CsvTests.cs +++ b/Acoustics/Acoustics.Test/Shared/CsvTests.cs @@ -386,6 +386,28 @@ public void TestBaseTypesAreSerializedAsEnumerable() Assert.AreEqual(childText, baseText); } + /// + /// For some inane reason CsvHelper does not downcast to derived types! + /// + [TestMethod] + public void TestBaseTypesAreSerializedAsEnumerableAcousticEvent() + { + var exampleEvent = new AcousticEvent(100.Seconds(), 15, 4, 100, 3000); + var exampleEvent2 = new AcousticEvent(100.Seconds(), 15, 4, 100, 3000); + AcousticEvent[] childArray = { exampleEvent, exampleEvent2 }; + EventBase[] baseArray = { exampleEvent, exampleEvent2 }; + + Csv.WriteToCsv(this.testFile, childArray); + + var childText = File.ReadAllText(this.testFile.FullName); + + Csv.WriteToCsv(this.testFile, baseArray); + + var baseText = File.ReadAllText(this.testFile.FullName); + + Assert.AreNotEqual(childText, baseText); + } + [TestMethod] public void TestInvariantCultureIsUsed() { diff --git a/AudioAnalysis/AnalysisPrograms/KoalaMale.cs b/AudioAnalysis/AnalysisPrograms/KoalaMale.cs index 6766aff50..654f9e8d2 100644 --- a/AudioAnalysis/AnalysisPrograms/KoalaMale.cs +++ b/AudioAnalysis/AnalysisPrograms/KoalaMale.cs @@ -12,6 +12,7 @@ namespace AnalysisPrograms using System.Drawing; using System.Drawing.Imaging; using System.IO; + using System.Linq; using Acoustics.Shared; using Acoustics.Shared.Contracts; using Acoustics.Shared.Csv; @@ -288,7 +289,8 @@ public static KoalaMaleResults Analysis(AudioRecording recording, IDictionary results) { - Csv.WriteToCsv(destination, results); + Csv.WriteToCsv(destination, results.Cast()); } public override List WriteSpectrumIndicesFiles(DirectoryInfo destination, string fileNameBase, IEnumerable results)