contentstorage/caclient/tsrc/t_caclient/src/t_caclient_notifier_adv.cpp
author Jaakko Haukipuro (Nokia-MS/Oulu) <Jaakko.Haukipuro@nokia.com>
Thu, 16 Sep 2010 12:11:40 +0100
changeset 117 c63ee96dbe5f
permissions -rw-r--r--
Missing activityfw and taskswitcher components - fix for Bug 3670

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Main test class for hspluginmodel library.
*
*/


#include "t_caclient.h"
#include "caservice.h"
#include "canotifier.h"
#include "canotifierfilter.h"
#include "t_caclientNotifier.h"

const int entryIdFake(-1);
const int waitTime500ms(500);
const int waitTime1sec(1000);

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void TestCaClient::TestAddItemChangeTypeNotifier3Clients()
{
#ifdef Q_OS_SYMBIAN
#ifdef UT_MEMORY_CHECK
// __UHEAP_MARK;
#endif//UT_MEMORY_CHECK
#endif//Q_OS_SYMBIAN
    {
        QSharedPointer<CaService> service = CaService::instance();
        TestCaClientNotifier *clientNotifier_1 = new TestCaClientNotifier(*service);
        CaNotifier *notifier_1 = clientNotifier_1->getNotifier();

        TestCaClientNotifier *clientNotifier_2 = new TestCaClientNotifier(*service);
        CaNotifier *notifier_2 = clientNotifier_2->getNotifier();

        TestCaClientNotifier *clientNotifier_3 = new TestCaClientNotifier(*service);
        CaNotifier *notifier_3 = clientNotifier_3->getNotifier();

        connect(notifier_1, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_1, SLOT(entryChanged(int,ChangeType)));
        connect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)),
        clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType)));
        connect(notifier_3, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_3, SLOT(entryChanged(int,ChangeType)));
        QTest::qWait(waitTime1sec);

        clientNotifier_1->mChangeType = RemoveChangeType;
        clientNotifier_2->mChangeType = RemoveChangeType;
        clientNotifier_3->mChangeType = RemoveChangeType;
        terminatServer();
        CaEntry item;
        item.setText("Text");
        item.setEntryTypeName("TypeName");
        QSharedPointer<CaEntry> entry = service->createEntry(item);
        QTest::qWait(waitTime1sec);

        QCOMPARE(clientNotifier_1->mChangeType, AddChangeType);
        QVERIFY(clientNotifier_1->mEntryId > 0);
        QCOMPARE(clientNotifier_1->mEntryId, entry->id());
        QCOMPARE(clientNotifier_1->mEntryId, clientNotifier_2->mEntryId);
        QCOMPARE(clientNotifier_3->mEntryId, clientNotifier_2->mEntryId);
        QCOMPARE(clientNotifier_2->mChangeType, AddChangeType);
        QCOMPARE(entry->text(), clientNotifier_2->mEntry->text());
        QCOMPARE(clientNotifier_3->mChangeType, AddChangeType);


        // cleanup
        disconnect(notifier_1, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_1, SLOT(entryChanged(int,ChangeType)));
        disconnect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)),
        clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType)));
        disconnect(notifier_3, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_3, SLOT(entryChanged(int,ChangeType)));
        QTest::qWait(waitTime1sec);
        delete clientNotifier_1;
        delete clientNotifier_2;
        delete clientNotifier_3;
        service->removeEntry(entry->id());
    }
#ifdef Q_OS_SYMBIAN
#ifdef UT_MEMORY_CHECK
// __UHEAP_MARKEND;
#endif//UT_MEMORY_CHECK
#endif//Q_OS_SYMBIAN
}
// ---------------------------------------------------------------------------
//
void TestCaClient::TestRemoveEntryChangeTypeNotifier3Clients()
{
#ifdef Q_OS_SYMBIAN
#ifdef UT_MEMORY_CHECK
// __UHEAP_MARK;
#endif//UT_MEMORY_CHECK
#endif//Q_OS_SYMBIAN
    {
        QSharedPointer<CaService> service = CaService::instance();
        TestCaClientNotifier *clientNotifier_1 = new TestCaClientNotifier(*service);
        CaNotifier *notifier_1 = clientNotifier_1->getNotifier();

        TestCaClientNotifier *clientNotifier_2 = new TestCaClientNotifier(*service);
        CaNotifier *notifier_2 = clientNotifier_2->getNotifier();

        TestCaClientNotifier *clientNotifier_3 = new TestCaClientNotifier(*service);
        CaNotifier *notifier_3 = clientNotifier_3->getNotifier();

        connect(notifier_1, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_1, SLOT(entryChanged(int,ChangeType)));
        connect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)),
        clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType)));
        connect(notifier_3, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_3, SLOT(entryChanged(int,ChangeType)));
        QTest::qWait(waitTime1sec);
        terminatServer();
        CaEntry item;
        item.setText("Text");
        item.setEntryTypeName("TypeName");

        QSharedPointer<CaEntry> entry = service->createEntry(item);
        QTest::qWait(waitTime1sec);

        QCOMPARE(clientNotifier_1->mChangeType, AddChangeType);
        QVERIFY(clientNotifier_2->mEntryId > 0);
        QCOMPARE(clientNotifier_3->mEntryId, entry->id());

        int entryId_1 = clientNotifier_1->mEntryId;
        clientNotifier_1->mEntryId = 0;
        int entryId_2 = clientNotifier_2->mEntryId;
        clientNotifier_2->mEntryId = 0;
        int entryId_3 = clientNotifier_3->mEntryId;
        clientNotifier_3->mEntryId = 0;

        bool removed = service->removeEntry(*entry);
        QTest::qWait(waitTime1sec);

        QCOMPARE(clientNotifier_1->mChangeType, RemoveChangeType);
        QCOMPARE(clientNotifier_2->mChangeType, RemoveChangeType);
        QCOMPARE(clientNotifier_3->mChangeType, RemoveChangeType);
        QVERIFY(clientNotifier_1->mEntryId > 0);
        QCOMPARE(clientNotifier_1->mEntryId, entryId_1);
        QCOMPARE(clientNotifier_2->mEntryId, entryId_2);
        QCOMPARE(clientNotifier_3->mEntryId, entryId_3);
        QCOMPARE(entryId_1, entryId_3);
        QCOMPARE(entryId_2, entryId_3);
        QCOMPARE(removed, TRUE);

        // cleanup
        disconnect(notifier_1, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_1, SLOT(entryChanged(int,ChangeType)));
        disconnect(notifier_2, SIGNAL(entryChanged(const CaEntry &,ChangeType)),
        clientNotifier_2, SLOT(entryChanged(const CaEntry &,ChangeType)));
        disconnect(notifier_3, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_3, SLOT(entryChanged(int,ChangeType)));
        QTest::qWait(waitTime500ms);
        delete clientNotifier_1;
        delete clientNotifier_2;
        delete clientNotifier_3;
        service->removeEntry(entry->id());
    }
