contentstorage/caclient/tsrc/t_caclient/src/t_caclient_notifier.cpp
changeset 117 c63ee96dbe5f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/caclient/tsrc/t_caclient/src/t_caclient_notifier.cpp	Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,2966 @@
+/*
+* 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 hspluginmodel library.
+*
+*/
+
+#include <QScopedPointer>
+#include <qservicemanager.h>
+
+#include "t_caclient.h"
+#include "caservice.h"
+#include "canotifier.h"
+#include "canotifierfilter.h"
+#include "caquery.h"
+#include "t_caclientNotifier.h"
+
+const int entryIdFake(-1);
+const int waitTime500ms(500);
+const int waitTime1sec(1000);
+
+QTM_USE_NAMESPACE
+
+QStringList pluginPaths;
+QString xmlName("caapphandlerplugin.xml");
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::initTestCase()
+{
+#ifdef Q_OS_SYMBIAN
+    startThread();
+#endif //Q_OS_SYMBIAN
+    mService = CaService::instance();
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::cleanupTestCase()
+{
+#ifdef Q_OS_SYMBIAN
+    stopThread();
+#endif //Q_OS_SYMBIAN
+    QSharedPointer<CaService> serviceNull(NULL);
+    mService = serviceNull;
+    QTest::qWait(5000);
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+int threadFunction(void *params)
+{
+#ifdef Q_OS_SYMBIAN
+    while (ETrue) {
+        User::ResetInactivityTime();//it should help for Viewserver11 panic
+        User::After(5000000);
+    }
+#endif //Q_OS_SYMBIAN
+    return 0;
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::startThread()
+{
+#ifdef Q_OS_SYMBIAN
+    User::LeaveIfError(iThread.Create(
+                           _L("thread_kill_viewsrv11"),
+                           threadFunction,
+                           16384,
+                           4000,
+                           4000,
+                           NULL));
+    iThread.Resume();
+#endif //Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::stopThread()
+{
+#ifdef Q_OS_SYMBIAN
+    iThread.Close();
+#endif //Q_OS_SYMBIAN
+}
+
+
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAssignmentOperatorNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+        CaNotifierFilter filter;
+        filter.setEntryRole(ItemEntryRole);
+        filter.setTypeNames(QStringList() << "typeName1" << "typeName2");
+        filter.setParentId(22);
+        filter.setIds(QList<int>() << 11 << 22);
+
+        CaNotifierFilter filterAssign;
+        filterAssign = filter;
+        QCOMPARE(filterAssign.getEntryRole(), filter.getEntryRole());
+        QCOMPARE(filterAssign.getParentId(), filter.getParentId());
+        for (int i(0); i < filter.getIds().count(); i++) {
+            QCOMPARE(filterAssign.getIds().at(i),
+            filter.getIds().at(i));
+        }
+        for (int i(0); i < filter.getTypeNames().count(); i++) {
+            QCOMPARE(filterAssign.getTypeNames().at(i),
+            filter.getTypeNames().at(i));
+        }
+
+        filter.setEntryRole(GroupEntryRole);
+        filter.getTypeNames().clear();
+        filter.setTypeNames(QStringList() << "typeName3" << "typeName4");
+        filter.setParentId(55);
+        filter.getIds().clear();
+        filter.setIds(QList<int>() << 33 << 44);
+
+        QVERIFY(filterAssign.getEntryRole() != filter.getEntryRole());
+        QVERIFY(filterAssign.getParentId() != filter.getParentId());
+        for (int i(0); i < filter.getIds().count(); i++) {
+            QVERIFY(filterAssign.getIds().at(i)
+            != filter.getIds().at(i));
+        }
+        for (int i(0); i < filter.getTypeNames().count(); i++) {
+            QVERIFY(filterAssign.getTypeNames().at(i)
+            != filter.getTypeNames().at(i));
+        }
+
+        CaNotifierFilter filterCopyConstructor(filter);
+        QCOMPARE(filterCopyConstructor.getEntryRole(), filter.getEntryRole());
+        QCOMPARE(filterCopyConstructor.getParentId(), filter.getParentId());
+        for (int i(0); i < filter.getIds().count(); i++) {
+            QCOMPARE(filterCopyConstructor.getIds().at(i),
+            filter.getIds().at(i));
+        }
+        for (int i(0); i < filter.getTypeNames().count(); i++) {
+            QCOMPARE(filterCopyConstructor.getTypeNames().at(i),
+            filter.getTypeNames().at(i));
+        }
+
+        CaQuery query;
+        query.setEntryRoles(GroupEntryRole);
+        query.setEntryTypeNames(QStringList() << "Query1" << "Query2");
+        query.setParentId(77);
+
+        CaNotifierFilter filterQuery(query);
+        QCOMPARE(filterQuery.getEntryRole(), query.entryRoles());
+        QCOMPARE(filterQuery.getParentId(), query.parentId());
+        QCOMPARE(filterQuery.getIds().count(), 0);
+        for (int i(0); i < query.entryTypeNames().count(); i++) {
+            QCOMPARE(filterQuery.getTypeNames().at(i),
+            query.entryTypeNames().at(i));
+        }
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAddItemChangeTypeNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+        CaNotifierFilter *filter = new CaNotifierFilter();
+        filter->setEntryRole(ItemEntryRole);
+        QStringList strList;
+        strList.append("TypeName");
+        filter->setTypeNames(strList);
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        QTest::qWait(waitTime1sec);
+        CaEntry item;
+        item.setText("Text");
+        item.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry = mService->createEntry(item);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        delete filter;
+        mService->removeEntry(entry->id());
+        QTest::qWait(waitTime500ms);
+        QTest::qWait(waitTime500ms);
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAddGroupChangeTypeNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+
+        CaNotifierFilter *filter = new CaNotifierFilter();
+        filter->setEntryRole(GroupEntryRole);
+        filter->setTypeNames(QStringList() << "TypeName");
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        CaEntry group(GroupEntryRole);
+        group.setText("Text");
+        group.setEntryTypeName("TypeName");
+
+        QSharedPointer<CaEntry> entry = mService->createEntry(group);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        mService->removeEntry(entry->id());
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntryChangeTypeNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+
+        CaNotifierFilter *filter = new CaNotifierFilter();
+        filter->setEntryRole(ItemEntryRole);
+        filter->setTypeNames(QStringList() << "TypeName");
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        CaEntry item;
+        item.setText("Text");
+        item.setEntryTypeName("TypeName");
+
+        QSharedPointer<CaEntry> entry = mService->createEntry(item);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+        int entryId = clientNotifier->mEntryId;
+        clientNotifier->mEntryId = 0;
+
+        bool removed = mService->removeEntry(*entry);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, RemoveChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entryId);
+        QCOMPARE(removed, TRUE);
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        mService->removeEntry(entry->id());
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntryIdChangeTypeNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+
+
+        CaEntry item;
+        item.setText("Text");
+        item.setEntryTypeName("TypeName");
+
+        QSharedPointer<CaEntry> entry = mService->createEntry(item);
+        QTest::qWait(waitTime1sec);
+
+        CaNotifierFilter *filter = new CaNotifierFilter();
+        filter->setEntryRole(ItemEntryRole);
+        filter->setTypeNames(QStringList() << "TypeName");
+        filter->setIds(QList<int>() << entry->id());
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+
+        int entryId = entry->id();
+        clientNotifier->mEntryId = 0;
+
+        bool removed = mService->removeEntry(entryId);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, RemoveChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entryId);
+        QCOMPARE(removed, TRUE);
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        delete filter;
+        mService->removeEntry(entry->id());
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntryChangeTypeNotifierFake()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        CaEntry item;
+        item.setText("Text");
+        item.setEntryTypeName("TypeName");
+
+        QSharedPointer<CaEntry> entry = mService->createEntry(item);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+        clientNotifier->mEntryId = 0;
+        CaEntry *entryFake = new CaEntry();
+        entryFake->setText("Text");
+        entryFake->setEntryTypeName("TypeName");
+
+        bool removed = mService->removeEntry(*entryFake);
+
+        QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+        QCOMPARE(clientNotifier->mEntryId, 0);
+        QCOMPARE(removed, FALSE);
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        mService->removeEntry(entry->id());
+        delete entryFake;
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntryIdChangeTypeNotifierFake()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        CaEntry item;
+        item.setText("Text");
+        item.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry = mService->createEntry(item);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+        clientNotifier->mEntryId = 0;
+        bool removed = mService->removeEntry(entryIdFake);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+        QCOMPARE(clientNotifier->mEntryId, 0);
+        QCOMPARE(removed, FALSE);
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        mService->removeEntry(entry->id());
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntriesChangeTypeNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+
+
+        CaEntry item1;
+        item1.setText("Text");
+        item1.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+        QTest::qWait(waitTime1sec);
+        CaEntry item2;
+        item2.setText("Text");
+        item2.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+        QTest::qWait(waitTime1sec);
+        CaEntry item3;
+        item3.setText("Text");
+        item3.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry3 = mService->createEntry(item3);
+        QTest::qWait(waitTime1sec);
+        CaEntry item4;
+        item4.setText("Text");
+        item4.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry4 = mService->createEntry(item4);
+        QTest::qWait(waitTime1sec);
+
+        QList< QSharedPointer<CaEntry> > entriesList;
+        entriesList.append(entry1);
+        entriesList.append(entry2);
+        entriesList.append(entry3);
+        entriesList.append(entry4);
+
+        CaNotifierFilter *filter = new CaNotifierFilter();
+        filter->setEntryRole(ItemEntryRole);
+        filter->setTypeNames(QStringList() << "TypeName");
+        filter->setIds(QList<int>() << entry2->id() << entry3->id());
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        QTest::qWait(waitTime500ms);
+
+        clientNotifier->mEntryId = 0;
+
+        bool removed = mService->removeEntries(entriesList);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, RemoveChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entry3->id());
+        QCOMPARE(removed, TRUE);
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        delete filter;
+        mService->removeEntries(entriesList);
+        QTest::qWait(waitTime500ms);
+        entriesList.clear();
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntriesIdsChangeTypeNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        CaEntry item1;
+        item1.setText("Text");
+        item1.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+        QTest::qWait(waitTime1sec);
+        CaEntry item2;
+        item2.setText("Text");
+        item2.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+        QTest::qWait(waitTime1sec);
+        CaEntry item3;
+        item3.setText("Text");
+        item3.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry3 = mService->createEntry(item3);
+        QTest::qWait(waitTime1sec);
+        CaEntry item4;
+        item4.setText("Text");
+        item4.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry4 = mService->createEntry(item4);
+        QTest::qWait(waitTime1sec);
+
+        QList<int> entriesIdsList;
+        entriesIdsList.append(entry1->id());
+        entriesIdsList.append(entry2->id());
+        entriesIdsList.append(entry3->id());
+        entriesIdsList.append(entry4->id());
+
+        clientNotifier->mEntryId = 0;
+
+        bool removed = mService->removeEntries(entriesIdsList);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, RemoveChangeType);
+        QVERIFY(clientNotifier->mEntryId > 0);
+        QCOMPARE(clientNotifier->mEntryId, entry4->id());
+        QCOMPARE(removed, TRUE);
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        mService->removeEntries(entriesIdsList);
+        QTest::qWait(waitTime500ms);
+        entriesIdsList.clear();
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntriesChangeTypeNotifierFake()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    {
+
+        TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+        CaNotifier *notifier = clientNotifier->getNotifier();
+
+        connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        CaEntry item1;
+        item1.setText("Text");
+        item1.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+        QTest::qWait(waitTime1sec);
+        CaEntry item2;
+        item2.setText("Text");
+        item2.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+        QTest::qWait(waitTime1sec);
+        CaEntry item3;
+        item3.setText("Text");
+        item3.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry3 = mService->createEntry(item3);
+        QTest::qWait(waitTime1sec);
+        CaEntry item4;
+        item4.setText("Text");
+        item4.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entry4 = mService->createEntry(item4);
+        QTest::qWait(waitTime1sec);
+
+        QList<QSharedPointer<CaEntry> > entriesList;
+        entriesList.append(entry1);
+        entriesList.append(entry2);
+        entriesList.append(entry3);
+        entriesList.append(entry4);
+
+        clientNotifier->mEntryId = 0;
+
+        CaEntry itemFake1;
+        itemFake1.setText("Text");
+        itemFake1.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entryFake1 = mService->createEntry(itemFake1);
+        int entryFake1Id = entryFake1->id();
+        entryFake1->setId(entryIdFake);
+        QTest::qWait(waitTime1sec);
+        CaEntry itemFake2;
+        itemFake2.setText("Text");
+        itemFake2.setEntryTypeName("TypeName");
+        QSharedPointer<CaEntry> entryFake2 = mService->createEntry(itemFake2);
+        int entryFake2Id = entryFake2->id();
+        entryFake2->setId(entryIdFake);
+        QTest::qWait(waitTime1sec);
+        QList<QSharedPointer<CaEntry> > entriesListFake;
+        entriesListFake.append(entryFake1);
+        entriesListFake.append(entryFake2);
+
+        clientNotifier->mEntryId = 0;
+        clientNotifier->mChangeType = AddChangeType;
+
+        bool removed = mService->removeEntries(entriesListFake);
+        QTest::qWait(waitTime1sec);
+
+        QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+        QCOMPARE(clientNotifier->mEntryId, 0);
+        QCOMPARE(removed, FALSE);
+
+        entryFake1->setId(entryFake1Id);
+        entryFake2->setId(entryFake2Id);
+
+        // cleanup
+        disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+        clientNotifier, SLOT(entryChanged(int,ChangeType)));
+        disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+        clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+        QTest::qWait(waitTime500ms);
+        delete clientNotifier;
+        mService->removeEntries(entriesList);
+        mService->removeEntries(entriesListFake);
+        QTest::qWait(waitTime500ms);
+        entriesList.clear();
+        entriesListFake.clear();
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntriesIdsChangeTypeNotifierFake()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+            clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text");
+    item1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text");
+    item2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+    CaEntry item3;
+    item3.setText("Text");
+    item3.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry3 = mService->createEntry(item3);
+    QTest::qWait(waitTime1sec);
+    CaEntry item4;
+    item4.setText("Text");
+    item4.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry4 = mService->createEntry(item4);
+    QTest::qWait(waitTime1sec);
+
+    QList<int> entriesIdsList;
+    entriesIdsList.append(entry1->id());
+    entriesIdsList.append(entry2->id());
+    entriesIdsList.append(entry3->id());
+    entriesIdsList.append(entry4->id());
+
+    CaEntry itemFake1;
+    itemFake1.setText("Text");
+    itemFake1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryFake1 = mService->createEntry(itemFake1);
+    int entryFake1Id = entryFake1->id();
+    entryFake1->setId(entryIdFake);
+    QTest::qWait(waitTime1sec);
+    CaEntry itemFake2;
+    itemFake2.setText("Text");
+    itemFake2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryFake2 = mService->createEntry(itemFake2);
+    int entryFake2Id = entryFake2->id();
+    entryFake2->setId(entryIdFake);
+    QTest::qWait(waitTime1sec);
+    QList<int> entriesIdsListFake;
+    entriesIdsListFake.append(entryFake1->id());
+    entriesIdsListFake.append(entryFake2->id());
+
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mChangeType = AddChangeType;
+
+    bool removed = mService->removeEntries(entriesIdsListFake);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QCOMPARE(clientNotifier->mEntryId, 0);
+    QCOMPARE(removed, FALSE);
+
+    entryFake1->setId(entryFake1Id);
+    entryFake2->setId(entryFake2Id);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+               clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntries(entriesIdsList);
+    mService->removeEntry(*entryFake1);
+    mService->removeEntry(*entryFake2);
+    QTest::qWait(waitTime1sec);
+    entriesIdsList.clear();
+    entriesIdsListFake.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveGroupChangeTypeNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+            clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+    int entryId = clientNotifier->mEntryId;
+    clientNotifier->mEntryId = 0;
+
+    bool removed = mService->removeEntry(*entry);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, RemoveChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryId);
+    QCOMPARE(removed, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+               clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveGroupsChangeTypeNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+
+    CaEntry group1(GroupEntryRole);
+    group1.setText("Text");
+    group1.setEntryTypeName("TypeName1");
+    QSharedPointer<CaEntry> entry1 = mService->createEntry(group1);
+    QTest::qWait(waitTime1sec);
+    CaEntry group2(GroupEntryRole);
+    group2.setText("Text");
+    group2.setEntryTypeName("TypeName2");
+    QSharedPointer<CaEntry> entry2 = mService->createEntry(group2);
+    QTest::qWait(waitTime1sec);
+    CaEntry group3(GroupEntryRole);
+    group3.setText("Text");
+    group3.setEntryTypeName("TypeName3");
+    QSharedPointer<CaEntry> entry3 = mService->createEntry(group3);
+    QTest::qWait(waitTime1sec);
+    CaEntry group4(GroupEntryRole);
+    group4.setText("Text");
+    group4.setEntryTypeName("TypeName4");
+    QSharedPointer<CaEntry> entry4 = mService->createEntry(group4);
+    QTest::qWait(waitTime1sec);
+
+    QList< QSharedPointer<CaEntry> > entriesList;
+    entriesList.append(entry1);
+    entriesList.append(entry2);
+    entriesList.append(entry3);
+    entriesList.append(entry4);
+
+    CaNotifierFilter *filter = new CaNotifierFilter();
+    filter->setEntryRole(GroupEntryRole);
+    filter->setTypeNames(QStringList() << "TypeName3" << "TypeName4");
+    filter->setIds(QList<int>() << entry3->id());
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+            clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+
+    clientNotifier->mEntryId = 0;
+
+    bool removed = mService->removeEntries(entriesList);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, RemoveChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry3->id());
+    QCOMPARE(removed, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+               clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    delete filter;
+    mService->removeEntries(entriesList);
+    QTest::qWait(waitTime1sec);
+    entriesList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestUpdateChangeTypeNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+            clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    item.setDescription("description");
+
+    QSharedPointer<CaEntry> entry = mService->createEntry(item);
+
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+               clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+    int entryId = clientNotifier->mEntryId;
+    delete clientNotifier;
+
+    CaNotifierFilter *filter = new CaNotifierFilter();
+    filter->setEntryRole(ItemEntryRole);
+    filter->setIds(QList<int>() << entry->id());
+    TestCaClientNotifier *clientNotifierUpdate = new TestCaClientNotifier(*mService, filter);
+    CaNotifier *notifierUpdate = clientNotifierUpdate->getNotifier();
+
+    connect(notifierUpdate, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifierUpdate, SLOT(entryChanged(int,ChangeType)));
+    connect(notifierUpdate, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+            clientNotifierUpdate, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+
+    bool updated = mService->updateEntry(*entry);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifierUpdate->mChangeType, UpdateChangeType);
+    QVERIFY(clientNotifierUpdate->mEntryId > 0);
+    QCOMPARE(clientNotifierUpdate->mEntryId, entryId);
+    QCOMPARE(clientNotifierUpdate->mEntryId, entry->id());
+    QCOMPARE(clientNotifierUpdate->mEntry->description(), QString("description"));
+    QCOMPARE(updated, TRUE);
+
+    // cleanup
+    disconnect(notifierUpdate, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifierUpdate, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifierUpdate, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+               clientNotifierUpdate, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+
+    delete clientNotifierUpdate;
+    delete filter;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestUpdateChangeTypeNotifierFake()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+            clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+
+    QTest::qWait(waitTime500ms);
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+
+    int entryId = clientNotifier->mEntryId;
+    clientNotifier->mEntryId = 0;
+    CaEntry itemFake;
+    itemFake.setText("Text");
+    itemFake.setEntryTypeName("TypeName");
+
+    bool updated = mService->updateEntry(itemFake);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QCOMPARE(clientNotifier->mEntryId, 0);
+    QCOMPARE(updated, FALSE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+               clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAddUpdateRemove()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+            clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry->id());
+
+
+    int entryId = clientNotifier->mEntryId;
+    clientNotifier->mEntryId = 0;
+
+    bool updated = mService->updateEntry(*entry);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, UpdateChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry->id());
+    QCOMPARE(updated, TRUE);
+
+    entryId = clientNotifier->mEntryId;
+    clientNotifier->mEntryId = 0;
+
+    bool removed = mService->removeEntry(entryId);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, RemoveChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(removed, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+               clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRegisterNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+            clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier, SLOT(entryTouched(int)));
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime1sec);
+    QCOMPARE(notifier->receivers(SIGNAL(entryChanged(int,ChangeType))), 1);
+    QCOMPARE(notifier->receivers(SIGNAL(entryChanged(CaEntry,ChangeType))), 1);
+    QCOMPARE(notifier->receivers(SIGNAL(entryTouched(int))), 1);
+    QCOMPARE(notifier->receivers(SIGNAL(groupContentChanged(int))), 1);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+               clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier, SLOT(entryTouched(int)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(notifier->receivers(SIGNAL(entryChanged(int,ChangeType))), 0);
+    QCOMPARE(notifier->receivers(SIGNAL(entryChanged(CaEntry,ChangeType))), 0);
+    QCOMPARE(notifier->receivers(SIGNAL(entryTouched(int))), 0);
+    QCOMPARE(notifier->receivers(SIGNAL(groupContentChanged(int))), 0);
+
+    delete clientNotifier;
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestUnregisterNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    connect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+            clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier, SLOT(entryTouched(int)));
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier, SLOT(entryTouched(int)));
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+
+    QCOMPARE(notifier->receivers(SIGNAL(entryChanged(int,ChangeType))), 1);
+    QCOMPARE(notifier->receivers(SIGNAL(entryChanged(CaEntry,ChangeType))), 1);
+    QCOMPARE(notifier->receivers(SIGNAL(entryTouched(int))), 1);
+    QCOMPARE(notifier->receivers(SIGNAL(groupContentChanged(int))), 1);
+
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
+               clientNotifier, SLOT(entryChanged(const CaEntry &,ChangeType)));
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier, SLOT(entryTouched(int)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    connect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+            clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(notifier->receivers(SIGNAL(entryChanged(int,ChangeType))), 0);
+    QCOMPARE(notifier->receivers(SIGNAL(entryChanged(CaEntry,ChangeType))), 0);
+    QCOMPARE(notifier->receivers(SIGNAL(entryTouched(int))), 0);
+    QCOMPARE(notifier->receivers(SIGNAL(groupContentChanged(int))), 0);
+
+    delete clientNotifier;
+    QTest::qWait(waitTime500ms);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestTouchEntryNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+
+    CaNotifierFilter *filter = new CaNotifierFilter();
+    filter->setEntryRole(ItemEntryRole);
+    filter->setIds(QList<int>() << entry->id());
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+
+    bool touched = mService->touch(*entry);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry->id());
+    QCOMPARE(touched, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    delete filter;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestTouchEntryIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+    QCOMPARE(clientNotifier->mEntryId, 0);
+
+    bool touched = mService->touch(*entry);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry->id());
+    QCOMPARE(touched, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestTouchEntryNotifierFake()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mEntryId, 0);
+
+    CaEntry *entryFake = new CaEntry();
+    entryFake->setText("Text");
+    entryFake->setEntryTypeName("TypeName");
+
+    bool touched = mService->touch(*entryFake);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mEntryId, 0);
+    QCOMPARE(touched, FALSE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+    delete entryFake;
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+
+void TestCaClient::TestTouchEntryUidNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    QScopedPointer<TestCaClientNotifier> clientNotifier(
+        new TestCaClientNotifier(*mService));
+
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier.data(), SLOT(entryTouched(int)));
+
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("application");
+    item.setAttribute(
+        "application:uid",
+        "-3");
+
+    QSharedPointer<CaEntry> entry = mService->createEntry(item);
+
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(!entry.isNull());
+
+    const int expectedEntryId = entry->id();
+
+    entry->setId(0);
+
+    QCOMPARE(clientNotifier->mEntryId, 0);
+
+    bool touched = mService->touch(*entry);
+
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mEntryId, expectedEntryId);
+    QCOMPARE(touched, true);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier.data(), SLOT(entryTouched(int)));
+
+    QTest::qWait(waitTime500ms);
+
+    mService->removeEntry(expectedEntryId);
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestTouchEntryIdNotifierFake()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mEntryId, 0);
+
+    QScopedPointer<CaEntry> entryFake(new CaEntry());
+    entryFake->setText("Text");
+    entryFake->setEntryTypeName("TypeName");
+    entryFake->setId(entryIdFake);
+
+    bool touched = mService->touch(*entryFake);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mEntryId, 0);
+    QCOMPARE(touched, FALSE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestTouchGroupNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryTouched(int)),
+            clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mEntryId, 0);
+
+    bool touched = mService->touch(*entry);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entry->id());
+    QCOMPARE(touched, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryTouched(int)),
+               clientNotifier, SLOT(entryTouched(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entry->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAppendEntryGroupNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryG = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryG->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryI = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryG->id();
+
+    clientNotifier->mChangeType = RemoveChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool appended = mService->appendEntryToGroup((CaEntry &)(*entryG), *entryI);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryG->id());
+    QCOMPARE(appended, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entryI->id());
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryG->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAppendEntryGroupIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryG = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryG->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryI = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryG->id();
+
+    clientNotifier->mChangeType = RemoveChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool appended = mService->appendEntryToGroup(((CaEntry &)*entryG).id(), (*entryI).id());
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryG->id());
+    QCOMPARE(appended, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entryI->id());
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryG->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAppendEntriesGroupNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryGroup = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryGroup->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryGroup->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text");
+    item1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text");
+    item2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    QList< QSharedPointer<CaEntry>  > entriesList;
+    entriesList.append(entry1);
+    entriesList.append(entry2);
+
+    clientNotifier->mChangeType = RemoveChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(appended, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntries(entriesList);
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryGroup->id());
+    QTest::qWait(waitTime1sec);
+    entriesList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestAppendEntriesGroupIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryGroup = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryGroup->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryGroup->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text");
+    item1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryItem1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text");
+    item2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryItem2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    QList<int> entriesIdsList;
+    entriesIdsList.append(entryItem1->id());
+    entriesIdsList.append(entryItem2->id());
+
+    clientNotifier->mChangeType = RemoveChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool appended = mService->appendEntriesToGroup(((CaEntry &)*entryGroup).id(), entriesIdsList);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(appended, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntries(entriesIdsList);
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryGroup->id());
+    QTest::qWait(waitTime1sec);
+    entriesIdsList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestPrependEntryGroupNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryG = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryG->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryI = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryG->id();
+
+    clientNotifier->mChangeType = RemoveChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool appended = mService->prependEntryToGroup((CaEntry &)(*entryG), *entryI);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryG->id());
+    QCOMPARE(appended, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entryI->id());
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryG->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestPrependEntryGroupIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryG = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryG->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item;
+    item.setText("Text");
+    item.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryI = mService->createEntry(item);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryG->id();
+
+    clientNotifier->mChangeType = RemoveChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool appended = mService->prependEntryToGroup(((CaEntry &)*entryG).id(), (*entryI).id());
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryG->id());
+    QCOMPARE(appended, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entryI->id());
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryG->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestPrependEntriesGroupNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryGroup = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryGroup->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryGroup->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text");
+    item1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text");
+    item2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    QList< QSharedPointer<CaEntry> > entriesList;
+    entriesList.append(entry1);
+    entriesList.append(entry2);
+
+    clientNotifier->mChangeType = RemoveChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool appended = mService->prependEntriesToGroup((CaEntry &)*entryGroup, entriesList);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(appended, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntries(entriesList);
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryGroup->id());
+    QTest::qWait(waitTime1sec);
+    entriesList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestPrependEntriesGroupIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryGroup = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryGroup->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryGroup->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text");
+    item1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryItem1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text");
+    item2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryItem2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    QList<int> entriesIdsList;
+    entriesIdsList.append(entryItem1->id());
+    entriesIdsList.append(entryItem2->id());
+
+    clientNotifier->mChangeType = RemoveChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool appended = mService->prependEntriesToGroup(((CaEntry &)*entryGroup).id(), entriesIdsList);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(appended, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntries(entriesIdsList);
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryGroup->id());
+    QTest::qWait(waitTime1sec);
+    entriesIdsList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntryGroupNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryGroup = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryGroup->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryGroup->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text");
+    item1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text");
+    item2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    QList< QSharedPointer<CaEntry> > entriesList;
+    entriesList.append(entry1);
+    entriesList.append(entry2);
+
+    bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList);
+    QTest::qWait(waitTime1sec);
+    QCOMPARE(appended, TRUE);
+
+    clientNotifier->mChangeType = AddChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+    bool removed = mService->removeEntryFromGroup((CaEntry &)*entryGroup, *entry1);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(removed, TRUE);
+
+    clientNotifier->mChangeType = AddChangeType;
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+    removed = mService->removeEntryFromGroup((CaEntry &)*entryGroup, *entry2);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(removed, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntries(entriesList);
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryGroup->id());
+    QTest::qWait(waitTime1sec);
+    entriesList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntryGroupIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryGroup = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryGroup->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryGroup->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text");
+    item1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text");
+    item2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    QList< QSharedPointer<CaEntry> > entriesList;
+    entriesList.append(entry1);
+    entriesList.append(entry2);
+
+    bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList);
+    QTest::qWait(waitTime1sec);
+    QCOMPARE(appended, TRUE);
+
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+    bool removed = mService->removeEntryFromGroup(entryGroup->id(), entry1->id());
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(removed, TRUE);
+
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+    removed = mService->removeEntryFromGroup(entryGroup->id(), entry2->id());
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(removed, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntries(entriesList);
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryGroup->id());
+    QTest::qWait(waitTime1sec);
+    entriesList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntriesGroupNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryGroup = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryGroup->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryGroup->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text");
+    item1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text");
+    item2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    QList<QSharedPointer<CaEntry> > entriesList;
+    entriesList.append(entry1);
+    entriesList.append(entry2);
+
+    bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList);
+    QTest::qWait(waitTime1sec);
+    QCOMPARE(appended, TRUE);
+
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+    bool removed = mService->removeEntriesFromGroup((CaEntry &)*entryGroup, entriesList);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(removed, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntries(entriesList);
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryGroup->id());
+    QTest::qWait(waitTime1sec);
+    entriesList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestRemoveEntriesGroupIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryGroup = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryGroup->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryGroup->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text");
+    item1.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text");
+    item2.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    QList<QSharedPointer<CaEntry> > entriesList;
+    entriesList.append(entry1);
+    entriesList.append(entry2);
+
+    bool appended = mService->appendEntriesToGroup((CaEntry &)*entryGroup, entriesList);
+    QTest::qWait(waitTime1sec);
+    QCOMPARE(appended, TRUE);
+
+    QList<int> entriesIdList;
+    entriesIdList.append(entry1->id());
+    entriesIdList.append(entry2->id());
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+    bool removed = mService->removeEntriesFromGroup(entryGroup->id(), entriesIdList);
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryGroup->id());
+    QCOMPARE(removed, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntries(entriesList);
+    QTest::qWait(waitTime1sec);
+    mService->removeEntry(entryGroup->id());
+    QTest::qWait(waitTime1sec);
+    entriesList.clear();
+    entriesIdList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestInsertEntryGroupNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryG = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryG->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryG->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text1");
+    item1.setEntryTypeName("TypeName1");
+    QSharedPointer<CaEntry> entryI1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text2");
+    item2.setEntryTypeName("TypeName2");
+    QSharedPointer<CaEntry> entryI2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    bool appended = mService->appendEntryToGroup((CaEntry &)(*entryG), *entryI1);
+    QTest::qWait(waitTime500ms);
+    QCOMPARE(appended, TRUE);
+    appended = mService->prependEntryToGroup((CaEntry &)(*entryG), *entryI2);
+    QTest::qWait(waitTime500ms);
+    QCOMPARE(appended, TRUE);
+
+    CaEntry item3;
+    item3.setText("Text3");
+    item3.setEntryTypeName("TypeName3");
+    QSharedPointer<CaEntry> entryI3 = mService->createEntry(item3);
+    QTest::qWait(waitTime1sec);
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool inserted = mService->insertEntryIntoGroup((CaEntry &)*entryG, *entryI3, entryI2->id());
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryG->id());
+    QCOMPARE(inserted, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entryI1->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI2->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI3->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryG->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestInsertEntryGroupIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryG = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryG->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryG->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text1");
+    item1.setEntryTypeName("TypeName1");
+    QSharedPointer<CaEntry> entryI1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text2");
+    item2.setEntryTypeName("TypeName2");
+    QSharedPointer<CaEntry> entryI2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    bool appended = mService->appendEntryToGroup(entryG->id(), entryI1->id());
+    QTest::qWait(waitTime500ms);
+    QCOMPARE(appended, TRUE);
+    appended = mService->prependEntryToGroup(entryG->id(), entryI2->id());
+    QTest::qWait(waitTime500ms);
+    QCOMPARE(appended, TRUE);
+
+    CaEntry item3;
+    item3.setText("Text3");
+    item3.setEntryTypeName("TypeName3");
+    QSharedPointer<CaEntry> entryI3 = mService->createEntry(item3);
+    QTest::qWait(waitTime1sec);
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool inserted = mService->insertEntryIntoGroup(entryG->id(), entryI3->id(), entryI2->id());
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryG->id());
+    QCOMPARE(inserted, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entryI1->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI2->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI3->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryG->id());
+    QTest::qWait(waitTime1sec);
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestInsertEntriesGroupNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryG = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryG->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryG->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text1");
+    item1.setEntryTypeName("TypeName1");
+    QSharedPointer<CaEntry> entryI1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text2");
+    item2.setEntryTypeName("TypeName2");
+    QSharedPointer<CaEntry> entryI2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    bool appended = mService->appendEntryToGroup((CaEntry &)(*entryG), *entryI1);
+    QTest::qWait(waitTime500ms);
+    QCOMPARE(appended, TRUE);
+    appended = mService->prependEntryToGroup((CaEntry &)(*entryG), *entryI2);
+    QTest::qWait(waitTime500ms);
+    QCOMPARE(appended, TRUE);
+
+    CaEntry item3;
+    item3.setText("Text3");
+    item3.setEntryTypeName("TypeName3");
+    QSharedPointer<CaEntry> entryI3 = mService->createEntry(item3);
+    QTest::qWait(waitTime1sec);
+    CaEntry item4;
+    item4.setText("Text4");
+    item4.setEntryTypeName("TypeName4");
+    QSharedPointer<CaEntry> entryI4 = mService->createEntry(item4);
+    QTest::qWait(waitTime1sec);
+
+    QList<QSharedPointer<CaEntry> > entriesList;
+    entriesList.append(entryI3);
+    entriesList.append(entryI4);
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool inserted = mService->insertEntriesIntoGroup((CaEntry &)*entryG, entriesList, entryI2->id());
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryG->id());
+    QCOMPARE(inserted, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entryI1->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI2->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI3->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI4->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryG->id());
+    QTest::qWait(waitTime1sec);
+    entriesList.clear();
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestInsertEntriesGroupIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService);
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    QTest::qWait(waitTime500ms);
+    CaEntry group(GroupEntryRole);
+    group.setText("Text");
+    group.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entryG = mService->createEntry(group);
+    QTest::qWait(waitTime1sec);
+    int groupId = entryG->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mEntryId > 0);
+    QCOMPARE(clientNotifier->mEntryId, entryG->id());
+
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    CaEntry item1;
+    item1.setText("Text1");
+    item1.setEntryTypeName("TypeName1");
+    QSharedPointer<CaEntry> entryI1 = mService->createEntry(item1);
+    QTest::qWait(waitTime1sec);
+    CaEntry item2;
+    item2.setText("Text2");
+    item2.setEntryTypeName("TypeName2");
+    QSharedPointer<CaEntry> entryI2 = mService->createEntry(item2);
+    QTest::qWait(waitTime1sec);
+
+    bool appended = mService->appendEntryToGroup((CaEntry &)(*entryG), *entryI1);
+    QTest::qWait(waitTime500ms);
+    QCOMPARE(appended, TRUE);
+    appended = mService->prependEntryToGroup((CaEntry &)(*entryG), *entryI2);
+    QTest::qWait(waitTime500ms);
+    QCOMPARE(appended, TRUE);
+
+    CaEntry item3;
+    item3.setText("Text3");
+    item3.setEntryTypeName("TypeName3");
+    QSharedPointer<CaEntry> entryI3 = mService->createEntry(item3);
+    QTest::qWait(waitTime1sec);
+    CaEntry item4;
+    item4.setText("Text4");
+    item4.setEntryTypeName("TypeName4");
+    QSharedPointer<CaEntry> entryI4 = mService->createEntry(item4);
+    QTest::qWait(waitTime1sec);
+
+    QList<int> entriesIdsList;
+    entriesIdsList.append(entryI3->id());
+    entriesIdsList.append(entryI4->id());
+    clientNotifier->mEntryId = 0;
+    clientNotifier->mGroupId = 0;
+
+    bool inserted = mService->insertEntriesIntoGroup(entryG->id(), entriesIdsList, entryI2->id());
+    QTest::qWait(waitTime1sec);
+
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mGroupId, groupId);
+    QCOMPARE(clientNotifier->mGroupId, entryG->id());
+    QCOMPARE(inserted, TRUE);
+
+    // cleanup
+    disconnect(notifier, SIGNAL(entryChanged(int,ChangeType)),
+               clientNotifier, SLOT(entryChanged(int,ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+    delete clientNotifier;
+    mService->removeEntry(entryI1->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI2->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI3->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryI4->id());
+    QTest::qWait(waitTime500ms);
+    mService->removeEntry(entryG->id());
+    QTest::qWait(waitTime1sec);
+    entriesIdsList.clear();
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+//
+void TestCaClient::TestChangeEntryWithParentIdNotifier()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+    CaNotifierFilter *filter = new CaNotifierFilter();
+    filter->setParentId(1); // AllCollections
+    TestCaClientNotifier *clientNotifier = new TestCaClientNotifier(*mService, filter);
+
+    CaNotifier *notifier = clientNotifier->getNotifier();
+
+    connect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+            clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    connect(notifier, SIGNAL(groupContentChanged(int)),
+            clientNotifier, SLOT(groupContentChanged(int)));
+    QTest::qWait(waitTime500ms);
+
+    CaEntry entryToAdd(ItemEntryRole);
+    entryToAdd.setText("Text");
+    entryToAdd.setEntryTypeName("TypeName");
+    QSharedPointer<CaEntry> entry = mService->createEntry(entryToAdd);
+    QTest::qWait(waitTime1sec);
+    int entryId = entry->id();
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QCOMPARE(clientNotifier->mEntryId, 0);
+    QCOMPARE(clientNotifier->mCount, 0);
+
+    bool appended = mService->appendEntryToGroup(3, entryId); // office
+    QTest::qWait(waitTime1sec);
+
+
+    QCOMPARE(clientNotifier->mChangeType, AddChangeType);
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mCount, 1);
+
+    mService->removeEntry(entryId);
+
+    QTest::qWait(waitTime1sec);
+
+    QCOMPARE(clientNotifier->mChangeType, RemoveChangeType);
+    QVERIFY(clientNotifier->mGroupId > 0);
+    QCOMPARE(clientNotifier->mCount, 2);
+
+    disconnect(notifier, SIGNAL(entryChanged(int, ChangeType)),
+               clientNotifier, SLOT(entryChanged(int, ChangeType)));
+    disconnect(notifier, SIGNAL(groupContentChanged(int)),
+               clientNotifier, SLOT(groupContentChanged(int)));
+
+    QTest::qWait(waitTime500ms);
+
+    delete clientNotifier;
+    delete filter;
+
+
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+// __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+//QTEST_MAIN(homescreen::test::TestCaClient)