diff -r 6727c5d0afc7 -r 458d8c8d9580 homescreenapp/serviceproviders/hsmenuserviceprovider/tsrc/t_hsmenuserviceprovider/src/t_menuitemmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homescreenapp/serviceproviders/hsmenuserviceprovider/tsrc/t_hsmenuserviceprovider/src/t_menuitemmodel.cpp Mon Oct 04 00:07:25 2010 +0300 @@ -0,0 +1,330 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include +#include +#include "caquery.h" +#include +#include "hsmenuservice.h" +#include "hsmenucollectionsitemmodel.h" +#include "hsmenuitemmodel.h" +#include "hsmenuserviceutils.h" +#include "t_hsmenuserviceprovider.h" +#include "hsiconsidleloader.h" + +void MenuServiceTest::HsMenuItemModel_construction() +{ + QScopedPointer parent(new QObject); + CaQuery query; + query.mQueryId = "__HsMenuItemModel_construction_CaQuery"; + HsMenuItemModel model(query, parent.data()); + QCOMPARE(model.mCaItemModelQuery.mQueryId, query.mQueryId); + QCOMPARE(model.QObject::parent(), parent.data()); + QVERIFY(model.getIconSize().isValid()); +} + +void MenuServiceTest::HsMenuItemModel_setSort() +{ + HsMenuItemModel model(CaQuery(), this); + + { + const Hs::HsSortAttribute sortAttribute = Hs::NoHsSortAttribute; + + model.setSort(sortAttribute); + QCOMPARE(model.mSetSortAttribute, HsMenuServiceUtils::sortBy(sortAttribute)); + QCOMPARE(model.mSetSortOrder, HsMenuServiceUtils::sortOrder(sortAttribute)); + } + { + const Hs::HsSortAttribute sortAttribute = Hs::DescendingNameHsSortAttribute; + + model.setSort(sortAttribute); + QCOMPARE(model.mSetSortAttribute, HsMenuServiceUtils::sortBy(sortAttribute)); + QCOMPARE(model.mSetSortOrder, HsMenuServiceUtils::sortOrder(sortAttribute)); + } +} + +void MenuServiceTest::HsMenuItemModel_getData() +{ + HsMenuItemModel model(CaQuery(), this); + + Qt::ItemDataRole role = Qt::DecorationRole; + const QModelIndex index = model.index(0, 0); + const QVariant expectedDecoration(QString("entryText")); + QList expectedResult; + expectedResult << expectedDecoration; + expectedResult << HbIcon(Hs::newIconId); + + model.mRootResult = index; + model.mEntryResult->mFlagsResult = 0; + model.mEntryResult->mEntryTypeNameResult = Hs::collectionDownloadedTypeName; + model.setSecondLineVisibility(true); + model.mDataResult = QVariant(expectedDecoration); + + QList actualResult = model.data(index, role).toList(); + + QCOMPARE(actualResult.at(0).toString(), + expectedDecoration.toString()); + QCOMPARE(actualResult.at(1).value().iconName(), + QString(Hs::newIconId)); + + QCOMPARE(model.data(index), model.mDataResult); +} + + +void MenuServiceTest::HsMenuItemModel_newIconNeeded() +{ + HsMenuItemModel model(CaQuery(), this); + + const QModelIndex index = model.index(0, 0); + model.mRootResult = index; + model.mEntryResult->mFlagsResult = 0; + model.mEntryResult->mEntryTypeNameResult = Hs::collectionDownloadedTypeName; + model.setSecondLineVisibility(true); + QVERIFY(model.newIconNeeded(index)); + + model.mRootResult = QModelIndex(); // invalid + QVERIFY(!model.root().isValid() && + !model.newIconNeeded(index)); + + model.mRootResult = index; + model.mEntryResult->mFlagsResult = UsedEntryFlag; + QVERIFY((model.entry(index)->flags() & UsedEntryFlag) && + !model.newIconNeeded(index)); + + model.mEntryResult->mFlagsResult = 0; + model.mEntryResult->mEntryTypeNameResult = ""; + QVERIFY((model.entry(index)->entryTypeName() != Hs::collectionDownloadedTypeName ) && + !model.newIconNeeded(index)); + +} + + +void MenuServiceTest::HsMenuItemModel_uninstallChange() +{ + HsMenuItemModel model(CaQuery(), this); + const QModelIndex index = model.index(0, 0); + model.mRootResult = index; + model.mEntryResult->mFlagsResult = 0; + model.mEntryResult->setAttribute(QString("component_id"), + QString().setNum(1)); + + model.uninstallChange(1, 5); + QCOMPARE(model.mComponentId, 1); + QCOMPARE(model.mIds.count(), 2); + QCOMPARE(model.mEntryResult->attribute( + QString("uninstall_progress")), QString("5")); + + model.uninstallChange(1, 20); + QCOMPARE(model.mEntryResult->attribute( + QString("uninstall_progress")), QString("20")); +} + +void MenuServiceTest::HsMenuCollectionsItemModel_construction() +{ + QScopedPointer parent(new QObject); + CaQuery query; + query.mQueryId = "__HsMenuCollectionItemModel_construction_CaQuery"; + HsMenuCollectionsItemModel model(query, parent.data()); + QCOMPARE(model.mCaItemModelQuery.mQueryId, query.mQueryId); + QCOMPARE(model.QObject::parent(), parent.data()); + QVERIFY(model.getIconSize().isValid()); +} + + + +void MenuServiceTest::HsMenuCollectionsItemModel_getData() +{ + HsMenuCollectionsItemModel model(CaQuery(), this); + + const QModelIndex index = model.index(0, 0); + const QString expectedText("entryText"); + const QString expectedSecondLine(hbTrId("txt_applib_dblist_downloaded_val_empty")); + + model.mRootResult = index; + model.mEntryResult->mFlagsResult = 0; + model.mEntryResult->mTextResult = expectedText; + model.setSecondLineVisibility(true); + + QList actualResult = model.data(index).toList(); + + QCOMPARE(actualResult.at(0).toString(), + expectedText); + QCOMPARE(actualResult.at(1).toString(), + expectedSecondLine); + + + Qt::ItemDataRole role = Qt::DecorationRole; + const QVariant expectedData; + + model.mDataResult = expectedData; + QCOMPARE(model.data(index, role), expectedData); + + model.setSecondLineVisibility(false); + QCOMPARE(model.data(index), expectedData); +} +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +void MenuServiceTest::HsMenuCollectionsItemModel_getSecondLine() +{ + HsMenuCollectionsItemModel model(CaQuery(), this); + Qt::ItemDataRole role = Qt::DisplayRole; + model.setSecondLineVisibility(true); + const QModelIndex index = model.index(0, 0); + + // set up mock data + + // make up 2 items to be stored in a collection + QSharedPointer collectionItemA(new CaEntry); + QString collectionItemAName("A"); + collectionItemA->mTextResult = collectionItemAName; + QSharedPointer collectionItemB(new CaEntry); + QString collectionItemBName("B"); + collectionItemB->mTextResult = collectionItemBName; + + // make sure CaService will return the 2 entries on getEntries call + CaService::instance()->mGetEntriesResult.append(collectionItemA); + CaService::instance()->mGetEntriesResult.append(collectionItemB); + + QString expectedSecondLine(hbTrId("txt_applib_dblist_val_ln_new_applications", + CaService::instance()->mGetEntriesResult.count())); + + // make data() call getSecondLine for 'downloaded' collection + model.mEntryResult->setEntryTypeName(Hs::collectionDownloadedTypeName); + model.mEntryResult->mIdResult = 5; // just to have any id + + QString actualSecondLine = model.data(index, role).toList().at(1).toString(); + + QCOMPARE(actualSecondLine, expectedSecondLine); + + // check what CaQuery was prepared by getSecondLine() + CaQuery resultQuery = CaService::instance()->mGetEntriesQuery; + QCOMPARE(resultQuery.mSetParentId, model.mEntryResult->mIdResult); + QCOMPARE(resultQuery.mSetEntryRoles, ItemEntryRole); + const EntryFlags expectedCollectionDownloadedFlags = + RemovableEntryFlag | VisibleEntryFlag; + QCOMPARE(resultQuery.mSetFlagsOn, expectedCollectionDownloadedFlags); + + + // case for static collection + const EntryFlags expectedCollectionFlag = VisibleEntryFlag; + expectedSecondLine = collectionItemAName + "," + collectionItemBName; + + model.mEntryResult->setEntryTypeName(Hs::collectionTypeName); + + actualSecondLine = model.data(index, role).toList().at(1).toString(); + + QCOMPARE(actualSecondLine, expectedSecondLine); + + resultQuery = CaService::instance()->mGetEntriesQuery; + QCOMPARE(resultQuery.mSetFlagsOn, expectedCollectionFlag); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void MenuServiceTest::HsMenuItemModel_preloadIcons() +{ + HsMenuItemModel model(CaQuery(), this); + + // set up mock data + Qt::ItemDataRole role = Qt::DecorationRole; + const QModelIndex index = model.index(0, 0); + const QVariant expectedDecoration(QString("entryText")); + QList expectedResult; + expectedResult << expectedDecoration; + expectedResult << HbIcon(Hs::newIconId); + model.mRootResult = index; + model.mEntryResult->mFlagsResult = 0; + model.mEntryResult->mEntryTypeNameResult = Hs::collectionDownloadedTypeName; + model.setSecondLineVisibility(true); + model.mDataResult = QVariant(expectedDecoration); + model.mRowCountResult = 1; // i.e. how many rows the mock model pretends to have + QList actualResult = model.data(index, role).toList(); + model.mEntryResult->mMakeIconResult = HbIcon(Hs::newIconId); + + // verify mock setup + QCOMPARE(actualResult.at(0).toString(), + expectedDecoration.toString()); + QCOMPARE(actualResult.at(1).value().iconName(), + QString(Hs::newIconId)); + QCOMPARE(model.data(index), model.mDataResult); + + // invoke icon preloader construction + model.preloadIcons(); + QVERIFY(model.mIconsIdleLoader); + + // invoke icon preloading + + model.mIconsIdleLoader->processWhenIdle(); + + // compare what has been logged in mock object with referece data + QCOMPARE(model.mEntryResult->mMakeIconSize, model.getIconSize()); + QCOMPARE(model.mEntryResult->mMakeIconResult.iconName(), + QString(Hs::newIconId)); +} + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void MenuServiceTest::HsIconsIdleLoader_construction() +{ + // precondtitons - prepare model + HsMenuItemModel model(CaQuery(), this); + + // set up mock data + Qt::ItemDataRole role = Qt::DecorationRole; + const QModelIndex index = model.index(0, 0); + const QVariant expectedDecoration(QString("entryText")); + QList expectedResult; + expectedResult << expectedDecoration; + expectedResult << HbIcon(Hs::newIconId); + model.mRootResult = index; + model.mEntryResult->mFlagsResult = 0; + model.mEntryResult->mEntryTypeNameResult = Hs::collectionDownloadedTypeName; + model.setSecondLineVisibility(true); + model.mDataResult = QVariant(expectedDecoration); + model.mRowCountResult = 1; // i.e. how many rows the mock model pretends to have + QList actualResult = model.data(index, role).toList(); + model.mEntryResult->mMakeIconResult = HbIcon(Hs::newIconId); + + QCOMPARE(actualResult.at(0).toString(), + expectedDecoration.toString()); + QCOMPARE(actualResult.at(1).value().iconName(), + QString(Hs::newIconId)); + + QCOMPARE(model.data(index), model.mDataResult); + + // test + HsIconsIdleLoader *iconsIdleLoader = new HsIconsIdleLoader(&model); + + QVERIFY(iconsIdleLoader->mModel); + QVERIFY(iconsIdleLoader->mTimer); + QVERIFY(iconsIdleLoader->mTimer->isActive()); + QTest::qWait(10000); + QVERIFY(!iconsIdleLoader->mTimer->isActive()); + + delete iconsIdleLoader; +} + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +int MenuServiceTest::getId(HsMenuItemModel *model , int idx) +{ + return model->data(model->index(idx), CaItemModel::IdRole).toInt(); +} +