taskswitcher/server/tsrc/t_tsstorage/t_tsstorage.cpp
changeset 117 c63ee96dbe5f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/server/tsrc/t_tsstorage/t_tsstorage.cpp	Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,128 @@
+/*
+* 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 "tsstorage.h"
+#include "t_tsstorage.h"
+#include "t_tsmodel.h"
+
+const int KBigSet(100);
+
+void T_TsStorage::testItemDataChanged()
+{
+    CTsStorage* storage(0);
+    T_TsModel emptyProvider(0),
+              bigSetProvider(KBigSet);
+    RPointerArray<MTsModel>providers;
+    CleanupClosePushL(providers);
+    
+    //storage has no data providers
+    mNotifications = 0;
+    storage = CTsStorage::NewL(providers.Array());
+    storage->dataChanged(bigSetProvider.itemL(0));
+    QVERIFY(0 == mNotifications);//storage has no observers
+    verifyProviders(*storage, providers.Array());
+    storage->setObserver(this);
+    storage->dataChanged(bigSetProvider.itemL(0));
+    QVERIFY(1 == mNotifications);//storage has observers
+    verifyProviders(*storage, providers.Array());
+    delete storage;
+    
+    providers.Append(&emptyProvider);
+    providers.Append(&bigSetProvider);
+    
+    //storage has some
+    mNotifications = 0;
+    storage = CTsStorage::NewL(providers.Array());
+    storage->dataChanged(bigSetProvider.itemL(0));
+    QVERIFY(0 == mNotifications);//storage has no observers
+    verifyProviders(*storage, providers.Array());
+    storage->setObserver(this);
+    storage->dataChanged(bigSetProvider.itemL(0));
+    QVERIFY(1 == mNotifications);//storage has observers
+    verifyProviders(*storage, providers.Array());
+    delete storage;
+    CleanupStack::PopAndDestroy(&providers);
+}
+
+void T_TsStorage::testModelDataChanged()
+{
+    CTsStorage* storage(0);
+    T_TsModel emptyProvider(0),
+              bigSetProvider(KBigSet);
+    RPointerArray<MTsModel>providers;
+    CleanupClosePushL(providers);
+    
+    //storage has no data providers
+    mNotifications = 0;
+    storage = CTsStorage::NewL(providers.Array());
+    storage->dataChanged(emptyProvider);
+    QVERIFY(0 == mNotifications);//storage has no observers
+    verifyProviders(*storage, providers.Array());
+    storage->setObserver(this);
+    storage->dataChanged(emptyProvider);
+    QVERIFY(1 == mNotifications);//storage has observers
+    verifyProviders(*storage, providers.Array());
+    delete storage;
+    
+    providers.Append(&emptyProvider);
+    providers.Append(&bigSetProvider);
+    
+    //storage has some
+    mNotifications = 0;
+    storage = CTsStorage::NewL(providers.Array());
+    storage->dataChanged(emptyProvider);
+    QVERIFY(0 == mNotifications);//storage has no observers
+    verifyProviders(*storage, providers.Array());
+    storage->setObserver(this);
+    storage->dataChanged(emptyProvider);
+    QVERIFY(1 == mNotifications);//storage has observers
+    verifyProviders(*storage, providers.Array());
+    delete storage;
+    CleanupStack::PopAndDestroy(&providers);
+}
+
+void T_TsStorage::verifyProviders(const MTsModel &set, const TArray<MTsModel*>& providers)
+{
+    int sum(0);
+    for (int iter(0); iter < providers.Count(); ++iter) {
+        sum += (providers[iter])->count();
+        QVERIFY(set.count() >= (providers[iter])->count());
+        QVERIFY(EFalse != isSubset(set, *(providers[iter])));
+    }
+    QVERIFY(set.count() == sum);
+}
+
+TBool T_TsStorage::isSubset(const MTsModel &set, const MTsModel& subset) const
+{
+    bool isOk = true;
+    for (int i(0); i < subset.count() && isOk; ++i) {
+        isOk = false;
+        for(int k(0); k < set.count() && !isOk; ++k){
+            set.itemL(k).launchL();
+            set.itemL(k).closeL();
+            isOk = (subset.itemL(i).keyL() == set.itemL(k).keyL()) &&
+                   (subset.itemL(i).timestampL() == set.itemL(k).timestampL()) &&
+                   (subset.itemL(i).iconHandleL() == set.itemL(k).iconHandleL()) &&
+                   (subset.itemL(i).isActiveL() == set.itemL(k).isActiveL()) &&
+                   (subset.itemL(i).isClosableL() == set.itemL(k).isClosableL()) &&
+                   (0 == subset.itemL(i).displayNameL().Compare(set.itemL(k).displayNameL()));
+        }
+    }
+    return isOk ? ETrue : EFalse;
+}
+
+QTEST_MAIN(T_TsStorage)