activityfw/orbitintegration/hb/tsrc/unit/unittest_hbactivitymanager/unittest_hbactivitymanager/unittest_hbactivitymanager.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

/*
* ============================================================================
*  Name        : unittest_hbactivitymanager.cpp
*  Part of     : LibHb / HbActivityManager
*  Description : HbActivityManager unit tests
*  Version     : %version: 5 %
*
*  Copyright (c) 2008-2009 Nokia.  All rights reserved.
*  This material, including documentation and any related computer
*  programs, is protected by copyright controlled by Nokia.  All
*  rights are reserved.  Copying, including reproducing, storing,
*  adapting or translating, any or all of this material requires the
*  prior written consent of Nokia.  This material also contains
*  confidential information which may not be disclosed to others
*  without the prior written consent of Nokia.
* ============================================================================
*/

#include <QtTest/QtTest>

#include <hbapplication.h>
#include <hbactivitymanager.h>
#include <hbtest.h>

class TestHbActivityManager : public QObject
{
    Q_OBJECT

public slots:
    void cleanup();

private slots:
    void testConstruction();
    void testAddActivity();
    void testRemoveActivity();
    void testActivityData();
    void testUpdateActivity();
    void testWaitActivity();
    void testActivities();
    void testCommandLineParsing();
    void testFalseAndEmptyValuesReturnedWhenPluginCannotBeLoaded();

};


void TestHbActivityManager::cleanup()
{
    HbActivityManager manager;
    manager.removeActivity("TestActivity1");
    manager.removeActivity("TestActivity2");
}

void TestHbActivityManager::testConstruction() 
{
    HbActivityManager *manager = new HbActivityManager;
    QVERIFY(manager);
    delete manager;
}

void TestHbActivityManager::testAddActivity() 
{
    HbActivityManager manager;
    QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash()));
    // cannot add same activity twice
    QVERIFY(!manager.addActivity("TestActivity1", "TestData2", QVariantHash()));    
}

void TestHbActivityManager::testRemoveActivity() 
{
    HbActivityManager manager;
    // activity have to be added before it's deleted
    QVERIFY(!manager.removeActivity("TestActivity1"));
    QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash()));
    QVERIFY(manager.removeActivity("TestActivity1")); 
}

void TestHbActivityManager::testActivityData() 
{
    HbActivityManager manager;
    // empty data is returned for non existing activity
    QCOMPARE(manager.activityData("TestActivity1"), QVariant());

    // correct data is returned for existing activity
    QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash()));
    QCOMPARE(manager.activityData("TestActivity1"), QVariant("TestData"));
}

void TestHbActivityManager::testUpdateActivity() 
{
    HbActivityManager manager;
    // activity have to be added before it's updated
    QVERIFY(!manager.updateActivity("TestActivity1", "TestData", QVariantHash()));
        
    // activity can be succesfully updated
    QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash()));
    QCOMPARE(manager.activityData("TestActivity1"), QVariant("TestData"));
    QVERIFY(manager.updateActivity("TestActivity1", "TestData2", QVariantHash()));
    QCOMPARE(manager.activityData("TestActivity1"), QVariant("TestData2"));
}

void TestHbActivityManager::testWaitActivity() 
{
    HbActivityManager manager;
    // mocked plugin returns false when there are no activities, so we have to add something
    QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash()));
    QVERIFY(manager.waitActivity());
}

void TestHbActivityManager::testActivities() 
{
    HbActivityManager manager;
    // empty list returned when there is no activities
    QCOMPARE(manager.activities().count(), 0);
    
    QVERIFY(manager.addActivity("TestActivity1", "TestData", QVariantHash()));
    QCOMPARE(manager.activities().count(), 1);
    
    QVERIFY(manager.addActivity("TestActivity2", "TestData", QVariantHash()));
    QCOMPARE(manager.activities().count(), 2);
}

void TestHbActivityManager::testCommandLineParsing()
{
    HbActivityManager manager;
    // fake activity plugin returns valid fake activity when QStringList with
    // single "UnitTest" QString is used as argument

    Hb::ActivationReason reason(Hb::ActivationReasonNormal);
    QString id;
    QVariantHash params;

    manager.parseCommandLine(QStringList(), reason, id, params);
    QCOMPARE(reason, Hb::ActivationReasonNormal);
    QCOMPARE(id, QString());
    QVERIFY(params.isEmpty());

    manager.parseCommandLine(QStringList("UnitTest"), reason, id, params);
    QCOMPARE(reason, Hb::ActivationReasonActivity);
    QCOMPARE(id, QString("TestActivity"));
    QCOMPARE(params.count(), 2);
    QVERIFY(params.contains("activityname"));
    QCOMPARE(params.value("activityname"), QVariant("TestActivity"));
    QVERIFY(params.contains("fakeParam"));
    QCOMPARE(params.value("fakeParam"), QVariant("fakeValue"));
}

void TestHbActivityManager::testFalseAndEmptyValuesReturnedWhenPluginCannotBeLoaded()
{
    QSKIP("This test can't be performed, because the plugin path is hardcoded into HbActivityManager", SkipAll);
    QVERIFY(QFile::rename("/resource/qt/plugins/hbactivityplugin.qtplugin", "/resource/qt/plugins/hbactivityplugin.tmp"));
        
    HbActivityManager manager;

    // every method will return false or empty value
    QVERIFY(!manager.addActivity("TestActivity1", "TestData2", QVariantHash()));    
    QVERIFY(!manager.removeActivity("TestActivity1"));
    QCOMPARE(manager.activityData("TestActivity1"), QVariant());
    QVERIFY(!manager.updateActivity("TestActivity1", "TestData", QVariantHash()));
    QVERIFY(!manager.waitActivity());
    QCOMPARE(manager.activities().count(), 0);
    
    QVERIFY(QFile::rename("/resource/qt/plugins/hbactivityplugin.tmp", "/resource/qt/plugins/hbactivityplugin.qtplugin"));    
}

int main(int argc, char *argv[])
{
#if defined(Q_OS_WIN32) || defined(Q_OS_LINUX)
    QCoreApplication::addLibraryPath("testplugins/");
#elif defined(Q_OS_SYMBIAN)
    QCoreApplication::addLibraryPath("/resource/qt/plugins/testplugins/");
#endif
    
    HbApplication app(argc, argv);
    TestHbActivityManager tc;
    int ret = QTest::qExec(&tc, argc, argv);
    QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection);
    return ret;
}



#include "unittest_hbactivitymanager.moc"