diff data/fileio/test/CSVFormatTest.h @ 1870:1b8c4ee06f6d csv-import-headers

Detect presence of header row in CSV format guesser; use headings to inform our guesses about column purposes; test this
author Chris Cannam
date Wed, 17 Jun 2020 18:01:00 +0100
parents 9570ef94eaa3
children 1d44fdc8196c
line wrap: on
line diff
--- a/data/fileio/test/CSVFormatTest.h	Tue Jun 16 15:15:57 2020 +0100
+++ b/data/fileio/test/CSVFormatTest.h	Wed Jun 17 18:01:00 2020 +0100
@@ -105,6 +105,7 @@
     
     void comment() {
         CSVFormat f;
+        f.setHeaderStatus(CSVFormat::HeaderAbsent);
         QVERIFY(f.guessFormatFor(csvDir.filePath("comment.csv")));
         QCOMPARE(f.getSeparator(), QChar(','));
         QCOMPARE(f.getColumnCount(), 4);
@@ -142,6 +143,18 @@
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-1d-samples.csv")));
         QCOMPARE(f.getColumnCount(), 1);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames);
+        QCOMPARE(f.getModelType(), CSVFormat::OneDimensionalModel);
+    }
+
+    void modelType1DSamplesWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-1d-samples-header.csv")));
+        QCOMPARE(f.getColumnCount(), 1);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
         QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames);
@@ -152,6 +165,19 @@
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-1d-seconds.csv")));
         QCOMPARE(f.getColumnCount(), 2);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnLabel);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds);
+        QCOMPARE(f.getModelType(), CSVFormat::OneDimensionalModel);
+    }
+
+    void modelType1DSecondsWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-1d-seconds-header.csv")));
+        QCOMPARE(f.getColumnCount(), 2);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnLabel);
         QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
@@ -163,6 +189,19 @@
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-samples.csv")));
         QCOMPARE(f.getColumnCount(), 2);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames);
+        QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModel);
+    }
+
+    void modelType2DSamplesWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-samples-header.csv")));
+        QCOMPARE(f.getColumnCount(), 2);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
         QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
@@ -174,6 +213,19 @@
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-seconds.csv")));
         QCOMPARE(f.getColumnCount(), 2);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds);
+        QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModel);
+    }
+ 
+    void modelType2DSecondsWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-seconds-header.csv")));
+        QCOMPARE(f.getColumnCount(), 2);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
         QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
@@ -185,6 +237,16 @@
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-implicit.csv")));
         QCOMPARE(f.getColumnCount(), 1);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnValue);
+        QCOMPARE(f.getTimingType(), CSVFormat::ImplicitTiming);
+    }
+    
+    void modelType2DImplicitWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-implicit-header.csv")));
+        QCOMPARE(f.getColumnCount(), 2);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnValue);
         QCOMPARE(f.getTimingType(), CSVFormat::ImplicitTiming);
     }
@@ -193,6 +255,7 @@
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-endtime-samples.csv")));
         QCOMPARE(f.getColumnCount(), 3);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnEndTime);
         QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);
@@ -201,10 +264,24 @@
         QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration);
     }
     
+    void modelType2DEndTimeSamplesWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-endtime-samples-header.csv")));
+        QCOMPARE(f.getColumnCount(), 3);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnEndTime);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames);
+        QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration);
+    }
+    
     void modelType2DEndTimeSeconds() {
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-endtime-seconds.csv")));
         QCOMPARE(f.getColumnCount(), 3);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnEndTime);
         QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);
@@ -213,10 +290,24 @@
         QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration);
     }
     
+    void modelType2DEndTimeSecondsWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-endtime-seconds-header.csv")));
+        QCOMPARE(f.getColumnCount(), 3);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnEndTime);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds);
+        QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration);
+    }
+    
     void modelType2DDurationSamples() {
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-duration-samples.csv")));
         QCOMPARE(f.getColumnCount(), 3);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnDuration);
         QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);
@@ -224,11 +315,25 @@
         QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames);
         QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration);
     }
+    
+    void modelType2DDurationSamplesWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-duration-samples-header.csv")));
+        QCOMPARE(f.getColumnCount(), 3);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnDuration);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames);
+        QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration);
+    }
         
     void modelType2DDurationSeconds() {
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-duration-seconds.csv")));
         QCOMPARE(f.getColumnCount(), 3);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnDuration);
         QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);
@@ -237,10 +342,41 @@
         QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration);
     }
         
+    void modelType2DDurationSecondsWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-2d-duration-seconds-header.csv")));
+        QCOMPARE(f.getColumnCount(), 3);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnDuration);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds);
+        QCOMPARE(f.getModelType(), CSVFormat::TwoDimensionalModelWithDuration);
+    }
+        
     void modelType3DSamples() {
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-3d-samples.csv")));
         QCOMPARE(f.getColumnCount(), 7);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(3), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(4), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(5), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(6), CSVFormat::ColumnValue);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeAudioFrames);
+        QCOMPARE(f.getModelType(), CSVFormat::ThreeDimensionalModel);
+    }
+        
+    void modelType3DSamplesWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-3d-samples-header.csv")));
+        QCOMPARE(f.getColumnCount(), 7);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
         QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);
@@ -257,6 +393,24 @@
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-3d-seconds.csv")));
         QCOMPARE(f.getColumnCount(), 7);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(3), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(4), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(5), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(6), CSVFormat::ColumnValue);
+        QCOMPARE(f.getTimingType(), CSVFormat::ExplicitTiming);
+        QCOMPARE(f.getTimeUnits(), CSVFormat::TimeSeconds);
+        QCOMPARE(f.getModelType(), CSVFormat::ThreeDimensionalModel);
+    }
+         
+    void modelType3DSecondsWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-3d-seconds-header.csv")));
+        QCOMPARE(f.getColumnCount(), 7);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnStartTime);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
         QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);
@@ -273,6 +427,22 @@
         CSVFormat f;
         QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-3d-implicit.csv")));
         QCOMPARE(f.getColumnCount(), 6);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderAbsent);
+        QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(3), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(4), CSVFormat::ColumnValue);
+        QCOMPARE(f.getColumnPurpose(5), CSVFormat::ColumnValue);
+        QCOMPARE(f.getTimingType(), CSVFormat::ImplicitTiming);
+        QCOMPARE(f.getModelType(), CSVFormat::ThreeDimensionalModel);
+    }
+         
+    void modelType3DImplicitWithHeader() {
+        CSVFormat f;
+        QVERIFY(f.guessFormatFor(csvDir.filePath("model-type-3d-implicit-header.csv")));
+        QCOMPARE(f.getColumnCount(), 6);
+        QCOMPARE(f.getHeaderStatus(), CSVFormat::HeaderPresent);
         QCOMPARE(f.getColumnPurpose(0), CSVFormat::ColumnValue);
         QCOMPARE(f.getColumnPurpose(1), CSVFormat::ColumnValue);
         QCOMPARE(f.getColumnPurpose(2), CSVFormat::ColumnValue);