--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsapplibrarystateplugin/tsrc/t_allcollectionsstate/src/t_allcollectionsstate.cpp Mon Oct 04 00:07:25 2010 +0300
@@ -0,0 +1,553 @@
+/*
+* Copyright (c) 2010 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 hsHomeScreenStatePlugin library.
+*
+*/
+
+#include <hbmainwindow.h>
+#include <hbinstance.h>
+#include <hbview.h>
+#include <hblistview.h>
+#include <hblistviewitem.h>
+#include <HbMenu>
+#include <HbAction>
+#include <qscopedpointer>
+
+#include "caentry.h"
+#include "caitemmodel.h"
+#include "hsmenuview.h"
+#include "hsmenuviewbuilder.h"
+#include "hsmenumodewrapper.h"
+#include "hsmenuevent.h"
+#include "hsallcollectionsstate.h"
+#include "hsmenueventtransition.h"
+#include "hsmainwindow.h"
+
+#include "t_hsaddtohomescreenmockstate.h"
+#include "t_hsmockmodel.h"
+#include "t_allcollectionsstate.h"
+
+class HsMainWindowMock : public HsMainWindow
+{
+ virtual void setCurrentView(HbView *view);
+
+};
+
+void HsMainWindowMock::setCurrentView(HbView *view)
+{
+ Q_UNUSED(view);
+ // do nothing
+}
+
+void MenuStatesTest::initTestCase()
+{
+// mWindow = NULL;
+}
+
+void MenuStatesTest::init()
+{
+// mWindow = new HbMainWindow;
+}
+
+void MenuStatesTest::cleanup()
+{
+ qApp->processEvents();
+// delete mWindow;
+// mWindow = NULL;
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuStatesTest::construction()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ HsMenuViewBuilder builder;
+ HsMenuModeWrapper menuMode;
+ HsMainWindowMock mainWindow;
+ QState *parent = new QState;
+
+ HsAllCollectionsState *allCollectionsState =
+ new HsAllCollectionsState(builder,
+ menuMode,
+ mainWindow,
+ parent);
+
+ QCOMPARE(allCollectionsState->mBackKeyAction,
+ allCollectionsState->mMenuView->view()->navigationAction());
+
+ QVERIFY(allCollectionsState->mModel !=
+ static_cast<HsMenuItemModel *>(0));
+ delete parent;
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+
+void MenuStatesTest::addModeEnteredExited()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ HsMenuViewBuilder builder;
+ HsMenuModeWrapper menuMode;
+ QState *parent = new QState;
+ HsMainWindowMock mainWindow;
+ HsAllCollectionsState *allCollectionsState =
+ new HsAllCollectionsState(
+ builder, menuMode, mainWindow, parent);
+
+ allCollectionsState->mMenuMode->setHsMenuMode(Hs::AddHsMenuMode);
+ allCollectionsState->addModeEntered();
+
+ QCOMPARE(allCollectionsState->mMenuMode->getHsMenuMode(),
+ Hs::AddHsMenuMode);
+ delete parent;
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+
+void MenuStatesTest::normalModeEnteredExited()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ HsMenuViewBuilder builder;
+ HsMenuModeWrapper menuMode;
+ HsMainWindowMock mainWindow;
+ QState *parent = new QState;
+ HsAllCollectionsState *allCollectionsState = new HsAllCollectionsState(
+ builder, menuMode, mainWindow, parent);
+
+ allCollectionsState->mMenuMode->setHsMenuMode(Hs::NormalHsMenuMode);
+ allCollectionsState->normalModeEntered();
+ QCOMPARE(allCollectionsState->mMenuMode->getHsMenuMode(),
+ Hs::NormalHsMenuMode);
+ allCollectionsState->normalModeExited();
+ QCOMPARE(allCollectionsState->mMenuMode->getHsMenuMode(),
+ Hs::NormalHsMenuMode);
+ delete parent;
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuStatesTest::createNewCollection()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ HsMenuViewBuilder builder;
+ HsMenuModeWrapper menuMode;
+ HsMainWindowMock mainWindow;
+ QStateMachine *machine = new QStateMachine(0);
+
+ HsAllCollectionsState *allCollectionsState =
+ new HsAllCollectionsState(builder, menuMode, mainWindow, machine);
+
+ machine->setInitialState(allCollectionsState);
+
+ AddToHomeScreenMockState *mockState = new AddToHomeScreenMockState(machine);
+
+ // create a transition to the new child state which will be triggered by
+ // an event with specified operation type
+ HsMenuEventTransition *newCollectionTransition = new HsMenuEventTransition(
+ HsMenuEvent::CreateCollection, allCollectionsState, mockState);
+
+ allCollectionsState->addTransition(newCollectionTransition);
+
+ allCollectionsState->scrollToBeginning();
+ allCollectionsState->stateEntered();
+
+ machine->start();
+ qApp->sendPostedEvents();
+
+ allCollectionsState->createNewCollection();
+ qApp->sendPostedEvents();
+ QVERIFY(mockState->enteredValue());
+ qApp->removePostedEvents(0);
+ machine->stop();
+ delete machine;
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuStatesTest::createArrangeCollection()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ HsMenuViewBuilder builder;
+ HsMenuModeWrapper menuMode;
+ HsMainWindowMock mainWindow;
+ QStateMachine *machine = new QStateMachine(0);
+ HsAllCollectionsState *allCollectionsState =
+ new HsAllCollectionsState(builder, menuMode, mainWindow, machine);
+
+ machine->setInitialState(allCollectionsState);
+
+ AddToHomeScreenMockState *mockState = new AddToHomeScreenMockState(machine);
+
+ // create a transition to the new child state which will be triggered by
+ // an event with specified operation type
+ HsMenuEventTransition *transition = new HsMenuEventTransition(
+ HsMenuEvent::ArrangeAllCollections, allCollectionsState, mockState);
+
+ allCollectionsState->addTransition(transition);
+
+ allCollectionsState->scrollToBeginning();
+ allCollectionsState->stateEntered();
+ machine->start();
+ qApp->sendPostedEvents();
+
+ allCollectionsState->createArrangeCollection();
+ qApp->sendPostedEvents();
+
+ QVERIFY(mockState->enteredValue());
+ qApp->removePostedEvents(0);
+ machine->stop();
+
+ delete machine;
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuStatesTest::listItemActivated()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ HsMenuViewBuilder builder;
+ HsMenuModeWrapper menuMode;
+ HsMainWindowMock mainWindow;
+ QStateMachine *machine = new QStateMachine(0);
+ QState *parent = new QState(machine);
+
+ HsAllCollectionsState *allCollectionsState =
+ new HsAllCollectionsState(builder, menuMode, mainWindow, parent);
+
+ allCollectionsState->scrollToBeginning();
+ allCollectionsState->stateEntered();
+
+ QVERIFY(allCollectionsState->mModel != NULL);
+ QModelIndex applicationModelIndex =
+ allCollectionsState->mModel->index(0, 0);
+
+ allCollectionsState->openCollection(applicationModelIndex);
+
+ allCollectionsState->stateExited();
+
+ qApp->processEvents();
+ delete machine;
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+
+void MenuStatesTest::listItemLongPressed()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ QScopedPointer<HbMainWindow> wind(new HbMainWindow);
+
+ HsMenuViewBuilder builder;
+ HsMenuModeWrapper menuMode;
+ HsMainWindowMock mainWindow;
+
+ QStateMachine *machine = new QStateMachine(0);
+ QState *parent = new QState(machine);
+
+ HsAllCollectionsState *allCollectionsState =
+ new HsAllCollectionsState(builder, menuMode, mainWindow, parent);
+
+ allCollectionsState->scrollToBeginning();
+ allCollectionsState->stateEntered();
+
+ HbAbstractViewItem *item = new HbListViewItem;
+
+ item->setModelIndex(allCollectionsState->mModel->index(0,0));
+
+ allCollectionsState->showContextMenu(item ,
+ QPointF(50,50));
+
+ uint flags = allCollectionsState->mModel->data(allCollectionsState->mModel->index(0, 0),
+ CaItemModel::FlagsRole).value<EntryFlags> ();
+
+ if (flags & RemovableEntryFlag) {
+ QCOMPARE(allCollectionsState->mContextMenu->actions().length(), 4);
+ } else {
+ QCOMPARE(allCollectionsState->mContextMenu->actions().length(), 2);
+ }
+
+
+ QVERIFY(allCollectionsState->mContextMenu->testAttribute(Qt::WA_DeleteOnClose));
+
+ qApp->processEvents();
+
+ allCollectionsState->stateExited();
+
+ qApp->processEvents();
+ delete machine;
+ delete item;
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void MenuStatesTest::contextMenuAction()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ QScopedPointer<QStateMachine> machine(new QStateMachine(0));
+
+ QScopedPointer<HbMainWindow> window(new HbMainWindow);
+
+ HsMenuViewBuilder builder;
+ HsMenuModeWrapper menuMode;
+ HsMainWindow mainWindow;
+
+ QScopedPointer<HsAllCollectionsState> allCollectionsState (new HsAllCollectionsState(
+ builder, menuMode, mainWindow, machine.data()));
+
+
+ // we will start from all apps view
+ machine->setInitialState(allCollectionsState.data());
+
+ // create a state which is to be reached when add-to-home-screen
+ // event is triggered
+ AddToHomeScreenMockState addToHomeScreenState(machine.data());
+
+ // create a transition to the new child state which will be triggered by
+ // an event with specified operation type
+ HsMenuEventTransition addToHomeScreenTransition(
+ HsMenuEvent::AddToHomeScreen, allCollectionsState.data(), &addToHomeScreenState);
+
+ // prepare the state graph
+ allCollectionsState->addTransition(&addToHomeScreenTransition);
+
+ // MockModel object is to provide CaEntry representing widget
+ // the object will be deleted on destruction of allAppsState
+ MockModel *allCollectionsMockModel = new MockModel;
+ allCollectionsState->mModel = allCollectionsMockModel;
+ allCollectionsState->mMenuView->setModel(allCollectionsMockModel);
+
+ machine->start();
+ qApp->sendPostedEvents();
+
+ HbAction *action = new HbAction("test_addtohomescreen");
+ action->setData(Hs::AddToHomeScreenContextAction);
+ allCollectionsState->mContextModelIndex = allCollectionsMockModel->fixedIndex();
+
+ allCollectionsState->contextMenuAction(action);
+
+ qApp->sendPostedEvents();
+
+ QVERIFY(addToHomeScreenState.enteredValue());
+
+ machine->stop();
+ qApp->removePostedEvents(0);
+
+ allCollectionsState->stateExited();
+
+ qApp->processEvents();
+
+ delete action;
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+
+void MenuStatesTest::addModeSlots()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ HsMenuViewBuilder builder;
+ QScopedPointer<QStateMachine> machine(new QStateMachine(0));
+ HsMenuModeWrapper menuMode;
+ HsMainWindowMock mainWindow;
+ menuMode.setHsMenuMode(Hs::AddHsMenuMode);
+ QScopedPointer<HsAllCollectionsState> allCollectionsState(
+ new HsAllCollectionsState(builder, menuMode, mainWindow, machine.data()));
+
+ {
+ // we will start from all apps view
+ machine->setInitialState(allCollectionsState.data());
+
+ // create a state which is to be reached when add-to-home-screen
+ // event is triggered
+ AddToHomeScreenMockState addToHomeScreenState(machine.data());
+
+ // create a transition to the new child state which will be triggered by
+ // an event with specified operation type
+ HsMenuEventTransition addToHomeScreenTransition(
+ HsMenuEvent::AddToHomeScreen, allCollectionsState.data(), &addToHomeScreenState);
+
+ // prepare the state graph
+ allCollectionsState->addTransition(&addToHomeScreenTransition);
+
+ // MockModel object is to provide CaEntry representing widget
+ // the object will be deleted on destruction of allAppsState
+ allCollectionsState->scrollToBeginning();
+ allCollectionsState->stateEntered();
+
+
+ machine->start();
+ qApp->sendPostedEvents();
+
+ allCollectionsState->addActivated(allCollectionsState->mModel->index(0,0));
+
+ qApp->sendPostedEvents();
+
+ QVERIFY(addToHomeScreenState.enteredValue());
+ machine->stop();
+ qApp->removePostedEvents(0);
+ }
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+#ifdef Q_OS_SYMBIAN
+void MenuStatesTest::openTaskSwitcher()
+{
+#ifdef Q_OS_SYMBIAN
+ User::ResetInactivityTime();//it should help for Viewserver11 panic
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARK;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+ {
+ HsMenuViewBuilder builder;
+ HsMenuModeWrapper menuMode;
+ HsMainWindowMock mainWindow;
+ QStateMachine *machine = new QStateMachine(0);
+ QState *parent = new QState(machine);
+ menuMode.setHsMenuMode(Hs::AddHsMenuMode);
+ HsAllCollectionsState *allCollectionsState =
+ new HsAllCollectionsState(builder, menuMode, mainWindow, parent);
+
+ QVERIFY(allCollectionsState->openTaskSwitcher());
+ delete machine;
+ }
+#ifdef Q_OS_SYMBIAN
+#ifdef UT_MEMORY_CHECK
+ __UHEAP_MARKEND;
+#endif//UT_MEMORY_CHECK
+#endif//Q_OS_SYMBIAN
+}
+#endif//Q_OS_SYMBIAN
+
+QTEST_MAIN(MenuStatesTest)
+