homescreenapp/hsdomainmodel/tsrc/t_hsdomainmodel/src/t_hsdomainmodel.cpp
author hgs
Wed, 20 Oct 2010 15:25:39 +0300
changeset 101 ba1b7e218624
parent 90 3ac3aaebaee5
permissions -rw-r--r--
201042
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:  Main test class for domain model.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <qservicemanager.h>
hgs
parents:
diff changeset
    19
#include <hbinstance.h>
hgs
parents:
diff changeset
    20
#include "t_hsdomainmodel.h"
hgs
parents:
diff changeset
    21
#include "hsdatabase.h"
hgs
parents:
diff changeset
    22
#include "hspage.h"
hgs
parents:
diff changeset
    23
#include "hsscene.h"
hgs
parents:
diff changeset
    24
#include "hsdomainmodeldatastructures.h"
hgs
parents:
diff changeset
    25
#include "hswidgetpositioningonwidgetadd.h"
hgs
parents:
diff changeset
    26
#include "hswidgetcomponentregistry.h"
hgs
parents:
diff changeset
    27
#include "hsbackuprestoreobserver.h"
hgs
parents:
diff changeset
    28
#include "hsshortcutservice.h"
hgs
parents:
diff changeset
    29
#include "caservice.h"
hgs
parents:
diff changeset
    30
#include "hsconfiguration.h"
hgs
parents:
diff changeset
    31
#include "hswallpaper.h"
101
hgs
parents: 90
diff changeset
    32
#include "hsdbupdatethread.h"
90
hgs
parents:
diff changeset
    33
QTM_USE_NAMESPACE
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
#ifdef Q_OS_SYMBIAN
hgs
parents:
diff changeset
    36
#include <e32base.h>
hgs
parents:
diff changeset
    37
#endif
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
const char WIDGET_PLUGIN_PATH[] = "./hsresources/plugins/widgetplugins/";
hgs
parents:
diff changeset
    40
const char WIDGET_PLUGIN_XML[] = "mockwidgetplugin.xml";
hgs
parents:
diff changeset
    41
const char WIDGET_PLUGIN_TOOSMALL_XML[] = "mockwidgetplugintoosmall.xml";
hgs
parents:
diff changeset
    42
const char WIDGET_PLUGIN_TOOBIG_XML[] = "mockwidgetplugintoobig.xml";
hgs
parents:
diff changeset
    43
const char WIDGET_PLUGIN_CHEATER_XML[] = "mockwidgetplugincheater.xml";
hgs
parents:
diff changeset
    44
const char DBPATH[]= "./";
hgs
parents:
diff changeset
    45
const char DBNAME[] = "hsdomainmodeltest2.db";
hgs
parents:
diff changeset
    46
const char DBNAMECLEAN[] = "hsdomainmodeltest.db";
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    49
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    50
//
hgs
parents:
diff changeset
    51
void TestHsDomainModel::initTestCase()
hgs
parents:
diff changeset
    52
{
hgs
parents:
diff changeset
    53
    mCaService = CaService::instance();
hgs
parents:
diff changeset
    54
    QString path = QDir(WIDGET_PLUGIN_PATH).absolutePath();
hgs
parents:
diff changeset
    55
    QApplication::addLibraryPath(path);
hgs
parents:
diff changeset
    56
    QServiceManager manager;
hgs
parents:
diff changeset
    57
    if (!manager.addService(QDir(WIDGET_PLUGIN_PATH).absolutePath().append("/").append(WIDGET_PLUGIN_XML))) {
hgs
parents:
diff changeset
    58
        QServiceManager::Error err = manager.error();
hgs
parents:
diff changeset
    59
        qDebug() << "TestHsDomainModel::initTestCase register mockwidgetplugin failed" << err;
hgs
parents:
diff changeset
    60
    }
hgs
parents:
diff changeset
    61
    if (!manager.addService(QDir(WIDGET_PLUGIN_PATH).absolutePath().append("/").append(WIDGET_PLUGIN_TOOSMALL_XML))) {
hgs
parents:
diff changeset
    62
        QServiceManager::Error err = manager.error();
hgs
parents:
diff changeset
    63
        qDebug() << "TestHsDomainModel::initTestCase register mockwidgetplugintoosmall failed" << err;
hgs
parents:
diff changeset
    64
    }
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
    if (!manager.addService(QDir(WIDGET_PLUGIN_PATH).absolutePath().append("/").append(WIDGET_PLUGIN_TOOBIG_XML))) {
hgs
parents:
diff changeset
    67
        QServiceManager::Error err = manager.error();
hgs
parents:
diff changeset
    68
        qDebug() << "TestHsDomainModel::initTestCase register mockwidgetplugintoobig failed" << err;
hgs
parents:
diff changeset
    69
    }
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
    if (!manager.addService(QDir(WIDGET_PLUGIN_PATH).absolutePath().append("/").append(WIDGET_PLUGIN_CHEATER_XML))) {
hgs
parents:
diff changeset
    72
        QServiceManager::Error err = manager.error();
hgs
parents:
diff changeset
    73
        qDebug() << "TestHsDomainModel::initTestCase register mockwidgetplugincheater failed" << err;
hgs
parents:
diff changeset
    74
    }
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
    HsConfiguration::setInstance(new HsConfiguration);
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
    HsWidgetPositioningOnWidgetAdd::setInstance(
hgs
parents:
diff changeset
    79
        new HsAnchorPointInBottomRight);
101
hgs
parents: 90
diff changeset
    80
    
90
hgs
parents:
diff changeset
    81
}
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    84
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    85
//
hgs
parents:
diff changeset
    86
