mirror of
https://github.com/QuasarApp/CQtDeployer.git
synced 2025-04-26 17:54:32 +00:00
202 lines
5.5 KiB
C++
202 lines
5.5 KiB
C++
#include "testbase.h"
|
|
#include <QProcessEnvironment>
|
|
#include "testutils.h"
|
|
#include <QJsonDocument>
|
|
#include <QJsonObject>
|
|
#include <QTest>
|
|
|
|
const QString TestBase::TestBinDir = TEST_BIN_DIR;
|
|
const QString TestBase::TestQtDir = QT_BASE_DIR;
|
|
|
|
TestBase::TestBase()
|
|
{
|
|
|
|
}
|
|
|
|
int TestBase::generateLib(const QString &paath) {
|
|
QDir dir;
|
|
dir.mkpath(QFileInfo(paath).absolutePath());
|
|
QFile testLib (paath);
|
|
|
|
int size = 0;
|
|
|
|
if (testLib.open(QIODevice::ReadWrite| QIODevice::Truncate)) {
|
|
QFile resData(":/debugLib");
|
|
if (resData.open(QIODevice::ReadOnly)) {
|
|
QByteArray tempData = resData.readAll();
|
|
size = tempData.size();
|
|
testLib.write(tempData.data(), tempData.size());
|
|
resData.close();
|
|
}
|
|
|
|
testLib.close();
|
|
}
|
|
|
|
return size;
|
|
}
|
|
|
|
void TestBase::deleteLib(const QString &paath) {
|
|
QFileInfo info(paath);
|
|
if (info.isDir()) {
|
|
QFile::remove(info.absoluteFilePath());
|
|
} else {
|
|
QDir qt(info.absoluteFilePath());
|
|
qt.removeRecursively();
|
|
}
|
|
}
|
|
|
|
void TestBase::checkResults(const QSet<QString> &tree, bool noWarnings, bool onlySize) {
|
|
TestUtils utils;
|
|
|
|
QVERIFY(DeployCore::_config);
|
|
QVERIFY(!DeployCore::_config->getTargetDir().isEmpty());
|
|
|
|
auto resultTree = utils.getTree(DeployCore::_config->getTargetDir());
|
|
|
|
#ifdef Q_OS_WIN
|
|
// Remove all API-MS-Win libs, because each OS Windows have a own bundle of this api libs.
|
|
// See the https://github.com/QuasarApp/CQtDeployer/issues/481#issuecomment-755156875 post for more information.
|
|
resultTree = TestModule.ignoreFilter(resultTree, "API-MS-Win");
|
|
|
|
#endif
|
|
|
|
|
|
auto comapre = utils.compareTree(resultTree, tree);
|
|
|
|
if (onlySize) {
|
|
QVERIFY(resultTree.size() > tree.size());
|
|
return;
|
|
}
|
|
|
|
auto &filesTree = *FilesTreeService::autoInstance();
|
|
|
|
if (comapre.size() != 0) {
|
|
|
|
bool bug = false;
|
|
QJsonObject comapreResult;
|
|
|
|
for (auto i = comapre.begin(); i != comapre.end(); ++i) {
|
|
|
|
if (i.value() == 1) {
|
|
comapreResult[ i.key()] = "Added unnecessary file";
|
|
qCritical() << "added unnecessary file : " + i.key();
|
|
bug = true;
|
|
} else if (filesTree.contains(QFileInfo(i.key()).fileName())) {
|
|
comapreResult[ i.key()] = "Missing";
|
|
qCritical() << "Missing file : " + i.key();
|
|
bug = true;
|
|
} else if (noWarnings) {
|
|
comapreResult[ i.key()] = " not exits in qt Dir";
|
|
|
|
qCritical() << "File : " + i.key() + " not exits in qt Dir";
|
|
bug = true;
|
|
} else {
|
|
comapreResult[ i.key()] = " not exits in qt Dir";
|
|
qWarning() << "File : " + i.key() + " not exits in qt Dir";
|
|
}
|
|
}
|
|
|
|
if (!bug) {
|
|
return;
|
|
}
|
|
|
|
QJsonObject obj;
|
|
for (const auto &i : qAsConst(resultTree)) {
|
|
obj[i];
|
|
}
|
|
|
|
QJsonDocument doc(obj);
|
|
|
|
QFile lasttree("./LastTree.json");
|
|
lasttree.open(QIODevice::WriteOnly| QIODevice::Truncate);
|
|
|
|
lasttree.write(doc.toJson());
|
|
lasttree.close();
|
|
|
|
lasttree.setFileName("./CompareTree.json");
|
|
lasttree.open(QIODevice::WriteOnly| QIODevice::Truncate);
|
|
|
|
lasttree.write(QJsonDocument(comapreResult).toJson());
|
|
lasttree.close();
|
|
|
|
QVERIFY2(false, "runTestParams fail");
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void TestBase::costomScript() {
|
|
TestUtils utils;
|
|
|
|
#ifdef Q_OS_UNIX
|
|
QFile f("./" + DISTRO_DIR + "/bin/TestOnlyC");
|
|
auto comapareTree = utils.createTree(
|
|
{"./" + DISTRO_DIR + "/bin/TestOnlyC",
|
|
"./" + DISTRO_DIR + "/bin/qt.conf",
|
|
"./" + DISTRO_DIR + "/TestOnlyC.sh"});
|
|
QString bin = TestBinDir + "TestOnlyC";
|
|
QString scriptPath = "./" + DISTRO_DIR + "/TestOnlyC.sh";
|
|
|
|
#else
|
|
QFile f("./" + DISTRO_DIR + "/TestOnlyC.exe");
|
|
auto comapareTree = utils.createTree(
|
|
{"./" + DISTRO_DIR + "/TestOnlyC.exe",
|
|
"./" + DISTRO_DIR + "/TestOnlyC.bat",
|
|
"./" + DISTRO_DIR + "/qt.conf"});
|
|
QString bin = TestBinDir + "TestOnlyC.exe";
|
|
QString scriptPath = "./" + DISTRO_DIR + "/TestOnlyC.bat";
|
|
|
|
|
|
#endif
|
|
|
|
runTestParams({"-bin", bin, "force-clear", "noOverwrite", "-libOut", "lib"}, &comapareTree);
|
|
|
|
QFile script(scriptPath);
|
|
QVERIFY(script.open(QIODevice::ReadOnly));
|
|
auto scriptText = script.readAll();
|
|
|
|
QVERIFY(!scriptText.contains("Begin Custom Script"));
|
|
|
|
script.close();
|
|
|
|
runTestParams({"-bin", bin, "force-clear", "noOverwrite",
|
|
"-libOut", "lib",
|
|
"-customScript", "echo 'this is test script'"}, &comapareTree);
|
|
|
|
QVERIFY(script.open(QIODevice::ReadOnly));
|
|
|
|
scriptText = script.readAll();
|
|
|
|
QVERIFY(scriptText.contains("Begin Custom Script"));
|
|
QVERIFY(scriptText.contains("echo 'this is test script'"));
|
|
QVERIFY(scriptText.contains("End Custom Script"));
|
|
|
|
script.close();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
void TestBase::runTestParams(QStringList list, QSet<QString> *tree, bool noWarnings, bool onlySize, exitCodes exitCode, const std::function<void (const DeployConfig *)> &cb) {
|
|
|
|
QuasarAppUtils::Params::parseParams(list);
|
|
|
|
Deploy deploy;
|
|
int code = deploy.run();
|
|
if (code != exitCode) {
|
|
qDebug() << "Needed exit Code = " << exitCode;
|
|
qDebug() << "Exit Code = " << code;
|
|
|
|
QVERIFY(false && "exit code not valid");
|
|
}
|
|
|
|
if (tree) {
|
|
checkResults(*tree, noWarnings, onlySize);
|
|
}
|
|
|
|
if (cb)
|
|
cb(DeployCore::_config);
|
|
}
|