activityfw/activityserviceplugin/tsrc/t_afstorageproxy/src/t_afstorageproxy.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 "t_afstorageproxy.h"

#include <QtTest/QtTest>
#include <QPainter>
#include <XQConversions>

#include <afstorageglobals.h>
#include <afentry.h>

#include "afstorageclient.h"
#include "afstorageproxy.h"
#include "afserializer.h"

namespace {
    const int KApplicationId = 42;
    
    const char KActivityId[] = "TestActivity";
    const char KImagePath[] = "SomeFakePath";
}

void TestAfStorageProxy::init()
{
    mProxy = new AfStorageProxy();
}

void TestAfStorageProxy::cleanup()
{
    delete mProxy;
    mProxy = NULL;
}

void TestAfStorageProxy::testSaveActivityDataSerialization()
{    
    // check that data and metadata are properly serialized
    QVariant data("Data");
    QVariantHash metaData;
    QString someKey("SomeKey");
    QVariant someValue("SomeValue");
    metaData.insert(someKey, someValue);
    
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
    mProxy->saveActivity(KApplicationId, KActivityId, data, metaData, QPixmap());
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod);
    
    CAfEntry *entry = CAfStorageClient::lastCallEntry;
    QVERIFY(entry);
    
    QVariantHash deserializedMetaData;
    deserializedMetaData << entry->Data(CAfEntry::Public);
    QVERIFY(deserializedMetaData.contains(someKey));
    QCOMPARE(deserializedMetaData.value(someKey), someValue);    

    QVariantHash deserializedData;
    deserializedData << entry->Data(CAfEntry::Private);
    QVERIFY(deserializedData.contains(ActivityDataKeyword));
    QCOMPARE(deserializedData.value(ActivityDataKeyword), data);    
}

void TestAfStorageProxy::testSaveActivityFlags()
{   
    // test that activities are visible and non-persistent by default
    {
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
        mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), QPixmap());
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod);
        
        CAfEntry *entry = CAfStorageClient::lastCallEntry;
        QVERIFY(entry);
        
        QVERIFY(!(entry->Flags() & CAfEntry::Persistent));
        QVERIFY(!(entry->Flags() & CAfEntry::Invisible));
        CAfStorageClient::clearLastCallInfo();
    }
 
    // test persistency flag is properly set
    {
        QVariantHash metaData;
        metaData.insert(ActivityPersistence, true);
    
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
        mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), metaData, QPixmap());
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod);
        
        CAfEntry *entry = CAfStorageClient::lastCallEntry;
        QVERIFY(entry);
        
        QVERIFY(entry->Flags() & CAfEntry::Persistent);
        CAfStorageClient::clearLastCallInfo();
    } 
 
    // test visibility flag is properly set
    {
        QVariantHash metaData;
        metaData.insert(ActivityVisibility, false);
    
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
        mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), metaData, QPixmap());
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod);
        
        CAfEntry *entry = CAfStorageClient::lastCallEntry;
        QVERIFY(entry);
        
        QVERIFY(entry->Flags() & CAfEntry::Invisible);
        CAfStorageClient::clearLastCallInfo();
    } 
}

void TestAfStorageProxy::testSaveActivityScreenshotHandle()
{   
    // in case of null pixmap -1 handle will be sent to server
    {
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
        mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), QPixmap());
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod);
        
        QCOMPARE(CAfStorageClient::lastCallImageHandle, -1);
        CAfStorageClient::clearLastCallInfo();
    }
 
    // proper handle is sent for non-null pixmap
    {
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
        mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot());
        QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::SaveActivityMethod);
        
        QVERIFY(CAfStorageClient::lastCallImageHandle != -1);
        CAfStorageClient::clearLastCallInfo();
    }
}

void TestAfStorageProxy::testDeprecatedAddAndUpdateMethods()
{
    // we don't test those methods thoroughly, because a) it's basically the
    // same code as saveActivity b) those methods are deprecated and will be
    // removed soon.
    
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
    
    mProxy->addActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), QPixmap());    
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::AddActivityMethod);
    mProxy->addActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot());
    
    mProxy->updateActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), QPixmap());
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::UpdateActivityMethod);
    mProxy->updateActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot());
}

void TestAfStorageProxy::testRemoveActivity()
{
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
    mProxy->removeActivity(KApplicationId, KActivityId);    
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::RemoveActivityMethod);
    
    CAfEntry *entry = CAfStorageClient::lastCallEntry;
    QVERIFY(entry);
    QCOMPARE(entry->ApplicationId(), KApplicationId);
    QScopedPointer<HBufC> activityIdAsDesc(XQConversions::qStringToS60Desc(QString(KActivityId)));
    QVERIFY(entry->ActivityId().Compare(*activityIdAsDesc.data()) == 0);
}

void TestAfStorageProxy::testRemoveApplicationActivities()
{
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
    mProxy->removeApplicationActivities(KApplicationId);    
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::RemoveApplicationActivitiesMethod);
    
    CAfEntry *entry = CAfStorageClient::lastCallEntry;
    QVERIFY(entry);
    QCOMPARE(entry->ApplicationId(), KApplicationId);
}

void TestAfStorageProxy::testWaitActivity()
{
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
    
    CAfStorageClient::expectedReturnCode = KErrCancel;
    mProxy->waitActivity();
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::WaitActivityMethod);
    
    CAfStorageClient::lastMethodCalled = CAfStorageClient::NoCall;
    CAfStorageClient::expectedReturnCode = KErrNone;
    mProxy->waitActivity();
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::WaitActivityMethod);
}

