activityfw/afactivitylauncher/tsrc/t_tapplicationlauncher/src/t_tapplicationlauncher.cpp
changeset 117 c63ee96dbe5f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/afactivitylauncher/tsrc/t_tapplicationlauncher/src/t_tapplicationlauncher.cpp	Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,183 @@
+/** 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 "t_tapplicationlauncher.h"
+
+#include <apgwgnam.h>
+#include <apgtask.h>
+
+#include <QtTest/QtTest>
+#include <QString>
+#include <QSystemSemaphore>
+
+#include <XQConversions>
+#include <qvaluespacesubscriber.h>
+
+#include <afactivities_global.h>
+#include <tstestutils.h>
+
+#include "afapplicationlauncher.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 TestTApplicationLauncher::initTestCase()
+{  
+    QCOMPARE(mApaLsSession.Connect(), KErrNone);
+    QCOMPARE(mWsSession.Connect(), KErrNone); 
+}
+    
+void TestTApplicationLauncher::cleanupTestCase()
+{
+    mApaLsSession.Close();
+    mWsSession.Close();
+}
+
+void TestTApplicationLauncher::testIsRunning()
+{
+    TAfApplicationLauncher launcher(mApaLsSession, mWsSession);
+    
+    QVERIFY(!launcher.isRunning(KIconApplicationUid));
+    
+    quint64 iconAppId;
+    QVERIFY(TsTestUtils::startApplication(KIconApplicationName, iconAppId));
+    QVERIFY(launcher.isRunning(KIconApplicationUid));
+    
+    QVERIFY(TsTestUtils::closeApplication(iconAppId));
+    QVERIFY(!launcher.isRunning(KIconApplicationUid));
+}
+
+void TestTApplicationLauncher::testStartApp()
+{
+    QSystemSemaphore semaphore("PublishActivityApp");
+    TAfApplicationLauncher launcher(mApaLsSession, mWsSession);
+    
+    QVERIFY(!launcher.isRunning(KActivityApplicationUid));
+    
+    TRAPD(startError, launcher.startApplicationL(KActivityApplicationUid, KNullDesC()));
+    QCOMPARE(startError, KErrNone);
+    
+    QVERIFY(semaphore.acquire());
+    
+    QVERIFY(TsTestUtils::closeApplication(KActivityApplicationUid));
+    QVERIFY(!launcher.isRunning(KActivityApplicationUid));
+}
+
+// ---------------------------------------------------------------
+
+void TestTApplicationLauncher::testLaunchActivity_data()
+{
+    QTest::addColumn<QString>("activityName");
+
+    QTest::newRow("normal") << "blahblahblah";
+    QTest::newRow("special characters") << "asd $&+,/:;=?@ \"<>#%{}|\\^~[]`asd";
+}
+
+void TestTApplicationLauncher::testLaunchActivity()
+{
+    QSystemSemaphore semaphore("PublishActivityApp");
+
+    TAfApplicationLauncher launcher(mApaLsSession, mWsSession);    
+    QVERIFY(!launcher.isRunning(KActivityApplicationUid));
+    
+    QFETCH(QString, activityName);
+    HBufC *uriDescriptor = XQConversions::qStringToS60Desc(QString(buildUri(KActivityApplicationUid, activityName).toEncoded()));
+    TRAPD(startError, launcher.startApplicationL(KActivityApplicationUid, *uriDescriptor));
+    delete uriDescriptor;
+    QCOMPARE(startError, KErrNone);
+    semaphore.acquire();
+
+    QCOMPARE(QValueSpaceSubscriber("/PublishActivityApp/ActivityName").value().toString(), activityName);   
+
+    QVERIFY(TsTestUtils::closeApplication(KActivityApplicationUid));
+    QVERIFY(!launcher.isRunning(KIconApplicationUid));
+}
+
+// ---------------------------------------------------------------
+
+void TestTApplicationLauncher::testLeaveWhenUriIsInvalid() 
+{
+    TAfApplicationLauncher launcher(mApaLsSession, mWsSession);
+    TRAPD(startError, launcher.startApplicationL(KInvalidUid, KNullDesC()));
+    QCOMPARE(startError, KErrNotFound);
+}
+
+void TestTApplicationLauncher::testLeaveWhenApplicationIsCorrupted() 
+{
+    TAfApplicationLauncher launcher(mApaLsSession, mWsSession);
+
+    // We're going to test Launcher behavior when someone tries to start
+    // application with missing executable file
+    TRAPD(startError, launcher.startApplicationL(KCorruptedApplicationUid, KNullDesC()));
+    QCOMPARE(startError, KErrNotFound);
+}
+
+// ---------------------------------------------------------------------------
+//  Helper methods
+// ---------------------------------------------------------------------------
+//
+QUrl TestTApplicationLauncher::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 TestTApplicationLauncher::sendToBackground(const TUid &uid)
+{
+    TApaTaskList taskList(mWsSession);
+    TApaTask task = taskList.FindApp(uid);
+    bool taskExists = task.Exists();
+    if (taskExists) {
+        task.SendToBackground();
+    } 
+    return taskExists;
+}
+
+TUid TestTApplicationLauncher::getForegroundAppUid()
+{
+    // 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(TestTApplicationLauncher)