Migration of QtMvvm from github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

628 lines
15 KiB

#include <QtTest>
#include <QtMvvmCore/private/settingsconfigloader_p.h>
using namespace QtMvvm;
using namespace QtMvvm::SettingsElements;
class SettingsConfigLoaderTest : public QObject
{
Q_OBJECT
private Q_SLOTS:
void testConfigLoader_data();
void testConfigLoader();
void testDefaultIcon();
private:
Setup createEntryDocumentSetup();
Setup createGroupDocumentSetup();
Setup createSectionDocumentSetup();
Setup createCategoryDocumentSetup();
Setup createSelectorsSetup0();
Setup createSelectorsSetup1();
Setup createSelectorsSetup2();
Setup createSelectorsSetup3();
Setup createSelectorsSetup4();
Setup createIncludesSetup();
};
void SettingsConfigLoaderTest::testConfigLoader_data()
{
QTest::addColumn<QString>("path");
QTest::addColumn<QString>("frontend");
QTest::addColumn<QStringList>("selectors");
QTest::addColumn<bool>("success");
QTest::addColumn<Setup>("setup");
QTest::newRow("entryDocument") << QStringLiteral(SRCDIR "/entryDocument.xml")
<< QStringLiteral("dummy")
<< QStringList{}
<< true
<< createEntryDocumentSetup();
QTest::newRow("groupDocument") << QStringLiteral(SRCDIR "/groupDocument.xml")
<< QStringLiteral("dummy")
<< QStringList{}
<< true
<< createGroupDocumentSetup();
QTest::newRow("sectionDocument") << QStringLiteral(SRCDIR "/sectionDocument.xml")
<< QStringLiteral("dummy")
<< QStringList{}
<< true
<< createSectionDocumentSetup();
QTest::newRow("categoryDocument") << QStringLiteral(SRCDIR "/categoryDocument.xml")
<< QStringLiteral("dummy")
<< QStringList{}
<< true
<< createCategoryDocumentSetup();
QTest::newRow("selectorDocument.frontend.widgets") << QStringLiteral(SRCDIR "/selectorDocument.xml")
<< QStringLiteral("widgets")
<< QStringList{}
<< true
<< createSelectorsSetup0();
QTest::newRow("selectorDocument.frontend.quick") << QStringLiteral(SRCDIR "/selectorDocument.xml")
<< QStringLiteral("quick")
<< QStringList{}
<< true
<< createSelectorsSetup1();
QTest::newRow("selectorDocument.selector.typeA") << QStringLiteral(SRCDIR "/selectorDocument.xml")
<< QStringLiteral("dummy")
<< QStringList{
QStringLiteral("a1"),
QStringLiteral("b2"),
QStringLiteral("a3")
}
<< true
<< createSelectorsSetup2();
QTest::newRow("selectorDocument.selector.typeB") << QStringLiteral(SRCDIR "/selectorDocument.xml")
<< QStringLiteral("dummy")
<< QStringList{
QStringLiteral("b1"),
QStringLiteral("a2"),
QStringLiteral("b3")
}
<< true
<< createSelectorsSetup3();
QTest::newRow("selectorDocument.combined") << QStringLiteral(SRCDIR "/selectorDocument.xml")
<< QStringLiteral("console")
<< QStringList{
QStringLiteral("a1"),
QStringLiteral("a2"),
QStringLiteral("a3")
}
<< true
<< createSelectorsSetup4();
QTest::newRow("includeDocument") << QStringLiteral(SRCDIR "/includeDocument.xml")
<< QStringLiteral("dummy")
<< QStringList{}
<< true
<< createIncludesSetup();
6 years ago
QTest::newRow("invalidDocument") << QStringLiteral(SRCDIR "/invalidDocument.xml")
<< QStringLiteral("dummy")
<< QStringList{}
<< false
<< Setup{};
}
void SettingsConfigLoaderTest::testConfigLoader()
{
QFETCH(QString, path);
QFETCH(QString, frontend);
QFETCH(QStringList, selectors);
QFETCH(bool, success);
QFETCH(Setup, setup);
try {
QFileSelector selector;
selector.setExtraSelectors(selectors);
SettingsConfigLoader loader;
loader.changeDefaultIcon(QStringLiteral("qrc:/baum"));
if(success) {
auto res = loader.loadSetup(path, frontend, &selector);
// compare low-level to be able to catch where errors happend easier
QCOMPARE(res.allowRestore, setup.allowRestore);
QCOMPARE(res.allowSearch, setup.allowSearch);
QCOMPARE(res.categories.size(), setup.categories.size());
for(auto i = 0; i < setup.categories.size(); i++) {
const auto &resCat = res.categories[i];
const auto &category = setup.categories[i];
QCOMPARE(resCat.title, category.title);
QCOMPARE(resCat.icon, category.icon);
QCOMPARE(resCat.tooltip, category.tooltip);
QCOMPARE(resCat.sections.size(), category.sections.size());
for(auto j = 0; j < category.sections.size(); j++) {
const auto &resSec = resCat.sections[j];
const auto &section = category.sections[j];
QCOMPARE(resSec.title, section.title);
QCOMPARE(resSec.icon, section.icon);
QCOMPARE(resSec.tooltip, section.tooltip);
QCOMPARE(resSec.groups.size(), section.groups.size());
for(auto k = 0; k < section.groups.size(); k++) {
const auto &resGrp = resSec.groups[k];
const auto &group = section.groups[k];
QCOMPARE(resGrp.title, group.title);
QCOMPARE(resGrp.tooltip, group.tooltip);
QCOMPARE(resGrp.entries.size(), group.entries.size());
for(auto l = 0; l < group.entries.size(); l++) {
const auto &resEnt = resGrp.entries[l];
const auto &entry = group.entries[l];
QCOMPARE(resEnt.key, entry.key);
QCOMPARE(resEnt.type, entry.type);
QCOMPARE(resEnt.title, entry.title);
QCOMPARE(resEnt.tooltip, entry.tooltip);
QCOMPARE(resEnt.defaultValue, entry.defaultValue);
QCOMPARE(resEnt.searchKeys, entry.searchKeys);
QCOMPARE(resEnt.properties, entry.properties);
}
}
}
}
} else
QVERIFY_EXCEPTION_THROWN(loader.loadSetup(path, frontend, &selector), SettingsConfigException);
} catch(std::exception &e) {
if(success)
QFAIL(e.what());
}
}
void SettingsConfigLoaderTest::testDefaultIcon()
{
try {
QFileSelector selector;
SettingsConfigLoader loader;
auto res = loader.loadSetup(QStringLiteral(SRCDIR "/entryDocument.xml"), QStringLiteral("dummy"), &selector);
QCOMPARE(res.categories.first().icon, QStringLiteral("qrc:/de/skycoder42/qtmvvm/icons/settings.svg"));
} catch(std::exception &e) {
QFAIL(e.what());
}
}
Setup SettingsConfigLoaderTest::createEntryDocumentSetup()
{
return Setup {
true, true, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {
{}, {}, {
Entry {
QStringLiteral("minimal"), "bool"
},
Entry {
QStringLiteral("full"), "string",
QStringLiteral("FULL"), QStringLiteral("full tip"),
QStringLiteral("hello world")
},
Entry {
QStringLiteral("search"), "int",
{}, {}, {},
{QStringLiteral("hello"), QStringLiteral("world")}
}, Entry {
QStringLiteral("elements"), "double",
{}, {}, {}, {},
{
{QStringLiteral("simple"), 42},
{QStringLiteral("literal"), QStringLiteral("baum42")},
{QStringLiteral("list"), QVariantList {
13,
QVariantList{4.2},
QVariantMap{{QStringLiteral("simple"), 42}}
}},
{QStringLiteral("map"), QVariantMap{
{QStringLiteral("simple"), 42},
{QStringLiteral("list"), QVariantList{4.2}}
}}
}
}
}
}
}
}
}
}
}
};
}
Setup SettingsConfigLoaderTest::createGroupDocumentSetup()
{
return Setup {
true, true, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {},
Group {
{}, {}, {
Entry {
QStringLiteral("minimal"), "bool"
}
}
},
Group {
QStringLiteral("FULL"), QStringLiteral("full"), {
Entry {
QStringLiteral("a"), "bool"
},
Entry {
QStringLiteral("b"), "bool"
}
}
}
}
}
}
}
}
};
}
Setup SettingsConfigLoaderTest::createSectionDocumentSetup()
{
return Setup {
false, false, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General")
},
Section {
QStringLiteral("General"), {}, {}, {
Group {
{}, {}, {
Entry {
QStringLiteral("direct"), "double"
}
}
}
}
},
Section {
QStringLiteral("master"), QStringLiteral("file:///path/to/vengance.png"),
QStringLiteral("ruler"), {
Group {},
Group {
{}, {}, {
Entry {
QStringLiteral("indirect"), "double"
}
}
}
}
}
}
}
}
};
}
Setup SettingsConfigLoaderTest::createCategoryDocumentSetup()
{
return Setup {
false, false, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum")
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {
{}, {}, {
Entry {
QStringLiteral("direct"), "double"
}
}
}
}
}
}
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {},
Group {
{}, {}, {
Entry {
QStringLiteral("indirect"), "double"
}
}
}
}
}
}
},
Category {
QStringLiteral("main"), QStringLiteral("http://example.com/favicon.png"),
QStringLiteral("another tooltip"), {
Section {
QStringLiteral("General")
},
Section {
QStringLiteral("General"), {}, {}, {
Group {
{}, {}, {
Entry {
QStringLiteral("subdirect"), "double"
}
}
}
}
},
Section {
QStringLiteral("General"), {}, {}, {
Group {},
Group {
{}, {}, {
Entry {
QStringLiteral("fardirect"), "double"
}
}
}
}
}
}
}
}
};
}
Setup SettingsConfigLoaderTest::createSelectorsSetup0()
{
return Setup {
false, false, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum")
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {},
Group {}
}
}
}
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {}
}
}
}
}
}
};
}
Setup SettingsConfigLoaderTest::createSelectorsSetup1()
{
return Setup {
false, false, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General")
},
Section {
QStringLiteral("General"), {}, {}, {
Group {
{}, {}, {
Entry {
QStringLiteral("t1"), "bool"
}
}
}
}
}
}
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {}
}
}
}
}
}
};
}
Setup SettingsConfigLoaderTest::createSelectorsSetup2()
{
return Setup {
false, false, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {}
}
}
}
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General")
},
Section {
QStringLiteral("General"), {}, {}, {
Group {
{}, {}, {
Entry {
QStringLiteral("t2"), "bool"
}
}
}
}
}
}
}
}
};
}
Setup SettingsConfigLoaderTest::createSelectorsSetup3()
{
return Setup {
false, false, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {}
}
}
}
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum")
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General")
},
Section {
QStringLiteral("General"), {}, {}, {
Group {}
}
}
}
}
}
};
}
Setup SettingsConfigLoaderTest::createSelectorsSetup4()
{
return Setup {
false, false, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {},
Group {
{}, {}, {
Entry {
QStringLiteral("t1"), "bool"
}
}
}
}
}
}
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General")
},
Section {
QStringLiteral("General"), {}, {}, {
Group {},
Group {
{}, {}, {
Entry {
QStringLiteral("t2"), "bool"
}
}
}
}
}
}
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum")
}
}
};
}
Setup SettingsConfigLoaderTest::createIncludesSetup()
{
return Setup{
false, false, {
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {
{}, {}, {
Entry {
QStringLiteral("included"), "url"
}
}
}
}
}
}
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum"), {}, {
Section {
QStringLiteral("General"), {}, {}, {
Group {
{}, {}, {
Entry {
QStringLiteral("included"), "url"
}
}
}
}
},
Section {
QStringLiteral("General"), {}, {}, {
Group {},
Group {QStringLiteral("incGroup")},
Group {
{}, {}, {
Entry {
QStringLiteral("incEntry"), "bool"
}
}
}
}
}
}
},
Category {
QStringLiteral("General Settings"), QStringLiteral("qrc:/baum")
}
}
};
}
QTEST_MAIN(SettingsConfigLoaderTest)
#include "tst_settingsconfigloader.moc"