homescreenapp/hsdomainmodel/tsrc/t_hsdomainmodel/src/t_hspage.cpp
author hgs
Mon, 20 Sep 2010 10:19:07 +0300
changeset 90 3ac3aaebaee5
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
90
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <HbMainWindow>
hgs
parents:
diff changeset
    19
#include <HbInstance>
hgs
parents:
diff changeset
    20
#include <HbView>
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "t_hsdomainmodel.h"
hgs
parents:
diff changeset
    23
#include "hspage.h"
hgs
parents:
diff changeset
    24
#include "hsscene.h"
hgs
parents:
diff changeset
    25
#include "hsdomainmodeldatastructures.h"
hgs
parents:
diff changeset
    26
#include "hswidgethost.h"
hgs
parents:
diff changeset
    27
#include "hswidgetpositioningonwidgetadd.h"
hgs
parents:
diff changeset
    28
#include "hswidgetcomponent.h"
hgs
parents:
diff changeset
    29
#include "hsconfiguration.h"
hgs
parents:
diff changeset
    30
#include "hsgui.h"
hgs
parents:
diff changeset
    31
#include "hspagevisual.h"
hgs
parents:
diff changeset
    32
#include "hswidgetpositioningonorientationchange.h"
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
void TestHsDomainModel::testHsPage()
hgs
parents:
diff changeset
    35
{
hgs
parents:
diff changeset
    36
    HsPageData pageData;
hgs
parents:
diff changeset
    37
    HsPage *page=HsPage::createInstance(pageData);
hgs
parents:
diff changeset
    38
    QVERIFY(page->databaseId());
hgs
parents:
diff changeset
    39
    QVERIFY(page->load());
hgs
parents:
diff changeset
    40
    QCOMPARE(page->widgets().count(),0);
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
    // we haven't added this to scene.
hgs
parents:
diff changeset
    43
    QCOMPARE(page->pageIndex(),-1);
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
    QVERIFY(page->isRemovable());
hgs
parents:
diff changeset
    46
    page->setRemovable(false);
hgs
parents:
diff changeset
    47
    QVERIFY(!page->isRemovable());
hgs
parents:
diff changeset
    48
    page->setRemovable(true);
hgs
parents:
diff changeset
    49
    QVERIFY(page->isRemovable());
hgs
parents:
diff changeset
    50
    delete page;
hgs
parents:
diff changeset
    51
}
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
void TestHsDomainModel::testHsPageLoad()
hgs
parents:
diff changeset
    55
{
hgs
parents:
diff changeset
    56
    HsPage *page = new HsPage();
hgs
parents:
diff changeset
    57
    QVERIFY(!page->load());
hgs
parents:
diff changeset
    58
    delete page;
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
    HsPageData pageData;
hgs
parents:
diff changeset
    61
    pageData.indexPosition = 0;
hgs
parents:
diff changeset
    62
    page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
    63
    QVERIFY(page);
hgs
parents:
diff changeset
    64
    int pageId = page->databaseId();
hgs
parents:
diff changeset
    65
    delete page;
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
    page = new HsPage();
hgs
parents:
diff changeset
    68
    page->setDatabaseId(pageId);
hgs
parents:
diff changeset
    69
    QVERIFY(page->load());
hgs
parents:
diff changeset
    70
    QVERIFY(page->wallpaper());
hgs
parents:
diff changeset
    71
    QVERIFY(page->deleteFromDatabase());
hgs
parents:
diff changeset
    72
    delete page;
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
    page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
    75
    QVERIFY(page);
hgs
parents:
diff changeset
    76
    pageId = page->databaseId();
hgs
parents:
diff changeset
    77
    delete page;
hgs
parents:
diff changeset
    78
    page = new HsPage();
hgs
parents:
diff changeset
    79
    page->setDatabaseId(pageId);
hgs
parents:
diff changeset
    80
    QVERIFY(page->load());
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
    QVERIFY(page->deleteFromDatabase());
hgs
parents:
diff changeset
    83
    delete page;
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
}
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
void TestHsDomainModel::testHsPageContentRects()
hgs
parents:
diff changeset
    88
{
hgs
parents:
diff changeset
    89
    HsPageData pageData;
hgs
parents:
diff changeset
    90
    pageData.indexPosition = 0;
hgs
parents:
diff changeset
    91
    HsPage *page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
    92
    QVERIFY(page->databaseId());
hgs
parents:
diff changeset
    93
    QVERIFY(page->load());
hgs
parents:
diff changeset
    94
    QCOMPARE(page->widgets().count(),0);
hgs
parents:
diff changeset
    95
    HsScene::instance()->addPage(page);
hgs
parents:
diff changeset
    96
    HsGui *stored = HsGui::takeInstance();
hgs
parents:
diff changeset
    97
    
hgs
parents:
diff changeset
    98
    HbInstance::instance();
hgs
parents:
diff changeset
    99
    HbMainWindow mainWindow;        
hgs
parents:
diff changeset
   100
    HbView *view = mainWindow.addView(page->visual());
hgs
parents:
diff changeset
   101
    mainWindow.views().first()->setContentFullScreen();
hgs
parents:
diff changeset
   102
    mainWindow.show();
hgs
parents:
diff changeset
   103
    HsGui *gui = HsGui::instance();
hgs
parents:
diff changeset
   104
    // crashes symbian test
hgs
parents:
diff changeset
   105
#ifndef Q_OS_SYMBIAN    
hgs
parents:
diff changeset
   106
    QEventLoop waitUntilMainWindowCreated;
hgs
parents:
diff changeset
   107
    QTimer eventLoopTimer;
hgs
parents:
diff changeset
   108
    eventLoopTimer.setInterval(15000);
hgs
parents:
diff changeset
   109
    eventLoopTimer.setSingleShot(true);    
hgs
parents:
diff changeset
   110
    connect(&mainWindow, SIGNAL(viewReady()),
hgs
parents:
diff changeset
   111
            &waitUntilMainWindowCreated, SLOT(quit()));
hgs
parents:
diff changeset
   112
    connect(&eventLoopTimer, SIGNAL(timeout()),
hgs
parents:
diff changeset
   113
            &waitUntilMainWindowCreated, SLOT(quit()));
hgs
parents:
diff changeset
   114
    eventLoopTimer.start();
hgs
parents:
diff changeset
   115
    waitUntilMainWindowCreated.exec();
hgs
parents:
diff changeset
   116
    eventLoopTimer.stop();
hgs
parents:
diff changeset
   117
#endif        
hgs
parents:
diff changeset
   118
    QRectF layoutRect = mainWindow.layoutRect();
hgs
parents:
diff changeset
   119
    qreal pageMargin = HSCONFIGURATION_GET(pageMargin);
hgs
parents:
diff changeset
   120
    QRectF expectecRect;
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
    //Test global rect
hgs
parents:
diff changeset
   123
    expectecRect = layoutRect;
hgs
parents:
diff changeset
   124
    expectecRect.setTop(64);
hgs
parents:
diff changeset
   125
    expectecRect.adjust(pageMargin, pageMargin, -pageMargin, -pageMargin);
hgs
parents:
diff changeset
   126
    QRectF contentGeometry = page->contentGeometry();
hgs
parents:
diff changeset
   127
    QCOMPARE(contentGeometry, expectecRect);
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
    //Test global rect at different orientation - improves branch coverage
hgs
parents:
diff changeset
   130
    expectecRect = layoutRect;
hgs
parents:
diff changeset
   131
    expectecRect.setWidth(layoutRect.height());
hgs
parents:
diff changeset
   132
    expectecRect.setHeight(layoutRect.width());
hgs
parents:
diff changeset
   133
    expectecRect.setTop(64);
hgs
parents:
diff changeset
   134
    expectecRect.adjust(pageMargin, pageMargin, -pageMargin, -pageMargin);
hgs
parents:
diff changeset
   135
    Qt::Orientation orientation =
hgs
parents:
diff changeset
   136
        //HsScene::instance()->mainWindow()->orientation() ==
hgs
parents:
diff changeset
   137
        gui->orientation() ==
hgs
parents:
diff changeset
   138
            Qt::Vertical ? Qt::Horizontal : Qt::Vertical;
hgs
parents:
diff changeset
   139
    contentGeometry = page->contentGeometry(orientation);
hgs
parents:
diff changeset
   140
    QCOMPARE(contentGeometry, expectecRect);
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
    //Test local rect
hgs
parents:
diff changeset
   143
    expectecRect = layoutRect;
hgs
parents:
diff changeset
   144
    expectecRect.setTop(64);
hgs
parents:
diff changeset
   145
    expectecRect.moveTopLeft(QPointF(0,0));
hgs
parents:
diff changeset
   146
    expectecRect.adjust(pageMargin, pageMargin, -pageMargin, -pageMargin);
hgs
parents:
diff changeset
   147
    QRectF contentRect = page->contentRect();
hgs
parents:
diff changeset
   148
    QCOMPARE(contentRect, expectecRect);
hgs
parents:
diff changeset
   149
    
hgs
parents:
diff changeset
   150
    mainWindow.hide();
hgs
parents:
diff changeset
   151
    mainWindow.removeView(view);
hgs
parents:
diff changeset
   152
    delete HsGui::takeInstance();
hgs
parents:
diff changeset
   153
    if(stored) {
hgs
parents:
diff changeset
   154
        HsGui::setInstance(stored);
hgs
parents:
diff changeset
   155
    }
hgs
parents:
diff changeset
   156
    HsScene::instance()->removePage(page);
hgs
parents:
diff changeset
   157
    delete page;
hgs
parents:
diff changeset
   158
}
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
void TestHsDomainModel::testHsPageAddRemoveWidget()
hgs
parents:
diff changeset
   161
{
hgs
parents:
diff changeset
   162
    HsWidgetPositioningOnWidgetAdd::setInstance(
hgs
parents:
diff changeset
   163
        new HsAnchorPointInBottomRight);
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
    HsPageData pageData;
hgs
parents:
diff changeset
   166
    pageData.indexPosition = 0;
hgs
parents:
diff changeset
   167
    HsPage *page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   168
    QVERIFY(page);
hgs
parents:
diff changeset
   169
    int pageId = page->databaseId();
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
    HsWidgetData widgetData;
hgs
parents:
diff changeset
   172
    widgetData.pageId = pageId;
hgs
parents:
diff changeset
   173
    widgetData.uri = "uri1";
hgs
parents:
diff changeset
   174
    HsWidgetHost *widget = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   175
    QVERIFY(widget);
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    widget->setPage(page);
hgs
parents:
diff changeset
   178
    QVERIFY(!page->addNewWidget(0));
hgs
parents:
diff changeset
   179
    QVERIFY(page->addNewWidget(widget));
hgs
parents:
diff changeset
   180
    QVERIFY(page->addNewWidget(widget));
hgs
parents:
diff changeset
   181
    QCOMPARE(page->newWidgets().count(), 1);
hgs
parents:
diff changeset
   182
    QCOMPARE(page->widgets().count(), 0);
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
    page->layoutNewWidgets();
hgs
parents:
diff changeset
   185
    QCOMPARE(page->newWidgets().count(), 0);
hgs
parents:
diff changeset
   186
    QCOMPARE(page->widgets().count(), 1);
hgs
parents:
diff changeset
   187
    QCOMPARE(page->newWidgets().count(), 0);
hgs
parents:
diff changeset
   188
    QCOMPARE(page->widgets().count(), 1);  
hgs
parents:
diff changeset
   189
    page->resetNewWidgets();  
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
    HsWidgetHost *widget2 = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   192
    QVERIFY(widget2);
hgs
parents:
diff changeset
   193
    widget2->setPage(page);
hgs
parents:
diff changeset
   194
    QVERIFY(page->addNewWidget(widget2));
hgs
parents:
diff changeset
   195
    QCOMPARE(page->newWidgets().count(),1);
hgs
parents:
diff changeset
   196
    QCOMPARE(page->widgets().count(),1);
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
    // test layouting for landscape orientation
hgs
parents:
diff changeset
   199
    HsGui::instance()->setOrientation(Qt::Horizontal);
hgs
parents:
diff changeset
   200
    // active widget for branch testing
hgs
parents:
diff changeset
   201
    HsScene::instance()->setActiveWidget(widget);
hgs
parents:
diff changeset
   202
    page->layoutNewWidgets();
hgs
parents:
diff changeset
   203
    // set active widget to original
hgs
parents:
diff changeset
   204
    HsScene::instance()->setActiveWidget(0);
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
    QCOMPARE(page->newWidgets().count(), 0);
hgs
parents:
diff changeset
   207
    QCOMPARE(page->widgets().count(), 2);
hgs
parents:
diff changeset
   208
    QCOMPARE(page->newWidgets().count(), 0);
hgs
parents:
diff changeset
   209
    HsGui::instance()->setOrientation(Qt::Vertical);
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
    page->layoutNewWidgets();
hgs
parents:
diff changeset
   212
    QCOMPARE(page->newWidgets().count(), 0);
hgs
parents:
diff changeset
   213
    QCOMPARE(page->widgets().count(), 2);
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
    QVERIFY(!page->removeWidget(0));
hgs
parents:
diff changeset
   216
    QVERIFY(page->removeWidget(widget2));
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
    delete page;
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
    page = new HsPage();
hgs
parents:
diff changeset
   221
    page->setDatabaseId(pageId);
hgs
parents:
diff changeset
   222
    QVERIFY(page->load());
hgs
parents:
diff changeset
   223
    QVERIFY(page->deleteFromDatabase());
hgs
parents:
diff changeset
   224
    delete page;
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
    HsWidgetPositioningOnWidgetAdd::setInstance(0);
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
}
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
void TestHsDomainModel::testHsPageAddExistingWidget()
hgs
parents:
diff changeset
   232
{
hgs
parents:
diff changeset
   233
    HsWidgetPositioningOnWidgetAdd::setInstance(
hgs
parents:
diff changeset
   234
        new HsAnchorPointInBottomRight);
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
    HsPageData pageData;
hgs
parents:
diff changeset
   237
hgs
parents:
diff changeset
   238
    pageData.indexPosition = 0;
hgs
parents:
diff changeset
   239
    HsPage *page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   240
    QVERIFY(page);
hgs
parents:
diff changeset
   241
    int pageId = page->databaseId();
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
    pageData.indexPosition = 1;
hgs
parents:
diff changeset
   244
    HsPage *page2 = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   245
    QVERIFY(page2);
hgs
parents:
diff changeset
   246
    int pageId2 = page2->databaseId();
hgs
parents:
diff changeset
   247
hgs
parents:
diff changeset
   248
    HsWidgetData widgetData;
hgs
parents:
diff changeset
   249
    widgetData.pageId = pageId;
hgs
parents:
diff changeset
   250
    widgetData.uri = "mockwidgetplugin";
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
    HsWidgetHost *widget = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   253
    QVERIFY(widget);
hgs
parents:
diff changeset
   254
    widget->setPage(page);
hgs
parents:
diff changeset
   255
    QVERIFY(page->addNewWidget(widget));
hgs
parents:
diff changeset
   256
hgs
parents:
diff changeset
   257
    HsWidgetHost *widget2 = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   258
    QVERIFY(widget2);
hgs
parents:
diff changeset
   259
    widget2->setPage(page);
hgs
parents:
diff changeset
   260
    QVERIFY(page->addNewWidget(widget2));
hgs
parents:
diff changeset
   261
hgs
parents:
diff changeset
   262
    // coverages up with active widget
hgs
parents:
diff changeset
   263
    HsScene::instance()->setActiveWidget(widget);
hgs
parents:
diff changeset
   264
    page->layoutNewWidgets();
hgs
parents:
diff changeset
   265
    QCOMPARE(page->widgets().count(), 2);
hgs
parents:
diff changeset
   266
    HsScene::instance()->setActiveWidget(0);
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
    QVERIFY(page->removeWidget(widget2));
hgs
parents:
diff changeset
   269
    QVERIFY(page2->addExistingWidget(widget2));
hgs
parents:
diff changeset
   270
    QVERIFY(page2->addExistingWidget(widget2));
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
    QVERIFY(!page->addExistingWidget(NULL));
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
    delete page;
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
    page = new HsPage();
hgs
parents:
diff changeset
   277
    page->setDatabaseId(pageId);
hgs
parents:
diff changeset
   278
    QVERIFY(page->load());
hgs
parents:
diff changeset
   279
    // Widget doesn't have presentation yet.    
hgs
parents:
diff changeset
   280
    QCOMPARE(page->widgets().count(), 0); 
hgs
parents:
diff changeset
   281
    QCOMPARE(page->mNewWidgets.count(), 1);
hgs
parents:
diff changeset
   282
    page2 = new HsPage();
hgs
parents:
diff changeset
   283
    page2->setDatabaseId(pageId2);
hgs
parents:
diff changeset
   284
    QVERIFY(page2->load());
hgs
parents:
diff changeset
   285
    // Widget doesn't have presentation yet.
hgs
parents:
diff changeset
   286
    QCOMPARE(page2->widgets().count(), 0);
hgs
parents:
diff changeset
   287
    QCOMPARE(page2->mNewWidgets.count(), 1);
hgs
parents:
diff changeset
   288
    delete page;
hgs
parents:
diff changeset
   289
    delete page2;
hgs
parents:
diff changeset
   290
hgs
parents:
diff changeset
   291
    HsWidgetPositioningOnWidgetAdd::setInstance(0);
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
}
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
hgs
parents:
diff changeset
   296
