Browse Source

create test template with included tool

pull/2/head
Skycoder42 7 years ago
parent
commit
4105f37f40
No known key found for this signature in database GPG Key ID: 8E01AD9EF0578D2B
  1. 58
      mkspecs/features/qsettingsgenerator.prf
  2. 25
      mkspecs/features/qsettingstranslator.prf
  3. 13
      src/mvvmcore/mvvmcore.pro
  4. 3
      tests/auto/mvvmcore/mvvmcore.pro
  5. 3
      tests/auto/mvvmcore/settingsgenerator/settings.xml
  6. 14
      tests/auto/mvvmcore/settingsgenerator/settingsgenerator.pro
  7. 35
      tests/auto/mvvmcore/settingsgenerator/tst_settingsgenerator.cpp
  8. 2
      tools/settingsgenerator/qpmx.json
  9. 45
      tools/settingsgenerator/settingsgenerator.cpp

58
mkspecs/features/qsettingsgenerator.prf

@ -0,0 +1,58 @@
isEmpty(QMAKE_QSETTINGSGENERATOR): qtPrepareTool(QMAKE_QSETTINGSGENERATOR, qsettingsgenerator)
isEmpty(QSETTINGSGENERATOR_DIR): QSETTINGSGENERATOR_DIR = .
isEmpty(MOC_DIR): MOC_DIR = .
isEmpty(QSETTINGSTRANSLATOR_DIR): QSETTINGSTRANSLATOR_DIR = $$_PRO_FILE_PWD_/.ts-dummy
!ReleaseBuild:!DebugBuild: {
qsettingstranslator_c.name = qsettingsgenerator --translate ${QMAKE_FILE_IN}
qsettingstranslator_c.input = SETTINGS_TRANSLATIONS #TODO compability
qsettingstranslator_c.variable_out = CPP_DUMMIES
qsettingstranslator_c.commands = $$QMAKE_QSETTINGSGENERATOR --translate --in ${QMAKE_FILE_IN} --impl ${QMAKE_FILE_OUT}
qsettingstranslator_c.output = $$QSETTINGSTRANSLATOR_DIR/${QMAKE_FILE_BASE}.tsdummy$${first(QMAKE_EXT_CPP)}
qsettingstranslator_c.CONFIG += no_link
qsettingstranslator_c.depends += $$QMAKE_QSETTINGSGENERATOR_EXE
QMAKE_EXTRA_COMPILERS += qsettingstranslator_c
qtmvvm_tsgen_target.target = qtmvvm-tsgen
qtmvvm_tsgen_target.depends += compiler_qsettingstranslator_c_make_all
qtmvvm_tsgen_target.commands += @echo $$shell_quote(>>> Remember to add the line \"_never_true_condition: SOURCES += $${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}files($${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PWD/.ts-dummy/*)\" to your pro file)
QMAKE_EXTRA_TARGETS += qtmvvm_tsgen_target
} else {
qtmvvm_tsgen_target.target = qtmvvm-tsgen
QMAKE_EXTRA_TARGETS += qtmvvm_tsgen_target
}
{
qsettingsgenerator_c.name = qsettingsgenerator ${QMAKE_FILE_IN}.h
qsettingsgenerator_c.input = SETTINGS_DEFINITIONS
qsettingsgenerator_c.variable_out = QSETTINGSGENERATOR_HEADERS
qsettingsgenerator_c.commands = $$QMAKE_QSETTINGSGENERATOR --in ${QMAKE_FILE_IN} --header ${QMAKE_FILE_OUT} --impl $$QSETTINGSGENERATOR_DIR/${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)}
qsettingsgenerator_c.output = $$QSETTINGSGENERATOR_DIR/${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)}
qsettingsgenerator_c.CONFIG += target_predeps
qsettingsgenerator_c.depends += $$QMAKE_QSETTINGSGENERATOR_EXE
QMAKE_EXTRA_COMPILERS += qsettingsgenerator_c
qsettingsgenerator_m.name = qsettingsgenerator moc ${QMAKE_FILE_IN}
qsettingsgenerator_m.input = QSETTINGSGENERATOR_HEADERS
qsettingsgenerator_m.variable_out = GENERATED_SOURCES
qsettingsgenerator_m.commands = ${QMAKE_FUNC_mocCmdBase} ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
qsettingsgenerator_m.output = $$MOC_DIR/$${QMAKE_H_MOD_MOC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)}
qsettingsgenerator_m.CONFIG += target_predeps
qsettingsgenerator_m.depends += $$QMAKE_QSETTINGSGENERATOR_EXE $$WIN_INCLUDETEMP $$moc_predefs.output
qsettingsgenerator_m.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += qsettingsgenerator_m
qsettingsgenerator_s.name = qsettingsgenerator src ${QMAKE_FILE_IN}.cpp
qsettingsgenerator_s.input = QSETTINGSGENERATOR_HEADERS
qsettingsgenerator_s.variable_out = GENERATED_SOURCES
qsettingsgenerator_s.commands = $$escape_expand(\\n) # force creation of rule
qsettingsgenerator_s.output = $$QSETTINGSGENERATOR_DIR/${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)}
qsettingsgenerator_s.CONFIG += target_predeps
QMAKE_EXTRA_COMPILERS += qsettingsgenerator_s
}
INCLUDEPATH += $$absolute_path($$QSETTINGSGENERATOR_DIR, $$OUT_PWD)
QMAKE_DIR_REPLACE += QSETTINGSGENERATOR_DIR
QMAKE_DIR_REPLACE_SANE += QSETTINGSGENERATOR_DIR

