activityfw/activityserviceplugin/tsrc/unittest_applicationluncher/src/unittest_applicationluncher.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/activityserviceplugin/tsrc/unittest_applicationluncher/src/unittest_applicationluncher.cpp Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,199 @@
+/** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include "unittest_applicationluncher.h"
+
+#include <e32std.h>
+#include <apgcli.h>
+#include <apacmdln.h>
+#include <apgtask.h>
+#include <APGWGNAM.H>
+#include <eikenv.h>
+#include <AknDef.h>
+
+#include <QtTest/QtTest>
+#include <QString>
+#include <QSystemSemaphore>
+
+#include <qvaluespacesubscriber.h>
+
+#include "tstestutils.h"
+
+#include "afactivities_global.h"
+#include "aflauncher.h"
+
+const TUid KIconApplicationUid = {0xEd0b4e47};
+const TUid KActivityApplicationUid = {0xEBADF00D};
+const TUid KInvalidUid = {0xDEADBEEF};
+const TUid KCorruptedApplicationUid = {0xE5C3B14E};
+
+namespace {
+ const char KIconApplicationName[] = "appwithicon";
+}
+
+QTM_USE_NAMESPACE
+
+// ---------------------------------------------------------------------------
+// Test cases
+// ---------------------------------------------------------------------------
+//
+void TestApplicationLuncher::initTestCase()
+{
+ QCOMPARE(mWsSession.Connect(), KErrNone);
+}
+
+void TestApplicationLuncher::cleanupTestCase()
+{
+ mWsSession.Close();
+}
+
+void TestApplicationLuncher::testIsRunning()
+{
+ AfLauncher launcher;
+
+ QVERIFY(!launcher.isRunning(KIconApplicationUid.iUid));
+
+ quint64 iconAppId;
+ QVERIFY(TsTestUtils::startApplication(KIconApplicationName, iconAppId));
+ QVERIFY(launcher.isRunning(KIconApplicationUid.iUid));
+
+ QVERIFY(TsTestUtils::closeApplication(iconAppId));
+ QVERIFY(!launcher.isRunning(KIconApplicationUid.iUid));
+}
+
+void TestApplicationLuncher::testStartApp()
+{
+ QSystemSemaphore semaphore("PublishActivityApp");
+ AfLauncher launcher;
+
+ QVERIFY(!launcher.isRunning(KActivityApplicationUid.iUid));
+
+ launcher.startApplication(KActivityApplicationUid.iUid, QString());
+ QVERIFY(semaphore.acquire());
+
+ QVERIFY(TsTestUtils::closeApplication(KActivityApplicationUid));
+ QVERIFY(!launcher.isRunning(KActivityApplicationUid.iUid));
+}
+
+void TestApplicationLuncher::testbringToForeground()
+{
+ AfLauncher launcher;
+
+ quint64 iconAppId;
+ QVERIFY(TsTestUtils::startApplication(KIconApplicationName, iconAppId));
+ QVERIFY(launcher.isRunning(KIconApplicationUid.iUid));
+
+ QVERIFY(sendToBackground(KIconApplicationUid));
+ QVERIFY(getForegroundAppUid() != KIconApplicationUid);
+ QTest::qWait(3000); // for some reason if there is no timeout, the test application will restart itself after kill
+
+ launcher.bringToForeground(KIconApplicationUid.iUid);
+ QVERIFY(getForegroundAppUid() == KIconApplicationUid);
+ QTest::qWait(3000); // for some reason if there is no timeout, the test application will restart itself after kill
+
+ QVERIFY(TsTestUtils::closeApplication(iconAppId));
+ QVERIFY(!launcher.isRunning(KIconApplicationUid.iUid));
+}
+
+// ---------------------------------------------------------------
+
+void TestApplicationLuncher::testLaunchActivity_data()
+{
+ QTest::addColumn<QString>("activityName");
+
+ QTest::newRow("normal") << "blahblahblah";
+ QTest::newRow("special characters") << "asd $&+,/:;=?@ \"<>#%{}|\\^~[]`asd";
+}
+
+void TestApplicationLuncher::testLaunchActivity()
+{
+ QSystemSemaphore semaphore("PublishActivityApp");
+
+ AfLauncher launcher;
+ QVERIFY(!launcher.isRunning(KActivityApplicationUid.iUid));
+
+ QFETCH(QString, activityName);
+ launcher.startApplication(KActivityApplicationUid.iUid, buildUri(KActivityApplicationUid, activityName));
+ semaphore.acquire();
+
+ QCOMPARE(QValueSpaceSubscriber("/PublishActivityApp/ActivityName").value().toString(), activityName);
+
+ QVERIFY(TsTestUtils::closeApplication(KActivityApplicationUid));
+ QVERIFY(!launcher.isRunning(KIconApplicationUid.iUid));
+}
+
+// ---------------------------------------------------------------
+
+void TestApplicationLuncher::testGracefulHandlingOfInvalidUid()
+{
+ AfLauncher launcher;
+ launcher.startApplication(KInvalidUid.iUid, QString());
+}
+
+void TestApplicationLuncher::testGracefulHandlingOfCorruptedApplication()
+{
+ AfLauncher launcher;
+
+ // We're going to test Launcher behavior when someone tries to start
+ // application with missing executable file
+ launcher.startApplication(KCorruptedApplicationUid.iUid, QString());
+}
+
+// ---------------------------------------------------------------------------
+// Helper methods
+// ---------------------------------------------------------------------------
+//
+QUrl TestApplicationLuncher::buildUri(const TUid &uid, const QString &activityName)
+{
+ QUrl uri;
+ uri.setScheme("appto");
+ uri.setHost(QString("%1").arg(static_cast<uint>(uid.iUid), 8, 16, QChar('0')));
+ uri.addQueryItem(Af::KActivityUriNameKey, activityName);
+ return uri;
+}
+
+bool TestApplicationLuncher::sendToBackground(const TUid &uid)
+{
+ TApaTaskList taskList(mWsSession);
+ TApaTask task = taskList.FindApp(uid);
+ bool taskExists = task.Exists();
+ if (taskExists) {
+ task.SendToBackground();
+ }
+ return taskExists;
+}
+
+TUid TestApplicationLuncher::getForegroundAppUid()
+{
+ RWsSession wsSession;
+ // get all window groups
+ RArray<RWsSession::TWindowGroupChainInfo> windowGroupList;
+ CleanupClosePushL(windowGroupList);
+ User::LeaveIfError(mWsSession.WindowGroupList(0, &windowGroupList));
+
+ if (windowGroupList.Count() == 0) {
+ User::Leave(KErrNotFound);
+ }
+
+ // get uid of first window group
+ CApaWindowGroupName* windowGroupName = CApaWindowGroupName::NewLC(mWsSession, windowGroupList[0].iId);
+ TUid foregroundAppUid = windowGroupName->AppUid();
+ CleanupStack::PopAndDestroy(windowGroupName);
+ CleanupStack::PopAndDestroy(&windowGroupList);
+
+ return foregroundAppUid;
+}
+
+QTEST_MAIN(TestApplicationLuncher)