diff --git a/core/include/Data/IDataSeries.h b/core/include/Data/IDataSeries.h index 4fc0ff9..5dfa75a 100644 --- a/core/include/Data/IDataSeries.h +++ b/core/include/Data/IDataSeries.h @@ -16,6 +16,12 @@ struct Unit { { } + inline bool operator==(const Unit &other) const + { + return std::tie(m_Name, m_TimeUnit) == std::tie(other.m_Name, other.m_TimeUnit); + } + inline bool operator!=(const Unit &other) const { return !(*this == other); } + QString m_Name; ///< Unit name bool m_TimeUnit; ///< The unit is a unit of time }; diff --git a/plugins/amda/tests/TestAmdaResultParser.cpp b/plugins/amda/tests/TestAmdaResultParser.cpp index e0bc681..9f76814 100644 --- a/plugins/amda/tests/TestAmdaResultParser.cpp +++ b/plugins/amda/tests/TestAmdaResultParser.cpp @@ -14,8 +14,62 @@ QString inputFilePath(const QString &inputFileName) return QFileInfo{TESTS_RESOURCES_PATH, inputFileName}.absoluteFilePath(); } +struct ExpectedResults { + explicit ExpectedResults() = default; + + /// Ctor with QVector as x-axis data. Datetimes are converted to doubles + explicit ExpectedResults(Unit xAxisUnit, Unit valuesUnit, const QVector &xAxisData, + QVector valuesData) + : m_ParsingOK{true}, + m_XAxisUnit{xAxisUnit}, + m_ValuesUnit{valuesUnit}, + m_XAxisData{}, + m_ValuesData{std::move(valuesData)} + { + // Converts QVector to QVector + 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 results) + { + if (m_ParsingOK) { + auto scalarSeries = dynamic_cast(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 m_XAxisData{}; + // Expected values data + QVector m_ValuesData{}; +}; + } // namespace +Q_DECLARE_METATYPE(ExpectedResults) + class TestAmdaResultParser : public QObject { Q_OBJECT private slots: @@ -29,10 +83,30 @@ private slots: void TestAmdaResultParser::testReadTxt_data() { + // ////////////// // + // Test structure // + // ////////////// // + + // Name of TXT file to read + QTest::addColumn("inputFileName"); + // Expected results + QTest::addColumn("expectedResults"); + } void TestAmdaResultParser::testReadTxt() { + QFETCH(QString, inputFileName); + QFETCH(ExpectedResults, expectedResults); + + // Parses file + auto filePath = inputFilePath(inputFileName); + auto results = AmdaResultParser::readTxt(filePath); + + // ///////////////// // + // Validates results // + // ///////////////// // + expectedResults.validate(results); } QTEST_MAIN(TestAmdaResultParser)