25
mkspecs/features/qsettingstranslator.prf

@ -1,25 +0,0 @@
isEmpty(QMAKE_QSETTINGSTRANSLATOR): qtPrepareTool(QMAKE_QSETTINGSTRANSLATOR, qsettingstranslator.py)
isEmpty(QSETTINGSTRANSLATOR_DIR): QSETTINGSTRANSLATOR_DIR = $$_PRO_FILE_PWD_/.ts-dummy
!ReleaseBuild:!DebugBuild: {
qsettingstranslator_c.name = QSETTINGSTRANSLATOR of ${QMAKE_FILE_IN}
qsettingstranslator_c.input = QTMVVM_TS_SETTINGS
qsettingstranslator_c.variable_out = CPP_DUMMIES
qsettingstranslator_c.commands = $$QMAKE_QSETTINGSTRANSLATOR ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
qsettingstranslator_c.output = $$QSETTINGSTRANSLATOR_DIR/${QMAKE_FILE_BASE}.tsdummy$${first(QMAKE_EXT_CPP)}
qsettingstranslator_c.CONFIG += no_link
qsettingstranslator_c.depends += $$QMAKE_QSETTINGSTRANSLATOR
QMAKE_EXTRA_COMPILERS += qsettingstranslator_c
qtmvvm_tsgen_target.target = qtmvvm-tsgen
qtmvvm_tsgen_target.depends += compiler_qsettingstranslator_c_make_all
qtmvvm_tsgen_target.commands += @echo $$shell_quote(>>> Remember to add the line \"_never_true_condition: SOURCES += $${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}files($${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PWD/.ts-dummy/*)\" to your pro file)
QMAKE_EXTRA_TARGETS += qtmvvm_tsgen_target
} else {
qtmvvm_tsgen_target.target = qtmvvm-tsgen
QMAKE_EXTRA_TARGETS += qtmvvm_tsgen_target
}
QMAKE_DIR_REPLACE += QSETTINGSTRANSLATOR_DIR
QMAKE_DIR_REPLACE_SANE += QSETTINGSTRANSLATOR_DIR

13
src/mvvmcore/mvvmcore.pro

@ -1,7 +1,7 @@
TARGET = QtMvvmCore
QT = core gui
MODULE_CONFIG += qsettingstranslator
MODULE_CONFIG += qsettingsgenerator
HEADERS += \
viewmodel.h \
@ -44,23 +44,18 @@ TRANSLATIONS += \
translations/qtmvvmcore_de.ts \
translations/qtmvvmcore_template.ts
DISTFILES += $$TRANSLATIONS \
settings.xsd
DISTFILES += $$TRANSLATIONS
load(qt_module)
qpmx_ts_target.path = $$[QT_INSTALL_TRANSLATIONS]
qpmx_ts_target.depends += lrelease
FEATURES += ../../mkspecs/features/qsettingstranslator.prf
FEATURES += ../../mkspecs/features/qsettingsgenerator.prf
features.files = $$FEATURES
features.path = $$[QT_HOST_DATA]/mkspecs/features/
SCRIPTS += ../../bin/qsettingstranslator.py
scripts.files = $$SCRIPTS
scripts.path = $$[QT_INSTALL_BINS]
INSTALLS += qpmx_ts_target features scripts
INSTALLS += qpmx_ts_target features
win32 {
QMAKE_TARGET_PRODUCT = "$$TARGET"

3
tests/auto/mvvmcore/mvvmcore.pro

@ -1 +1,4 @@
TEMPLATE = subdirs
SUBDIRS += \
settingsgenerator

3
tests/auto/mvvmcore/settingsgenerator/settings.xml

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Settings name="TestSettings">
</Settings>

14
tests/auto/mvvmcore/settingsgenerator/settingsgenerator.pro

@ -0,0 +1,14 @@
TEMPLATE = app
QT += testlib mvvmcore
QT -= gui
CONFIG += console
CONFIG -= app_bundle
TARGET = tst_settingsgenerator
SOURCES += \
tst_settingsgenerator.cpp
SETTINGS_DEFINITIONS += \
settings.xml

35
tests/auto/mvvmcore/settingsgenerator/tst_settingsgenerator.cpp

@ -0,0 +1,35 @@
#include <QString>
#include <QtTest>
#include <QCoreApplication>
class SettingsGeneratorTest : public QObject
{
Q_OBJECT
public:
SettingsGeneratorTest();
private Q_SLOTS:
void testSettingsGeneration_data();
void testSettingsGeneration();
};
SettingsGeneratorTest::SettingsGeneratorTest()
{
}
void SettingsGeneratorTest::testSettingsGeneration_data()
{
QTest::addColumn<QString>("data");
QTest::newRow("0") << QString();
}
void SettingsGeneratorTest::testSettingsGeneration()
{
QFETCH(QString, data);
QVERIFY2(true, "Failure");
}
QTEST_MAIN(SettingsGeneratorTest)
#include "tst_settingsgenerator.moc"

2
tools/settingsgenerator/qpmx.json

@ -3,7 +3,7 @@
{
"package": "de.skycoder42.qxmlcodegen",
"provider": "qpm",
"version": "1.1.0"
"version": "1.1.2"
}
],
"license": {

45
tools/settingsgenerator/settingsgenerator.cpp

@ -14,8 +14,10 @@ SettingsGenerator::SettingsGenerator(const QString &hdrPath, const QString &srcP
void SettingsGenerator::process(const QString &inPath)
{
// TODO add xml patterns...
// read settings and adjust defaults
auto settings = readDocument(inPath);
if(!settings.name)
settings.name = QFileInfo{_hdrFile.fileName()}.baseName();
if(!_hdrFile.open(QIODevice::WriteOnly | QIODevice::Text))
throw FileException{_hdrFile};
@ -231,7 +233,12 @@ void SettingsGenerator::writeHeader(const SettingsType &settings)
<< "#define " << incGuard << "\n\n";
// write the includes
for(const auto &inc : settings.includes) {
auto includes = QList<IncludeType> {
{false, QStringLiteral("QtCore/QObject")},
{false, QStringLiteral("QtMvvmCore/ISettingsAccessor")},
{false, QStringLiteral("QtMvvmCore/SettingsEntry")}
} + settings.includes;
for(const auto &inc : includes) {
if(inc.local)
_hdr << "#include \"" << inc.includePath << "\"\n";
else
@ -240,21 +247,20 @@ void SettingsGenerator::writeHeader(const SettingsType &settings)
_hdr << "\n";
// create the class
auto name = settings.name.value_or(QFileInfo{_hdrFile.fileName()}.baseName());
_hdr << "class " << QString{settings.prefix ? settings.prefix.value() + QLatin1Char(' ') + name : name} << " : public QObject\n"
_hdr << "class " << QString{settings.prefix ? settings.prefix.value() + QLatin1Char(' ') + settings.name.value() : settings.name.value()} << " : public QObject\n"
<< "{\n"
<< "\tQ_OBJECT\n\n"
<< "\tQ_PROPERTY(ISettingsAccessor *accessor READ accessor CONSTANT FINAL)\n\n"
<< "\tQ_PROPERTY(QtMvvm::ISettingsAccessor *accessor READ accessor CONSTANT FINAL)\n\n"
<< "public:\n"
<< "\tQ_INVOKABLE explicit " << name << "(QObject *parent = nullptr);\n"
<< "\texplicit " << name << "(QObject *parent, ISettingsAccessor *accessor);\n\n"
<< "\tstatic " << name << " *instance();\n\n"
<< "\tISettingsAccessor *accessor() const;\n\n";
<< "\tQ_INVOKABLE explicit " << settings.name.value() << "(QObject *parent = nullptr);\n"
<< "\texplicit " << settings.name.value() << "(QtMvvm::ISettingsAccessor *accessor, QObject *parent);\n\n"
<< "\tstatic " << settings.name.value() << " *instance();\n\n"
<< "\tQtMvvm::ISettingsAccessor *accessor() const;\n\n";
writeNodeElements(settings);
_hdr << "\nprivate:\n"
<< "\tISettingsAccessor *_accessor;\n"
<< "\tQtMvvm::ISettingsAccessor *_accessor;\n"
<< "};\n\n"
<< "#endif //" << incGuard << '\n';
}
@ -287,5 +293,24 @@ void SettingsGenerator::writeEntry(const EntryType &entry, int intendent)
void SettingsGenerator::writeSource(const SettingsType &settings)
{
_src << "#include \"" << _hdrFile.fileName() << "\"\n\n";
_src << settings.name.value() << "::" << settings.name.value() << "(QObject *parent) : \n"
<< "\t" << settings.name.value() << "{nullptr, parent}\n"
<< "{}\n\n";
_src << settings.name.value() << "::" << settings.name.value() << "(QtMvvm::ISettingsAccessor *accessor, QObject *parent) : \n"
<< "\tQObject{parent},\n"
<< "\t_accessor{accessor}\n"
<< "{}\n\n";
_src << settings.name.value() << " *" << settings.name.value() << "::instance()\n"
<< "{\n"
<< "\treturn nullptr;\n"
<< "}\n\n";
_src << "QtMvvm::ISettingsAccessor *" << settings.name.value() << "::accessor() const\n"
<< "{\n"
<< "\treturn _accessor;\n"
<< "}\n\n";
}

Loading…
Cancel
Save