CQtDeployer/tests/tstMain.cpp
2023-12-31 09:24:12 +01:00

328 lines
9.8 KiB
C++

//#
//# Copyright (C) 2020-2024 QuasarApp.
//# Distributed under the GPLv3 software license, see the accompanying
//# Everyone is permitted to copy and distribute verbatim copies
//# of this license document, but changing it is not allowed.
//#
#include <QtTest>
#include "qttest.h"
#ifdef Q_OS_LINUX
#include "extradependstest.h"
#include "allowemptypackagestest.h"
#include "binprefixtest.h"
#include "checkqttest.h"
#include "cleartest.h"
#include "confifiletest.h"
#include "customplatformtest.h"
#include "customscripttest.h"
#include "customtest.h"
#include "debcustomtest.h"
#include "debmultitest.h"
#include "debtest.h"
#include "dependencymaptest.h"
#include "deploygeneralfilestest.h"
#include "deploytargettest.h"
#include "disablerunscripttest.h"
#include "disableshortcutstest.h"
#include "distrostructtest.h"
#include "emptypackagestest.h"
#include "extractlibtest.h"
#include "extradatatest.h"
#include "extrapluginstest.h"
#include "iconstest.h"
#include "ignoreenvtest.h"
#include "ignoreenvwithlibdirtest.h"
#include "ignoretest.h"
#include "inittest.h"
#include "installdiroptionstest.h"
#include "libdirstest.h"
#include "md5test.h"
#include "multipackingtest.h"
#include "outdirtest.h"
#include "overridingtemplatedebtest.h"
#include "overwritetest.h"
#include "overwritewithpackingtest.h"
#include "packagestest.h"
#include "pathutilstest.h"
#include "prefixtest.h"
#include "qifwachiveformattest.h"
#include "qifwbinarycreatortest.h"
#include "qifwouttest.h"
#include "qifwresourcestest.h"
#include "QIFWtest.h"
#include "qmlextracttest.h"
#include "qmlscanertest.h"
#include "releativelinktest.h"
#include "runscriptstest.h"
#include "settargetdirtest.h"
#include "striptest.h"
#include "targetdirtest.h"
#include "trtest.h"
#include "virtualkeybordtest.h"
#include "webenginetest.h"
#include "ziparrchivetest.h"
#include "zipmultitest.h"
#include "ziptest.h"
#include "systemlibtest.h"
#include "qmlfiledialogtest.h"
#endif
#ifdef Q_OS_WIN
#include "MSVCtest.h"
#endif
// Use This macros for initialize your own test classes.
// Check exampletests
#define TestCase(name, testClass) \
void name() { \
initTest(new testClass); \
}
/**
* @brief The tstMain class - this is main test class
*/
class tstMain : public QObject
{
Q_OBJECT
public:
tstMain();
~tstMain();
private slots:
// BEGIN TESTS CASES
// General tests for all platforms
TestCase(qttest, QtTest )
// main tests works on linux only
#ifdef Q_OS_LINUX
TestCase(extraDependsTest, ExtraDependsTest)
TestCase(allowemptypackagestest, AllowEmptyPackagesTest )
TestCase(binprefixtest, BinPrefixTest)
TestCase(checkqttest, CheckQtTest)
TestCase(cleartest, ClearTest )
TestCase(confifiletest, ConfFileTest)
TestCase(customplatformtest, CustomPlatformTest)
TestCase(customscripttest, CustomScriptTest)
TestCase(customtest, CustomTest)
TestCase(debcustomtest, DEBCustomTest)
TestCase(debmultitest, DEBMultiTest)
TestCase(debtest, DEBTest)
TestCase(dependencymaptest, DependencyMapTest)
TestCase(deploygeneralfilestest, DeployGeneralFilesTest)
TestCase(deploytargettest, DeployTargetTest)
TestCase(disablerunscripttest, DisableRunScriptTest )
TestCase(disableshortcutstest, DisableShortcutsTest)
TestCase(distrostructtest, DistroStructTest )
TestCase(emptypackagestest, EmptyPackagesTest)
TestCase(extractlibtest, ExtractLibTest)
TestCase(extradatatest, ExtraDataTest )
TestCase(extrapluginstest, ExtraPluginTest)
TestCase(iconstest, IconsTest )
TestCase(ignoreenvtest, IgnoreEnvTest )
TestCase(ignoreenvwithlibdirtest, IgnoreEnvWithLibDirTest )
TestCase(ignoretest, IgnoreTest )
TestCase(inittest, InitTest )
TestCase(installdiroptionstest, InstallDirsOptionsTest )
TestCase(libdirstest, LibDirTest )
TestCase(md5test, MD5Test )
TestCase(multipackingtest, MultiPackingTest )
TestCase(outdirtest, OutDirTest )
TestCase(overridingtemplatedebtest, OverridingDefaultTemplateDEBTest )
TestCase(overridingtemplateqifwtest, OverridingDefaultTemplateDEBTest )
TestCase(overwritetest, OverwiriteTest )
TestCase(overwritewithpackingtest, OverwiriteWithPackingTest )
TestCase(packagestest, PacakgesTest )
TestCase(pathutilstest, PathUtilsTest )
TestCase(prefixtest, PrefixTest )
TestCase(qifwachiveformattest, QIFWArchiveFormatTest )
TestCase(qifwbinarycreatortest, QIFWBinaryCreatorTest )
TestCase(qifwouttest, QIFWOutTest )
TestCase(qifwresourcestest, QIFWResourcesTest )
TestCase(QIFWtest, QIFWTest )
TestCase(qmlextracttest, QMLExtractTest )
TestCase(qmlscanertest, QmlScanerTest )
TestCase(releativelinktest, ReleativeLinkTest )
TestCase(runscriptstest, RunScriptsTest )
TestCase(settargetdirtest, SetTargetDirTest )
TestCase(striptest, StripTest )
TestCase(targetdirtest, TargetDirTest )
TestCase(trtest, TrTest )
TestCase(virtualkeybordtest, VirtualKeyBoardTest )
TestCase(webenginetest, WebEngineTest )
TestCase(ziparrchivetest, ZIPArchiveTest )
TestCase(zipmultitest, ZIPMultiTest )
TestCase(ziptest, ZIPTest )
TestCase(qmlfiledialogtest, QmlFileDialogTest)
TestCase(systemLibTest, SystemLibTest)
#endif
// platform tests
#ifdef Q_OS_WIN
TestCase(MSVCtest, MSVCTest )
#endif
// END TEST CASES
private:
void initTestCase();
void cleanupTestCase();
/**
* @brief initTest This method prepare @a test for run in the QApplication loop.
* @param test are input test case class.
*/
void initTest(Test* test);
QCoreApplication *_app = nullptr;
};
void tstMain::initTestCase() {
QDir qt;
QDir("./" + DISTRO_DIR).removeRecursively();
qt.mkpath("./test/Qt/5.12/");
qt.mkpath("./test/extraPath/");
qt.mkpath("./test/extra/");
qt.mkpath("./test/warning/");
qt.mkpath("./test/bins/");
QFile f( "./test/Qt/5.12/generalLib.so");
if (f.open(QIODevice::WriteOnly| QIODevice::Truncate)) {
f.write("lib", 3);
f.close();
}
f.setFileName("./test/extraPath/ExtraLib.so");
if (f.open(QIODevice::WriteOnly| QIODevice::Truncate)) {
f.write("lib", 3);
f.close();
}
f.setFileName("./test/extra/ExtraLib.so");
if (f.open(QIODevice::WriteOnly| QIODevice::Truncate)) {
f.write("lib", 3);
f.close();
}
f.setFileName("./test/warning/WarningLib.so");
if (f.open(QIODevice::WriteOnly| QIODevice::Truncate)) {
f.write("lib", 3);
f.close();
}
f.setFileName("./test/bins/execTarget.exe");
if (f.open(QIODevice::WriteOnly| QIODevice::Truncate)) {
f.write("exec", 3);
f.close();
}
f.setFileName("./test/bins/execTarget");
if (f.open(QIODevice::WriteOnly| QIODevice::Truncate)) {
f.write("exec", 3);
f.close();
}
}
void tstMain::cleanupTestCase() {
QDir qt("./test");
qt.removeRecursively();
auto originalPath = qgetenv("CQT_TEST_ORIGINAL_PATH");
if (!originalPath.isEmpty()) {
qputenv("PATH", originalPath);
}
}
/**
* @brief tstMain::tstMain
* init all availabel units for testsing
*/
tstMain::tstMain() {
auto originalPath = qgetenv("CQT_TEST_ORIGINAL_PATH");
if (originalPath.isEmpty()) {
qputenv("CQT_TEST_ORIGINAL_PATH", qgetenv("PATH"));
}
qputenv("QTEST_FUNCTION_TIMEOUT", "1800000");
QString cqtTestPath = QString(QT_BASE_DIR) + "/bin/" +
DeployCore::getEnvSeparator() +
qgetenv("CQT_TEST_ORIGINAL_PATH");
cqtTestPath = cqtTestPath +
DeployCore::getEnvSeparator() +
QT_BASE_DIR + "/../../Tools/QtInstallerFramework/4.0/bin/";
cqtTestPath = cqtTestPath +
DeployCore::getEnvSeparator() +
QT_BASE_DIR + "/../../Tools/QtInstallerFramework/4.1/bin/";
cqtTestPath = cqtTestPath +
DeployCore::getEnvSeparator() +
QT_BASE_DIR + "/../../Tools/QtInstallerFramework/4.2/bin/";
cqtTestPath = cqtTestPath +
DeployCore::getEnvSeparator() +
QT_BASE_DIR + "/../../Tools/QtInstallerFramework/4.3/bin/";
cqtTestPath = cqtTestPath +
DeployCore::getEnvSeparator() +
QT_BASE_DIR + "/../../Tools/QtInstallerFramework/4.4/bin/";
cqtTestPath = cqtTestPath +
DeployCore::getEnvSeparator() +
QT_BASE_DIR + "/../../Tools/QtInstallerFramework/4.5/bin/";
cqtTestPath = cqtTestPath +
DeployCore::getEnvSeparator() +
QT_BASE_DIR + "/../../Tools/QtInstallerFramework/4.6/bin/";
qputenv("PATH", cqtTestPath.toLatin1().data());
TestUtils utils;
auto &filesTree = *FilesTreeService::autoInstance();
filesTree += utils.getFilesSet(QT_BASE_DIR);
// init xample unit test
int argc =0;
char * argv[] = {nullptr};
_app = new QCoreApplication(argc, argv);
QCoreApplication::setApplicationName("testCQtDeployer");
QCoreApplication::setOrganizationName("QuasarApp");
auto path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QDir(path).removeRecursively();
initTestCase();
}
tstMain::~tstMain() {
_app->exit(0);
delete _app;
cleanupTestCase();
}
void tstMain::initTest(Test *test) {
QTimer::singleShot(0, this, [this, test]() {
try {
test->test();
} catch (std::exception *e) {
QVERIFY2(false , e->what());
delete e;
}
_app->exit(0);
});
_app->exec();
delete test;
}
QTEST_APPLESS_MAIN(tstMain)
#include "tstMain.moc"