migration(grantlee): add patch script to avoid QT_TESTCASE_BUILDDIR redefinition; add Grantlee parser smoke test

This commit is contained in:
Copilot authored and Torsten Wierschin committed 2026-07-21 13:33:05 +02:00
1 parent faa891b573
commit 56adad890c
3 files changed
+107

No files matched your search

+15
View File
@@ -113,6 +113,21 @@ else()
message(STATUS "Grantlee5 not found; skipping codegen_grantlee target")
endif()
# Smoke-test: parse all .grantlee templates in this directory to detect parse/render regressions
if (TARGET Grantlee5::Templates)
find_package(Qt6 COMPONENTS Core QUIET)
if (Qt6_FOUND)
set(QTCORE_TARGET Qt6::Core)
else()
find_package(Qt5 COMPONENTS Core REQUIRED)
set(QTCORE_TARGET Qt5::Core)
endif()
add_executable(grantlee_parser_smoke tests/GrantleeParserSmoke.cpp)
target_link_libraries(grantlee_parser_smoke PRIVATE Grantlee5::Templates ${QTCORE_TARGET})
add_test(NAME GrantleeParserSmoke COMMAND grantlee_parser_smoke ${CMAKE_CURRENT_SOURCE_DIR})
endif()
NGL_ADD_EXECUTABLE(ALL codegen
main_grantlee.cpp
)
@@ -0,0 +1,62 @@
#include <QCoreApplication>
#include <QDir>
#include <QDebug>
#include <grantlee/engine.h>
#include <grantlee/templateloader.h>
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
QString templatesDir = QDir::currentPath();
if (argc > 1) {
templatesDir = QString::fromLocal8Bit(argv[1]);
}
Grantlee::Engine engine;
auto loader = QSharedPointer<Grantlee::FileSystemTemplateLoader>::create();
loader->setTemplateDirs(QStringList() << templatesDir);
engine.addTemplateLoader(loader);
QDir d(templatesDir);
QStringList files = d.entryList(QStringList() << "*.grantlee", QDir::Files);
if (files.isEmpty()) {
qDebug() << "No .grantlee templates found in" << templatesDir;
// Treat absence as successful parse (nothing to check) to avoid failing
// when directory is empty in different setups.
return 0;
}
bool ok = true;
for (const QString &f : files) {
Grantlee::Template t;
try {
t = engine.loadByName(f);
} catch (...) {
qDebug() << "Exception while loading" << f;
ok = false;
continue;
}
if (!t) {
qDebug() << "Failed to load template" << f;
ok = false;
continue;
}
if (t->error() != Grantlee::TemplateImpl::Error::NoError) {
qDebug() << "Parse error in" << f << ":" << t->errorString();
ok = false;
continue;
}
// Render with empty context to ensure rendering path also works.
Grantlee::Context ctx;
QString out = t->render(&ctx);
if (out.isNull()) {
qDebug() << "Rendering produced null for" << f;
ok = false;
continue;
}
}
return ok ? 0 : 2;
}