void TestHsDomainModel::cleanupTestCase()
hgs
parents:
diff changeset
    87
{
hgs
parents:
diff changeset
    88
    QServiceManager manager;
hgs
parents:
diff changeset
    89
    manager.removeService("mockwidgetplugin");
hgs
parents:
diff changeset
    90
    manager.removeService("mockwidgetplugintoosmall");
hgs
parents:
diff changeset
    91
    manager.removeService("mockwidgetplugintoobig");
hgs
parents:
diff changeset
    92
    manager.removeService("mockwidgetplugincheater");
hgs
parents:
diff changeset
    93
    HsDatabase::setInstance(0);
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
    delete HsWidgetComponentRegistry::mInstance;
hgs
parents:
diff changeset
    96
    HsWidgetComponentRegistry::mInstance = 0;
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
    delete HsShortcutService::mInstance;
hgs
parents:
diff changeset
    99
    HsShortcutService::mInstance = 0;
101
hgs
parents: 90
diff changeset
   100
90
hgs
parents:
diff changeset
   101
}
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
void TestHsDomainModel::init()
hgs
parents:
diff changeset
   104
{
hgs
parents:
diff changeset
   105
    QString dbFile = QDir(DBPATH).absolutePath() + "/" + QString(DBNAME);
hgs
parents:
diff changeset
   106
    QString testDbFile = QDir(DBPATH).absolutePath() + "/" + QString(DBNAMECLEAN);
hgs
parents:
diff changeset
   107
    QFile::remove(dbFile);
hgs
parents:
diff changeset
   108
    QFile::copy(testDbFile, dbFile);
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
    HsScene::setInstance(new HsScene);
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
    HsDatabase *db = new HsDatabase;
hgs
parents:
diff changeset
   113
    HsDatabase::setInstance(db);
hgs
parents:
diff changeset
   114
    db->setConnectionName("homescreen.dbc");
hgs
parents:
diff changeset
   115
    db->setDatabaseName(dbFile);
hgs
parents:
diff changeset
   116
    db->open();
101
hgs
parents: 90
diff changeset
   117
    
hgs
parents: 90
diff changeset
   118
    HsDbUpdateThread *dbUpdateThread = new HsDbUpdateThread("homescreen.dbc",dbFile);
hgs
parents: 90
diff changeset
   119
    HsDbUpdateThread::setInstance(dbUpdateThread);
hgs
parents: 90
diff changeset
   120
    //dbUpdateThread->start();
90
hgs
parents:
diff changeset
   121
    mWallpaperTypeScene = true;
hgs
parents:
diff changeset
   122
}
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
void TestHsDomainModel::cleanup()
hgs
parents:
diff changeset
   125
{
hgs
parents:
diff changeset
   126
    // cleanup all the pages and widgets
101
hgs
parents: 90
diff changeset
   127
   // HsDbUpdateThread::instance()->quit();
hgs
parents: 90
diff changeset
   128
    HsDbUpdateThread::setInstance(0);
90
hgs
parents:
diff changeset
   129
    HsDatabase::setInstance(0);
hgs
parents:
diff changeset
   130
    QString path = QDir(WIDGET_PLUGIN_PATH).absolutePath();
hgs
parents:
diff changeset
   131
    QApplication::addLibraryPath( path );
hgs
parents:
diff changeset
   132
    QString dbFile = QDir(DBPATH).absolutePath() + "/" + QString(DBNAME);
hgs
parents:
diff changeset
   133
    QFile::remove(dbFile);
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    if (HsBackupRestoreObserver::mInstance) {
hgs
parents:
diff changeset
   136
        delete HsBackupRestoreObserver::mInstance;
hgs
parents:
diff changeset
   137
        HsBackupRestoreObserver::mInstance = 0;
hgs
parents:
diff changeset
   138
    }
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
    delete HsScene::takeInstance();
hgs
parents:
diff changeset
   141
}
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
void TestHsDomainModel::createPagesToDatabase(int pageCount)
hgs
parents:
diff changeset
   144
{
hgs
parents:
diff changeset
   145
    HsDatabase *db = HsDatabase::instance();
hgs
parents:
diff changeset
   146
    for (int i = 0; i < pageCount; ++i) {
hgs
parents:
diff changeset
   147
        HsPageData data;
hgs
parents:
diff changeset
   148
        data.indexPosition = i;
hgs
parents:
diff changeset
   149
        db->insertPage(data);
hgs
parents:
diff changeset
   150
    }
hgs
parents:
diff changeset
   151
}
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
void TestHsDomainModel::createSceneWithPages(int pageCount,int activePageIndex)
hgs
parents:
diff changeset
   154
{
hgs
parents:
diff changeset
   155
    for (int i = 0; i < pageCount; ++i) {
hgs
parents:
diff changeset
   156
        HsPageData pageData;
hgs
parents:
diff changeset
   157
        pageData.indexPosition = i;
hgs
parents:
diff changeset
   158
        HsPage *p = HsPage::createInstance(pageData);
hgs
parents:
diff changeset
   159
        HsScene::instance()->addPage(p);
hgs
parents:
diff changeset
   160
    }
hgs
parents:
diff changeset
   161
    if (activePageIndex < pageCount) {
hgs
parents:
diff changeset
   162
        QList<HsPage*> pages = HsScene::instance()->pages();
hgs
parents:
diff changeset
   163
        if(activePageIndex < pages.count())
hgs
parents:
diff changeset
   164
            HsScene::instance()->setActivePage(pages.at(activePageIndex));
hgs
parents:
diff changeset
   165
    }
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
}
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
void TestHsDomainModel::destroySceneAndPages()
hgs
parents:
diff changeset
   170
{
hgs
parents:
diff changeset
   171
     delete HsScene::takeInstance();
hgs
parents:
diff changeset
   172
}
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
QString TestHsDomainModel::sourceTestWallpaper()
hgs
parents:
diff changeset
   175
{
hgs
parents:
diff changeset
   176
    QString testImage("default_portrait.png");
hgs
parents:
diff changeset
   177
    QString fullSource(wallpaperDirectory() + testImage);
hgs
parents:
diff changeset
   178
    return QDir::toNativeSeparators(fullSource);
hgs
parents:
diff changeset
   179
}
hgs
parents:
diff changeset
   180