void TestAfStorageProxy::testLaunchActivity()
{
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
    mProxy->launchActivity(KApplicationId, KActivityId);        
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::LaunchActivityMethod);
    
    CAfEntry *entry = CAfStorageClient::lastCallEntry;
    QVERIFY(entry);
    QCOMPARE(entry->ApplicationId(), KApplicationId);
    QScopedPointer<HBufC> activityIdAsDesc(XQConversions::qStringToS60Desc(QString(KActivityId)));
    QVERIFY(entry->ActivityId().Compare(*activityIdAsDesc.data()) == 0);
}

void TestAfStorageProxy::testGetThumbnail()
{
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
    
    CAfStorageClient::expectedReturnCode = KErrNone;
    mProxy->getThumbnail(QSize(100, 50), QString(KImagePath), this);
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::GetThumbnailMethod);
    QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iWidth, 100);
    QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iHeight, 50);
    QScopedPointer<HBufC> pathAsDesc(XQConversions::qStringToS60Desc(QString(KImagePath)));
    QVERIFY(CAfStorageClient::lastCallThumbnailPath->Compare(*pathAsDesc.data()) == 0);
    QVERIFY(CAfStorageClient::lastCallUserData == this);
    
    CAfStorageClient::expectedReturnCode = KErrNone;
    mProxy->getThumbnail(QSize(0, 0), QString(KImagePath), this);
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::GetThumbnailMethod);
    QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iWidth, 0);
    QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iHeight,0);
    QVERIFY(CAfStorageClient::lastCallThumbnailPath->Compare(*pathAsDesc.data()) == 0);
    QVERIFY(CAfStorageClient::lastCallUserData == this);
    
    CAfStorageClient::expectedReturnCode = KErrAccessDenied;
    mProxy->getThumbnail(QSize(100, 50), QString(KImagePath), this);
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::GetThumbnailMethod);
    QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iWidth, 100);
    QCOMPARE(CAfStorageClient::lastCallThumbnailSize.iHeight,50);
    QVERIFY(CAfStorageClient::lastCallThumbnailPath->Compare(*pathAsDesc.data()) == 0);
    QVERIFY(CAfStorageClient::lastCallUserData == this);
    
}
    
void TestAfStorageProxy::testNotifyDataChange()
{
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NoCall);
    
    CAfStorageClient::expectedReturnCode = KErrCancel;
    mProxy->notifyDataChange();
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NotifyDataChangeMethod);
    
    CAfStorageClient::lastMethodCalled = CAfStorageClient::NoCall;
    CAfStorageClient::expectedReturnCode = KErrNone;
    mProxy->notifyDataChange();
    QCOMPARE(CAfStorageClient::lastMethodCalled, CAfStorageClient::NotifyDataChangeMethod);
}

// ---------------------------------------------------------------------------
void TestAfStorageProxy::testActivities()
{
    mProxy->removeApplicationActivities(KApplicationId);
    
    QList< QVariantHash > result;
    QVERIFY(mProxy->activities(result));
    QVERIFY(result.count() >= 0);
    
    mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot());
    QVERIFY(mProxy->activities(result));
    QVERIFY(result.count() > 0);
}

// ---------------------------------------------------------------------------
void TestAfStorageProxy::testApplicationActivities()
{
    mProxy->removeApplicationActivities(KApplicationId);
    
    QStringList result;
    QVERIFY(mProxy->applicationActivities(result, KApplicationId));
    QCOMPARE(result.count(), 0);
    
    mProxy->saveActivity(KApplicationId, KActivityId, QVariant(), QVariantHash(), generateNonNullScreenshot());
    QVERIFY(mProxy->applicationActivities(result, KApplicationId));
    QCOMPARE(result.count(), 1);
}

// ---------------------------------------------------------------------------
void TestAfStorageProxy::testActivityData()
{
    mProxy->removeApplicationActivities(KApplicationId);
    
    QVariant result;
    QVERIFY(!mProxy->activityData(result, KApplicationId, KActivityId));
    
    mProxy->saveActivity(KApplicationId, KActivityId, QVariant(KApplicationId), QVariantHash(), generateNonNullScreenshot());
    QVERIFY(mProxy->activityData(result, KApplicationId, KActivityId));
    QCOMPARE(result, QVariant(KApplicationId));
}

void TestAfStorageProxy::testActivityMetaData()
{
    QVariantHash result;
    QVERIFY(!mProxy->activityMetaData(result, KApplicationId, KActivityId));
    
    mProxy->saveActivity(KApplicationId, KActivityId, QVariant(KApplicationId), QVariantHash(), generateNonNullScreenshot());
    QVERIFY(mProxy->activityMetaData(result, KApplicationId, KActivityId));
}

// ---------------------------------------------------------------------------
//  helper methods
// ---------------------------------------------------------------------------
//
QPixmap TestAfStorageProxy::generateNonNullScreenshot()
{
    QPixmap screenshot(10, 10);    
    {
        QPainter painter(&screenshot);
        painter.setBrush(Qt::black);
        painter.drawRect(screenshot.rect());
        painter.setBrush(QColor::fromHsv(0, 255, 255));
        painter.drawEllipse(screenshot.rect());
    }
    return screenshot;
}

QTEST_MAIN(TestAfStorageProxy)