1 /*! 2 * \copyright Copyright (c) 2018-2021 Governikus GmbH & Co. KG, Germany 3 */ 4 5 #include "ResourceLoader.h" 6 7 #include <QDirIterator> 8 #include <QFileInfo> 9 #include <QtTest> 10 11 using namespace governikus; 12 13 class test_QmlFileStructure 14 : public QObject 15 { 16 Q_OBJECT 17 18 private: 19 QStringList mQmlFiles; 20 21 private Q_SLOTS: initTestCase()22 void initTestCase() 23 { 24 ResourceLoader::getInstance().init(); 25 26 QDirIterator iterator(QStringLiteral(":"), {QStringLiteral("*.qml")}, QDir::Files | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); 27 while (iterator.hasNext()) 28 { 29 const auto& file = iterator.next(); 30 if (!file.endsWith(QStringLiteral("main.qml"))) 31 { 32 mQmlFiles += file; 33 } 34 } 35 } 36 37 qmlFileStructureIsSane_data()38 void qmlFileStructureIsSane_data() 39 { 40 QTest::addColumn<QFileInfo>("qmlFile"); 41 42 for (const QString& file : qAsConst(mQmlFiles)) 43 { 44 const QFileInfo info(file); 45 QTest::newRow(info.fileName().toLatin1().data()) << info; 46 } 47 } 48 49 qmlFileStructureIsSane()50 void qmlFileStructureIsSane() 51 { 52 QFETCH(QFileInfo, qmlFile); 53 54 QDir dir = qmlFile.dir(); 55 while (dir.dirName().startsWith(QChar('+'))) 56 { 57 dir.cdUp(); 58 const QString fileInParentFolder = dir.path() + QDir::separator() + qmlFile.fileName(); 59 QVERIFY(!mQmlFiles.contains(fileInParentFolder)); 60 } 61 } 62 63 avoidMultipleDeviceFiles_data()64 void avoidMultipleDeviceFiles_data() 65 { 66 QTest::addColumn<QFileInfo>("qmlFile"); 67 68 for (const QString& file : qAsConst(mQmlFiles)) 69 { 70 if (file.contains(QLatin1String("+phone")) || file.contains(QLatin1String("+tablet"))) 71 { 72 const QFileInfo info(file); 73 QTest::newRow(info.fileName().toLatin1().data()) << info; 74 } 75 } 76 } 77 78 avoidMultipleDeviceFiles()79 void avoidMultipleDeviceFiles() 80 { 81 QFETCH(QFileInfo, qmlFile); 82 83 QDir dir = qmlFile.dir(); 84 const auto& device = dir.dirName(); 85 dir.cdUp(); 86 87 const auto& parentFolder = dir.dirName(); 88 if (parentFolder == QLatin1String("+android") || parentFolder == QLatin1String("+ios")) 89 { 90 dir.cdUp(); 91 dir.cd(device); 92 const QString fileInParentFolder = dir.path() + QDir::separator() + qmlFile.fileName(); 93 QVERIFY(!mQmlFiles.contains(fileInParentFolder)); 94 return; 95 } 96 97 const QString file = QDir::separator() + device + QDir::separator() + qmlFile.fileName(); 98 QVERIFY(!mQmlFiles.contains(dir.path() + QDir::separator() + QStringLiteral("+android") + file)); 99 QVERIFY(!mQmlFiles.contains(dir.path() + QDir::separator() + QStringLiteral("+ios") + file)); 100 } 101 102 103 }; 104 105 QTEST_GUILESS_MAIN(test_QmlFileStructure) 106 #include "test_QmlFileStructure.moc" 107