diff --git a/plugins/amda/CMakeLists.txt b/plugins/amda/CMakeLists.txt index 5acb59e..bfa7e21 100644 --- a/plugins/amda/CMakeLists.txt +++ b/plugins/amda/CMakeLists.txt @@ -4,6 +4,7 @@ SET(SQPAMDA_LIBRARY_NAME "${LIBRARY_PREFFIX}_amda${DEBUG_SUFFIX}") SET(SOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src") SET(INCLUDES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include") SET(RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources") +SET(TESTS_RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tests-resources") # Include amda directory INCLUDE_DIRECTORIES(${INCLUDES_DIR}) @@ -131,6 +132,8 @@ IF(BUILD_TESTS) LIST(APPEND testFilesToFormat ${TESTS_HEADERS}) LIST(APPEND FORMATTING_INPUT_FILES ${testFilesToFormat}) SCIQLOP_SET_TO_PARENT_SCOPE(FORMATTING_INPUT_FILES) + + ADD_DEFINITIONS(-DAMDA_TESTS_RESOURCES_DIR="${TESTS_RESOURCES_DIR}") ENDIF(BUILD_TESTS) # diff --git a/plugins/amda/tests/TestAmdaParser.cpp b/plugins/amda/tests/TestAmdaParser.cpp new file mode 100644 index 0000000..b1c37a1 --- /dev/null +++ b/plugins/amda/tests/TestAmdaParser.cpp @@ -0,0 +1,82 @@ +#include "AmdaParser.h" + +#include + +#include +#include + +#include + +namespace { + +/// Path for the tests +const auto TESTS_RESOURCES_PATH + = QFileInfo{QString{AMDA_TESTS_RESOURCES_DIR}, "TestAmdaParser"}.absoluteFilePath(); + +QString inputFilePath(const QString &inputFileName) +{ + return QFileInfo{TESTS_RESOURCES_PATH, inputFileName}.absoluteFilePath(); +} + +struct ExpectedResults { + explicit ExpectedResults() = default; + explicit ExpectedResults(std::shared_ptr item) + : m_ParsingOK{true}, m_Item{std::move(item)} + { + } + + // Parsing was successfully completed + bool m_ParsingOK{false}; + // Expected item after parsing + std::shared_ptr m_Item{nullptr}; +}; + +} // namespace + +Q_DECLARE_METATYPE(ExpectedResults) + +class TestAmdaParser : public QObject { + Q_OBJECT +private slots: + /// Input test data + /// @sa testReadJson() + void testReadJson_data(); + + /// Tests parsing of a JSON file + void testReadJson(); +}; + +void TestAmdaParser::testReadJson_data() +{ + // ////////////// // + // Test structure // + // ////////////// // + + // Name of JSON file to read + QTest::addColumn("inputFileName"); + // Expected results + QTest::addColumn("expectedResults"); +} + +void TestAmdaParser::testReadJson() +{ + QFETCH(QString, inputFileName); + QFETCH(ExpectedResults, expectedResults); + + // Parses file + auto filePath = inputFilePath(inputFileName); + auto item = AmdaParser::readJson(filePath); + + // Validates results + if (expectedResults.m_ParsingOK) { + QVERIFY(item != nullptr); + QVERIFY(expectedResults.m_Item != nullptr); + QVERIFY(*item == *expectedResults.m_Item); + } + else { + QVERIFY(item == nullptr); + } +} + +QTEST_MAIN(TestAmdaParser) +#include "TestAmdaParser.moc"