void TestHsDomainModel::testHsPageWidgetFinished()
hgs
parents:
diff changeset
   297
{
hgs
parents:
diff changeset
   298
    HsWidgetPositioningOnWidgetAdd::setInstance(
hgs
parents:
diff changeset
   299
        new HsAnchorPointInBottomRight);
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
    HsPageData pageData;
hgs
parents:
diff changeset
   302
    HsPage *page=HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   303
    QVERIFY(page);
hgs
parents:
diff changeset
   304
    int pageId = page->databaseId();
hgs
parents:
diff changeset
   305
    HsScene::instance()->mActivePage = page;
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
    HsWidgetData widgetData;
hgs
parents:
diff changeset
   308
    widgetData.pageId = pageId;
hgs
parents:
diff changeset
   309
    widgetData.uri = "mockwidgetplugin";
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
    HsWidgetHost *widget = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   312
    QVERIFY(widget);
hgs
parents:
diff changeset
   313
    widget->setPage(page);
hgs
parents:
diff changeset
   314
    widget->startWidget();
hgs
parents:
diff changeset
   315
    QVERIFY(widget->mStateMachine->isRunning());
hgs
parents:
diff changeset
   316
    QVERIFY(page->addNewWidget(widget));
hgs
parents:
diff changeset
   317
    page->layoutNewWidgets();
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
    widget->onFinished();
hgs
parents:
diff changeset
   320
    qApp->processEvents();
hgs
parents:
diff changeset
   321
hgs
parents:
diff changeset
   322
    QCOMPARE(page->newWidgets().count(),0);
hgs
parents:
diff changeset
   323
    QCOMPARE(page->widgets().count(),0);
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
    // new widget
hgs
parents:
diff changeset
   326
    widget = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   327
    QVERIFY(widget);
hgs
parents:
diff changeset
   328
    widget->setPage(page);
hgs
parents:
diff changeset
   329
    widget->startWidget();
hgs
parents:
diff changeset
   330
    QVERIFY(widget->mStateMachine->isRunning());
hgs
parents:
diff changeset
   331
    QVERIFY(page->addNewWidget(widget));
hgs
parents:
diff changeset
   332
    QCOMPARE(page->newWidgets().count(),1);
hgs
parents:
diff changeset
   333
    QCOMPARE(page->widgets().count(),0);
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
    widget->onFinished();
hgs
parents:
diff changeset
   336
    qApp->processEvents();
hgs
parents:
diff changeset
   337
hgs
parents:
diff changeset
   338
    QCOMPARE(page->newWidgets().count(),0);
hgs
parents:
diff changeset
   339
    QCOMPARE(page->widgets().count(),0);
hgs
parents:
diff changeset
   340
hgs
parents:
diff changeset
   341
    delete page;
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
    HsWidgetPositioningOnWidgetAdd::setInstance(0);
hgs
parents:
diff changeset
   344
}
hgs
parents:
diff changeset
   345
