homescreenapp/hsdomainmodel/tsrc/t_hsdomainmodel/src/t_hsdatabase.cpp
changeset 90 3ac3aaebaee5
child 101 ba1b7e218624
equal deleted inserted replaced
86:e4f038c420f7 90:3ac3aaebaee5
       
     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:
       
    15 *
       
    16 */
       
    17 
       
    18 #include <QGraphicsWidget>
       
    19 #include <QSqlDatabase>
       
    20 
       
    21 #include <HbFeedback>
       
    22 
       
    23 #include "t_hsdomainmodel.h"
       
    24 #include "hsdatabase.h"
       
    25 #include "hsdomainmodeldatastructures.h"
       
    26 
       
    27 void TestHsDomainModel::testHsDatabaseConstruction()
       
    28 {
       
    29     HsDatabase *db = new HsDatabase;
       
    30     QVERIFY(!db->parent());
       
    31 
       
    32     delete db;
       
    33 
       
    34     QObject *parent = new QObject;
       
    35     db = new HsDatabase(parent);
       
    36     QVERIFY(db->parent() == parent);
       
    37     delete parent;
       
    38 }
       
    39 
       
    40 void TestHsDomainModel::testHsDatabaseProperties()
       
    41 {
       
    42     HsDatabase *db = new HsDatabase;
       
    43 
       
    44     QVERIFY(db->property("connectionName").toString().isEmpty());
       
    45     QVERIFY(db->connectionName().isEmpty());
       
    46 
       
    47     QVERIFY(db->property("databaseName").toString().isEmpty());
       
    48     QVERIFY(db->databaseName().isEmpty());
       
    49 
       
    50     db->setProperty("connectionName", "a");
       
    51     QCOMPARE(db->connectionName(), QLatin1String("a"));
       
    52     db->setConnectionName("b");
       
    53     QCOMPARE(db->connectionName(), QLatin1String("b"));
       
    54 
       
    55     db->setProperty("databaseName", "c");
       
    56     QCOMPARE(db->databaseName(), QLatin1String("c"));
       
    57     db->setDatabaseName("d");
       
    58     QCOMPARE(db->databaseName(), QLatin1String("d"));
       
    59 
       
    60     delete db;
       
    61 }
       
    62 
       
    63 void TestHsDomainModel::testHsDatabaseStaticInterface()
       
    64 {
       
    65     HsDatabase *db = HsDatabase::takeInstance();
       
    66     QVERIFY(!HsDatabase::instance());
       
    67     HsDatabase::setInstance(db);
       
    68     QVERIFY(HsDatabase::instance() == db);
       
    69 }
       
    70 
       
    71 void TestHsDomainModel::testHsDatabaseTransaction()
       
    72 {
       
    73     HsDatabase *db = HsDatabase::instance();
       
    74 
       
    75     QList<HsPageData> pages;
       
    76     db->pages(pages);
       
    77     QCOMPARE(pages.count(), 0);
       
    78 
       
    79     HsPageData page;
       
    80 
       
    81     db->transaction();
       
    82     page.indexPosition = 0;
       
    83     db->insertPage(page);
       
    84     db->rollback();
       
    85     db->pages(pages);
       
    86     QCOMPARE(pages.count(), 0);
       
    87 
       
    88     db->transaction();
       
    89     page.indexPosition = 0;
       
    90     db->insertPage(page);
       
    91     db->commit();
       
    92     db->pages(pages);
       
    93     QCOMPARE(pages.count(), 1);
       
    94 }
       
    95 
       
    96 void TestHsDomainModel::testHsDatabaseSceneMethods()
       
    97 {
       
    98     HsDatabase *db = HsDatabase::instance();
       
    99 
       
   100     HsSceneData scene;
       
   101     db->scene(scene);
       
   102     QCOMPARE(scene.id, 1);
       
   103 }
       
   104 
       
   105 void TestHsDomainModel::testHsDatabasePageMethods()
       
   106 {
       
   107     HsDatabase *db = HsDatabase::instance();
       
   108 
       
   109     HsPageData page;
       
   110     page.indexPosition = 0;
       
   111     db->insertPage(page);
       
   112 
       
   113     HsPageData page2;
       
   114     page2.id = page.id;
       
   115     db->page(page2);
       
   116 
       
   117     QCOMPARE(page2.indexPosition, page.indexPosition);
       
   118 
       
   119     page.indexPosition = 1;
       
   120     db->updatePage(page);
       
   121 
       
   122     db->page(page2);
       
   123 
       
   124     QCOMPARE(page2.indexPosition, page.indexPosition);
       
   125 }
       
   126 
       
   127 void TestHsDomainModel::testHsDatabaseWidgetMethods()
       
   128 {
       
   129     HsDatabase *db = HsDatabase::instance();
       
   130 
       
   131     HsWidgetData widget;
       
   132     widget.uri = "widgeturi";
       
   133     widget.pageId = 1;
       
   134     db->insertWidget(widget);
       
   135 
       
   136     QList<HsWidgetData> widgets;
       
   137     db->widgets(1, widgets);
       
   138 
       
   139     QCOMPARE(widgets.count(), 1);
       
   140 
       
   141     db->deleteWidgets("widgeturi");
       
   142     db->widgets(1, widgets);
       
   143 
       
   144     QCOMPARE(widgets.count(), 0);
       
   145 }
       
   146 
       
   147 void TestHsDomainModel::testHsDatabaseWidgetPreferenceMethods()
       
   148 {
       
   149     HsDatabase *db = HsDatabase::instance();
       
   150 
       
   151     HsWidgetData widget;
       
   152     widget.uri = "widgeturi";
       
   153     widget.pageId = 1;
       
   154     db->insertWidget(widget);
       
   155 
       
   156     QVariantHash preferences;
       
   157     preferences.insert("a", 1);
       
   158     preferences.insert("b", 2);
       
   159 
       
   160     db->setWidgetPreferences(widget.id, preferences);
       
   161 
       
   162     QVariantHash preferences2;
       
   163     db->widgetPreferences(widget.id, preferences2);
       
   164 
       
   165     QCOMPARE(preferences2.count(), 2);
       
   166     QCOMPARE(preferences2.value("a"), QVariant(1));
       
   167     QCOMPARE(preferences2.value("b"), QVariant(2));
       
   168 
       
   169     QVariant value;
       
   170     db->widgetPreference(widget.id, "a", value);
       
   171 
       
   172     QCOMPARE(value, QVariant(1));
       
   173     preferences.insert("a", QVariant());
       
   174     preferences.insert("b", QVariant());
       
   175 
       
   176     db->setWidgetPreferences(widget.id, preferences);
       
   177     db->widgetPreferences(widget.id, preferences2);
       
   178 
       
   179     QCOMPARE(preferences2.count(), 0);
       
   180 
       
   181 }
       
   182 
       
   183 void TestHsDomainModel::testHsDatabaseBadConnection()
       
   184 {
       
   185 	HsDatabase db;
       
   186 
       
   187 	QVariantHash vh;
       
   188 	QVariant v;
       
   189 	Qt::Orientation orientation(Qt::Vertical);
       
   190 	HsWidgetPresentationData pd;
       
   191 	QString uri("foouri");
       
   192 	QString key("fookey");
       
   193 	HsWidgetData wd;
       
   194 	QList<HsWidgetData> wds;
       
   195 	HsPageData pad;
       
   196 	QList<HsPageData> pads;
       
   197 	HsSceneData sd;
       
   198 
       
   199 	db.setConnectionName(QString("fooconnection"));
       
   200 	QVERIFY(!db.open());
       
   201 
       
   202 	QVERIFY(!db.configuration(vh));
       
   203 
       
   204 	QVERIFY(!db.setWidgetPreferences(33, vh));
       
   205 
       
   206 	QVERIFY(!db.widgetPreference(33, key, v));
       
   207 
       
   208 	QVERIFY(!db.widgetPreferences(33, vh));
       
   209 
       
   210 	QVERIFY(!db.deleteWidgetPresentation(33, orientation));
       
   211 
       
   212 	QVERIFY(!db.setWidgetPresentation(pd));
       
   213 
       
   214 	QVERIFY(!db.widgetPresentation(pd));
       
   215 
       
   216 	QVERIFY(!db.deleteWidgets(uri));
       
   217 
       
   218 	QVERIFY(!db.deleteWidget(33));
       
   219 
       
   220 	QVERIFY(!db.updateWidget(wd));
       
   221 
       
   222 	QVERIFY(!db.insertWidget(wd));
       
   223 
       
   224 	QVERIFY(!db.widget(wd));
       
   225 
       
   226 	QVERIFY(!db.widgets(uri, wds));
       
   227 
       
   228 	QVERIFY(!db.widgets(22, wds));
       
   229     QVariantHash variantHash;
       
   230     int count=0;	
       
   231 	QVERIFY(!db.widgets("uri", variantHash, count));
       
   232 
       
   233 	QVERIFY(!db.deletePage(22));
       
   234 
       
   235 	QVERIFY(!db.updatePage(pad));
       
   236 
       
   237 	QVERIFY(!db.insertPage(pad));
       
   238 
       
   239 	QVERIFY(!db.page(pad));
       
   240 
       
   241 	QVERIFY(!db.pages(pads));
       
   242 
       
   243 	QVERIFY(!db.scene(sd));
       
   244 
       
   245     QVERIFY(!db.updateWidgetZValues(QHash<int, qreal>(), Qt::Vertical));
       
   246 }
       
   247 
       
   248 Q_DECLARE_METATYPE(QVariantHash)
       
   249 void TestHsDomainModel::testHsDatabaseMatchWidgetsPreferences_data()
       
   250 {
       
   251     QTest::addColumn<QVariantHash>("matchesPreferences");
       
   252     QTest::addColumn<QStringList>("widgetsPreferencesKeys");
       
   253     QTest::addColumn<QStringList>("widgetsPreferencesValues");
       
   254     QTest::addColumn<bool>("expectedResult");
       
   255 
       
   256     QVariantHash preferences;
       
   257     preferences.insert("a", "1");
       
   258     QTest::newRow("searchCriteria1")
       
   259         << preferences
       
   260         << (QStringList() << "a" << "a" << "a" << "b" << "c" << "d")
       
   261         << (QStringList() << "1" << "2" << "3" << "1" << "1" << "1")
       
   262         << true;
       
   263         
       
   264     preferences.insert("b", "1");
       
   265     QTest::newRow("searchCriteria2")
       
   266         << preferences
       
   267         << (QStringList() << "a" << "a" << "a" << "b" << "c" << "d")
       
   268         << (QStringList() << "1" << "2" << "3" << "1" << "1" << "1")
       
   269         << true;
       
   270     preferences.insert("e", "1");
       
   271     QTest::newRow("searchCriteria2")
       
   272         << preferences
       
   273         << (QStringList() << "a" << "a" << "a" << "b" << "c" << "d")
       
   274         << (QStringList() << "1" << "2" << "3" << "1" << "1" << "1")
       
   275         << false;
       
   276     QTest::newRow("searchCriteria3")
       
   277         << preferences
       
   278         << (QStringList())
       
   279         << (QStringList())
       
   280         << false;
       
   281     preferences.clear();
       
   282     QTest::newRow("searchCriteria4")
       
   283         << preferences
       
   284         << (QStringList() << "a" << "a" << "a" << "b" << "c" << "d")
       
   285         << (QStringList() << "1" << "2" << "3" << "1" << "1" << "1")
       
   286         << true;
       
   287 }
       
   288 
       
   289 void TestHsDomainModel::testHsDatabaseMatchWidgetsPreferences()
       
   290 {
       
   291     QFETCH(QVariantHash, matchesPreferences);
       
   292     QFETCH(QStringList, widgetsPreferencesKeys);
       
   293     QFETCH(QStringList, widgetsPreferencesValues);
       
   294     QFETCH(bool, expectedResult);       
       
   295     
       
   296     QMultiMap<QString, QString> widgetPreferences;
       
   297     for (int i=0; i<widgetsPreferencesKeys.count(); ++i) {
       
   298         widgetPreferences.insert(widgetsPreferencesKeys[i], widgetsPreferencesValues[i]);
       
   299     }
       
   300 
       
   301     HsDatabase *db = HsDatabase::instance();
       
   302     QCOMPARE(expectedResult, db->matchWidgetPreferences(matchesPreferences, widgetPreferences));
       
   303 }
       
   304 
       
   305 void TestHsDomainModel::testHsDatabaseWidgetsCount()
       
   306 {
       
   307     HsDatabase *db = HsDatabase::instance();
       
   308 
       
   309     HsWidgetData widget;
       
   310     widget.uri = "widgeturi";
       
   311     widget.pageId = 1;
       
   312     db->insertWidget(widget);
       
   313     QVariantHash preferences;
       
   314     preferences.insert("a", "1");
       
   315     preferences.insert("b", "2");
       
   316     db->setWidgetPreferences(widget.id, preferences);
       
   317     
       
   318     widget.uri = "widgeturi2";
       
   319     widget.pageId = 1;
       
   320     db->insertWidget(widget);
       
   321     
       
   322     widget.uri = "widgeturi";
       
   323     widget.pageId = 1;
       
   324     db->insertWidget(widget);
       
   325     preferences.insert("a", "3");
       
   326     db->setWidgetPreferences(widget.id, preferences);
       
   327 
       
   328     QVariantHash searchCriteria;
       
   329     int count=0;
       
   330     QVERIFY(db->widgets("widgeturi", searchCriteria, count));
       
   331     QCOMPARE(count, 2);
       
   332     
       
   333     searchCriteria.insert("a", "1");
       
   334     QVERIFY(db->widgets("widgeturi", searchCriteria, count));
       
   335     QCOMPARE(count, 1);
       
   336     searchCriteria.insert("a", "2");
       
   337     QVERIFY(db->widgets("widgeturi", searchCriteria, count));
       
   338     QCOMPARE(count, 0);
       
   339     searchCriteria.insert("a", "1");
       
   340     QVERIFY(db->widgets("widgeturi2", searchCriteria, count));
       
   341     QCOMPARE(count, 0);
       
   342     QVERIFY(db->widgets("", searchCriteria, count));
       
   343     QCOMPARE(count, 0);
       
   344     searchCriteria.clear();
       
   345     QVERIFY(db->widgets("widgeturi2", searchCriteria, count));
       
   346     QCOMPARE(count, 1);
       
   347     searchCriteria.clear();
       
   348     QVERIFY(db->widgets("", searchCriteria, count));
       
   349     QCOMPARE(count, 0);
       
   350 }
       
   351 
       
   352 void TestHsDomainModel::testHsDatabaseUpdateWidgetZValues()
       
   353 {
       
   354     HsDatabase *db = HsDatabase::instance();
       
   355     HsPageData page;
       
   356     page.indexPosition = 0;
       
   357     QVERIFY(db->insertPage(page));
       
   358     
       
   359     HsWidgetData widget1;
       
   360     widget1.pageId = page.id;
       
   361     widget1.uri = "uri1";
       
   362     QVERIFY(db->insertWidget(widget1));
       
   363 
       
   364     HsWidgetData widget2;
       
   365     widget2.pageId = page.id;
       
   366     widget2.uri = "uri2";
       
   367     QVERIFY(db->insertWidget(widget2));
       
   368 
       
   369     HsWidgetPresentationData presentation1;
       
   370     presentation1.widgetId = widget1.id;
       
   371     presentation1.zValue = 0;
       
   372     presentation1.orientation = Qt::Vertical;
       
   373     db->setWidgetPresentation(presentation1);
       
   374 
       
   375     HsWidgetPresentationData presentation2;
       
   376     presentation2.widgetId = widget2.id;
       
   377     presentation2.zValue = 0;
       
   378     presentation2.orientation = Qt::Vertical;
       
   379     db->setWidgetPresentation(presentation2);
       
   380 
       
   381     QHash<int, qreal> data;
       
   382     data.insert(1, 2);
       
   383     data.insert(2, 3);
       
   384     QVERIFY(db->updateWidgetZValues(data, Qt::Vertical));
       
   385     
       
   386     QVERIFY(db->widgetPresentation(presentation1));
       
   387     QCOMPARE(presentation1.zValue, qreal(2));
       
   388     QVERIFY(db->widgetPresentation(presentation2));    
       
   389     QCOMPARE(presentation2.zValue, qreal(3));
       
   390 }