activityfw/activityserviceplugin/tsrc/unittest_activitymanager/src/unittest_activitymanager.cpp
author Jaakko Haukipuro (Nokia-MS/Oulu) <Jaakko.Haukipuro@nokia.com>
Thu, 16 Sep 2010 12:11:40 +0100
changeset 117 c63ee96dbe5f
permissions -rw-r--r--
Missing activityfw and taskswitcher components - fix for Bug 3670

/*
* 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_activitymanager.h"

#include <QtTest/QtTest>
#include <QVariant>
#include <QTimer>

#include "afactivities_global.h"
#include "applicationlauncher_p.h"
#include "afmanager.h"

const char DefaultActivityName [] = "DefaultTestActivityName";

void TestActivityManager::init()
{
    mServiceProvider = QSharedPointer<AfStorageProxy>(new AfStorageProxy());
    mManager = new AfManager(mServiceProvider);
}

void TestActivityManager::cleanup()
{
    delete mManager;
    mManager = NULL;
}


void TestActivityManager::testActivityList()
{
    mManager->activitiesList();
}

void TestActivityManager::testLaunchStartupCaseWithoutUri()
{
    RProcess process;
    const int applicationId(process.SecureId().iId);
    QString activityId(DefaultActivityName);
    
    mManager->launchActivity(applicationId, activityId);
    
    // verify output
    ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance;
    QVERIFY(launcher); //sanity check
    QCOMPARE(launcher->startApplicationCalls.count(), 1);
    QCOMPARE(launcher->startApplicationCalls.first().value("applicationId").toUInt(), QVariant(applicationId).toUInt());
    QCOMPARE(launcher->startApplicationCalls.first().value("uri").toUrl().queryItemValue(Af::KActivityUriNameKey), activityId);
}

void TestActivityManager::testLaunchRunningCaseWithoutUri()
{
    ApplicationLauncherPrivate::isRunningReturnValue = true;
    RProcess process;
    const int applicationId(process.SecureId().iId);
    QString activityId(DefaultActivityName);
    
    mManager->launchActivity(applicationId, activityId);

    QVERIFY(applicationId == mServiceProvider->mLastCallParams.value("applicationId").toInt());
    QCOMPARE(QUrl(mServiceProvider->mLastCallParams.value("activityUri").toString()).queryItemValue(Af::KActivityUriNameKey), activityId);
    
    ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance;
    QVERIFY(launcher); //sanity check
    QCOMPARE(launcher->startApplicationCalls.count(), 0);
}

void TestActivityManager::testLaunchStartupCaseUsingUris()
{
    ApplicationLauncherPrivate::isRunningReturnValue = false;

    mManager->launchActivity(QUrl(QString("appto://EEEE0000?%1=TestName").arg(Af::KActivityUriNameKey)));

    ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance;
    QVERIFY(launcher); //sanity check
    QCOMPARE(launcher->startApplicationCalls.count(), 1);
    QCOMPARE(launcher->startApplicationCalls.first().value("applicationId").toUInt(), QVariant(0xEEEE0000).toUInt());
    QCOMPARE(launcher->startApplicationCalls.first().value("uri").toUrl().queryItemValue(Af::KActivityUriNameKey), QString("TestName"));
}

void TestActivityManager::testLaunchRunningCaseUsingUris()
{
    ApplicationLauncherPrivate::isRunningReturnValue = true;

    mManager->launchActivity(QUrl(QString("appto://EEEE0000?%1=TestName").arg(Af::KActivityUriNameKey)));

    ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance;
    QVERIFY(launcher); //sanity check
    QCOMPARE(launcher->startApplicationCalls.count(), 0);

    QVERIFY(0xEEEE0000 == mServiceProvider->mLastCallParams.value("applicationId").toInt());
    QCOMPARE(QUrl(mServiceProvider->mLastCallParams.value("activityUri").toString()).queryItemValue(Af::KActivityUriNameKey), QString("TestName"));
}

void TestActivityManager::testLaunchRequestsWithInvalidUris()
{
    // neither of the launchActivity() calls in this test should succeed, so the ActivityLauncher mock
    // won't be created and we can expect that ApplicationLauncherPrivate::instance will return the
    // same object through entire test.
    ApplicationLauncherPrivate *expectedLauncherInstance = ApplicationLauncherPrivate::instance;

    mManager->launchActivity(QUrl());
    QVERIFY(ApplicationLauncherPrivate::instance == expectedLauncherInstance);

    mManager->launchActivity(QUrl("arrr://DEADDEAD?pirates=yes"));
    QVERIFY(ApplicationLauncherPrivate::instance == expectedLauncherInstance);

    mManager->launchActivity(QUrl("appto://kaboom"));
    QVERIFY(ApplicationLauncherPrivate::instance == expectedLauncherInstance);
    
    mManager->launchActivity(QUrl(QString("appto://?%1=TestName").arg(Af::KActivityUriNameKey)));
    QVERIFY(ApplicationLauncherPrivate::instance == expectedLauncherInstance);
}

void TestActivityManager::testStartApplicationWithoutActivity()
{
    ApplicationLauncherPrivate::isRunningReturnValue = false;

    mManager->launchActivity(QUrl("appto://DEADBEEF"));    
    
    ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance;
    QVERIFY(launcher); //sanity check
    QCOMPARE(launcher->startApplicationCalls.count(), 1);
    QCOMPARE(launcher->bringToForegroundCalls.count(), 0);

    QCOMPARE(launcher->startApplicationCalls.first().value("applicationId").toUInt(), QVariant(0xDEADBEEF).toUInt());
    QCOMPARE(launcher->startApplicationCalls.first().value("uri").toUrl().queryItems().count(), 0);
}

void TestActivityManager::testSwitchApplicationToForegroundWithoutActivity()
{
    ApplicationLauncherPrivate::isRunningReturnValue = true;

    mManager->launchActivity(QUrl("appto://DEADBEEF"));    
    
    ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance;
    QVERIFY(launcher); //sanity check
    QCOMPARE(launcher->startApplicationCalls.count(), 0);

    QVERIFY(0xDEADBEEF == mServiceProvider->mLastCallParams.value("applicationId").toInt());
    QCOMPARE(QUrl(mServiceProvider->mLastCallParams.value("activityUri").toString()).queryItemValue(Af::KActivityUriNameKey), QString());        
}

void TestActivityManager::testGetThumbnail()
{
    QSignalSpy spy(mManager, SIGNAL(thumbnailReady(QPixmap, void *)));
    QEventLoop loop;
    connect(mManager,
            SIGNAL(thumbnailReady(QPixmap, void *)),
            &loop,
            SLOT(quit()));
    //mManager->getThumbnail(23459821);
    mManager->getThumbnail(QSize(128, 128), "somestring");
    QTimer::singleShot(3000, &loop, SLOT(quit()));
    loop.exec();
    QVERIFY(1==spy.count());
}

void TestActivityManager::testUriWithTestRangeUid()
{
    ApplicationLauncherPrivate::isRunningReturnValue = false;
    
    mManager->launchActivity(QUrl(QString("appto://EBADC0DE?%1=TestName").arg(Af::KActivityUriNameKey)));

    ApplicationLauncherPrivate *launcher = ApplicationLauncherPrivate::instance;
    QVERIFY(launcher); //sanity check
    QCOMPARE(launcher->startApplicationCalls.count(), 1);
    QCOMPARE(launcher->startApplicationCalls.first().value("applicationId").toUInt(), QVariant(0xEBADC0DE).toUInt());
}

QTEST_MAIN(TestActivityManager)