hgs
parents:
diff changeset
   346
void TestHsDomainModel::testHsPageIsActivePage()
hgs
parents:
diff changeset
   347
{
hgs
parents:
diff changeset
   348
    HsPageData pageData;
hgs
parents:
diff changeset
   349
    pageData.indexPosition = 0;
hgs
parents:
diff changeset
   350
    HsPage *page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   351
    QVERIFY(page);
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
    QVERIFY(!page->isActivePage());
hgs
parents:
diff changeset
   354
    QVERIFY(page->isDefaultPage());
hgs
parents:
diff changeset
   355
    delete page;
hgs
parents:
diff changeset
   356
}
hgs
parents:
diff changeset
   357
hgs
parents:
diff changeset
   358
void TestHsDomainModel::testHsPageWidgetSignals()
hgs
parents:
diff changeset
   359
{
hgs
parents:
diff changeset
   360
    HsPageData pageData;
hgs
parents:
diff changeset
   361
    HsPage *page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   362
    QVERIFY(page);
hgs
parents:
diff changeset
   363
hgs
parents:
diff changeset
   364
    HsWidgetData widgetData;
hgs
parents:
diff changeset
   365
    widgetData.pageId = page->databaseId();
hgs
parents:
diff changeset
   366
    widgetData.uri = "mockwidgetplugin";
hgs
parents:
diff changeset
   367
    HsWidgetHost *widget = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   368
    QVERIFY(widget);
hgs
parents:
diff changeset
   369
hgs
parents:
diff changeset
   370
    page->addExistingWidget(widget);
hgs
parents:
diff changeset
   371
    widget->setPage(page);
hgs
parents:
diff changeset
   372
    widget->startWidget();
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
    QCOMPARE(page->mWidgets.count(), 1);
hgs
parents:
diff changeset
   375
    QCOMPARE(page->mUnavailableWidgets.count(), 0);
hgs
parents:
diff changeset
   376
hgs
parents:
diff changeset
   377
    emit widget->mComponent->unavailable();
hgs
parents:
diff changeset
   378
hgs
parents:
diff changeset
   379
    QCOMPARE(page->mWidgets.count(), 0);
hgs
parents:
diff changeset
   380
    QCOMPARE(page->mUnavailableWidgets.count(), 1);
hgs
parents:
diff changeset
   381
hgs
parents:
diff changeset
   382
    emit widget->mComponent->available();
hgs
parents:
diff changeset
   383
hgs
parents:
diff changeset
   384
    QCOMPARE(page->mWidgets.count(), 1);
hgs
parents:
diff changeset
   385
    QCOMPARE(page->mUnavailableWidgets.count(), 0);
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
    // test unavailability when new widgets exists
hgs
parents:
diff changeset
   388
    HsWidgetHost *widget2 = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   389
    page->addNewWidget(widget2);
hgs
parents:
diff changeset
   390
    widget2->setPage(page);
hgs
parents:
diff changeset
   391
    widget2->startWidget();
hgs
parents:
diff changeset
   392
    QCOMPARE(page->mWidgets.count(), 1);
hgs
parents:
diff changeset
   393
    QCOMPARE(page->mNewWidgets.count(), 1);
hgs
parents:
diff changeset
   394
    QCOMPARE(page->mUnavailableWidgets.count(), 0);
hgs
parents:
diff changeset
   395
    emit widget2->mComponent->unavailable();
hgs
parents:
diff changeset
   396
    QCOMPARE(page->mWidgets.count(), 0);
hgs
parents:
diff changeset
   397
    QCOMPARE(page->mNewWidgets.count(), 0);
hgs
parents:
diff changeset
   398
    QCOMPARE(page->mUnavailableWidgets.count(), 2);
hgs
parents:
diff changeset
   399
    page->removeWidget(widget);
hgs
parents:
diff changeset
   400
    page->removeWidget(widget2);
hgs
parents:
diff changeset
   401
hgs
parents:
diff changeset
   402
    delete page;
hgs
parents:
diff changeset
   403
}
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
void TestHsDomainModel::testHsPageOrientationChange()
hgs
parents:
diff changeset
   406
{
hgs
parents:
diff changeset
   407
   HsWidgetPositioningOnWidgetAdd::setInstance(
hgs
parents:
diff changeset
   408
        new HsAnchorPointInBottomRight);
hgs
parents:
diff changeset
   409
hgs
parents:
diff changeset
   410
    HsWidgetPositioningOnOrientationChange::setInstance(
hgs
parents:
diff changeset
   411
        new HsAdvancedWidgetPositioningOnOrientationChange);
hgs
parents:
diff changeset
   412
hgs
parents:
diff changeset
   413
    HsPageData pageData;
hgs
parents:
diff changeset
   414
    HsPage *page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   415
    QVERIFY(page);
hgs
parents:
diff changeset
   416
    
hgs
parents:
diff changeset
   417
    // test when no widgets on page
hgs
parents:
diff changeset
   418
    page->onOrientationChanged(Qt::Horizontal);
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
    // add existing widget
hgs
parents:
diff changeset
   421
    HsWidgetData widgetData;
hgs
parents:
diff changeset
   422
    widgetData.pageId = page->databaseId();
hgs
parents:
diff changeset
   423
    widgetData.uri = "mockwidgetplugin";
hgs
parents:
diff changeset
   424
    HsWidgetHost *existingWidget = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   425
    QVERIFY(existingWidget);
hgs
parents:
diff changeset
   426
    page->addExistingWidget(existingWidget);
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
    // add new widget without presentation
hgs
parents:
diff changeset
   429
    HsWidgetData widgetData2;
hgs
parents:
diff changeset
   430
    widgetData2.pageId = page->databaseId();
hgs
parents:
diff changeset
   431
    widgetData2.uri = "mockwidgetplugintoosmall";
hgs
parents:
diff changeset
   432
    HsWidgetHost *newWidget = HsWidgetHost::createInstance(widgetData2);
hgs
parents:
diff changeset
   433
    QVERIFY(newWidget);
hgs
parents:
diff changeset
   434
    page->addNewWidget(newWidget);
hgs
parents:
diff changeset
   435
    newWidget->removePresentation(Qt::Horizontal);
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
    page->onOrientationChanged(Qt::Horizontal);
hgs
parents:
diff changeset
   438
    page->onOrientationChanged(Qt::Vertical);
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
    delete page;
hgs
parents:
diff changeset
   441
    HsWidgetPositioningOnOrientationChange::setInstance(0);
hgs
parents:
diff changeset
   442
    HsWidgetPositioningOnWidgetAdd::setInstance(0);
hgs
parents:
diff changeset
   443
}
hgs
parents:
diff changeset
   444
