summaryrefslogtreecommitdiffstats
path: root/installerbuilder/tests/extractarchiveoperationtest
diff options
context:
space:
mode:
Diffstat (limited to 'installerbuilder/tests/extractarchiveoperationtest')
-rw-r--r--installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.cpp162
-rw-r--r--installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.h46
-rw-r--r--installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.pro20
3 files changed, 228 insertions, 0 deletions
diff --git a/installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.cpp b/installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.cpp
new file mode 100644
index 000000000..adcaa6b9e
--- /dev/null
+++ b/installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.cpp
@@ -0,0 +1,162 @@
+/**************************************************************************
+**
+** This file is part of Qt SDK**
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).*
+**
+** Contact: Nokia Corporation qt-info@nokia.com**
+**
+** No Commercial Usage
+**
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+**
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception version
+** 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you are unsure which license is appropriate for your use, please contact
+** (qt-info@nokia.com).
+**
+**************************************************************************/
+#include "extractarchiveoperationtest.h"
+#include "extractarchiveoperation.h"
+
+#include <QDir>
+#include <QDirIterator>
+#include <QFileInfo>
+#include <QStack>
+
+#include <KDUpdater/Application>
+
+#include "init.h"
+
+ExtractArchiveOperationTest::ExtractArchiveOperationTest()
+{
+ QInstaller::init();
+}
+
+void ExtractArchiveOperationTest::init( const QString& outdir ) {
+ if ( QDir( outdir ).exists() ) {
+ QFAIL( "output directory already exists!" );
+ QVERIFY( false );
+ }
+ QDir cd( QDir::current() );
+ QVERIFY( cd.mkdir( outdir ) );
+}
+
+static bool recursiveRemove( const QString& path, QString* errorMsg ) {
+ if ( errorMsg )
+ errorMsg->clear();
+ if ( !QFileInfo( path ).exists() )
+ return true;
+ bool error = false;
+ QString msg;
+ //first, delete all non-dir files
+ QDirIterator it( path, QDirIterator::Subdirectories );
+ while ( it.hasNext() ) {
+ const QString n = it.next();
+ if ( !QFileInfo( n ).isDir() ) {
+ QFile file( n );
+ if ( !file.remove() ) {
+ error = true;
+ msg = file.errorString();
+ }
+ }
+ }
+
+ QStack<QString> dirs;
+ QDirIterator it2( path, QDirIterator::Subdirectories );
+ while ( it2.hasNext() ) {
+ const QString n = it2.next();
+ if ( !n.endsWith( QLatin1String( "/." ) ) && !n.endsWith( QLatin1String( "/.." ) ) )
+ dirs.push( n );
+ }
+ while ( !dirs.isEmpty() ) {
+ const QString n = dirs.top();
+ dirs.pop();
+ if ( !QDir( n ).rmdir( QDir::currentPath() + QLatin1String( "/" ) + n ) ) {
+ error = true;
+ msg = QObject::tr("Could not remove folder %1").arg( n );
+ qDebug() << msg;
+ }
+ }
+
+ if ( !QDir( path ).rmdir( QDir::currentPath() + QLatin1String( "/" ) + path ) ) {
+ error = true;
+ msg = QObject::tr("Could not remove folder %1: Unknown error").arg( path );
+ }
+
+ if ( errorMsg )
+ *errorMsg = msg;
+ return !error;
+}
+
+void ExtractArchiveOperationTest::cleanup( const QString& dir ) {
+ QDir d( dir );
+ QString msg;
+ const bool removed = recursiveRemove( dir, &msg );
+ if ( !removed )
+ qCritical() << msg;
+ QVERIFY( removed );
+}
+
+void ExtractArchiveOperationTest::testExtraction() {
+ const QString outdir = QLatin1String("test-extract-out" );
+ init( outdir );
+ KDUpdater::Application app;
+ QInstaller::ExtractArchiveOperation op;
+ op.setArguments( QStringList() << QLatin1String("qt-bin-test.7z") << outdir );
+ const bool ok = op.performOperation();
+ if ( !ok ) {
+ qCritical() << "Extraction failed:" << op.errorString();
+ QFAIL( "Extraction failed" );
+ }
+ cleanup( outdir );
+}
+
+void ExtractArchiveOperationTest::testExtractionErrors() {
+ const QString outdir = QLatin1String("test-extract-out" );
+ init( outdir );
+ KDUpdater::Application app;
+ QInstaller::ExtractArchiveOperation op;
+ op.setArguments( QStringList() << QLatin1String("qt-bin-test.7z") << outdir );
+ const bool ok = op.performOperation();
+ if ( !ok ) {
+ qCritical() << "Extraction failed:" << op.errorString();
+ QFAIL( "Extraction failed" );
+ }
+ cleanup( outdir );
+
+}
+
+void ExtractArchiveOperationTest::testInvalidArchive() {
+ const QString outdir = QLatin1String("test-extract-out" );
+ init( outdir );
+ KDUpdater::Application app;
+ QInstaller::ExtractArchiveOperation op;
+ op.setArguments( QStringList() << QLatin1String("test-noarchive.7z") << outdir );
+ const bool ok = op.performOperation();
+ if ( ok ) {
+ qCritical() << "ExtractArchiveOperation does not report error on extracting invalid archive";
+ QFAIL( "Extraction failed" );
+ }
+ QVERIFY( op.error() != QInstaller::ExtractArchiveOperation::NoError );
+ const QString str = op.errorString();
+ qDebug() << str;
+ QVERIFY( !str.isEmpty() );
+ cleanup( outdir );
+}
+
+QTEST_MAIN(ExtractArchiveOperationTest)
diff --git a/installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.h b/installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.h
new file mode 100644
index 000000000..be5169426
--- /dev/null
+++ b/installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.h
@@ -0,0 +1,46 @@
+/**************************************************************************
+**
+** This file is part of Qt SDK**
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).*
+**
+** Contact: Nokia Corporation qt-info@nokia.com**
+**
+** GNU Lesser General Public License Usage
+**
+** 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, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception version
+** 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you are unsure which license is appropriate for your use, please contact
+** (qt-info@nokia.com).
+**
+**************************************************************************/
+#ifndef EXTRACTIONARCHIVEOPERATIONTEST_H
+#define EXTRACTIONARCHIVEOPERATIONTEST_H
+
+#include <QObject>
+
+#include <QtTest/QtTest>
+
+class ExtractArchiveOperationTest : public QObject {
+ Q_OBJECT
+public:
+ ExtractArchiveOperationTest();
+private Q_SLOTS:
+ void testExtraction();
+ void testInvalidArchive();
+ void testExtractionErrors();
+private:
+ void init( const QString& );
+ void cleanup( const QString& );
+};
+
+#endif // EXTRACTARCHIVEOPERATIONTEST_H
diff --git a/installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.pro b/installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.pro
new file mode 100644
index 000000000..11ccc3474
--- /dev/null
+++ b/installerbuilder/tests/extractarchiveoperationtest/extractarchiveoperationtest.pro
@@ -0,0 +1,20 @@
+TEMPLATE = app
+TARGET = extractarchiveoperationtest
+
+DESTDIR = bin
+
+CONFIG -= app_bundle
+
+QT += testlib script
+QT -= gui
+
+INCLUDEPATH += ../../libinstaller ..
+DEPENDPATH += ../../libinstaller ../../common
+
+include(../../libinstaller/libinstaller.pri)
+
+SOURCES = extractarchiveoperationtest.cpp
+HEADERS = extractarchiveoperationtest.h
+
+win32:LIBS += ole32.lib oleaut32.lib user32.lib
+win32:OBJECTS_DIR = .obj