activityfw/storage/client/t_afstorageclient/src/t_activityclient.cpp
changeset 117 c63ee96dbe5f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/storage/client/t_afstorageclient/src/t_activityclient.cpp	Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,552 @@
+/*
+* 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:  Main test class for hsutils library.
+*
+*/
+
+#include "t_activityclient.h"
+
+#include <s32mem.h>
+#include <fbs.h>
+
+#include <QPainter>
+#include <QScopedPointer>
+
+#include <XQConversions>
+
+#include <afstorageglobals.h>
+#include <afentry.h>
+
+#include "afasyncrequest_p.h"
+#include "afthumbnailrequest_p.h"
+#include "afstorageclient.h"
+
+_LIT(KActivityName, "ActivityName");
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+T_ActivityClient::T_ActivityClient() : mBitmap(0), mData(0), mRunningTask(0), mScreenshot(0), mUserData(0)
+{       
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+T_ActivityClient::~T_ActivityClient()
+{
+    delete mData;
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::initTestCase()
+{
+    QPixmap screenshot(20, 20);    
+    {
+        QPainter painter(&screenshot);
+        painter.setBrush(Qt::black);
+        painter.drawRect(screenshot.rect());
+        painter.setBrush(QColor::fromHsv(255, 255, 255));
+        painter.drawEllipse(screenshot.rect());
+    }
+    
+    QScopedPointer<CFbsBitmap> bitmap(screenshot.toSymbianCFbsBitmap());
+
+    mBitmap = new CFbsBitmap();
+    QCOMPARE(mBitmap->Duplicate(bitmap->Handle()), KErrNone);    
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::cleanupTestCase()
+{
+    delete mBitmap;
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::waitActivityRequestCompleted(int result,
+                                const TDesC8 &data)
+{
+    if (mData) {
+        delete mData;
+    }
+    RBuf converter;
+    converter.CreateMaxL(data.Length());
+    converter.Copy(data);
+    mData = converter.Alloc();
+    converter.Close();
+    
+    mRealResponse = result;
+    
+    if(mLoop.isRunning()) {
+        mLoop.exit();
+    }
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::getThumbnailRequestCompleted(int result,
+                            int bitmapHandle, 
+                            void* userData)
+{
+    mScreenshotHandle = bitmapHandle;    
+    mScreenshot = new CFbsBitmap();
+    mScreenshot->Duplicate(mScreenshotHandle);    
+    mUserData = userData;
+
+    mRealResponse = result;
+    if(mLoop.isRunning()) {
+        mLoop.exit();
+    }    
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::dataChangeNotificationCompleted(int result)
+{
+    mRealResponse = result;
+    if(mLoop.isRunning()) {
+        mLoop.exit();
+    }
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::PushL(CBase* asyncTask)
+{
+    mRunningTask = asyncTask; 
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::Pop(CBase* asyncTask)
+{
+    Q_UNUSED(asyncTask);
+    mRunningTask = 0;
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::executeL(int function)
+{
+    Q_UNUSED(function);
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::sendAsync(int function, const TIpcArgs &args, TRequestStatus& status)
+{
+    Q_UNUSED(function);
+    Q_UNUSED(args);
+    TRequestStatus *requestStatus(&status);
+    User::RequestComplete(requestStatus, mExpectedResponse);
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::getDataL(int id, TDes8& buffer)
+{
+    Q_UNUSED(id);
+    Q_UNUSED(buffer);
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testEntry()
+{
+    const TInt KActivityFlags(qHash("Some activity flags"));
+    const TInt KApplicationId(qHash("Some application id"));
+    _LIT(KActivityId, "Some activity id");
+    _LIT(KActivityThumnail, "s:\\ome\\activity\\img.png");
+    _LIT8(KPrivateData, "Some private data");
+    _LIT8(KPublicData, "Some public data");
+    
+    struct TestDataSet{
+    TInt mFlags;
+    TInt mAppId;
+    const TDesC& mActId;
+    const TDesC& mImgPath;
+    const TDesC8& mPriv;
+    const TDesC8& mPub;
+    } testData [] = {{KActivityFlags, KApplicationId, KActivityId(), KActivityThumnail(), KPrivateData(), KPublicData()},
+                     {KActivityFlags, KApplicationId, KNullDesC, KActivityThumnail(), KPrivateData(), KPublicData()}, 
+                     {KActivityFlags, KApplicationId, KActivityId(), KNullDesC, KPrivateData(), KPublicData()}, 
+                     {KActivityFlags, KApplicationId, KActivityId(), KActivityThumnail(), KNullDesC8, KPublicData()},
+                     {KActivityFlags, KApplicationId, KActivityId(), KActivityThumnail(), KPrivateData(), KNullDesC8()}};
+    const int count(sizeof(testData) / sizeof(TestDataSet));
+    CAfEntry * entry(0);
+    RBuf8 serializedEntry;
+    CleanupClosePushL(serializedEntry);
+    for (int i(0); i < count; ++i) {
+        entry = CAfEntry::NewL(testData[i].mFlags, 
+                                testData[i].mAppId,
+                                testData[i].mActId,
+                                testData[i].mImgPath,
+                                testData[i].mPriv,
+                                testData[i].mPub);
+        CleanupStack::PushL(entry);
+        
+        QVERIFY(entry->Flags() == testData[i].mFlags);
+        QVERIFY(entry->ApplicationId() == testData[i].mAppId);
+        QVERIFY(0 == entry->ActivityId().Compare(testData[i].mActId));
+        QVERIFY(0 == entry->ImageSrc().Compare(testData[i].mImgPath));
+        QVERIFY(0 == entry->Data(CAfEntry::Private).Compare(testData[i].mPriv));
+        QVERIFY(0 == entry->Data(CAfEntry::Public).Compare(testData[i].mPub));
+        
+        if(serializedEntry.MaxLength() < entry->Size()) {
+            serializedEntry.ReAllocL(entry->Size());
+        }
+        RDesWriteStream writer(serializedEntry);
+        CleanupClosePushL(writer);
+        writer << (*entry);
+        CleanupStack::PopAndDestroy(&writer);
+        CleanupStack::PopAndDestroy(entry);
+        
+        entry = CAfEntry::NewL();
+        CleanupStack::PushL(entry);
+        
+        RDesReadStream reader(serializedEntry);
+        CleanupClosePushL(reader);
+        reader >> (*entry);
+        CleanupStack::PopAndDestroy(&reader);
+        
+        QVERIFY(entry->Flags() == testData[i].mFlags);
+        QVERIFY(entry->ApplicationId() == testData[i].mAppId);
+        QVERIFY(0 == entry->ActivityId().Compare(testData[i].mActId));
+        QVERIFY(0 == entry->ImageSrc().Compare(testData[i].mImgPath));
+        QVERIFY(0 == entry->Data(CAfEntry::Private).Compare(testData[i].mPriv));
+        QVERIFY(0 == entry->Data(CAfEntry::Public).Compare(testData[i].mPub));
+        
+        CleanupStack::PopAndDestroy(entry);        
+    }
+    CleanupStack::PopAndDestroy(&serializedEntry);
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testAsyncRequest()
+{
+    mExpectedResponse = KErrNone;
+    CAfAsyncRequestPrivate::NewLD(*this, *this, WaitActivity);
+    mLoop.exec();
+    QVERIFY(mExpectedResponse == mRealResponse);
+    QVERIFY(0 == mRunningTask);
+    
+    mExpectedResponse = KErrGeneral;
+    CAfAsyncRequestPrivate::NewLD(*this, *this, WaitActivity);
+    mLoop.exec();
+    QVERIFY(mExpectedResponse == mRealResponse);
+    QVERIFY(0 == mRunningTask);
+    
+    mExpectedResponse = KErrNone;
+    CAfAsyncRequestPrivate::NewLD(*this, *this, NotifyChange);
+    mLoop.exec();
+    QVERIFY(mExpectedResponse == mRealResponse);
+    QVERIFY(0 == mRunningTask);
+    
+    mExpectedResponse = KErrGeneral;
+    CAfAsyncRequestPrivate::NewLD(*this, *this, NotifyChange);
+    mLoop.exec();
+    QVERIFY(mExpectedResponse == mRealResponse);
+    QVERIFY(0 == mRunningTask);
+    
+    
+    mExpectedResponse = KErrGeneral;
+    CAfThumbnailRequestPrivate::NewLD(*this, *this, TSize(), _L("f://ake//path.mif"), 0);
+    mLoop.exec();
+    QVERIFY(mExpectedResponse == mRealResponse);
+    QVERIFY(0 == mRunningTask);
+    
+    mExpectedResponse = KErrNone;
+    CAfThumbnailRequestPrivate::NewLD(*this, *this, TSize(), _L("f://ake//path.mif"), 0);
+    mLoop.exec();
+    QVERIFY(mExpectedResponse == mRealResponse);
+    QVERIFY(0 == mRunningTask);
+
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testCreateClient()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testAddActivity()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+    
+    client->removeActivity(*entry.data());
+    
+    QVERIFY(KErrNone == client->addActivity(*entry.data(), mBitmap->Handle()));
+    QVERIFY(KErrNone != client->addActivity(*entry.data(), mBitmap->Handle()));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testUpdateActivity()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+    
+    client->removeActivity(*entry.data());
+    client->addActivity(*entry.data(), mBitmap->Handle());
+    
+    QVERIFY(KErrNone == client->updateActivity(*entry.data(), mBitmap->Handle()));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testSaveActivity()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+
+    client->removeActivity(*entry.data());
+    QVERIFY(KErrNone == client->saveActivity(*entry.data(), mBitmap->Handle()));
+    QVERIFY(KErrNone == client->saveActivity(*entry.data(), mBitmap->Handle()));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testRemoveActivity()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+
+    client->removeActivity(*entry.data());
+    client->addActivity(*entry.data(), mBitmap->Handle());
+
+    QVERIFY(KErrNone == client->removeActivity(*entry.data()));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testRemoveApplicationActivities()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+
+    client->removeActivity(*entry.data());
+    client->addActivity(*entry.data(), mBitmap->Handle());
+    
+    QVERIFY(KErrNone == client->removeApplicationActivities(*entry.data()));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testActivities()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+
+    client->removeActivity(*entry.data());
+    
+    int activityCountBeforeAdding, activityCountAfterAdding;
+    {
+        RPointerArray<CAfEntry> results;
+        int callResult = client->activities(results);
+        activityCountBeforeAdding = results.Count();
+        results.ResetAndDestroy();
+        
+        QVERIFY(KErrNone == callResult);
+    }
+        
+    QVERIFY(KErrNone == client->addActivity(*entry.data(), mBitmap->Handle()));
+    
+    {
+        RPointerArray<CAfEntry> results;
+        int callResult = client->activities(results);
+        activityCountAfterAdding = results.Count();
+        results.ResetAndDestroy();
+        
+        QVERIFY(KErrNone == callResult);
+    }    
+    
+    QCOMPARE(activityCountAfterAdding, activityCountBeforeAdding + 1);
+    
+    client->removeActivity(*entry.data());
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testApplicationActivities()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+    QVERIFY(KErrNone == client->removeApplicationActivities(*entry.data()));    
+    
+    const QString expectedActivityName("ActivityName%1");
+    const int activityCount(20);
+    
+    {
+        RPointerArray<CAfEntry> results;
+        int callResult = client->applicationActivities(results, *entry.data());
+        int resultCount = results.Count();
+        results.ResetAndDestroy();
+        
+        QVERIFY(KErrNone == callResult);
+        QCOMPARE(resultCount, 0);
+    }
+    
+    for (int i=0; i < activityCount; ++i) {
+        QScopedPointer<HBufC> activityName(XQConversions::qStringToS60Desc(QString(expectedActivityName).arg(i)));
+        QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, 1, *activityName.data(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+        client->addActivity(*entry.data(), mBitmap->Handle());
+    }
+    
+    {
+        RPointerArray<CAfEntry> results;
+        int callResult = client->applicationActivities(results, *entry.data());
+        int resultCount = results.Count();
+        results.ResetAndDestroy();
+        
+        QVERIFY(KErrNone == callResult);
+        QCOMPARE(resultCount, activityCount);
+    }
+    
+    QVERIFY(KErrNone == client->removeApplicationActivities(*entry.data()));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testGetData()
+{
+    _LIT8(KPrivateData, "My private data");
+    _LIT8(KPublicData, "My public data");
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, 1, KActivityName(), KNullDesC(), KPrivateData(), KPublicData()));
+    
+    client->removeActivity(*entry.data());
+    QVERIFY(KErrNone == client->addActivity(*entry.data(), mBitmap->Handle()));
+    
+    CAfEntry *result(0);
+    QVERIFY(0 == client->activityData(result, *entry.data()));
+    
+    QScopedPointer<CAfEntry> guardedResult(result);
+    QVERIFY(0 == guardedResult->Data(CAfEntry::Private).Compare(KPrivateData()));
+    QVERIFY(0 == guardedResult->Data(CAfEntry::Public).Compare(KPublicData()));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testWaitLaunchActivity()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+    QScopedPointer<CAfStorageClient> launcher(CAfStorageClient::NewL(*this));
+    
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, RProcess().SecureId().iId, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+    
+    QVERIFY(KErrNone == client->waitActivity());
+    QVERIFY(KErrNone == launcher->launchActivity(*entry.data()));
+    mLoop.exec();
+    
+    QVERIFY(mData);
+    QVERIFY(0 == mData->Compare(KActivityName()));
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void T_ActivityClient::testGetThumbnail()
+{
+    QScopedPointer<CAfStorageClient> client(CAfStorageClient::NewL(*this));
+    QScopedPointer<CAfEntry> entry(CAfEntry::NewL(0, RProcess().SecureId().iId, KActivityName(), KNullDesC(), KNullDesC8(), KNullDesC8()));
+
+    client->removeActivity(*entry.data());
+    QVERIFY(KErrNone == client->addActivity(*entry.data(), mBitmap->Handle()));
+    
+    RPointerArray<CAfEntry> results;    
+    QVERIFY(KErrNone == client->activities(results));
+    
+    QTimer timeout;
+    timeout.setSingleShot(true);
+    timeout.setInterval(5000);
+    mLoop.connect(&timeout, SIGNAL(timeout()), SLOT(quit()));
+    
+    for (int iter=0; iter < results.Count(); ++iter) {
+        //valid thumbnail
+        QVERIFY(KErrNone == client->getThumbnail(TSize(50, 10), results[iter]->ImageSrc(), this));
+        timeout.start();
+        mLoop.exec();
+        QVERIFY(timeout.isActive());
+        timeout.stop();        
+        
+        QVERIFY(mScreenshotHandle >= 0);
+        {
+            QScopedPointer<CFbsBitmap> bitmap(new CFbsBitmap());
+            QCOMPARE(bitmap->Duplicate(mScreenshotHandle), KErrNone);    
+            TSize bitmapSize = bitmap->SizeInPixels();
+            QVERIFY(50 >= bitmapSize.iWidth);
+            QVERIFY(10 >= bitmapSize.iHeight);
+            delete mScreenshot;
+            mScreenshot = 0;
+        }
+        QVERIFY(this == mUserData);
+        
+        //invalid width
+        QVERIFY(KErrNone == client->getThumbnail(TSize(0, 10), results[iter]->ImageSrc(), this));
+        timeout.start();
+        mLoop.exec();
+        QVERIFY(timeout.isActive());
+        timeout.stop();
+        QVERIFY(mScreenshotHandle < 0);
+        QVERIFY(this == mUserData);
+        
+        //invalid height
+        QVERIFY(KErrNone == client->getThumbnail(TSize(50, 0), results[iter]->ImageSrc(), this));
+        timeout.start();
+        mLoop.exec();
+        QVERIFY(timeout.isActive());
+        timeout.stop();
+        QVERIFY(mScreenshotHandle < 0);
+        QVERIFY(this == mUserData);
+        
+        //invalid thumbnail
+        QVERIFY(KErrNone == client->getThumbnail(TSize(50, 10), _L("s:/ome/fake/path.mbm"), this));
+        timeout.start();
+        mLoop.exec();
+        QVERIFY(timeout.isActive());
+        timeout.stop();
+        QVERIFY(mScreenshotHandle < 0);
+        QVERIFY(this == mUserData);
+    }
+    results.ResetAndDestroy();
+}
+
+QTEST_MAIN(T_ActivityClient)