hgs
parents:
diff changeset
   445
void TestHsDomainModel::testHsPageDeleteFromDatabase()
hgs
parents:
diff changeset
   446
{
hgs
parents:
diff changeset
   447
    HsWidgetPositioningOnWidgetAdd::setInstance(
hgs
parents:
diff changeset
   448
        new HsAnchorPointInBottomRight);
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
    HsPageData pageData;
hgs
parents:
diff changeset
   451
    pageData.indexPosition = 0;
hgs
parents:
diff changeset
   452
    HsPage *page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   453
    HsWidgetData widgetData;
hgs
parents:
diff changeset
   454
    widgetData.pageId = page->databaseId();
hgs
parents:
diff changeset
   455
    widgetData.uri = "mockwidgetplugin";
hgs
parents:
diff changeset
   456
    HsWidgetHost *widget = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
    // new widgets not deleted
hgs
parents:
diff changeset
   459
    page->addNewWidget(widget);
hgs
parents:
diff changeset
   460
    QCOMPARE(page->newWidgets().count(), 1);
hgs
parents:
diff changeset
   461
    page->deleteFromDatabase();
hgs
parents:
diff changeset
   462
    QCOMPARE(page->newWidgets().count(), 0);
hgs
parents:
diff changeset
   463
hgs
parents:
diff changeset
   464
    // widgets not deleted
hgs
parents:
diff changeset
   465
    page->addNewWidget(widget);
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
    // test set online when new widgets exists
hgs
parents:
diff changeset
   468
    page->setOnline();
hgs
parents:
diff changeset
   469
    page->layoutNewWidgets();
hgs
parents:
diff changeset
   470
    // test show widgets
hgs
parents:
diff changeset
   471
    page->showWidgets();
hgs
parents:
diff changeset
   472
    // test hide widgets
hgs
parents:
diff changeset
   473
    page->hideWidgets();
hgs
parents:
diff changeset
   474
    // test set online when widgets exists
hgs
parents:
diff changeset
   475
    page->setOnline();
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
    QCOMPARE(page->mWidgets.count(), 1);
hgs
parents:
diff changeset
   478
    QVERIFY(page->deleteFromDatabase());
hgs
parents:
diff changeset
   479
    QCOMPARE(page->mWidgets.count(), 0);
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
    // unavailable widgets not deleted
hgs
parents:
diff changeset
   482
    page->mUnavailableWidgets.append(widget);
hgs
parents:
diff changeset
   483
    QCOMPARE(page->mUnavailableWidgets.count(), 1);
hgs
parents:
diff changeset
   484
    QVERIFY(page->deleteFromDatabase());
hgs
parents:
diff changeset
   485
    QCOMPARE(page->mUnavailableWidgets.count(), 0);
hgs
parents:
diff changeset
   486
hgs
parents:
diff changeset
   487
    delete widget;
hgs
parents:
diff changeset
   488
    delete page;
hgs
parents:
diff changeset
   489
    
hgs
parents:
diff changeset
   490
}
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
void TestHsDomainModel::testHsPageOnPageMarginChanged()
hgs
parents:
diff changeset
   493
{
hgs
parents:
diff changeset
   494
    HsWidgetPositioningOnWidgetAdd::setInstance(
hgs
parents:
diff changeset
   495
        new HsAnchorPointInBottomRight);
hgs
parents:
diff changeset
   496
hgs
parents:
diff changeset
   497
hgs
parents:
diff changeset
   498
    //Create empty page
hgs
parents:
diff changeset
   499
    HsPageData pageData;
hgs
parents:
diff changeset
   500
    pageData.indexPosition = 0;
hgs
parents:
diff changeset
   501
    HsPage *page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   502
    QVERIFY(page);
hgs
parents:
diff changeset
   503
    int pageId = page->databaseId();
hgs
parents:
diff changeset
   504
    page->onPageMarginChanged("dummy");
hgs
parents:
diff changeset
   505
    page->onPageMarginChanged("pageMargin"); //No widgets
hgs
parents:
diff changeset
   506
hgs
parents:
diff changeset
   507
    //Add first widget
hgs
parents:
diff changeset
   508
    HsWidgetData widgetData;
hgs
parents:
diff changeset
   509
    widgetData.pageId = pageId;
hgs
parents:
diff changeset
   510
    widgetData.uri = "uri1";
hgs
parents:
diff changeset
   511
    HsWidgetHost *widget = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   512
    QVERIFY(widget);
hgs
parents:
diff changeset
   513
    widget->setPage(page);
hgs
parents:
diff changeset
   514
    QVERIFY(!page->addNewWidget(0));
hgs
parents:
diff changeset
   515
    QVERIFY(page->addNewWidget(widget));
hgs
parents:
diff changeset
   516
    QVERIFY(page->addNewWidget(widget));
hgs
parents:
diff changeset
   517
    QCOMPARE(page->newWidgets().count(), 1);
hgs
parents:
diff changeset
   518
    QCOMPARE(page->widgets().count(), 0);
hgs
parents:
diff changeset
   519
    page->onPageMarginChanged("pageMargin"); // Only mNewWidgets
hgs
parents:
diff changeset
   520
    page->layoutNewWidgets();
hgs
parents:
diff changeset
   521
    QCOMPARE(page->newWidgets().count(), 0);
hgs
parents:
diff changeset
   522
    QCOMPARE(page->widgets().count(), 1);
hgs
parents:
diff changeset
   523
    QCOMPARE(page->newWidgets().count(), 0);
hgs
parents:
diff changeset
   524
    QCOMPARE(page->widgets().count(), 1);  
hgs
parents:
diff changeset
   525
    page->resetNewWidgets();   
hgs
parents:
diff changeset
   526
hgs
parents:
diff changeset
   527
    //Add second widget
hgs
parents:
diff changeset
   528
    HsWidgetHost *widget2 = HsWidgetHost::createInstance(widgetData);
hgs
parents:
diff changeset
   529
    QVERIFY(widget2);
hgs
parents:
diff changeset
   530
    widget2->setPage(page);
hgs
parents:
diff changeset
   531
    QVERIFY(page->addNewWidget(widget2));
hgs
parents:
diff changeset
   532
    QCOMPARE(page->newWidgets().count(),1);
hgs
parents:
diff changeset
   533
    QCOMPARE(page->widgets().count(),1);
hgs
parents:
diff changeset
   534
    page->onPageMarginChanged("pageMargin"); // Both mWidgets and mNewWidgets
hgs
parents:
diff changeset
   535
    page->layoutNewWidgets();
hgs
parents:
diff changeset
   536
    page->onPageMarginChanged("pageMargin"); //Only mWidgets
hgs
parents:
diff changeset
   537
    QCOMPARE(page->newWidgets().count(), 0);
hgs
parents:
diff changeset
   538
    QCOMPARE(page->widgets().count(), 2);
hgs
parents:
diff changeset
   539
hgs
parents:
diff changeset
   540
    delete page;
hgs
parents:
diff changeset
   541
hgs
parents:
diff changeset
   542
    HsWidgetPositioningOnWidgetAdd::setInstance(0);
hgs
parents:
diff changeset
   543
}
hgs
parents:
diff changeset
   544
