Mercurial > hg > svcore
diff data/fileio/test/CSVFormatTest.h @ 1524:64ef24ebb19c
Some CSV format tests and minor fixes
author | Chris Cannam |
---|---|
date | Fri, 14 Sep 2018 09:25:17 +0100 |
parents | data/fileio/test/EncodingTest.h@87ae75da6527 |
children | a92e94215863 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/data/fileio/test/CSVFormatTest.h Fri Sep 14 09:25:17 2018 +0100 @@ -0,0 +1,130 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + Centre for Digital Music, Queen Mary, University of London. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef TEST_CSV_FORMAT_H +#define TEST_CSV_FORMAT_H + +// Tests for the code that guesses the most likely format for parsing a CSV file + +#include "../CSVFormat.h" + +#include "base/Debug.h" + +#include <cmath> + +#include <QObject> +#include <QtTest> +#include <QDir> + +#include <iostream> + +using namespace std; + +class CSVFormatTest : public QObject +{ + Q_OBJECT + +private: + QDir csvDir; + +public: + CSVFormatTest(QString base) { + if (base == "") { + base = "svcore/data/fileio/test"; + } + csvDir = QDir(base + "/csv"); + } + +private slots: + void init() { + if (!csvDir.exists()) { + SVCERR << "ERROR: CSV test file directory \"" << csvDir.absolutePath() << "\" does not exist" << endl; + QVERIFY2(csvDir.exists(), "CSV test file directory not found"); + } + } + + void separatorComma() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("separator-comma.csv"))); + QCOMPARE(f.getSeparator(), QChar(',')); + QCOMPARE(f.getColumnCount(), 3); + } + + void separatorTab() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("separator-tab.csv"))); + QCOMPARE(f.getSeparator(), QChar('\t')); + QCOMPARE(f.getColumnCount(), 3); + } + + void separatorPipe() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("separator-pipe.csv"))); + QCOMPARE(f.getSeparator(), QChar('|')); + // differs from the others + QCOMPARE(f.getColumnCount(), 4); + } + + void separatorSpace() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("separator-space.csv"))); + QCOMPARE(f.getSeparator(), QChar(' ')); + // NB fields are separated by 1 or more spaces, not necessarily exactly 1 + QCOMPARE(f.getColumnCount(), 3); + } + + void separatorColon() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("separator-colon.csv"))); + QCOMPARE(f.getSeparator(), QChar(':')); + QCOMPARE(f.getColumnCount(), 3); + } + + void comment() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("comment.csv"))); + QCOMPARE(f.getSeparator(), QChar(',')); + QCOMPARE(f.getColumnCount(), 4); + } + + void qualities() { + CSVFormat f; + QVERIFY(f.guessFormatFor(csvDir.filePath("column-qualities.csv"))); + QCOMPARE(f.getSeparator(), QChar(',')); + QCOMPARE(f.getColumnCount(), 7); + QList<CSVFormat::ColumnQualities> q = f.getColumnQualities(); + QList<CSVFormat::ColumnQualities> expected; + expected << 0; + expected << CSVFormat::ColumnQualities(CSVFormat::ColumnNumeric | + CSVFormat::ColumnIntegral | + CSVFormat::ColumnIncreasing); + expected << CSVFormat::ColumnQualities(CSVFormat::ColumnNumeric | + CSVFormat::ColumnIntegral | + CSVFormat::ColumnIncreasing | + CSVFormat::ColumnLarge); + expected << CSVFormat::ColumnQualities(CSVFormat::ColumnNumeric); + expected << CSVFormat::ColumnQualities(CSVFormat::ColumnNumeric | + CSVFormat::ColumnIncreasing); + expected << CSVFormat::ColumnQualities(CSVFormat::ColumnNumeric | + CSVFormat::ColumnSmall | + CSVFormat::ColumnSigned); + expected << CSVFormat::ColumnQualities(CSVFormat::ColumnNumeric | + CSVFormat::ColumnIntegral | + CSVFormat::ColumnIncreasing | + CSVFormat::ColumnNearEmpty); + QCOMPARE(q, expected); + } +}; + +#endif