hyperion.ng/test/TestConfigFile.cpp
LordGrey 25d79a9f3f
Qt6 support (#1363)
* Initial Qt6 config

* Change Package order to reingfence missing packages

* Update to QT 6.2.0

* Qt 6.2.0 updates

* macOS fix

* Simplify handling QT5 & Qt6 in parallel

* Updates for Windows

* Fix macos build

* macOS linker fix

* General support of QTDIR, update docu

* MaxOS add default qt directories

* Fix merge typo

* Update default CMakeSettings.json with installation path options

* Add additional libs required by Qt6 to CompileHowTo

* Fix Qt5 items

Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
2021-11-16 18:12:56 +01:00

113 lines
2.6 KiB
C++

// QT includes
#include <QResource>
#include <QDebug>
// JsonSchema includes
#include <utils/jsonschema/QJsonFactory.h>
// hyperion includes
#include <hyperion/LedString.h>
#include "HyperionConfig.h"
bool loadConfig(const QString & configFile, bool correct, bool ignore)
{
// make sure the resources are loaded (they may be left out after static linking)
Q_INIT_RESOURCE(resource);
////////////////////////////////////////////////////////////
// read and set the json schema from the resource
////////////////////////////////////////////////////////////
QJsonObject schemaJson;
try
{
schemaJson = QJsonFactory::readSchema(":/hyperion-schema");
}
catch(const std::runtime_error& error)
{
throw std::runtime_error(error.what());
}
QJsonSchemaChecker schemaChecker;
schemaChecker.setSchema(schemaJson);
////////////////////////////////////////////////////////////
// read and validate the configuration file from the command line
////////////////////////////////////////////////////////////
QJsonObject jsonConfig = QJsonFactory::readConfig(configFile);
if (!correct)
{
if (!schemaChecker.validate(jsonConfig).first)
{
QStringList schemaErrors = schemaChecker.getMessages();
for (auto & schemaError : schemaErrors)
{
qDebug() << "config write validation: " << schemaError;
}
qDebug() << "FAILED";
exit(1);
return false;
}
}
else
{
jsonConfig = schemaChecker.getAutoCorrectedConfig(jsonConfig, ignore); // The second parameter is to ignore the "required" keyword in hyperion schema
QJsonFactory::writeJson(configFile, jsonConfig);
}
return true;
}
void usage()
{
qDebug() << "Missing required configuration file to test";
qDebug() << "Usage: test_configfile <option> [configfile]";
qDebug() << "<option>:";
qDebug() << "\t--ac - for json auto correction";
qDebug() << "\t--ac-ignore-required - for json auto correction without paying attention 'required' keyword in hyperion schema";
}
int main(int argc, char** argv)
{
if (argc < 2)
{
usage();
return 0;
}
QString option = argv[1];
QString configFile;
if (option == "--ac" || option == "--ac-ignore-required")
{
if (argc > 2)
configFile = argv[2];
else
{
usage();
return 0;
}
}
else configFile = argv[1];
qDebug() << "Configuration file selected: " << configFile;
qDebug() << "Attemp to load...";
try
{
if (loadConfig(configFile, (option == "--ac" || option == "--ac-ignore-required"), option == "--ac-ignore-required"))
qDebug() << "PASSED";
return 0;
}
catch (std::runtime_error& exception)
{
qDebug() << "FAILED";
qDebug() << exception.what();
}
return 1;
}