hgs
parents:
diff changeset
   545
void TestHsDomainModel::testHsPageIndex()
hgs
parents:
diff changeset
   546
{
hgs
parents:
diff changeset
   547
    HsPageData pageData;
hgs
parents:
diff changeset
   548
    pageData.indexPosition = 0;
hgs
parents:
diff changeset
   549
    HsPage *page = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   550
    QVERIFY(page->load());
hgs
parents:
diff changeset
   551
    QCOMPARE(page->mPageVisual->pageIndex(),-1);
hgs
parents:
diff changeset
   552
    HsScene::instance()->addPage(page);
hgs
parents:
diff changeset
   553
    QCOMPARE(page->mPageVisual->pageIndex(),0);
hgs
parents:
diff changeset
   554
hgs
parents:
diff changeset
   555
    pageData.indexPosition = 1;
hgs
parents:
diff changeset
   556
    HsPage *page2 = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   557
    QVERIFY(page2->load());
hgs
parents:
diff changeset
   558
    HsScene::instance()->addPage(page2);
hgs
parents:
diff changeset
   559
    QCOMPARE(page2->mPageVisual->pageIndex(),1);
hgs
parents:
diff changeset
   560
    
hgs
parents:
diff changeset
   561
    HsScene::instance()->removePage(page);
hgs
parents:
diff changeset
   562
    delete page;
hgs
parents:
diff changeset
   563
    HsScene::instance()->removePage(page2);
hgs
parents:
diff changeset
   564
    delete page2;
hgs
parents:
diff changeset
   565
}
hgs
parents:
diff changeset
   566