#ifdef Q_OS_SYMBIAN
#ifdef UT_MEMORY_CHECK
// __UHEAP_MARKEND;
#endif//UT_MEMORY_CHECK
#endif//Q_OS_SYMBIAN
}
// ---------------------------------------------------------------------------
//
void TestCaClient::TestRemoveEntriesChangeTypeNotifier3Clients()
{
#ifdef Q_OS_SYMBIAN
#ifdef UT_MEMORY_CHECK
// __UHEAP_MARK;
#endif//UT_MEMORY_CHECK
#endif//Q_OS_SYMBIAN
    {
        QSharedPointer<CaService> service = CaService::instance();
        TestCaClientNotifier *clientNotifier_1 = new TestCaClientNotifier(*service);
        CaNotifier *notifier_1 = clientNotifier_1->getNotifier();

        TestCaClientNotifier *clientNotifier_2 = new TestCaClientNotifier(*service);
        CaNotifier *notifier_2 = clientNotifier_2->getNotifier();

        TestCaClientNotifier *clientNotifier_3 = new TestCaClientNotifier(*service);
        CaNotifier *notifier_3 = clientNotifier_3->getNotifier();

        connect(notifier_1, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_1, SLOT(entryChanged(int,ChangeType)));
        connect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)),
        clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType)));
        connect(notifier_3, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_3, SLOT(entryChanged(int,ChangeType)));
        QTest::qWait(waitTime1sec);

        CaEntry item1;
        item1.setText("Text1");
        item1.setEntryTypeName("TypeName1");
        QSharedPointer<CaEntry> entry1 = service->createEntry(item1);
        QTest::qWait(waitTime1sec);
        CaEntry item2;
        item2.setText("Text2");
        item2.setEntryTypeName("TypeName2");
        QSharedPointer<CaEntry> entry2 = service->createEntry(item2);
        QTest::qWait(waitTime1sec);
        CaEntry item3;
        item3.setText("Text3");
        item3.setEntryTypeName("TypeName3");
        QSharedPointer<CaEntry> entry3 = service->createEntry(item3);
        QTest::qWait(waitTime1sec);
        CaEntry item4;
        item4.setText("Text4");
        item4.setEntryTypeName("TypeName4");
        QSharedPointer<CaEntry> entry4 = service->createEntry(item4);
        QTest::qWait(waitTime1sec);

        QList<QSharedPointer<CaEntry> > entriesList;
        entriesList.append(entry1);
        entriesList.append(entry2);
        entriesList.append(entry3);
        entriesList.append(entry4);

        clientNotifier_1->mEntryId = clientNotifier_2->mEntryId =
        clientNotifier_3->mEntryId = 0;

        bool removed = service->removeEntries(entriesList);
        QTest::qWait(waitTime1sec);

        QCOMPARE(clientNotifier_1->mChangeType, RemoveChangeType);
        QCOMPARE(clientNotifier_2->mChangeType, RemoveChangeType);
        QCOMPARE(clientNotifier_3->mChangeType, RemoveChangeType);
        QVERIFY(clientNotifier_1->mEntryId > 0);
        QCOMPARE(clientNotifier_1->mEntryId, clientNotifier_2->mEntryId);
        QCOMPARE(clientNotifier_1->mEntryId, clientNotifier_3->mEntryId);
        QCOMPARE(removed, TRUE);

        // cleanup
        disconnect(notifier_1, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_1, SLOT(entryChanged(int,ChangeType)));
        disconnect(notifier_2, SIGNAL(entryChanged(CaEntry,ChangeType)),
        clientNotifier_2, SLOT(entryChanged(CaEntry,ChangeType)));
        disconnect(notifier_3, SIGNAL(entryChanged(int,ChangeType)),
        clientNotifier_3, SLOT(entryChanged(int,ChangeType)));
        QTest::qWait(waitTime1sec);

        delete clientNotifier_1;
        delete clientNotifier_2;
        delete clientNotifier_3;
        service->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
}