hgs
parents:
diff changeset
   181
QString TestHsDomainModel::targetPortraitTestWallpaper()
hgs
parents:
diff changeset
   182
{
hgs
parents:
diff changeset
   183
    QString path = wallpaperDirectory() +
hgs
parents:
diff changeset
   184
                   "1_portrait." +
hgs
parents:
diff changeset
   185
                   QFileInfo(sourceTestWallpaper()).suffix();
hgs
parents:
diff changeset
   186
    return QDir::toNativeSeparators(path);
hgs
parents:
diff changeset
   187
}
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
QString TestHsDomainModel::targetLandscapeTestWallpaper()
hgs
parents:
diff changeset
   190
{
hgs
parents:
diff changeset
   191
    QString path = wallpaperDirectory() +
hgs
parents:
diff changeset
   192
                   "1_landscape." +
hgs
parents:
diff changeset
   193
                   QFileInfo(sourceTestWallpaper()).suffix();
hgs
parents:
diff changeset
   194
    return QDir::toNativeSeparators(path);
hgs
parents:
diff changeset
   195
}
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
QString TestHsDomainModel::tempTestWallpaper()
hgs
parents:
diff changeset
   198
{
hgs
parents:
diff changeset
   199
    QString tempTestImage("tempdefault_portrait.png");
hgs
parents:
diff changeset
   200
    QString fullTarget(wallpaperDirectory() +  tempTestImage);
hgs
parents:
diff changeset
   201
    return QDir::toNativeSeparators(fullTarget);
hgs
parents:
diff changeset
   202
}
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
QString TestHsDomainModel::notExistingTestWallpaper()
hgs
parents:
diff changeset
   205
{
hgs
parents:
diff changeset
   206
    QString tempTestImage("notfound.png");
hgs
parents:
diff changeset
   207
    QString fullTarget(wallpaperDirectory() +  tempTestImage);
hgs
parents:
diff changeset
   208
    return QDir::toNativeSeparators(fullTarget);
hgs
parents:
diff changeset
   209
}
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
QString TestHsDomainModel::wallpaperDirectory()
hgs
parents:
diff changeset
   212
{
hgs
parents:
diff changeset
   213
    QString directory;
hgs
parents:
diff changeset
   214
    if (mWallpaperTypeScene) {
hgs
parents:
diff changeset
   215
        HsSceneWallpaper wallpaper(HsScene::instance());
hgs
parents:
diff changeset
   216
        directory = wallpaper.wallpaperDirectory();
hgs
parents:
diff changeset
   217
    } else {
hgs
parents:
diff changeset
   218
        HsPage *page = new HsPage();
hgs
parents:
diff changeset
   219
        HsPageWallpaper wallpaper(page);
hgs
parents:
diff changeset
   220
        directory = wallpaper.wallpaperDirectory();
hgs
parents:
diff changeset
   221
        delete page;
hgs
parents:
diff changeset
   222
    }
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
    return directory;
hgs
parents:
diff changeset
   225
}
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
void TestHsDomainModel::cleanupTargetWallpaperFiles()
hgs
parents:
diff changeset
   228
{
hgs
parents:
diff changeset
   229
    if (QFile::exists(targetPortraitTestWallpaper())) {
hgs
parents:
diff changeset
   230
        QFile::remove(targetPortraitTestWallpaper());
hgs
parents:
diff changeset
   231
    }
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
    if (QFile::exists(targetLandscapeTestWallpaper())) {
hgs
parents:
diff changeset
   234
        QFile::remove(targetLandscapeTestWallpaper());
hgs
parents:
diff changeset
   235
    }
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
    if (QFile::exists(tempTestWallpaper())) {
hgs
parents:
diff changeset
   238
        QFile::remove(tempTestWallpaper());
hgs
parents:
diff changeset
   239
    }
hgs
parents:
diff changeset
   240
}
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
#ifdef Q_OS_SYMBIAN
hgs
parents:
diff changeset
   243
