homescreenapp/serviceproviders/hsmenuserviceprovider/tsrc/t_hsmenuserviceprovider/src/t_menuservice.cpp
changeset 96 458d8c8d9580
child 97 66b5fe3c07fd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/serviceproviders/hsmenuserviceprovider/tsrc/t_hsmenuserviceprovider/src/t_menuservice.cpp	Mon Oct 04 00:07:25 2010 +0300
@@ -0,0 +1,864 @@
+/*
+ * 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 hsHomeScreenStateProvider library.
+ *
+ */
+
+#include <qcoreapplication.h>
+#include <qstandarditemmodel.h>
+#include <hbmainwindow.h>
+#include <hbaction.h>
+#include <hbgridview.h>
+#include <hbgridviewitem.h>
+#include <hstest_global.h>
+#include <qvaluespacepublisher.h>
+
+#include "caitemmodel.h"
+#include "hsmenuitemmodel.h"
+#include "caservice.h"
+#include "hsmenuservice.h"
+#include "hsmenuserviceutils.h"
+#include "t_hsmenuserviceprovider.h"
+
+QTM_USE_NAMESPACE
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_getAllApplicationsModel()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        const Hs::HsSortAttribute
+            defaultSortAttribute(Hs::DescendingNameHsSortAttribute);
+
+        QScopedPointer<HsMenuItemModel>
+            model(HsMenuService::getAllApplicationsModel());
+
+        CaQuery actualQuery = model->mCaItemModelQuery;
+        CaQuery expectedQuery;
+        expectedQuery.setEntryRoles(ItemEntryRole);
+        expectedQuery.addEntryTypeName(Hs::applicationTypeName);
+        expectedQuery.addEntryTypeName(Hs::urlTypeName);
+        expectedQuery.addEntryTypeName(Hs::widgetTypeName);
+        expectedQuery.addEntryTypeName(Hs::templatedApplicationTypeName);
+        expectedQuery.setFlagsOn(VisibleEntryFlag);
+        expectedQuery.setFlagsOff(MissingEntryFlag);
+        expectedQuery.setSort(HsMenuServiceUtils::sortBy(defaultSortAttribute),
+                      HsMenuServiceUtils::sortOrder(defaultSortAttribute));
+        QCOMPARE(actualQuery.mSetEntryRoles, expectedQuery.mSetEntryRoles);
+        QCOMPARE(actualQuery.mAddEntryTypeNames,
+            expectedQuery.mAddEntryTypeNames);
+        QCOMPARE(actualQuery.mSetFlagsOn, expectedQuery.mSetFlagsOn);
+        QCOMPARE(actualQuery.mSetFlagsOff, expectedQuery.mSetFlagsOff);
+        QCOMPARE(actualQuery.mSetSortAttribute,
+            expectedQuery.mSetSortAttribute);
+        QCOMPARE(actualQuery.mSetSortOrder, expectedQuery.mSetSortOrder);
+
+        // check non-default sort attribute
+        const Hs::HsSortAttribute
+            ascendingSortAttribute(Hs::AscendingNameHsSortAttribute);
+
+        model.reset(
+            HsMenuService::getAllApplicationsModel(ascendingSortAttribute));
+
+        actualQuery = model->mCaItemModelQuery;
+
+        expectedQuery.setSort(
+            HsMenuServiceUtils::sortBy(ascendingSortAttribute),
+            HsMenuServiceUtils::sortOrder(ascendingSortAttribute));
+
+        QCOMPARE(actualQuery.mSetSortAttribute,
+            expectedQuery.mSetSortAttribute);
+        QCOMPARE(actualQuery.mSetSortOrder, expectedQuery.mSetSortOrder);
+        }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_getAllCollectionsModel()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+    const int allCollectionId = 8;
+    // ensure HsMenuService::allCollectionId will return
+    // non zero value, if it does not already
+    CaService::instance()->mGetEntryIdsResult.clear();
+    CaService::instance()->mGetEntryIdsResult << allCollectionId;
+
+        QScopedPointer<HsMenuItemModel>
+            model(HsMenuService::getAllCollectionsModel());
+
+        CaQuery actualQuery = model->mCaItemModelQuery;
+
+        CaQuery expectedQuery;
+        expectedQuery.setParentId(HsMenuService::allCollectionsId());
+        expectedQuery.setFlagsOn(VisibleEntryFlag);
+        expectedQuery.setFlagsOff(MissingEntryFlag);
+
+        QCOMPARE(actualQuery.mSetParentId, expectedQuery.mSetParentId);
+        QCOMPARE(actualQuery.mSetFlagsOn, expectedQuery.mSetFlagsOn);
+        QCOMPARE(actualQuery.mSetFlagsOff, expectedQuery.mSetFlagsOff);
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_getInstalledModel()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        const Hs::HsSortAttribute
+            defaultSortAttribute(Hs::DescendingNameHsSortAttribute);
+
+        QScopedPointer<HsMenuItemModel>
+            model(HsMenuService::getInstalledModel());
+
+        CaQuery actualQuery = model->mCaItemModelQuery;
+
+        CaQuery expectedQuery;
+        expectedQuery.addEntryTypeName(Hs::packageTypeName);
+        expectedQuery.setFlagsOn(VisibleEntryFlag | RemovableEntryFlag);
+        expectedQuery.setFlagsOff(MissingEntryFlag);
+        expectedQuery.setSort(HsMenuServiceUtils::sortBy(defaultSortAttribute),
+                      HsMenuServiceUtils::sortOrder(defaultSortAttribute));
+
+        QCOMPARE(actualQuery.mAddEntryTypeNames,
+            expectedQuery.mAddEntryTypeNames);
+        QCOMPARE(actualQuery.mSetFlagsOn, expectedQuery.mSetFlagsOn);
+        QCOMPARE(actualQuery.mSetFlagsOff, expectedQuery.mSetFlagsOff);
+        QCOMPARE(actualQuery.mSetSortAttribute,
+            expectedQuery.mSetSortAttribute);
+        QCOMPARE(actualQuery.mSetSortOrder, expectedQuery.mSetSortOrder);
+
+
+        // check non-default sort attribute
+        model.reset(
+            HsMenuService::getInstalledModel(Hs::CustomHsSortAttribute));
+
+        actualQuery = model->mCaItemModelQuery;
+
+        expectedQuery.setSort(
+            HsMenuServiceUtils::sortBy(Hs::CustomHsSortAttribute),
+            HsMenuServiceUtils::sortOrder(Hs::CustomHsSortAttribute));
+
+        QCOMPARE(actualQuery.mSetSortAttribute,
+            expectedQuery.mSetSortAttribute);
+        QCOMPARE(actualQuery.mSetSortOrder, expectedQuery.mSetSortOrder);
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_getCollectionModel()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        const Hs::HsSortAttribute
+            defaultSortAttribute(Hs::LatestOnTopHsSortAttribute);
+        const QString defaultCollectionType(Hs::collectionTypeName);
+        const int collectionId = 7;
+
+        QScopedPointer<HsMenuItemModel>
+            model(HsMenuService::getCollectionModel(collectionId));
+
+        CaQuery actualQuery = model->mCaItemModelQuery;
+
+        CaQuery expectedQuery;
+        expectedQuery.setParentId(collectionId);
+        expectedQuery.setFlagsOn(VisibleEntryFlag);
+        expectedQuery.setFlagsOff(MissingEntryFlag);
+        expectedQuery.setSort(
+            HsMenuServiceUtils::sortBy(defaultSortAttribute),
+            HsMenuServiceUtils::sortOrder(defaultSortAttribute));
+
+
+        // check with non-default parameters
+        model.reset(HsMenuService::getCollectionModel(collectionId,
+            Hs::NoHsSortAttribute, Hs::collectionDownloadedTypeName));
+
+        actualQuery = model->mCaItemModelQuery;
+
+        expectedQuery.setParentId(collectionId);
+        expectedQuery.setFlagsOn(RemovableEntryFlag | VisibleEntryFlag);
+        expectedQuery.setFlagsOff(MissingEntryFlag);
+        expectedQuery.setSort(
+            HsMenuServiceUtils::sortBy(Hs::NoHsSortAttribute),
+            HsMenuServiceUtils::sortOrder(Hs::NoHsSortAttribute));
+
+
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_getCollectionNames()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+
+
+
+        QSharedPointer<CaEntry> collectionA(new CaEntry);
+        collectionA->mTextResult = "A";
+        QSharedPointer<CaEntry> collectionB(new CaEntry);
+        collectionB->mTextResult = "B";
+
+        CaService::instance()->mGetEntriesResult.clear();
+        CaService::instance()->mGetEntriesResult << collectionA;
+        CaService::instance()->mGetEntriesResult << collectionB;
+
+        QStringList expectedNames;
+        expectedNames << collectionA->text();
+        expectedNames << collectionB->text();
+
+        CaQuery expectedQuery;
+        expectedQuery.setParentId(HsMenuService::allCollectionsId());
+        expectedQuery.setFlagsOn(VisibleEntryFlag);
+        expectedQuery.setFlagsOff(MissingEntryFlag);
+
+        QStringList actualNames = HsMenuService::getCollectionNames();
+
+        QCOMPARE(actualNames, expectedNames);
+
+        CaQuery actualQuery = CaService::instance()->mGetEntriesQuery;
+        QCOMPARE(actualQuery.mSetParentId, expectedQuery.mSetParentId);
+        QCOMPARE(actualQuery.mSetFlagsOn, expectedQuery.mSetFlagsOn);
+        QCOMPARE(actualQuery.mSetFlagsOff, expectedQuery.mSetFlagsOff);
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_getName()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        const int expectedEntryId = 5989;
+
+        QString actualName = HsMenuService::getName(expectedEntryId);
+        CaService::instance()->mGetEntryResult.clear();
+
+        QCOMPARE(CaService::instance()->mGetEntryId, expectedEntryId);
+        QCOMPARE(actualName, QString());
+
+        CaService::instance()->mGetEntryResult =
+            QSharedPointer<CaEntry>(new CaEntry);
+        const QString expectedName = "ABCD";
+        CaService::instance()->mGetEntryResult->mTextResult = expectedName;
+
+        actualName = HsMenuService::getName(expectedEntryId);
+
+        QCOMPARE(actualName, expectedName);
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_executeAction()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+
+        // first case: command fails for entryId=19 and
+        // "invalidName" action
+        service->mExecuteCommandResult = -333;
+        QString commandName = "invalidName";
+        int entryId = 19;
+
+        QVERIFY(!(HsMenuService::executeAction(entryId, commandName)==0));
+        QCOMPARE(service->mExecuteEntryId, entryId);
+        QCOMPARE(service->mExecuteCommand, commandName);
+
+        // now pretend CaService accepted the command above
+        // so HsMenuService accepts it too
+        service->mExecuteCommandResult = 0;
+        QVERIFY(HsMenuService::executeAction(entryId, commandName)==0);
+
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_executeActionEntry()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+
+        // first case: command fails for entryId=19 and
+        // "invalidName" action
+        service->mExecuteCommandResult = -333;
+        QString commandName = "invalidName";
+        CaEntry entry;
+
+        QVERIFY(!(HsMenuService::executeAction(entry, commandName)==0));
+        QCOMPARE(service->mExecuteCommand, commandName);
+
+        // now pretend CaService accepted the command above
+        // so HsMenuService accepts it too
+        service->mExecuteCommandResult = 0;
+        QVERIFY(HsMenuService::executeAction(entry, commandName)==0);
+
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+#ifdef Q_OS_SYMBIAN
+void MenuServiceTest::MenuService_launchTS()
+{
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+    {
+        QVERIFY(HsMenuService::launchTaskSwitcher());
+    }
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+}
+#endif//Q_OS_SYMBIAN
+
+void MenuServiceTest::MenuService_createCollection()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+
+        // case 1: create collection fails
+        service->mCreateEntryResult.clear();
+        const QString createdCollectionName("collectionName");
+        int actualCollectionId =
+            HsMenuService::createCollection(createdCollectionName);
+
+        QCOMPARE(actualCollectionId, 0);
+
+        CaEntry& collectionEntry = service->mCreatedEntry;
+        QCOMPARE(collectionEntry.entryTypeName(),
+            QString(Hs::collectionTypeName));
+        QCOMPARE(collectionEntry.mCaEntryRole, GroupEntryRole);
+        QCOMPARE(collectionEntry.text(), createdCollectionName);
+        CaIconDescription collectionIcon =
+            collectionEntry.mSetCaIconDescription;
+        QCOMPARE(collectionIcon.mSetFileName,
+            QString(Hs::defaultCollectionIconId));
+
+        // case 2: collection can be created
+        const int createdCollectionId = 9;
+        QSharedPointer<CaEntry> createdEntry(new CaEntry);
+        createdEntry->mIdResult = createdCollectionId;
+        service->mCreateEntryResult = createdEntry;
+
+        actualCollectionId =
+            HsMenuService::createCollection(createdCollectionName);
+
+        QCOMPARE(actualCollectionId, createdCollectionId);
+        QCOMPARE(service->mCreatedEntry.mAttributes[Hs::groupNameAttributeName],
+            createdCollectionName);
+        QCOMPARE(service->mAppendGroupId, HsMenuService::allCollectionsId());
+        QCOMPARE(service->mAppenEntryId, createdCollectionId);
+    }
+#endif
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+void MenuServiceTest::MenuService_renameCollection()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+
+        service->mGetEntryResult.clear();
+
+        const QString newCollectionName("DEFG");
+        const int collectionId = 8;
+
+        // case 1: no entry to rename has been found
+        QVERIFY(!HsMenuService::renameCollection(collectionId,
+            newCollectionName));
+        QCOMPARE(service->mGetEntryId, collectionId);
+
+        // case 2: entry to rename has been found
+        QSharedPointer<CaEntry> collectionEntry(new CaEntry);
+        service->mGetEntryResult = collectionEntry;
+        service->mUpdateEntryResult = true;
+        QVERIFY(HsMenuService::renameCollection(collectionId,
+            newCollectionName));
+
+        QCOMPARE(service->mUpdateEntry.text(), newCollectionName);
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+void MenuServiceTest::MenuService_removeCollection()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+    QSharedPointer<CaService> service = CaService::instance();
+    const int collectionId = 1;
+
+    // case 1: service cannot remove collection
+    service->mRemoveEntryForIdResult = false;
+    QVERIFY(!HsMenuService::removeCollection(collectionId));
+    QCOMPARE(service->mRemoveEntryId, collectionId);
+
+    // case 2: service can remove collection
+    service->mRemoveEntryForIdResult = true;
+    QVERIFY(HsMenuService::removeCollection(collectionId));
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+
+void MenuServiceTest::MenuService_addApplicationsToCollection()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        QList<int> applicationIdList;
+        applicationIdList << 1 << 2 << 3;
+        const int collectionId = 11;
+
+        service->mAppendEntriesToGroupResult = true;
+        QVERIFY(HsMenuService::addApplicationsToCollection(
+            applicationIdList, collectionId));
+
+        QCOMPARE(service->mAppendEntryIdList, applicationIdList);
+        QCOMPARE(service->mAppendListGroupId , collectionId);
+
+        // pretend CaService to fail on append
+        service->mAppendEntriesToGroupResult = false;
+        QVERIFY(!HsMenuService::addApplicationsToCollection(
+            applicationIdList, collectionId));
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+void MenuServiceTest::MenuService_removeApplicationFromCollection()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+
+        const int collectionId = 4;
+        const int applicationId = 25;
+
+        service->mRemoveEntryFromGroupResult = true;
+        QVERIFY(HsMenuService::removeApplicationFromCollection(
+            applicationId, collectionId));
+
+        QCOMPARE(service->mRemoveGroupId, collectionId);
+        QCOMPARE(service->mRemoveEntryFromGroupId, applicationId);
+
+        // pretend CaService to fail on removal operation
+        service->mRemoveEntryFromGroupResult = true;
+        QVERIFY(HsMenuService::removeApplicationFromCollection(
+            applicationId, collectionId));
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_organizeCollection()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+        QList<int> entryIdList;
+        entryIdList << 2 << 3 << 4;
+        const int groupId = 2;
+
+        service->mCustomSortResult = true;
+        QVERIFY(HsMenuService::organizeCollection(
+            groupId, entryIdList));
+
+        QCOMPARE(service->mCustomSortGroupId, groupId);
+        QCOMPARE(service->mCustomSortEntryIdList, entryIdList);
+
+        // pretend CaService fails on customSort
+        service->mCustomSortResult = false;
+        QVERIFY(!HsMenuService::organizeCollection(
+            groupId, entryIdList));
+
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_touchAction()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+
+        ////touch on unused entry
+        const int touchedEntryId = 5;
+        QSharedPointer<CaEntry> touchedEntry(new CaEntry);
+        touchedEntry->mIdResult = touchedEntryId;
+        touchedEntry->setText("GHI");
+        touchedEntry->setFlags(RemovableEntryFlag | VisibleEntryFlag);
+        service->mGetEntryResult = touchedEntry;
+        service->mTouchResult = true;
+
+        HsMenuService::touch(touchedEntryId);
+        QCOMPARE(service->mGetEntryId, touchedEntryId);
+        QCOMPARE(service->mTouchEntry.id(), touchedEntryId);
+        QCOMPARE(service->mTouchEntry.text(), touchedEntry->text());
+
+        ////touch on already used entry
+        const int unTouchedEntryId = 5;
+        QSharedPointer<CaEntry> unTouchedEntry(new CaEntry);
+        unTouchedEntry->mIdResult = unTouchedEntryId;
+        unTouchedEntry->setText("GHI_UT");
+        unTouchedEntry->setFlags(0);
+        service->mGetEntryResult = unTouchedEntry;
+        service->mTouchResult = true;
+
+        HsMenuService::touch(touchedEntryId);
+        QCOMPARE(service->mGetEntryId, unTouchedEntryId);
+        QCOMPARE(service->mTouchEntry.id(), touchedEntryId);
+        QCOMPARE(service->mTouchEntry.text(), touchedEntry->text());
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_touchListOfIdsAction()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        QSharedPointer<CaService> service = CaService::instance();
+
+        const int touchedEntryId = 5;
+        QSharedPointer<CaEntry> touchedEntry(new CaEntry);
+        touchedEntry->mIdResult = 9999;
+        touchedEntry->setText("GHI");
+        touchedEntry->setFlags(RemovableEntryFlag | VisibleEntryFlag);
+        service->mGetEntryResult = touchedEntry;
+        service->mTouchResult = true;
+        service->mGetEntryIdsResult.append(touchedEntryId);
+
+        const int alreadyTouchedEntryId = 6;
+        //alreadyTouchedEntryId is not return by mGetEntryIds
+        //service->mGetEntryIdsResult.append(alreadyTouchedEntryId);
+
+        QList<int> entryIdList;
+        entryIdList.append(touchedEntryId);
+        entryIdList.append(alreadyTouchedEntryId);
+
+        HsMenuService::touch(entryIdList);
+
+        QCOMPARE((bool)service->mTouchEntriesId.contains(touchedEntryId),true);
+        QCOMPARE((bool)service->mTouchEntriesId.contains(alreadyTouchedEntryId),false);
+
+        QCOMPARE(service->mGetEntryIdQuery.mSetFlagsOn,RemovableEntryFlag);
+        QCOMPARE(service->mGetEntryIdQuery.mSetFlagsOff,UsedEntryFlag);
+        QCOMPARE(service->mGetEntryIdQuery.mSetEntryRoles,ItemEntryRole);
+
+        QCOMPARE(service->mGetEntryId, touchedEntryId);
+        QCOMPARE(service->mTouchEntry.id(), touchedEntryId);
+        QCOMPARE(service->mTouchEntry.text(), touchedEntry->text());
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_launchSoftwareUpdate()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        CaService::instance()->mExecuteCommandResult = 0;
+        QCOMPARE(HsMenuService::launchSoftwareUpdate(),0);
+        QCOMPARE(CaService::instance()->mExecuteCommand,
+            QString(Hs::openActionIdentifier));
+        QCOMPARE(CaService::instance()->mExecuteEntry.mEntryTypeNameResult,
+            QString(Hs::applicationTypeName));
+        QCOMPARE(CaService::instance()->mExecuteEntry.mAttributes.value(
+            Hs::applicationUidEntryKey),
+            QString::number(Hs::softwareUpdateApplicationUid));
+
+        CaService::instance()->mExecuteCommandResult = -333;
+        QCOMPARE(HsMenuService::launchSoftwareUpdate(),-333);
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::MenuService_collectionIdByType()
+{
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARK;
+#endif
+#endif
+    {
+        const int ourCollectionId = 123;
+        QSharedPointer<CaService> service = CaService::instance();
+        CaService::instance()->mGetEntryIdsResult.clear();
+        CaService::instance()->mGetEntryIdsResult << ourCollectionId;
+
+        int result = HsMenuService::collectionIdByType("collection");
+
+        QCOMPARE(result, ourCollectionId);
+    }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+    __UHEAP_MARKEND;
+#endif
+#endif
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::initTestCase()
+{
+    const int allCollectionId = 8;
+    // ensure HsMenuService::allCollectionId will return
+    // non zero value, if it does not already
+    CaService::instance()->mGetEntryIdsResult.clear();
+    CaService::instance()->mGetEntryIdsResult << allCollectionId;
+}
+
+void MenuServiceTest::cleanup()
+{
+    CaService::instance()->clear();
+}
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::cleanupTestCase()
+{
+#ifdef Q_OS_SYMBIAN
+//    stopThread();
+#endif //Q_OS_SYMBIAN
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+int threadFunction(void *params)
+{
+    Q_UNUSED(params)
+#ifdef Q_OS_SYMBIAN
+    while (ETrue) {
+        User::ResetInactivityTime();//it should help for Viewserver11 panic
+        User::After(5000000);
+    }
+#endif //Q_OS_SYMBIAN
+    return 0;
+}
+
+#ifdef Q_OS_SYMBIAN
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::startThread()
+{
+    User::LeaveIfError(iThread.Create(
+                           _L("thread_kill_viewsrv11"),
+                           threadFunction,
+                           16384,
+                           4000,
+                           4000,
+                           NULL));
+    iThread.Resume();
+}
+#endif //Q_OS_SYMBIAN
+
+
+#ifdef Q_OS_SYMBIAN
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuServiceTest::stopThread()
+{
+    iThread.Close();
+}
+#endif //Q_OS_SYMBIAN
+
+QTEST_MAIN(MenuServiceTest)