homescreenapp/stateplugins/hshomescreenstateplugin/tsrc/t_hshomescreenstateplugin/src/t_hsidlestate.cpp
changeset 96 458d8c8d9580
child 97 66b5fe3c07fd
equal deleted inserted replaced
92:6727c5d0afc7 96:458d8c8d9580
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Tests for HsIdleState class.
       
    15 *
       
    16 */
       
    17 
       
    18 #include <QStateMachine>
       
    19 #include <QGestureEvent>
       
    20 
       
    21 #include <HbMainWindow>
       
    22 #include <hbview.h>
       
    23 #include <hbmenu.h>
       
    24 #include <HbMessageBox>
       
    25 #include <HbAction>
       
    26 #include <HbTapAndHoldGesture>
       
    27 #include <HbPanGesture>
       
    28 #include "t_hshomescreenstateplugin.h"
       
    29 #include "hsscene.h"
       
    30 #include "hsgui.h"
       
    31 #include "hspage.h"
       
    32 #include "hswidgethost.h"
       
    33 #include "hswidgethostvisual.h"
       
    34 #include "hstitleresolver.h"
       
    35 #include "hsconfiguration.h"
       
    36 #include "hsidlewidget.h"
       
    37 
       
    38 void HomeScreenStatePluginTest::testIdleStateConstruction()
       
    39 {
       
    40     QState *parent = new QState;
       
    41     HsIdleState *is = new HsIdleState(parent);
       
    42 
       
    43     QVERIFY(is->parent() == parent);
       
    44     QVERIFY(!is->mNavigationAction);
       
    45 
       
    46     QVERIFY(!is->findChildren<QState *>().isEmpty());
       
    47 
       
    48     delete parent;
       
    49 }
       
    50 
       
    51 void HomeScreenStatePluginTest::testIdleStateEntryAndExit()
       
    52 {
       
    53     createSceneAndWindow(1, 0);
       
    54 
       
    55     HsIdleState *is = new HsIdleState;
       
    56 
       
    57     QStateMachine *sm = new QStateMachine;
       
    58     sm->addState(is);
       
    59     sm->setInitialState(is);
       
    60 
       
    61     QFinalState *fs = new QFinalState;
       
    62     sm->addState(fs);
       
    63 
       
    64     is->addTransition(this, SIGNAL(finishStateMachine()), fs);
       
    65 
       
    66     sm->start();
       
    67    // QApplication::processEvents();
       
    68     QCoreApplication::sendPostedEvents();
       
    69 
       
    70     emit finishStateMachine();
       
    71 
       
    72     sm->stop();
       
    73     delete sm;
       
    74 
       
    75     deleteSceneAndWindow();
       
    76 }
       
    77 
       
    78 void HomeScreenStatePluginTest::testIdleStatePageLayerPos()
       
    79 {
       
    80     createSceneAndWindow(1, 0);
       
    81 
       
    82     HsIdleState *is = new HsIdleState;
       
    83     QVERIFY(qFuzzyCompare(is->pageLayerXPos(0), qreal(0)));
       
    84 
       
    85     delete is;
       
    86     deleteSceneAndWindow();
       
    87 }
       
    88 
       
    89 void HomeScreenStatePluginTest::testIdleStatePageChangeAnimation()
       
    90 {
       
    91     createSceneAndWindow(2, 0);
       
    92 
       
    93     HsIdleState *is = new HsIdleState;
       
    94 
       
    95     QStateMachine *sm = new QStateMachine;
       
    96     sm->addState(is);
       
    97     sm->setInitialState(is);
       
    98 
       
    99     QFinalState *fs = new QFinalState;
       
   100     sm->addState(fs);
       
   101 
       
   102     is->addTransition(this, SIGNAL(finishStateMachine()), fs);
       
   103 
       
   104     sm->start();
       
   105     QCoreApplication::sendPostedEvents();
       
   106     is->startPageChangeAnimation(1, 10);
       
   107 
       
   108     // Start two anims in a row
       
   109     is->startPageChangeAnimation(1, 10);
       
   110     is->startPageChangeAnimation(2, 10);
       
   111 
       
   112     emit finishStateMachine();
       
   113 
       
   114     sm->stop();
       
   115     delete sm;
       
   116 
       
   117     deleteSceneAndWindow();
       
   118 }
       
   119 
       
   120 void HomeScreenStatePluginTest::testIdleStatePageChangeZones()
       
   121 {
       
   122     createSceneAndWindow(1, 0);
       
   123     HsIdleState *is = new HsIdleState;
       
   124 
       
   125     QStateMachine *sm = new QStateMachine;
       
   126     sm->addState(is);
       
   127     sm->setInitialState(is);
       
   128     sm->start();
       
   129     QCoreApplication::sendPostedEvents();
       
   130     
       
   131     //Test left page change zone's left border
       
   132     is->mWidgetHotSpot = QPointF(0, 0);
       
   133     QVERIFY(is->isInLeftPageChangeZone());
       
   134     QVERIFY(!is->isInRightPageChangeZone());
       
   135     QVERIFY(is->isInPageChangeZone());
       
   136 
       
   137     //Test left page change zone's right border
       
   138     is->mWidgetHotSpot = QPointF(HSCONFIGURATION_GET(pageChangeZoneWidth) - 1, 0);
       
   139     QVERIFY(is->isInLeftPageChangeZone());
       
   140     QVERIFY(!is->isInRightPageChangeZone());
       
   141     QVERIFY(is->isInPageChangeZone());
       
   142 
       
   143     //Test not in either of the page change zones
       
   144     is->mWidgetHotSpot = QPointF(HSCONFIGURATION_GET(pageChangeZoneWidth), 0);
       
   145     QVERIFY(!is->isInLeftPageChangeZone());
       
   146     QVERIFY(!is->isInRightPageChangeZone());
       
   147     QVERIFY(!is->isInPageChangeZone());
       
   148 
       
   149     //Test right page change zone's right border
       
   150     HsScene *scene = HsScene::instance();
       
   151 
       
   152     sm->stop();
       
   153     delete sm;
       
   154     deleteSceneAndWindow();
       
   155 }
       
   156 
       
   157 void HomeScreenStatePluginTest::testIdleStateAddPage()
       
   158 {
       
   159     createSceneAndWindow(2, 0, 3); //pagecount 2, default page 0, max pages 3
       
   160 
       
   161     HsIdleState *is = new HsIdleState;
       
   162 
       
   163     QStateMachine *sm = new QStateMachine;
       
   164     sm->addState(is);
       
   165     sm->setInitialState(is);
       
   166     sm->start();
       
   167     QCoreApplication::sendPostedEvents();
       
   168     QString menuaction;
       
   169     bool found = false;
       
   170     HbView *idleView = HsGui::instance()->idleView();
       
   171     for(int i=0; i < idleView->menu()->actions().count(); i++){
       
   172         menuaction = idleView->menu()->actions()[i]->text();
       
   173         if(menuaction.left(27) == "txt_homescreen_opt_add_page"){
       
   174             found = true;
       
   175         }
       
   176     }
       
   177     if(!found){
       
   178         QFAIL("txt_homescreen_opt_add_page menu action not found!");
       
   179     }
       
   180 
       
   181     emit is->event_addPage();
       
   182 
       
   183     HsScene *scene = HsScene::instance();
       
   184     QCOMPARE(scene->pages().count(), 3);
       
   185     // Active page index 0, the new page is created to the right side of it.
       
   186     QCOMPARE(scene->activePageIndex(), 1);
       
   187 
       
   188     found = false;
       
   189     for(int i=0; i < idleView->menu()->actions().count(); i++){
       
   190         menuaction = idleView->menu()->actions()[i]->text();
       
   191         if(menuaction.left(27) == "txt_homescreen_opt_add_page"){
       
   192             found = true;
       
   193         }
       
   194     }
       
   195     if(found){
       
   196         QFAIL("txt_homescreen_opt_add_page menu action should not be found!");
       
   197     }
       
   198 
       
   199     sm->stop();
       
   200     delete sm;
       
   201 
       
   202     deleteSceneAndWindow();
       
   203 }
       
   204 
       
   205 void HomeScreenStatePluginTest::testIdleStateRemoveActivePage()
       
   206 {
       
   207     createSceneAndWindow(3, 2);
       
   208 
       
   209     HsIdleState *is = new HsIdleState;
       
   210     QStateMachine *sm = new QStateMachine;
       
   211     sm->addState(is);
       
   212     sm->setInitialState(is);
       
   213     sm->start();
       
   214     QCoreApplication::sendPostedEvents();
       
   215     HsScene *scene = HsScene::instance();
       
   216     int numOfPages = scene->pages().count();
       
   217 
       
   218     emit is->event_preRemovePage();
       
   219     QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
       
   220     QVERIFY(scene->pages().count() == numOfPages-1);
       
   221     QVERIFY(scene->activePageIndex() == 1);
       
   222     
       
   223     sm->stop();
       
   224     
       
   225     delete sm;
       
   226 
       
   227     deleteSceneAndWindow();
       
   228 }
       
   229 
       
   230 void HomeScreenStatePluginTest::testIdleStateRemovePage()
       
   231 {
       
   232     createSceneAndWindow(2, 0);
       
   233     HsScene::instance()->setActivePageIndex(1); // default page 0 cannot be removed
       
   234 
       
   235     HsIdleState *is = new HsIdleState;
       
   236 
       
   237     QStateMachine *sm = new QStateMachine;
       
   238     sm->addState(is);
       
   239     sm->setInitialState(is);
       
   240     sm->start();
       
   241    
       
   242     QCoreApplication::sendPostedEvents();
       
   243     
       
   244     QString menuaction;
       
   245     bool found = false;
       
   246     HbView *idleView = HsGui::instance()->idleView();
       
   247     for(int i=0; i < idleView->menu()->actions().count(); i++){
       
   248         menuaction = idleView->menu()->actions()[i]->text();
       
   249         if(menuaction.left(30) == "txt_homescreen_opt_remove_page"){
       
   250             found = true;
       
   251         }
       
   252     }
       
   253     if(!found){
       
   254         QFAIL("txt_homescreen_opt_remove_page menu action not found!");
       
   255     }
       
   256 
       
   257     emit is->event_preRemovePage();
       
   258     
       
   259     QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
       
   260 
       
   261     HsScene *scene = HsScene::instance();
       
   262     QCOMPARE(scene->pages().count(), 1); 
       
   263     QCOMPARE(scene->activePageIndex(), 0);
       
   264 
       
   265     found = false;
       
   266     idleView = HsGui::instance()->idleView();
       
   267     for(int i=0; i < idleView->menu()->actions().count(); i++){
       
   268         menuaction = idleView->menu()->actions()[i]->text();
       
   269         if(menuaction.left(30) == "txt_homescreen_opt_remove_page"){
       
   270             found = true;
       
   271         }
       
   272     }
       
   273     if(found){ // Se above comment.
       
   274         QFAIL("txt_homescreen_opt_remove_page menu action shound not be found!");
       
   275     }
       
   276 
       
   277     sm->stop();
       
   278     
       
   279     delete sm;
       
   280 
       
   281     deleteSceneAndWindow();
       
   282 }
       
   283 
       
   284 void HomeScreenStatePluginTest::testIdleStateToggleConnection()
       
   285 {
       
   286     createSceneAndWindow(1, 0);
       
   287 
       
   288     HsIdleState *is = new HsIdleState;
       
   289 
       
   290     QStateMachine *sm = new QStateMachine;
       
   291     sm->addState(is);
       
   292     sm->setInitialState(is);
       
   293     sm->start();
       
   294     QCoreApplication::sendPostedEvents();
       
   295     
       
   296     HsScene *scene = HsScene::instance();
       
   297 
       
   298     QVERIFY(scene->isOnline());
       
   299     emit is->event_toggleConnection();
       
   300     QVERIFY(!scene->isOnline());
       
   301     
       
   302     sm->stop();
       
   303     delete sm;
       
   304 
       
   305     deleteSceneAndWindow();
       
   306 }
       
   307 
       
   308 void HomeScreenStatePluginTest::testIdleStateTapPage()
       
   309 {
       
   310     createSceneAndWindow(HSCONFIGURATION_GET(maximumPageCount), 0);
       
   311 
       
   312     HsIdleState *is = new HsIdleState;
       
   313 
       
   314     QStateMachine *sm = new QStateMachine;
       
   315     sm->addState(is);
       
   316     sm->setInitialState(is);
       
   317     sm->start();
       
   318     QCoreApplication::sendPostedEvents();
       
   319     
       
   320     HbTapAndHoldGesture *gesture = new HbTapAndHoldGesture;
       
   321     gesture->setHotSpot(QPointF(10, 100));
       
   322     QList<QGesture *> gestures;
       
   323     gestures << gesture;
       
   324     QGestureEvent *gestureEvent = new QGestureEvent(gestures);
       
   325 
       
   326     QVERIFY(!is->mSceneMenu);
       
   327     is->onPageTapAndHoldFinished(gestureEvent);
       
   328     QVERIFY(is->mSceneMenu);
       
   329     QVERIFY(is->mSceneMenu->actions().count() == 2);  //Add page action should not exist
       
   330 
       
   331     delete gestureEvent;
       
   332     gestures.clear(); 
       
   333     sm->stop();
       
   334     delete sm;
       
   335 
       
   336     deleteSceneAndWindow();
       
   337 }
       
   338 
       
   339 void HomeScreenStatePluginTest::testIdleStatePanPage()
       
   340 {
       
   341     createSceneAndWindow(2, 0);
       
   342 
       
   343     HsIdleState *is = new HsIdleState;
       
   344 
       
   345     QStateMachine *sm = new QStateMachine;
       
   346     sm->addState(is);
       
   347     sm->setInitialState(is);
       
   348     sm->start();
       
   349     QCoreApplication::sendPostedEvents();
       
   350     
       
   351     HbPanGesture *gesture = new HbPanGesture;
       
   352     gesture->setHotSpot(QPointF(10, 100));
       
   353     QList<QGesture *> gestures;
       
   354     gestures << gesture;
       
   355     QGestureEvent *gestureEvent = new QGestureEvent(gestures);
       
   356 
       
   357     //Start Panning
       
   358     QSignalSpy moveSceneSpy(is, SIGNAL(event_moveScene()));
       
   359     is->onPagePanStarted(gestureEvent);
       
   360     QCOMPARE(moveSceneSpy.count(), 1);
       
   361 
       
   362     //Continue Panning
       
   363     gesture->setHotSpot(QPointF(50, 100));
       
   364     is->onPagePanUpdated(gestureEvent);
       
   365 
       
   366     //Finish Panning
       
   367     gesture->setHotSpot(QPointF(150, 100));
       
   368     QSignalSpy waitInputSpy(is, SIGNAL(event_waitInput()));
       
   369     is->onPagePanFinished(gestureEvent);
       
   370     QCOMPARE(waitInputSpy.count(), 1);
       
   371 
       
   372     delete gestureEvent;
       
   373     gestures.clear(); 
       
   374     sm->stop();
       
   375     delete sm;
       
   376 
       
   377     deleteSceneAndWindow();
       
   378 }
       
   379 
       
   380 void HomeScreenStatePluginTest::testIdleStateTapWidget()
       
   381 {
       
   382     createSceneAndWindow(2, 0);
       
   383 
       
   384     HsIdleState *is = new HsIdleState;
       
   385 
       
   386     QStateMachine *sm = new QStateMachine;
       
   387     sm->addState(is);
       
   388     sm->setInitialState(is);
       
   389     sm->start();
       
   390     QCoreApplication::sendPostedEvents();
       
   391     
       
   392     HsScene *scene = HsScene::instance();
       
   393     HsWidgetHost *widget = scene->activePage()->widgets().first();
       
   394     is->onWidgetTapStarted(QPointF(0,0), widget);
       
   395     // widget is not activated on tap, only on tap and hold
       
   396     QVERIFY(!scene->activeWidget());
       
   397 
       
   398     sm->stop();
       
   399     delete sm;
       
   400 
       
   401     deleteSceneAndWindow();
       
   402 }
       
   403 
       
   404 void HomeScreenStatePluginTest::testIdleStateDragWidget()
       
   405 {
       
   406     createSceneAndWindow(2, 0, 3);
       
   407     QStateMachine *sm = new QStateMachine;
       
   408     HsIdleState *is = new HsIdleState;
       
   409     sm->addState(is);
       
   410     sm->setInitialState(is);
       
   411     sm->start();
       
   412     QCoreApplication::sendPostedEvents();
       
   413     // try to move widget left from page 1, which isn't possible
       
   414     HbTapAndHoldGesture *gesture = new HbTapAndHoldGesture;
       
   415     gesture->setHotSpot(QPointF(10, 100));
       
   416     QList<QGesture *> gestures;
       
   417     gestures << gesture;
       
   418     QGestureEvent *gestureEvent = new QGestureEvent(gestures);
       
   419     QSignalSpy moveWidgetSpy(is, SIGNAL(event_moveWidget()));
       
   420     HsScene *scene = HsScene::instance();
       
   421     HsWidgetHost *widget = scene->activePage()->widgets().first();
       
   422     is->onWidgetTapAndHoldFinished(gestureEvent, widget);
       
   423     QCOMPARE(moveWidgetSpy.count(), 1);
       
   424     moveWidgetSpy.clear();
       
   425     
       
   426     is->onWidgetMoveUpdated(QPointF(10, 150), widget);
       
   427     is->onWidgetMoveUpdated(QPointF(150, 150), widget);
       
   428     QSignalSpy waitInputSpy(is, SIGNAL(event_MoveWidgetDelete()));
       
   429     is->onWidgetMoveFinished(QPointF(150, 150), widget);
       
   430     QCOMPARE(waitInputSpy.count(), 1);
       
   431     waitInputSpy.clear();
       
   432      
       
   433     // move widget to second page
       
   434     gesture->setHotSpot(QPointF(150, 150));
       
   435     is->onWidgetTapAndHoldFinished(gestureEvent, widget);
       
   436     QCOMPARE(moveWidgetSpy.count(), 1);
       
   437     moveWidgetSpy.clear();
       
   438     is->onWidgetMoveUpdated(QPointF(355, 150), widget);
       
   439     is->onWidgetMoveUpdated(QPointF(150, 150), widget);
       
   440     
       
   441     // move widget back to first page
       
   442     is->onWidgetMoveUpdated(QPointF(10, 150), widget);
       
   443     is->onWidgetMoveUpdated(QPointF(150, 150), widget);
       
   444     
       
   445     // move widget to second page
       
   446     is->onWidgetMoveUpdated(QPointF(350, 150), widget);
       
   447     is->onWidgetMoveUpdated(QPointF(150, 150), widget);
       
   448 
       
   449     // try to add page without releasing mouse button
       
   450     is->onWidgetMoveUpdated(QPointF(350, 150), widget);
       
   451     is->onWidgetMoveUpdated(QPointF(150, 150), widget);
       
   452     is->onWidgetMoveFinished(QPointF(150, 150), widget);
       
   453     QCOMPARE(waitInputSpy.count(), 1);
       
   454     waitInputSpy.clear();
       
   455 
       
   456     // add page 3
       
   457     gesture->setHotSpot(QPointF(150, 150));
       
   458     is->onWidgetTapAndHoldFinished(gestureEvent, widget);
       
   459     QCOMPARE(moveWidgetSpy.count(), 1);
       
   460     moveWidgetSpy.clear();
       
   461     is->onWidgetMoveUpdated(QPointF(350, 150), widget);
       
   462     is->onWidgetMoveUpdated(QPointF(150, 150), widget);
       
   463     is->onWidgetMoveFinished(QPointF(150, 150), widget);
       
   464     QCOMPARE(waitInputSpy.count(), 1);
       
   465     waitInputSpy.clear();
       
   466 
       
   467     // try to move widget over trash bin
       
   468     gesture->setHotSpot(QPointF(150, 150));
       
   469     is->onWidgetTapAndHoldFinished(gestureEvent, widget);
       
   470     QCOMPARE(moveWidgetSpy.count(), 1);
       
   471     moveWidgetSpy.clear();
       
   472     is->onWidgetMoveUpdated(QPointF(180, 600), widget);
       
   473     is->onWidgetMoveUpdated(QPointF(180, 605), widget);
       
   474     is->onWidgetMoveUpdated(QPointF(180, 610), widget);
       
   475     is->onWidgetMoveUpdated(QPointF(180, 615), widget);
       
   476     is->onWidgetMoveUpdated(QPointF(180, 620), widget);
       
   477     is->onWidgetMoveUpdated(QPointF(180, 625), widget);
       
   478     is->onWidgetMoveUpdated(QPointF(180, 630), widget);
       
   479     is->onWidgetMoveUpdated(QPointF(180, 635), widget);
       
   480     is->onWidgetMoveUpdated(QPointF(150, 150), widget);
       
   481     is->onWidgetMoveFinished(QPointF(150, 150), widget);
       
   482     QCOMPARE(waitInputSpy.count(), 1);
       
   483     waitInputSpy.clear();
       
   484     
       
   485     is->pageChangeAnimationFinished();
       
   486   
       
   487 
       
   488     sm->stop();
       
   489     delete sm;
       
   490 
       
   491     deleteSceneAndWindow();
       
   492 }
       
   493 
       
   494 void HomeScreenStatePluginTest::testIdleStateDeleteWidget()
       
   495 {
       
   496     createSceneAndWindow(2, 0, 3);
       
   497     QStateMachine *sm = new QStateMachine;
       
   498     HsIdleState *is = new HsIdleState;
       
   499     sm->addState(is);
       
   500     sm->setInitialState(is);
       
   501     sm->start();
       
   502     //QApplication::processEvents();
       
   503     QCoreApplication::sendPostedEvents();
       
   504     // try to move widget left from page 1, which isn't possible
       
   505     HbTapAndHoldGesture *gesture = new HbTapAndHoldGesture;
       
   506     gesture->setHotSpot(QPointF(10, 100));
       
   507     QList<QGesture *> gestures;
       
   508     gestures << gesture;
       
   509     QGestureEvent *gestureEvent = new QGestureEvent(gestures);
       
   510     QSignalSpy moveWidgetSpy(is, SIGNAL(event_moveWidget()));
       
   511     HsScene *scene = HsScene::instance();
       
   512     HsWidgetHost *widget = scene->activePage()->widgets().first();
       
   513     is->onWidgetTapAndHoldFinished(gestureEvent, widget);
       
   514     QCOMPARE(moveWidgetSpy.count(), 1);
       
   515     moveWidgetSpy.clear();
       
   516     
       
   517     // test cases where active widget is not set and stop widget drag (should not be possible in real life)
       
   518     QSignalSpy waitDeleteSpy(is, SIGNAL(event_MoveWidgetDelete()));
       
   519     QSignalSpy waitInputSpy(is, SIGNAL(event_waitInput()));
       
   520     scene->setActiveWidget(0);
       
   521     is->onWidgetMoveFinished(QPointF(150, 150), widget);
       
   522     QCOMPARE(waitInputSpy.count(), 2);
       
   523     QCOMPARE(waitDeleteSpy.count(), 1);
       
   524     
       
   525     is->pageChangeAnimationFinished();
       
   526   
       
   527 
       
   528     sm->stop();
       
   529     delete sm;
       
   530 
       
   531     deleteSceneAndWindow();
       
   532     
       
   533     
       
   534 }
       
   535 
       
   536 void HomeScreenStatePluginTest::testIdleStateMisc()
       
   537 {
       
   538     createSceneAndWindow(2, 0);
       
   539 
       
   540     HsIdleState *is = new HsIdleState;
       
   541 
       
   542     QStateMachine *sm = new QStateMachine;
       
   543     sm->addState(is);
       
   544     sm->setInitialState(is);
       
   545     sm->start();
       
   546     QCoreApplication::sendPostedEvents();
       
   547     
       
   548     is->onAddContentFromOptionsMenuActionTriggered();
       
   549     is->onAddContentFromContextMenuActionTriggered();
       
   550     is->action_idle_orientationChanged();
       
   551 
       
   552     HsScene *scene = HsScene::instance();
       
   553     scene->setActiveWidget(scene->activePage()->widgets().first());
       
   554     is->updateSnapAlgorithmParameters();
       
   555 
       
   556     sm->stop();
       
   557     delete sm;
       
   558 
       
   559     deleteSceneAndWindow();
       
   560 }
       
   561 
       
   562 void HomeScreenStatePluginTest::testIdleStateChromeBehaviour()
       
   563 {
       
   564     createSceneAndWindow(1, 0);
       
   565     QScopedPointer<HsIdleState> is(new HsIdleState());
       
   566 
       
   567     is->action_idle_setupView();
       
   568 
       
   569     QString newTitle("title");
       
   570 
       
   571     is->action_idle_setupTitle();
       
   572 
       
   573     is->mTitleResolver->metaObject()->invokeMethod(is->mTitleResolver,
       
   574                                                    "titleChanged",
       
   575                                                    Q_ARG(QString, newTitle));
       
   576     HbView *idleView = HsGui::instance()->idleView();
       
   577 
       
   578     QCOMPARE(idleView->title(), newTitle);
       
   579 
       
   580     QString t2("new title");
       
   581 
       
   582     is->action_idle_cleanupTitle();
       
   583 
       
   584     is->mTitleResolver->metaObject()->invokeMethod(is->mTitleResolver,
       
   585                                                    "titleChanged",
       
   586                                                    Q_ARG(QString, t2));
       
   587 
       
   588     QCOMPARE(idleView->title(), newTitle);
       
   589 
       
   590     is->action_idle_setupTitle();
       
   591 
       
   592     is->mTitleResolver->metaObject()->invokeMethod(is->mTitleResolver,
       
   593                                                    "titleChanged",
       
   594                                                    Q_ARG(QString, t2));
       
   595 
       
   596     QCOMPARE(idleView->title(), t2);
       
   597 
       
   598     deleteSceneAndWindow();
       
   599 }
       
   600 
       
   601 void HomeScreenStatePluginTest::testEventFilter()
       
   602 {
       
   603 	// Create with no active page
       
   604     createSceneAndWindow(1, -1);
       
   605 	HsIdleState *is = new HsIdleState();
       
   606 	QEvent e(QEvent::ApplicationActivate);
       
   607 	is->eventFilter(0, &e);
       
   608 
       
   609 	HsScene *s = HsScene::instance();
       
   610 	HsPage *page = new HsPage();
       
   611 	HsWidgetHost *wh = new HsWidgetHost(1);
       
   612 	page->addNewWidget(wh);
       
   613 	s->addPage(page);
       
   614 	s->setActivePage(page);
       
   615 
       
   616 	is->eventFilter(0, &e);
       
   617 
       
   618 	is->action_idle_setupView();
       
   619 
       
   620 	QEvent ee(QEvent::ApplicationDeactivate);
       
   621 	QSignalSpy spy(is, SIGNAL(event_waitInput()));
       
   622 	is->eventFilter(0, &ee);
       
   623 
       
   624 	QCOMPARE(1, spy.count());
       
   625 
       
   626 	deleteSceneAndWindow();
       
   627 	delete is;
       
   628 }
       
   629 
       
   630 void HomeScreenStatePluginTest::testIdleStateSnapToObject()
       
   631 {
       
   632     createSceneAndWindow(2, 0);
       
   633 
       
   634     HsIdleState *is = new HsIdleState;
       
   635 
       
   636     QStateMachine *sm = new QStateMachine;
       
   637     sm->addState(is);
       
   638     sm->setInitialState(is);
       
   639     sm->start();
       
   640     QCoreApplication::sendPostedEvents();
       
   641     
       
   642     //The page has one widget, remove the widget.
       
   643     HsScene *scene = HsScene::instance();
       
   644     HsWidgetHost *widget = scene->activePage()->widgets().first();
       
   645     scene->activePage()->removeWidget(widget);
       
   646 
       
   647     sm->stop();
       
   648     delete sm;
       
   649 
       
   650     deleteSceneAndWindow();
       
   651 }
       
   652 
       
   653 void HomeScreenStatePluginTest::testIdleStateSnapToObjectSnapEffectDisabled()
       
   654 {
       
   655     createSceneAndWindow(2, 0);
       
   656 
       
   657     HSCONFIGURATION_SET(setSnapEffectsEnabled, false);
       
   658     HsIdleState *is = new HsIdleState;
       
   659 
       
   660     QStateMachine *sm = new QStateMachine;
       
   661     sm->addState(is);
       
   662     sm->setInitialState(is);
       
   663     sm->start();
       
   664 	QCoreApplication::sendPostedEvents();
       
   665 
       
   666     //The page has one widget, remove the widget
       
   667     HsScene *scene = HsScene::instance();
       
   668     HsWidgetHost *widget = scene->activePage()->widgets().first();
       
   669     scene->activePage()->removeWidget(widget);
       
   670 
       
   671     sm->stop();
       
   672     delete sm;
       
   673 
       
   674     deleteSceneAndWindow();
       
   675 }
       
   676 
       
   677 void HomeScreenStatePluginTest::testIdleStateSnapToObjectSnappingDisabled()
       
   678 {
       
   679     createSceneAndWindow(2, 0);
       
   680 
       
   681     HSCONFIGURATION_SET(setSnapEnabled, false);
       
   682     HsIdleState *is = new HsIdleState;
       
   683 
       
   684     QStateMachine *sm = new QStateMachine;
       
   685     sm->addState(is);
       
   686     sm->setInitialState(is);
       
   687     sm->start();
       
   688 	QCoreApplication::sendPostedEvents();
       
   689 
       
   690     //The page has one widget, remove the widget
       
   691     HsScene *scene = HsScene::instance();
       
   692     HsWidgetHost *widget = scene->activePage()->widgets().first();
       
   693     scene->activePage()->removeWidget(widget);
       
   694 
       
   695     sm->stop();
       
   696     delete sm;
       
   697 
       
   698     deleteSceneAndWindow();
       
   699 }
       
   700 
       
   701 void HomeScreenStatePluginTest::testOnVerticalSnapLineTimerTimeout()
       
   702 {
       
   703     createSceneAndWindow(1, 0);
       
   704 
       
   705     HsIdleState *is = new HsIdleState;
       
   706 
       
   707     QStateMachine *sm = new QStateMachine;
       
   708     sm->addState(is);
       
   709     sm->setInitialState(is);
       
   710     sm->start();
       
   711     QCoreApplication::sendPostedEvents();
       
   712     is->onVerticalSnapLineTimerTimeout();
       
   713     sm->stop();
       
   714     delete sm;
       
   715 
       
   716     deleteSceneAndWindow();
       
   717 }
       
   718 
       
   719 void HomeScreenStatePluginTest::testOnHorizontalSnapLineTimerTimeout()
       
   720 {
       
   721     createSceneAndWindow(1, 0);
       
   722 
       
   723     HsIdleState *is = new HsIdleState;
       
   724 
       
   725     QStateMachine *sm = new QStateMachine;
       
   726     sm->addState(is);
       
   727     sm->setInitialState(is);
       
   728     sm->start();
       
   729     QCoreApplication::sendPostedEvents();
       
   730     is->onHorizontalSnapLineTimerTimeout();
       
   731     sm->stop();
       
   732     delete sm;
       
   733 
       
   734     deleteSceneAndWindow();
       
   735 }
       
   736 
       
   737 void HomeScreenStatePluginTest::testShowHorizontalLine()
       
   738 {
       
   739     createSceneAndWindow(1, 0);
       
   740 
       
   741     HsIdleState *is = new HsIdleState;
       
   742 
       
   743     QStateMachine *sm = new QStateMachine;
       
   744     sm->addState(is);
       
   745     sm->setInitialState(is);
       
   746     sm->start();
       
   747     QCoreApplication::sendPostedEvents();
       
   748     is->showHorizontalLine();
       
   749     sm->stop();
       
   750     delete sm;
       
   751 
       
   752     deleteSceneAndWindow();
       
   753 }
       
   754 
       
   755 void HomeScreenStatePluginTest::testEditorAndVKB()
       
   756 {
       
   757     createSceneAndWindow(1, 0);
       
   758 
       
   759     HsIdleState *is = new HsIdleState;
       
   760     
       
   761     is->closeVirtualKeyboard();
       
   762     
       
   763     HsScene *scene = HsScene::instance();
       
   764     HsWidgetHost *widget = scene->activePage()->widgets().first();
       
   765     
       
   766     // scene is not set for the widgets yet.
       
   767     QVERIFY(!is->isEditor(QPointF(0,0), widget));
       
   768     
       
   769     delete is;
       
   770     
       
   771     deleteSceneAndWindow();
       
   772 }