//QTEST_MAIN corrected since crashes if TRAP not in correct place.
hgs
parents:
diff changeset
   244
//Will be corrected in later (estimate 4.6.0) Qt release for Symbian.
hgs
parents:
diff changeset
   245
int main(int argc, char *argv[])
hgs
parents:
diff changeset
   246
{
hgs
parents:
diff changeset
   247
    QApplication app(argc, argv);
hgs
parents:
diff changeset
   248
    int error(0);
hgs
parents:
diff changeset
   249
    TRAP_IGNORE( QTEST_DISABLE_KEYPAD_NAVIGATION \
hgs
parents:
diff changeset
   250
	 HbInstance::instance(); \
hgs
parents:
diff changeset
   251
    TestHsDomainModel tc; \
hgs
parents:
diff changeset
   252
    error = QTest::qExec(&tc, argc, argv););
hgs
parents:
diff changeset
   253
    return error;
hgs
parents:
diff changeset
   254
}
hgs
parents:
diff changeset
   255
#else //Q_OS_SYMBIAN
hgs
parents:
diff changeset
   256
int main(int argc, char *argv[])
hgs
parents:
diff changeset
   257
{
hgs
parents:
diff changeset
   258
    QApplication app(argc, argv);
hgs
parents:
diff changeset
   259
    QTEST_DISABLE_KEYPAD_NAVIGATION
hgs
parents:
diff changeset
   260
    HbInstance::instance();
hgs
parents:
diff changeset
   261
    TestHsDomainModel tc;
hgs
parents:
diff changeset
   262
    return QTest::qExec(&tc, argc, argv);
hgs
parents:
diff changeset
   263
}
hgs
parents:
diff changeset
   264
//QTEST_MAIN(TestHsDomainModel)
hgs
parents:
diff changeset
   265
#endif //Q_OS_SYMBIAN