homescreenapp/stateplugins/hsapplibrarystateplugin/tsrc/t_allcollectionsstate/src/t_allcollectionsstate.cpp
changeset 96 458d8c8d9580
child 97 66b5fe3c07fd
--- /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)
+