homescreenapp/hsdomainmodel/tsrc/t_hsdomainmodel/src/t_hswidgetpositioningonwidgetadd.cpp
changeset 90 3ac3aaebaee5
child 95 32e56106abf2
equal deleted inserted replaced
86:e4f038c420f7 90:3ac3aaebaee5
       
     1 /*
       
     2 * Copyright (c) 2010 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 #ifndef ONLY_MENU_TESTCASES
       
    19 
       
    20 #include <HbMainWindow>
       
    21 #include <HbInstance>
       
    22 
       
    23 #include "t_hsdomainmodel.h"
       
    24 #include "hsconfiguration.h"
       
    25 #include "hsgui.h"
       
    26 #include "hswidgetpositioningonwidgetadd.h"
       
    27 
       
    28 inline bool hsRectCompare(const QRectF& p1, const QRectF& p2)
       
    29 {
       
    30     const qreal offset = 0.1;
       
    31     bool rectsAreSame = (qAbs(p1.x()-p2.x()) < offset) && (qAbs(p1.y()-p2.y()) < offset) && (qAbs(p1.width()-p2.width()) < offset) && (qAbs(p1.height()-p2.height()) < offset);
       
    32     if ( !rectsAreSame) {
       
    33         qDebug() << "rects are not the same: actual" << p1 << "expected" << p2;
       
    34     }
       
    35     return rectsAreSame;
       
    36 }
       
    37 
       
    38 Q_DECLARE_METATYPE(QList<QRectF>)
       
    39 
       
    40 void TestHsDomainModel::testWidgetPositioningOnWidgetAddChangeInstance()
       
    41 {
       
    42     QVERIFY(!HsWidgetPositioningOnWidgetAdd::instance());
       
    43     HsWidgetPositioningOnWidgetAdd::setInstance(0);
       
    44     QVERIFY(!HsWidgetPositioningOnWidgetAdd::instance());
       
    45     HsWidgetPositioningOnWidgetAdd *c = new HsAnchorPointInBottomRight;
       
    46     HsWidgetPositioningOnWidgetAdd::setInstance(c);
       
    47     QVERIFY(HsWidgetPositioningOnWidgetAdd::instance() == c);
       
    48     HsWidgetPositioningOnWidgetAdd::setInstance(0);
       
    49     QVERIFY(!HsWidgetPositioningOnWidgetAdd::instance());
       
    50 }
       
    51 
       
    52 void TestHsDomainModel::testHsAnchorPointInBottomRight_data()
       
    53 {
       
    54     QTest::addColumn<QRectF>("contentArea");
       
    55     QTest::addColumn<QList<QRectF> >("widgets");
       
    56     QTest::addColumn<QList<QRectF> >("expectedWidgets");
       
    57 
       
    58     QTest::newRow("square")
       
    59         << QRectF(0, 0, 100, 100)
       
    60         << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(50, 50, 10, 10) << QRectF(50, 50, 20, 10) << QRectF(50, 50, 10, 10))
       
    61         << (QList<QRectF>() << QRectF(45, 45, 10, 10) << QRectF(30.8579, 30.8579, 10, 10) << QRectF(6.71573, 16.7157, 20, 10) << QRectF(2.57359, 2.57359, 10, 10));
       
    62 
       
    63     QTest::newRow("portrait")
       
    64         << QRectF(0, 0, 50, 100)
       
    65         << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(50, 50, 10, 10) << QRectF(50, 50, 10, 20) << QRectF(50, 50, 10, 10))
       
    66         << (QList<QRectF>() << QRectF(20, 50, 10, 10) << QRectF(8.45299, 26.906, 10, 10) << QRectF(40,80, 10, 20) << QRectF(28.453, 66.906, 10, 10));
       
    67 
       
    68     QTest::newRow("landscape")
       
    69         << QRectF(0, 0, 100, 50)
       
    70         << (QList<QRectF>() << QRectF(0, 0, 20, 10) << QRectF(50, 50, 20, 10) << QRectF(50, 50, 10, 20) << QRectF(50, 50, 10, 10))
       
    71         << (QList<QRectF>() << QRectF(40, 20, 20, 10) << QRectF(23.6701, 11.835, 20, 10) << QRectF(90, 30, 10, 20) << QRectF(73.6701, 31.835, 10, 10));
       
    72 
       
    73     QTest::newRow("out of rect")
       
    74         << QRectF(0, 0, 100, 100)
       
    75         << (QList<QRectF>() << QRectF(0, 0, 200, 200) )
       
    76         << (QList<QRectF>() << QRectF(0, 0, 200, 200) );
       
    77 }
       
    78 
       
    79 void TestHsDomainModel::testHsAnchorPointInBottomRight()
       
    80 {
       
    81     QFETCH(QRectF, contentArea);
       
    82     QFETCH(QList<QRectF>, widgets);
       
    83     QFETCH(QList<QRectF>, expectedWidgets);
       
    84 
       
    85     HsWidgetPositioningOnWidgetAdd *converter =
       
    86         new HsAnchorPointInBottomRight;
       
    87 
       
    88     QList<QRectF> convertedWidgets =
       
    89         converter->convert(contentArea, QList<QRectF>(),
       
    90                            widgets, QPointF());
       
    91 
       
    92     QCOMPARE(convertedWidgets.count(),
       
    93              expectedWidgets.count());
       
    94 
       
    95     for (int i = 0; i < expectedWidgets.count(); ++i) {
       
    96         QVERIFY(hsRectCompare(convertedWidgets.at(i),expectedWidgets.at(i)));
       
    97     }
       
    98 
       
    99     delete converter;
       
   100 }
       
   101 
       
   102 void TestHsDomainModel::testHsWidgetOrganizerCase1_data()
       
   103 {
       
   104     // Case 1: anchorDistance = 5, searchRowByRow, portrait
       
   105     QTest::addColumn<QRectF>("contentArea");
       
   106     QTest::addColumn<QList<QRectF> >("existingWidgets");
       
   107     QTest::addColumn<QList<QRectF> >("widgets");
       
   108     QTest::addColumn<QList<QRectF> >("expectedWidgets");
       
   109 
       
   110     // empty parameters
       
   111     QTest::newRow("case1.1")
       
   112         << QRectF() << QList<QRectF>() << QList<QRectF>() << QList<QRectF>();
       
   113 
       
   114     // invalid parameters
       
   115     QTest::newRow("case1.2")
       
   116         << QRectF(0, 0, 100, 100) << QList<QRectF>()
       
   117         << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10))
       
   118         << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(15, 0, 10, 10) << QRectF(30, 0, 10, 10));
       
   119 
       
   120     // basic set of similar size rects to simple content area's first row
       
   121     QTest::newRow("case1.3")
       
   122         << QRectF(54, 763, 24, 5434)
       
   123         << (QList<QRectF>() << QRectF(343, 321, 1034, 102) << QRectF(3320, 3420, 1430, 1043) << QRectF(0, 43, 10, 997))
       
   124         << (QList<QRectF>() << QRectF(322, 12, 835, 623) << QRectF(624, 56, 536, 895) << QRectF(31, 423, 32, 9823))
       
   125         << QList<QRectF>();
       
   126 
       
   127     // set of similar height rects to simple content area on multiple rows
       
   128     QTest::newRow("case1.4")
       
   129         << QRectF(0, 0, 100, 100) << QList<QRectF>()
       
   130         << (QList<QRectF>() << QRectF(0, 0, 40, 10) << QRectF(0, 0, 50, 10) << QRectF(0, 0, 95, 10) << QRectF(0, 0, 50, 10) << QRectF(0, 0, 10, 10))
       
   131         << (QList<QRectF>() << QRectF(0, 0, 40, 10) << QRectF(45, 0, 50, 10) << QRectF(0, 15, 95, 10) << QRectF(0, 30, 50, 10) << QRectF(55, 30, 10, 10));
       
   132 
       
   133     // set of random size rects to simple content area on multiple rows
       
   134     QTest::newRow("case1.5")
       
   135         << QRectF(0, 0, 100, 100) << QList<QRectF>()
       
   136         << (QList<QRectF>() << QRectF(0, 0, 13, 22) << QRectF(0, 0, 59, 39) << QRectF(0, 0, 93, 8) << QRectF(0, 0, 44, 17) << QRectF(0, 0, 22, 31))
       
   137         << (QList<QRectF>() << QRectF(85, 0, 13, 22) << QRectF(0, 0, 59, 39) << QRectF(0, 60, 93, 8) << QRectF(0, 40, 44, 17) << QRectF(60, 0, 22, 31));
       
   138 
       
   139     // set of random size rects to simple content area on multiple rows with existing widgets
       
   140     QTest::newRow("case1.6")
       
   141         << QRectF(0, 0, 100, 100)
       
   142         << (QList<QRectF>() << QRectF(42, 16, 14, 11) << QRectF(9, 12, 13, 62) << QRectF(55, 65, 20, 20) << QRectF(70, 20, 13, 11) << QRectF(30, 90, 22, 8))
       
   143         << (QList<QRectF>() << QRectF(0, 0, 13, 22) << QRectF(0, 0, 42, 34) << QRectF(0, 0, 54, 8) << QRectF(0, 0, 32, 17) << QRectF(0, 0, 27, 24))
       
   144         << (QList<QRectF>() << QRectF(25, 0, 13, 22) << QRectF(25, 30, 42, 34) << QRectF(0, 75, 54, 8) << QRectF(60, 0, 32, 17) << QRectF(70, 35, 27, 24));
       
   145 
       
   146 }
       
   147 
       
   148 void TestHsDomainModel::testHsWidgetOrganizerCase1()
       
   149 {
       
   150     QFETCH(QRectF, contentArea);
       
   151     QFETCH(QList<QRectF>, existingWidgets);
       
   152     QFETCH(QList<QRectF>, widgets);
       
   153     QFETCH(QList<QRectF>, expectedWidgets);
       
   154 
       
   155     HsWidgetOrganizer *widgetOrganizer =
       
   156         new HsWidgetOrganizer(5, HsConfiguration::SearchRowByRow);
       
   157 
       
   158     QList<QRectF> convertedWidgets = widgetOrganizer->convert(contentArea, existingWidgets,
       
   159                                                                widgets, QPointF());
       
   160     // Verify amount
       
   161     QCOMPARE(convertedWidgets.count(), expectedWidgets.count());
       
   162     // Compare calculated and expected values
       
   163     for (int i = 0; i < expectedWidgets.count(); ++i) {
       
   164         QVERIFY(hsRectCompare(convertedWidgets.at(i), expectedWidgets.at(i)));
       
   165     }
       
   166 
       
   167     delete widgetOrganizer;
       
   168 }
       
   169 
       
   170 void TestHsDomainModel::testHsWidgetOrganizerCase2_data()
       
   171 {
       
   172     // CASE 2: anchorDistance = 5, searchColumnByColumn, landscape
       
   173     QTest::addColumn<QRectF>("contentArea");
       
   174     QTest::addColumn<QList<QRectF> >("existingWidgets");
       
   175     QTest::addColumn<QList<QRectF> >("widgets");
       
   176     QTest::addColumn<QList<QRectF> >("expectedWidgets");
       
   177 
       
   178     // basic set of similar size rects to simple content area's first column
       
   179     QTest::newRow("case2.1")
       
   180         << QRectF(0, 0, 100, 100) << QList<QRectF>()
       
   181         << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10))
       
   182         << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(0, 15, 10, 10) << QRectF(0, 30, 10, 10));
       
   183 
       
   184     // set of random size rects to simple content area on multiple columns with existing widgets
       
   185     QTest::newRow("case2.2")
       
   186         << QRectF(0, 0, 100, 100)
       
   187         << (QList<QRectF>() << QRectF(20, 0, 14, 18) << QRectF(68, 0, 13, 21) << QRectF(32, 30, 14, 53) << QRectF(62, 60, 31, 13) << QRectF(90, 33, 9, 8))
       
   188         << (QList<QRectF>() << QRectF(0, 0, 43, 12) << QRectF(0, 0, 20, 16) << QRectF(0, 0, 14, 25) << QRectF(0, 0, 22, 47) << QRectF(0, 0, 24, 11))
       
   189         << (QList<QRectF>() << QRectF(15, 85, 43, 12) << QRectF(35, 0, 20, 16) << QRectF(0, 70, 14, 25) << QRectF(0, 20, 22, 47) << QRectF(50, 25, 24, 11));
       
   190 }
       
   191 
       
   192 void TestHsDomainModel::testHsWidgetOrganizerCase2()
       
   193 {
       
   194     QFETCH(QRectF, contentArea);
       
   195     QFETCH(QList<QRectF>, existingWidgets);
       
   196     QFETCH(QList<QRectF>, widgets);
       
   197     QFETCH(QList<QRectF>, expectedWidgets);
       
   198 
       
   199     mainWindow.setOrientation(Qt::Horizontal);
       
   200     HsWidgetOrganizer *widgetOrganizer =
       
   201         new HsWidgetOrganizer(5, HsConfiguration::SearchColumnByColumn);
       
   202     QList<QRectF> convertedWidgets = widgetOrganizer->convert(contentArea, existingWidgets,
       
   203                                                 widgets, QPointF());
       
   204     QCOMPARE(convertedWidgets.count(), expectedWidgets.count());
       
   205     for (int i = 0; i < expectedWidgets.count(); ++i) {
       
   206         QVERIFY(hsRectCompare(convertedWidgets.at(i), expectedWidgets.at(i)));
       
   207     }
       
   208 
       
   209     delete widgetOrganizer;
       
   210     // set orientation back to normal
       
   211     mainWindow.setOrientation(Qt::Vertical);
       
   212 }
       
   213 
       
   214 void TestHsDomainModel::testHsWidgetOrganizerCase3_data()
       
   215 {
       
   216     // CASE 3: anchorDistance = 1, searchRowByRow, portrait
       
   217     QTest::addColumn<QRectF>("contentArea");
       
   218     QTest::addColumn<QList<QRectF> >("existingWidgets");
       
   219     QTest::addColumn<QList<QRectF> >("widgets");
       
   220     QTest::addColumn<QList<QRectF> >("expectedWidgets");
       
   221 
       
   222     // basic set of similar size rects to simple content area's first column
       
   223     QTest::newRow("case3.1")
       
   224         << QRectF(0, 0, 100, 100) << QList<QRectF>()
       
   225         << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10) << QRectF(0, 0, 10, 10))
       
   226         << (QList<QRectF>() << QRectF(0, 0, 10, 10) << QRectF(11, 0, 10, 10) << QRectF(22, 0, 10, 10));
       
   227 
       
   228     // set of random size rects to simple content area on multiple columns with existing widgets
       
   229     QTest::newRow("case3.2")
       
   230         << QRectF(0, 0, 100, 100)
       
   231         << (QList<QRectF>() << QRectF(10, 0, 14, 22) << QRectF(64, 0, 14, 34) << QRectF(0, 54, 34, 14) << QRectF(74, 69, 26, 12) << QRectF(41, 80, 11, 20))
       
   232         << (QList<QRectF>() << QRectF(0, 0, 46, 16) << QRectF(0, 0, 40, 19) << QRectF(0, 0, 38, 53) << QRectF(0, 0, 20, 40) << QRectF(0, 0, 38, 25))
       
   233         << (QList<QRectF>() << QRectF(53, 82, 46, 16) << QRectF(0, 80, 40, 19) << QRectF(25, 0, 38, 53) << QRectF(79, 0, 20, 40) << QRectF(35, 54, 38, 25));
       
   234 
       
   235 }
       
   236 
       
   237 void TestHsDomainModel::testHsWidgetOrganizerCase3()
       
   238 {
       
   239     QFETCH(QRectF, contentArea);
       
   240     QFETCH(QList<QRectF>, existingWidgets);
       
   241     QFETCH(QList<QRectF>, widgets);
       
   242     QFETCH(QList<QRectF>, expectedWidgets);
       
   243 
       
   244     HsWidgetOrganizer *widgetOrganizer =
       
   245         new HsWidgetOrganizer(1, HsConfiguration::SearchRowByRow);
       
   246     QList<QRectF> convertedWidgets = widgetOrganizer->convert(contentArea, existingWidgets,
       
   247                                                 widgets, QPointF());
       
   248     QCOMPARE(convertedWidgets.count(), expectedWidgets.count());
       
   249     for (int i = 0; i < expectedWidgets.count(); ++i) {
       
   250         QVERIFY(hsRectCompare(convertedWidgets.at(i), expectedWidgets.at(i)));
       
   251     }
       
   252 
       
   253     delete widgetOrganizer;
       
   254 }
       
   255 
       
   256 #endif // ONLY_MENU_TESTCASES