diff --git a/CMakeLists.txt b/CMakeLists.txt index 6adc742..4f39093 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,6 +112,7 @@ set_target_properties(test_suite set(TEST_LIBS gtest gtest_main jsoncpp json11) if (Qt5Core_FOUND) list(APPEND TEST_LIBS Qt5::Core) + target_compile_definitions(test_suite PRIVATE "VALIJSON_BUILD_QT_ADAPTERS") endif() diff --git a/include/valijson/utils/qtjson_utils.hpp b/include/valijson/utils/qtjson_utils.hpp new file mode 100644 index 0000000..e130aa6 --- /dev/null +++ b/include/valijson/utils/qtjson_utils.hpp @@ -0,0 +1,48 @@ +#pragma once +#ifndef __VALIJSON_UTILS_QTJSON_UTILS_HPP +#define __VALIJSON_UTILS_QTJSON_UTILS_HPP + +#include + +#include +#include + + +#include + +namespace valijson { +namespace utils { + +inline bool loadDocument(const std::string &path, QJsonValue &root) +{ + // Load schema JSON from file + QFile file(QString::fromStdString(path)); + if (!file.open(QFile::ReadOnly)) { + std::cerr << "Failed to load json from file '" << path << "'." << std::endl; + return false; + } + + QByteArray data = file.readAll(); + + // Parse schema + QJsonParseError parseError; + QJsonDocument doc = QJsonDocument::fromJson(data); + if (doc.isNull()) { + std::cerr << "qt failed to parse the document:" << std::endl + << parseError.errorString().toStdString() << std::endl; + return false; + } else if (doc.isObject()) { + root = QJsonValue(doc.object()); + } else if (doc.isArray()) { + root = QJsonValue(doc.array()); + } else if (doc.isEmpty()) { + root = QJsonValue(); + } + + return true; +} + +} // namespace utils +} // namespace valijson + +#endif diff --git a/tests/test_adapter_comparison.cpp b/tests/test_adapter_comparison.cpp index 57195d1..5e73bfe 100644 --- a/tests/test_adapter_comparison.cpp +++ b/tests/test_adapter_comparison.cpp @@ -20,6 +20,12 @@ #endif // VALIJSON_BUILD_CXX11_ADAPTERS +#ifdef VALIJSON_BUILD_QT_ADAPTERS +#include +#include + +#endif // VALIJSON_BUILD_QT_ADAPTERS + #define TEST_DATA_DIR "../tests/data/documents/" using valijson::adapters::AdapterTraits; @@ -341,3 +347,57 @@ TEST_F(TestAdapterComparison, NlohmannJsonVsPropertyTree) #endif // VALIJSON_BUILD_CXX11_ADAPTERS +#ifdef VALIJSON_BUILD_QT_ADAPTERS + +TEST_F(TestAdapterComparison, QtJsonVsQtJson) { + testComparison< + valijson::adapters::QtJsonAdapter, + valijson::adapters::QtJsonAdapter>(); +} + +TEST_F(TestAdapterComparison, QtJsonVsJson11) +{ + testComparison< + valijson::adapters::QtJsonAdapter, + valijson::adapters::Json11Adapter>(); +} + +TEST_F(TestAdapterComparison, QtJsonVsJsonCpp) +{ + testComparison< + valijson::adapters::QtJsonAdapter, + valijson::adapters::JsonCppAdapter>(); +} + + +TEST_F(TestAdapterComparison, QtJsonVsRapidJson) +{ + testComparison< + valijson::adapters::QtJsonAdapter, + valijson::adapters::RapidJsonAdapter>(); +} + +TEST_F(TestAdapterComparison, QtJsonVsRapidJsonCrtAlloc) +{ + testComparison< + valijson::adapters::QtJsonAdapter, + valijson::adapters::GenericRapidJsonAdapter< + rapidjson::GenericValue, + rapidjson::CrtAllocator> > >(); +} + +TEST_F(TestAdapterComparison, QtJsonVsPicoJson) +{ + testComparison< + valijson::adapters::QtJsonAdapter, + valijson::adapters::PicoJsonAdapter>(); +} + +TEST_F(TestAdapterComparison, QtJsonVsPropertyTree) +{ + testComparison< + valijson::adapters::QtJsonAdapter, + valijson::adapters::PropertyTreeAdapter>(); +} + +#endif // VALIJSON_BUILD_QT_ADAPTERS