summaryrefslogtreecommitdiffstats
path: root/tests/auto/installer
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/installer')
-rw-r--r--tests/auto/installer/consumeoutputoperationtest/consumeoutputoperationtest.pro8
-rw-r--r--tests/auto/installer/consumeoutputoperationtest/tst_consumeoutputoperationtest.cpp183
-rw-r--r--tests/auto/installer/installer.pro3
3 files changed, 193 insertions, 1 deletions
diff --git a/tests/auto/installer/consumeoutputoperationtest/consumeoutputoperationtest.pro b/tests/auto/installer/consumeoutputoperationtest/consumeoutputoperationtest.pro
new file mode 100644
index 000000000..0cc9e705c
--- /dev/null
+++ b/tests/auto/installer/consumeoutputoperationtest/consumeoutputoperationtest.pro
@@ -0,0 +1,8 @@
+include(../../qttest.pri)
+
+QT -= gui
+QT += testlib
+
+SOURCES = tst_consumeoutputoperationtest.cpp
+
+DEFINES += "QMAKE_BINARY=$$QMAKE_BINARY"
diff --git a/tests/auto/installer/consumeoutputoperationtest/tst_consumeoutputoperationtest.cpp b/tests/auto/installer/consumeoutputoperationtest/tst_consumeoutputoperationtest.cpp
new file mode 100644
index 000000000..227820ed1
--- /dev/null
+++ b/tests/auto/installer/consumeoutputoperationtest/tst_consumeoutputoperationtest.cpp
@@ -0,0 +1,183 @@
+/**************************************************************************
+**
+** Copyright (C) 2012-2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt Installer Framework.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+**************************************************************************/
+#include <init.h>
+#include <packagemanagercore.h>
+#include <consumeoutputoperation.h>
+#include <qinstallerglobal.h>
+#include <fileutils.h>
+#include <qtpatchoperation.h>
+#include <errors.h>
+
+#include <QObject>
+#include <QTest>
+#include <QProcess>
+#include <QDir>
+#include <QEventLoop>
+#include <QDebug>
+
+#define QUOTE_(x) #x
+#define QUOTE(x) QUOTE_(x)
+
+using namespace KDUpdater;
+using namespace QInstaller;
+
+class tst_consumeoutputoperationtest : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase()
+ {
+#if defined(Q_OS_WIN)
+ m_binSuffix = ".exe";
+#endif
+ // be aware that this would enable eating the qDebug output
+ //QInstaller::init();
+ // if we don't use the init method we need to register the in QtPatchOperation used
+ // patch_file_lists manually
+#if defined(QT_STATIC)
+ Q_INIT_RESOURCE(patch_file_lists);
+#endif
+
+ m_fakeQtPath = QDir::toNativeSeparators(qApp->applicationDirPath()) + QDir::separator()
+ + "fakeQt" + QDir::separator();
+ QVERIFY(QDir().mkpath(m_fakeQtPath + "bin"));
+
+ QFile orgQmake(QUOTE(QMAKE_BINARY));
+ // use lrelease filename which will be patched by the QtPatch operation, but it hides that this
+ // fake Qt contains a qmake which would be used to get the patch pathes (instead of using the qmake
+ // output we want to use our installer value)
+ m_binaryInFakeQt = m_fakeQtPath + "bin" + QDir::separator() + "lrelease" + m_binSuffix;
+
+ QVERIFY2(orgQmake.copy(m_binaryInFakeQt), qPrintable(orgQmake.errorString()));
+ }
+
+ void testMissingArguments()
+ {
+ ConsumeOutputOperation operation;
+
+ QVERIFY(operation.testOperation());
+ QVERIFY(!operation.performOperation());
+ // undo does nothing so this should be true
+
+ QVERIFY(operation.undoOperation());
+
+ QCOMPARE(UpdateOperation::Error(operation.error()), UpdateOperation::InvalidArguments);
+ //qDebug() << operation.errorString();
+ QString compareString("Invalid arguments in ConsumeOutput: 0 arguments given, at least 2 "
+ "expected(<to be saved installer key name>, <executable>, [argument1], [argument2], ...).");
+ //qDebug() << compareString;
+ QCOMPARE(operation.errorString(), compareString);
+ }
+
+ void testGetOutputFromQmake()
+ {
+ QString testOutput = getOutputFrom(QUOTE(QMAKE_BINARY), QStringList("-query"));
+
+ ConsumeOutputOperation operation;
+ operation.setValue(QLatin1String("installer"), QVariant::fromValue(&m_core));
+
+ operation.setArguments(QStringList() << "testConsumeOutputKey" << QUOTE(QMAKE_BINARY) << "-query");
+ QVERIFY2(operation.performOperation(), qPrintable(operation.errorString()));
+ QCOMPARE(Operation::Error(operation.error()), Operation::NoError);
+
+ QCOMPARE(m_core.value("testConsumeOutputKey"), testOutput);
+ }
+
+ void testPatchFakeQt()
+ {
+ return;
+#if defined(Q_OS_WIN)
+ QString patchType = "windows";
+#elif defined(Q_OS_MAC)
+ QString patchType = "mac";
+#else
+ QString patchType = "linux";
+#endif
+
+ QtPatchOperation patchOperation;
+ patchOperation.setValue(QLatin1String("installer"), QVariant::fromValue(&m_core));
+
+ // testConsumeOutputKey comes from testGetOutputFromQmake() before and it can not use qmake,
+ // because it does not exist in the m_fakeQtPath
+ patchOperation.setArguments(QStringList() << "QmakeOutputInstallerKey=testConsumeOutputKey"
+ << patchType << m_fakeQtPath);
+ QVERIFY2(patchOperation.performOperation(), qPrintable(patchOperation.errorString()));
+
+ QString patchedBinaryOutput = getOutputFrom(m_binaryInFakeQt, QStringList("-query"));
+ QVERIFY(getOutputFrom(QUOTE(QMAKE_BINARY), QStringList("-query")) != patchedBinaryOutput);
+ QVERIFY(patchedBinaryOutput.contains(m_fakeQtPath));
+ }
+
+ void cleanupTestCase()
+ {
+ try {
+ removeDirectory(m_fakeQtPath);
+ } catch (const QInstaller::Error &error) {
+ QFAIL(qPrintable(error.message()));
+ }
+ }
+
+private:
+ QString getOutputFrom(const QString &binary, const QStringList &arguments = QStringList())
+ {
+ QEventLoop loop;
+ QProcess process;
+
+ QObject::connect(&process, SIGNAL(finished(int, QProcess::ExitStatus)), &loop, SLOT(quit()));
+ process.start(binary, arguments, QIODevice::ReadOnly);
+
+ if (process.state() != QProcess::NotRunning)
+ loop.exec();
+
+ return process.readAllStandardOutput();
+ }
+
+
+ PackageManagerCore m_core;
+ QString m_fakeQtPath;
+ QString m_binaryInFakeQt;
+ QString m_binSuffix;
+};
+
+QTEST_MAIN(tst_consumeoutputoperationtest)
+
+#include "tst_consumeoutputoperationtest.moc"
diff --git a/tests/auto/installer/installer.pro b/tests/auto/installer/installer.pro
index df2630166..13acba4f1 100644
--- a/tests/auto/installer/installer.pro
+++ b/tests/auto/installer/installer.pro
@@ -8,4 +8,5 @@ SUBDIRS += \
messageboxhandler \
extractarchiveoperationtest \
lib7zfacade \
- scriptengine
+ scriptengine \
+ consumeoutputoperationtest