Chris@1867: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@1867: Chris@1867: /* Chris@1867: Sonic Visualiser Chris@1867: An audio file viewer and annotation editor. Chris@1867: Centre for Digital Music, Queen Mary, University of London. Chris@1867: Chris@1867: This program is free software; you can redistribute it and/or Chris@1867: modify it under the terms of the GNU General Public License as Chris@1867: published by the Free Software Foundation; either version 2 of the Chris@1867: License, or (at your option) any later version. See the file Chris@1867: COPYING included with this distribution for more information. Chris@1867: */ Chris@1867: Chris@1867: #ifndef TEST_CSV_READER_H Chris@1867: #define TEST_CSV_READER_H Chris@1867: Chris@1867: #include "../CSVFileReader.h" Chris@1867: Chris@1867: #include "data/model/SparseOneDimensionalModel.h" Chris@1867: #include "data/model/SparseTimeValueModel.h" Chris@1867: #include "data/model/RegionModel.h" Chris@1867: #include "data/model/EditableDenseThreeDimensionalModel.h" Chris@1867: Chris@1867: #include "base/Debug.h" Chris@1867: Chris@1867: #include Chris@1867: Chris@1867: #include Chris@1867: #include Chris@1867: #include Chris@1867: Chris@1867: #include Chris@1867: Chris@1867: using namespace std; Chris@1867: Chris@1867: class CSVReaderTest : public QObject Chris@1867: { Chris@1867: Q_OBJECT Chris@1867: Chris@1867: private: Chris@1867: QDir csvDir; Chris@1867: sv_samplerate_t mainRate; Chris@1867: Chris@1867: public: Chris@1867: CSVReaderTest(QString base) { Chris@1867: if (base == "") { Chris@1867: base = "svcore/data/fileio/test"; Chris@1867: } Chris@1867: csvDir = QDir(base + "/csv"); Chris@1867: mainRate = 44100; Chris@1867: } Chris@1867: Chris@1867: private: Chris@1867: void loadFrom(QString filename, Model *&model) { Chris@1867: QString path(csvDir.filePath(filename)); Chris@1867: CSVFormat f; Chris@1867: f.guessFormatFor(path); Chris@1867: CSVFileReader reader(path, f, mainRate); Chris@1867: model = reader.load(); Chris@1867: QVERIFY(model); Chris@1867: QVERIFY(reader.isOK()); Chris@1867: QCOMPARE(reader.getError(), QString()); Chris@1867: } Chris@1867: Chris@1867: private slots: Chris@1867: void init() { Chris@1867: if (!csvDir.exists()) { Chris@1867: SVCERR << "ERROR: CSV test file directory \"" << csvDir.absolutePath() << "\" does not exist" << endl; Chris@1867: QVERIFY2(csvDir.exists(), "CSV test file directory not found"); Chris@1867: } Chris@1867: } Chris@1867: Chris@1867: void modelType1DSamples() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-1d-samples.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: //!!! + the actual contents Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType1DSamplesWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-1d-samples-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1872: //!!! + the actual contents Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void modelType1DSeconds() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-1d-seconds.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType1DSecondsWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-1d-seconds-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void modelType2DDurationSamples() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-2d-duration-samples.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1872: Chris@1872: void modelType2DDurationSamplesWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-2d-duration-samples-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1872: delete model; Chris@1872: } Chris@1867: Chris@1867: void modelType2DDurationSeconds() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-2d-duration-seconds.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType2DDurationSecondsWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-2d-duration-seconds-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void badNegativeDuration() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("bad-negative-duration.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: //!!! + check duration has been corrected Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1867: void modelType2DEndTimeSamples() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-2d-endtime-samples.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType2DEndTimeSamplesWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-2d-endtime-samples-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void modelType2DEndTimeSeconds() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-2d-endtime-seconds.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType2DEndTimeSecondsWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-2d-endtime-seconds-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void modelType2DImplicit() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-2d-implicit.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType2DImplicitWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-2d-implicit-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void modelType2DSamples() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-2d-samples.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType2DSamplesWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-2d-samples-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void modelType2DSeconds() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-2d-seconds.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType2DSecondsWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-2d-seconds-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void modelType3DImplicit() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-3d-implicit.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getWidth(), 6); Chris@1867: QCOMPARE(actual->getHeight(), 6); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType3DImplicitWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-3d-implicit-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getWidth(), 6); Chris@1872: QCOMPARE(actual->getHeight(), 6); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void modelType3DSamples() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-3d-samples.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getWidth(), 6); Chris@1867: QCOMPARE(actual->getHeight(), 6); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType3DSamplesWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-3d-samples-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getWidth(), 6); Chris@1872: QCOMPARE(actual->getHeight(), 6); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void modelType3DSeconds() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("model-type-3d-seconds.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getWidth(), 6); Chris@1867: QCOMPARE(actual->getHeight(), 6); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1872: void modelType3DSecondsWithHeader() { Chris@1872: Model *model = nullptr; Chris@1872: loadFrom("model-type-3d-seconds-header.csv", model); Chris@1872: auto actual = qobject_cast(model); Chris@1872: QVERIFY(actual); Chris@1872: QCOMPARE(actual->getWidth(), 6); Chris@1872: QCOMPARE(actual->getHeight(), 6); Chris@1872: delete model; Chris@1872: } Chris@1872: Chris@1867: void withBlankLines1D() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("with-blank-lines-1d.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1867: void withBlankLines2D() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("with-blank-lines-2d.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1867: void withBlankLines3D() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("with-blank-lines-3d.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getWidth(), 6); Chris@1867: QCOMPARE(actual->getHeight(), 6); Chris@1867: delete model; Chris@1867: } Chris@1867: Chris@1867: void quoting() { Chris@1867: Model *model = nullptr; Chris@1867: loadFrom("quoting.csv", model); Chris@1867: auto actual = qobject_cast(model); Chris@1867: QVERIFY(actual); Chris@1867: QCOMPARE(actual->getAllEvents().size(), 5); Chris@1867: delete model; Chris@1867: } Chris@1867: }; Chris@1867: Chris@1867: #endif