TestAmdaResultParser.cpp
113 lines
| 3.1 KiB
| text/x-c
|
CppLexer
Alexandre Leroux
|
r395 | #include "AmdaResultParser.h" | ||
#include <QObject> | ||||
#include <QtTest> | ||||
namespace { | ||||
/// Path for the tests | ||||
const auto TESTS_RESOURCES_PATH | ||||
= QFileInfo{QString{AMDA_TESTS_RESOURCES_DIR}, "TestAmdaResultParser"}.absoluteFilePath(); | ||||
QString inputFilePath(const QString &inputFileName) | ||||
{ | ||||
return QFileInfo{TESTS_RESOURCES_PATH, inputFileName}.absoluteFilePath(); | ||||
} | ||||
Alexandre Leroux
|
r396 | struct ExpectedResults { | ||
explicit ExpectedResults() = default; | ||||
/// Ctor with QVector<QDateTime> as x-axis data. Datetimes are converted to doubles | ||||
explicit ExpectedResults(Unit xAxisUnit, Unit valuesUnit, const QVector<QDateTime> &xAxisData, | ||||
QVector<double> valuesData) | ||||
: m_ParsingOK{true}, | ||||
m_XAxisUnit{xAxisUnit}, | ||||
m_ValuesUnit{valuesUnit}, | ||||
m_XAxisData{}, | ||||
m_ValuesData{std::move(valuesData)} | ||||
{ | ||||
// Converts QVector<QDateTime> to QVector<double> | ||||
std::transform(xAxisData.cbegin(), xAxisData.cend(), std::back_inserter(m_XAxisData), | ||||
[](const auto &dateTime) { return dateTime.toMSecsSinceEpoch() / 1000.; }); | ||||
} | ||||
/** | ||||
* Validates a DataSeries compared to the expected results | ||||
* @param results the DataSeries to validate | ||||
*/ | ||||
void validate(std::shared_ptr<IDataSeries> results) | ||||
{ | ||||
if (m_ParsingOK) { | ||||
auto scalarSeries = dynamic_cast<ScalarSeries *>(results.get()); | ||||
QVERIFY(scalarSeries != nullptr); | ||||
// Checks units | ||||
QVERIFY(scalarSeries->xAxisUnit() == m_XAxisUnit); | ||||
QVERIFY(scalarSeries->valuesUnit() == m_ValuesUnit); | ||||
// Checks values | ||||
QVERIFY(scalarSeries->xAxisData()->data() == m_XAxisData); | ||||
QVERIFY(scalarSeries->valuesData()->data() == m_ValuesData); | ||||
} | ||||
else { | ||||
QVERIFY(results == nullptr); | ||||
} | ||||
} | ||||
// Parsing was successfully completed | ||||
bool m_ParsingOK{false}; | ||||
// Expected x-axis unit | ||||
Unit m_XAxisUnit{}; | ||||
// Expected values unit | ||||
Unit m_ValuesUnit{}; | ||||
// Expected x-axis data | ||||
QVector<double> m_XAxisData{}; | ||||
// Expected values data | ||||
QVector<double> m_ValuesData{}; | ||||
}; | ||||
Alexandre Leroux
|
r395 | } // namespace | ||
Alexandre Leroux
|
r396 | Q_DECLARE_METATYPE(ExpectedResults) | ||
Alexandre Leroux
|
r395 | class TestAmdaResultParser : public QObject { | ||
Q_OBJECT | ||||
private slots: | ||||
/// Input test data | ||||
/// @sa testTxtJson() | ||||
void testReadTxt_data(); | ||||
/// Tests parsing of a TXT file | ||||
void testReadTxt(); | ||||
}; | ||||
void TestAmdaResultParser::testReadTxt_data() | ||||
{ | ||||
Alexandre Leroux
|
r396 | // ////////////// // | ||
// Test structure // | ||||
// ////////////// // | ||||
// Name of TXT file to read | ||||
QTest::addColumn<QString>("inputFileName"); | ||||
// Expected results | ||||
QTest::addColumn<ExpectedResults>("expectedResults"); | ||||
Alexandre Leroux
|
r395 | } | ||
void TestAmdaResultParser::testReadTxt() | ||||
{ | ||||
Alexandre Leroux
|
r396 | QFETCH(QString, inputFileName); | ||
QFETCH(ExpectedResults, expectedResults); | ||||
// Parses file | ||||
auto filePath = inputFilePath(inputFileName); | ||||
auto results = AmdaResultParser::readTxt(filePath); | ||||
// ///////////////// // | ||||
// Validates results // | ||||
// ///////////////// // | ||||
expectedResults.validate(results); | ||||
Alexandre Leroux
|
r395 | } | ||
QTEST_MAIN(TestAmdaResultParser) | ||||
#include "TestAmdaResultParser.moc" | ||||