taskswitcher/server/tsrc/t_tsservicesprovider/t_tsservicesprovider.cpp
changeset 117 c63ee96dbe5f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/tsrc/t_tsservicesprovider/t_tsservicesprovider.cpp	Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,170 @@
+/*
+* 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 <QtTest/QtTest>
+#include "t_tsservicesprovider.h"
+#include "tsservicesproviderconfig.h"
+#include "tsservice.h"
+#include "tsservicesprovider.h"
+#include "tsserviceobserver.h"
+
+
+class QtModel: public QObject
+{
+    QList<QVariantHash> taskList() const
+    {
+        return QList<QVariantHash>();
+    }
+    
+    QList<QVariantHash> taskList(int limit) const
+    {
+        Q_UNUSED(limit);
+        return QList<QVariantHash>();
+    }
+    
+    bool openTask(const QVariant &/*id*/){return true;};
+    bool closeTask(const QVariant &/*id*/){return true;};
+};
+
+void T_TsServiceProvider::testProvider()
+{
+    CTsServiceProvider *provider(0);
+    CTsServiceProviderConfig* config(0);
+    //test provider with different amount of data
+    int errNo;
+    const int maxDataCount(4);
+    
+    
+    for(TInt dataCount(0); dataCount < maxDataCount; ++dataCount) {
+        config = CTsServiceProviderConfig::NewLC(dataCount);
+        provider = CTsServiceProvider::NewL(*config);
+        CleanupStack::PopAndDestroy(config);
+        QVERIFY(dataCount == provider->count());
+        for(TInt dataProviderIter(0); dataProviderIter < provider->count(); ++dataProviderIter) {
+            MTsModel& model((*provider)[dataProviderIter]);
+            
+            //we dont verify data. just try to retrieve it. model can leave but shouldn't panic
+            for (TInt dataIter(0); dataIter < model.count(); ++dataIter) {
+                TRAP_IGNORE(model.itemL(dataIter).keyL());
+                TRAP_IGNORE(model.itemL(dataIter).displayNameL());
+                TRAP_IGNORE(model.itemL(dataIter).iconHandleL());
+                TRAP_IGNORE(model.itemL(dataIter).isActiveL());
+                TRAP_IGNORE(model.itemL(dataIter).isClosableL());
+                TRAP_IGNORE(model.itemL(dataIter).timestampL());
+                TRAP_IGNORE(model.itemL(dataIter).launchL());
+                TRAP_IGNORE(model.itemL(dataIter).closeL());
+            }
+            TRAP(errNo, model.itemL(model.count()).keyL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count()).displayNameL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count()).iconHandleL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count()).isActiveL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count()).isClosableL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count()).timestampL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count()).launchL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count()).closeL());
+            QVERIFY(KErrNone != errNo);
+            
+            TRAP(errNo, model.itemL(model.count() + 1).keyL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count() + 1).displayNameL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count() + 1).iconHandleL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count() + 1).isActiveL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count() + 1).isClosableL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count() + 1).timestampL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count() + 1).launchL());
+            QVERIFY(KErrNone != errNo);
+            TRAP(errNo, model.itemL(model.count() + 1).closeL());
+            QVERIFY(KErrNone != errNo);
+        }
+        delete provider;
+    }
+}
+
+void T_TsServiceProvider::testService()
+{
+    int errNo, maxNotifications(20);
+    CTsService* service;
+    mNotyfications = 0;
+    
+    TRAP(errNo, service = CTsService::NewLC(0));
+    QVERIFY(KErrNone != errNo);
+    
+    TRAP(errNo, 
+    service = CTsService::NewLC(new QtModel());
+    service->setObserver(0);
+    service->DataChanged();
+    if(0 != mNotyfications){
+        User::Leave(KErrCorrupt);
+    }
+    service->setObserver(this);
+    for(int iter(0); iter < maxNotifications; ++iter) {
+        service->DataChanged();
+        if(iter + 1 != mNotyfications){
+            User::Leave(KErrCorrupt);
+        }
+    }
+    CleanupStack::PopAndDestroy(service);
+    );//TRAP
+    QVERIFY(KErrNone == errNo);
+}
+
+void T_TsServiceProvider::testServiceObserver()
+{
+    TsServiceObserver observer(*this);
+    QObject::connect(this,
+                     SIGNAL(someSignal()),
+                     &observer,
+                     SLOT(dataChanged()));
+    QTimer::singleShot(5000, &mLoop, SLOT(quit()));
+    mNotyfications = 0;
+    emit someSignal();
+    if(0 == mNotyfications && !mLoop.isRunning()) {
+        mLoop.exec();
+    }
+    QVERIFY(1 == mNotyfications);
+}
+
+void T_TsServiceProvider::dataChanged(MTsModel &/*model*/)
+{
+    ++mNotyfications;
+}
+
+void T_TsServiceProvider::dataChanged(const TTsModelItem &/*item*/)
+{
+}
+
+void T_TsServiceProvider::DataChanged()
+{
+    ++mNotyfications;
+    if(mLoop.isRunning()) {
+        mLoop.quit();
+    }
+}
+
+QTEST_MAIN(T_TsServiceProvider)