homescreenapp/hsutils/tsrc/t_hsutils/src/t_hswidgetpositioningonwidgetmove.cpp
author hgs
Wed, 06 Oct 2010 16:06:24 +0300
changeset 97 66b5fe3c07fd
parent 90 3ac3aaebaee5
permissions -rw-r--r--
201039_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
90
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2008 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
#ifndef ONLY_MENU_TESTCASES
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include "t_hsutils.h"
hgs
parents:
diff changeset
    21
#include "hsapp_defs.h"
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#define SNAP_GAP_VALUE 6
hgs
parents:
diff changeset
    24
#define SNAP_FORCE_VALUE 30
hgs
parents:
diff changeset
    25
#define SNAP_ENABLED_VALUE true
hgs
parents:
diff changeset
    26
#define SNAP_DISABLED_VALUE false
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
Q_DECLARE_METATYPE(QList<QRectF>)
hgs
parents:
diff changeset
    29
Q_DECLARE_METATYPE(HsWidgetPositioningOnWidgetMove::Result)
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
void t_hsUtils::testWidgetPositioningOnWidgetMoveInstance()
hgs
parents:
diff changeset
    32
{
hgs
parents:
diff changeset
    33
    QVERIFY(!HsWidgetPositioningOnWidgetMove::instance());
hgs
parents:
diff changeset
    34
    HsWidgetPositioningOnWidgetMove::setInstance(0);
hgs
parents:
diff changeset
    35
    QVERIFY(!HsWidgetPositioningOnWidgetMove::instance());
hgs
parents:
diff changeset
    36
    HsWidgetPositioningOnWidgetMove *snapToLines = new HsSnapToLines;
hgs
parents:
diff changeset
    37
    HsWidgetPositioningOnWidgetMove::setInstance(snapToLines);
hgs
parents:
diff changeset
    38
    QVERIFY(HsWidgetPositioningOnWidgetMove::instance() == snapToLines);
hgs
parents:
diff changeset
    39
    HsWidgetPositioningOnWidgetMove::setInstance(0);
hgs
parents:
diff changeset
    40
    QVERIFY(!HsWidgetPositioningOnWidgetMove::instance());
hgs
parents:
diff changeset
    41
}
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
void t_hsUtils::testHsSnapToLinesConstruct()
hgs
parents:
diff changeset
    44
{
hgs
parents:
diff changeset
    45
    HsSnapToLines *sl = new HsSnapToLines();
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
    QVERIFY(sl->mContainerRect.isNull());
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
    QVERIFY(qFuzzyCompare(sl->mActiveRectWidth, 0));
hgs
parents:
diff changeset
    50
    QVERIFY(qFuzzyCompare(sl->mActiveRectHeight, 0));
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
    QVERIFY(sl->mInactiveSnapRects.isEmpty());
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
    QVERIFY(sl->mInactiveRectToCompare.isNull());
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
    QVERIFY(sl->mInactiveSnapRectToCompare.rectangle.isNull());
hgs
parents:
diff changeset
    57
    QVERIFY(sl->mMovingRect.isNull());
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
    QVERIFY(qFuzzyCompare(sl->mMinDistancePosition, 0));
hgs
parents:
diff changeset
    60
    QVERIFY(qFuzzyCompare(sl->mHorizontalSnapPosition, 0));
hgs
parents:
diff changeset
    61
    QVERIFY(qFuzzyCompare(sl->mVerticalSnapPosition, 0));
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    QVERIFY(!sl->mHorizontalSnapFound);
hgs
parents:
diff changeset
    64
    QVERIFY(sl->mVerticalLine.isNull());
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
    QVERIFY(!sl->mVerticalSnapFound);
hgs
parents:
diff changeset
    67
    QVERIFY(sl->mHorizontalLine.isNull());
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
    QVERIFY(!sl->mRectLieAbove);
hgs
parents:
diff changeset
    70
    QVERIFY(!sl->mLeftInRange);
hgs
parents:
diff changeset
    71
    QVERIFY(!sl->mRightInRange);
hgs
parents:
diff changeset
    72
    QVERIFY(!sl->mIsBetterFitHorizontalSnap);
hgs
parents:
diff changeset
    73
    QVERIFY(qFuzzyCompare(sl->mDistanceVerticalEdges, 0));
hgs
parents:
diff changeset
    74
    QVERIFY(qFuzzyCompare(sl->mVerticalEdgeToLeftOfInactiveRect, 0));
hgs
parents:
diff changeset
    75
    QVERIFY(qFuzzyCompare(sl->mVerticalEdgeToRightOfInactiveRect, 0));
hgs
parents:
diff changeset
    76
    QVERIFY(qFuzzyCompare(sl->mMinVerticalEdgesDistance, 0));
hgs
parents:
diff changeset
    77
    QVERIFY(qFuzzyCompare(sl->mVerticalDistance, 0));
hgs
parents:
diff changeset
    78
    QVERIFY(qFuzzyCompare(sl->mVerticalDistanceFromSelectedRect, 0));
hgs
parents:
diff changeset
    79
    QVERIFY(qFuzzyCompare(sl->mContainerVerticalEdgeDistance, 0));
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
    QVERIFY(!sl->mRectLieLeft);
hgs
parents:
diff changeset
    82
    QVERIFY(!sl->mTopInRange);
hgs
parents:
diff changeset
    83
    QVERIFY(!sl->mBottomInRange);
hgs
parents:
diff changeset
    84
    QVERIFY(!sl->mIsBetterFitVerticalSnap);
hgs
parents:
diff changeset
    85
    QVERIFY(qFuzzyCompare(sl->mDistanceHorizontalEdges, 0));
hgs
parents:
diff changeset
    86
    QVERIFY(qFuzzyCompare(sl->mHorizontalEdgeToTopOfInactiveRect, 0));
hgs
parents:
diff changeset
    87
    QVERIFY(qFuzzyCompare(sl->mHorizontalEdgeToBottomOfInactiveRect, 0));
hgs
parents:
diff changeset
    88
    QVERIFY(qFuzzyCompare(sl->mMinHorizontalEdgesDistance, 0));
hgs
parents:
diff changeset
    89
    QVERIFY(qFuzzyCompare(sl->mHorizontalDistance, 0));
hgs
parents:
diff changeset
    90
    QVERIFY(qFuzzyCompare(sl->mHorizontalDistanceFromSelectedRect, 0));
hgs
parents:
diff changeset
    91
    QVERIFY(qFuzzyCompare(sl->mContainerHorizontalEdgeDistance, 0));
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
    QVERIFY(!sl->mSnapEnabled);
hgs
parents:
diff changeset
    94
    QVERIFY(qFuzzyCompare(sl->mSnapForce, 0));
hgs
parents:
diff changeset
    95
    QVERIFY(qFuzzyCompare(sl->mSnapGap, 0));
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
    QVERIFY(!sl->mRectVerticalEdgeLiesInLineWithVerticalLine);
hgs
parents:
diff changeset
    98
    QVERIFY(!sl->mRectLieAboveVerticalLine);
hgs
parents:
diff changeset
    99
    QVERIFY(!sl->mRectLieBelowVerticalLine);
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
    QVERIFY(!sl->mRectHorizontalEdgeLiesInLineWithHorizontalLine);
hgs
parents:
diff changeset
   102
    QVERIFY(!sl->mRectLieLeftOfHorizontalLine);
hgs
parents:
diff changeset
   103
    QVERIFY(!sl->mRectLiesRightOfHorizontalLine);
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    delete sl;
hgs
parents:
diff changeset
   106
}
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
void t_hsUtils::testHsSnapToLines_data()
hgs
parents:
diff changeset
   109
{
hgs
parents:
diff changeset
   110
    QTest::addColumn<QRectF>("containerArea");
hgs
parents:
diff changeset
   111
    QTest::addColumn<QList<QRectF> >("inActiveRects");
hgs
parents:
diff changeset
   112
    QTest::addColumn<QRectF>("activeRect");
hgs
parents:
diff changeset
   113
    QTest::addColumn<QRectF>("movingRect");
hgs
parents:
diff changeset
   114
    QTest::addColumn<HsWidgetPositioningOnWidgetMove::Result>("expectedResult");
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
    {
hgs
parents:
diff changeset
   117
        QTest::newRow("widgetOverlap")
hgs
parents:
diff changeset
   118
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   119
            << (QList<QRectF>() << QRectF(250, 250, 500, 500) << QRectF(200, 200, 100, 100) << QRectF(700, 200, 100, 100)
hgs
parents:
diff changeset
   120
                                << QRectF(700, 700, 100, 100) << QRectF(200, 700, 100, 100))
hgs
parents:
diff changeset
   121
            << QRectF(0, 0, 800, 150)
hgs
parents:
diff changeset
   122
            << QRectF(100, 100, 880, 165)
hgs
parents:
diff changeset
   123
            << HsWidgetPositioningOnWidgetMove::Result();
hgs
parents:
diff changeset
   124
    }
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
    {
hgs
parents:
diff changeset
   127
        QTest::newRow("oneWidgetOutOfSnapDistance")
hgs
parents:
diff changeset
   128
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   129
            << (QList<QRectF>())
hgs
parents:
diff changeset
   130
            << QRectF(5, 5, 100, 100)
hgs
parents:
diff changeset
   131
            << QRectF(3, 3, 110, 110)
hgs
parents:
diff changeset
   132
            << HsWidgetPositioningOnWidgetMove::Result();
hgs
parents:
diff changeset
   133
    }
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
    {
hgs
parents:
diff changeset
   136
        HsWidgetPositioningOnWidgetMove::Result snapResultCenter;
hgs
parents:
diff changeset
   137
        QTest::newRow("oneWidgetInCenterWithoutSnapping")
hgs
parents:
diff changeset
   138
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   139
            << (QList<QRectF>())
hgs
parents:
diff changeset
   140
            << QRectF(5, 5, 200, 200)
hgs
parents:
diff changeset
   141
            << QRectF(390, 390, 200, 200)
hgs
parents:
diff changeset
   142
            << snapResultCenter;
hgs
parents:
diff changeset
   143
    }
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
    {
hgs
parents:
diff changeset
   146
        //Data for snapping to Left Edge of Inactive Rectangle.
hgs
parents:
diff changeset
   147
        HsWidgetPositioningOnWidgetMove::Result snapResultLeftEdge;
hgs
parents:
diff changeset
   148
        snapResultLeftEdge.hasHorizontalSnap = true;
hgs
parents:
diff changeset
   149
        snapResultLeftEdge.horizontalSnapPosition = 100;
hgs
parents:
diff changeset
   150
        snapResultLeftEdge.verticalSnapLine = QLineF(100, 90, 100, 610);
hgs
parents:
diff changeset
   151
        QTest::newRow("snapToLeftEdgeOfInactiveRect")
hgs
parents:
diff changeset
   152
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   153
            << (QList<QRectF>() << QRectF(100, 100, 100, 100) << QRectF(175, 75, 100, 150))
hgs
parents:
diff changeset
   154
            << QRectF(0, 0, 500, 100)
hgs
parents:
diff changeset
   155
            << QRectF(110, 500, 500, 100)
hgs
parents:
diff changeset
   156
            << snapResultLeftEdge;
hgs
parents:
diff changeset
   157
    }
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
    {
hgs
parents:
diff changeset
   160
        //Data for snapping to Left Edge of Inactive Rectangle,
hgs
parents:
diff changeset
   161
        //one inactive rectangle lies below the moving rectangle
hgs
parents:
diff changeset
   162
        //one inactive rectangle lies above the moving rectangle. This rectangle does not offer big enough space for moving rectangle's width
hgs
parents:
diff changeset
   163
        HsWidgetPositioningOnWidgetMove::Result snapResultLeftEdgeBelowRect;
hgs
parents:
diff changeset
   164
        snapResultLeftEdgeBelowRect.hasHorizontalSnap = true;
hgs
parents:
diff changeset
   165
        snapResultLeftEdgeBelowRect.horizontalSnapPosition = 10 - SNAP_GAP_VALUE;
hgs
parents:
diff changeset
   166
        snapResultLeftEdgeBelowRect.verticalSnapLine = QLineF(560, 910, 560, 390);
hgs
parents:
diff changeset
   167
        QTest::newRow("snapToLeftEdgeOfInactiveRectWhichLiesBelow")
hgs
parents:
diff changeset
   168
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   169
            << (QList<QRectF>() << QRectF(550, 200, 200, 150) << QRectF(560, 800, 200, 100))
hgs
parents:
diff changeset
   170
            << QRectF(5, 0, 550, 100)
hgs
parents:
diff changeset
   171
            << QRectF(5, 400, 550, 100)
hgs
parents:
diff changeset
   172
            << snapResultLeftEdgeBelowRect;
hgs
parents:
diff changeset
   173
    }
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    {
hgs
parents:
diff changeset
   176
        //Data for snapping to Left Edge of Inactive Rectangle.
hgs
parents:
diff changeset
   177
        //The data is similar to one above, except that the rectangle can fit into the space now.
hgs
parents:
diff changeset
   178
        HsWidgetPositioningOnWidgetMove::Result snapResultLeftEdgeRectLiesAbove;
hgs
parents:
diff changeset
   179
        snapResultLeftEdgeRectLiesAbove.hasHorizontalSnap = true;
hgs
parents:
diff changeset
   180
        snapResultLeftEdgeRectLiesAbove.horizontalSnapPosition = 50 - SNAP_GAP_VALUE;
hgs
parents:
diff changeset
   181
        snapResultLeftEdgeRectLiesAbove.verticalSnapLine = QLineF(550, 510, 550, 190);
hgs
parents:
diff changeset
   182
        QTest::newRow("snapToLeftEdgeOfInactiveRectWhichLiesAbove")
hgs
parents:
diff changeset
   183
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   184
            << (QList<QRectF>() << QRectF(560, 800, 200, 100) << QRectF(550, 200, 200, 150))
hgs
parents:
diff changeset
   185
            << QRectF(5, 0, 500, 100)
hgs
parents:
diff changeset
   186
            << QRectF(55, 400, 500, 100)
hgs
parents:
diff changeset
   187
            << snapResultLeftEdgeRectLiesAbove;
hgs
parents:
diff changeset
   188
    }
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    {
hgs
parents:
diff changeset
   191
        //Data for snapping to the left Edge of Inactive rect which are already alligned
hgs
parents:
diff changeset
   192
        //and the bottom of already alligned widgets on the bottom
hgs
parents:
diff changeset
   193
        HsWidgetPositioningOnWidgetMove::Result snapResultRectsAllignedOnLeftAndBottom;
hgs
parents:
diff changeset
   194
        snapResultRectsAllignedOnLeftAndBottom.hasHorizontalSnap = true;
hgs
parents:
diff changeset
   195
        snapResultRectsAllignedOnLeftAndBottom.horizontalSnapPosition = 100;
hgs
parents:
diff changeset
   196
        snapResultRectsAllignedOnLeftAndBottom.verticalSnapLine = QLineF(100, 910, 100, 90);
hgs
parents:
diff changeset
   197
        snapResultRectsAllignedOnLeftAndBottom.hasVerticalSnap = true;
hgs
parents:
diff changeset
   198
        snapResultRectsAllignedOnLeftAndBottom.verticalSnapPosition = 820; //The width of the rectangle is 90
hgs
parents:
diff changeset
   199
        snapResultRectsAllignedOnLeftAndBottom.horizontalSnapLine = QLineF(80, 910, 910, 910);
hgs
parents:
diff changeset
   200
        QTest::newRow("snapToLeftAndBottomEdgeOfTwoAllignedRects")
hgs
parents:
diff changeset
   201
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   202
            << (QList<QRectF>() << QRectF(100, 400, 150, 125) << QRectF(100, 100, 100, 100) << QRectF(450, 820, 100, 90) << QRectF(750, 750, 150, 160))
hgs
parents:
diff changeset
   203
            << QRectF(50, 750, 100, 90)
hgs
parents:
diff changeset
   204
            << QRectF(90, 800, 120, 100)
hgs
parents:
diff changeset
   205
            << snapResultRectsAllignedOnLeftAndBottom;
hgs
parents:
diff changeset
   206
    }
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
    {
hgs
parents:
diff changeset
   209
        //Data for snapping to the Right side of already alligned widgets on the right side
hgs
parents:
diff changeset
   210
        //and top of already alligned widgets
hgs
parents:
diff changeset
   211
        HsWidgetPositioningOnWidgetMove::Result snapResultRectsAllignedOnRightAndTop;
hgs
parents:
diff changeset
   212
        snapResultRectsAllignedOnRightAndTop.hasHorizontalSnap = true;
hgs
parents:
diff changeset
   213
        snapResultRectsAllignedOnRightAndTop.horizontalSnapPosition = 540;
hgs
parents:
diff changeset
   214
        snapResultRectsAllignedOnRightAndTop.verticalSnapLine = QLineF(600, 60, 600, 910);
hgs
parents:
diff changeset
   215
        snapResultRectsAllignedOnRightAndTop.hasVerticalSnap = true;
hgs
parents:
diff changeset
   216
        snapResultRectsAllignedOnRightAndTop.verticalSnapPosition = 50;
hgs
parents:
diff changeset
   217
        snapResultRectsAllignedOnRightAndTop.horizontalSnapLine = QLineF(40, 50, 620, 50);
hgs
parents:
diff changeset
   218
        QTest::newRow("snapToRightAndTopEdgeOfTwoAllignedRects")
hgs
parents:
diff changeset
   219
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   220
            << (QList<QRectF>() << QRectF(300, 50, 50, 300) << QRectF(500, 500, 100, 100) << QRectF(50, 50, 150, 150) << QRectF(400, 800, 200, 100))
hgs
parents:
diff changeset
   221
            << QRectF(500, 50, 60, 100)
hgs
parents:
diff changeset
   222
            << QRectF(550, 70, 60, 100)
hgs
parents:
diff changeset
   223
            << snapResultRectsAllignedOnRightAndTop;
hgs
parents:
diff changeset
   224
    }
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
    {
hgs
parents:
diff changeset
   227
        //Data for snapping to the left Edge of one Inactive rect and top edge of another Inactive rect
hgs
parents:
diff changeset
   228
        //distance of both edges of the rectangle are at the same distance from the edge under comparison
hgs
parents:
diff changeset
   229
        HsWidgetPositioningOnWidgetMove::Result snapResultSameDistanceToMovingEdgesSnapToLeftAndTopEdge;
hgs
parents:
diff changeset
   230
        snapResultSameDistanceToMovingEdgesSnapToLeftAndTopEdge.hasHorizontalSnap = true;
hgs
parents:
diff changeset
   231
        snapResultSameDistanceToMovingEdgesSnapToLeftAndTopEdge.horizontalSnapPosition = 100;
hgs
parents:
diff changeset
   232
        snapResultSameDistanceToMovingEdgesSnapToLeftAndTopEdge.verticalSnapLine = QLineF(100, 450, 100, 90);
hgs
parents:
diff changeset
   233
        snapResultSameDistanceToMovingEdgesSnapToLeftAndTopEdge.hasVerticalSnap = true;
hgs
parents:
diff changeset
   234
        snapResultSameDistanceToMovingEdgesSnapToLeftAndTopEdge.verticalSnapPosition = 380;
hgs
parents:
diff changeset
   235
        snapResultSameDistanceToMovingEdgesSnapToLeftAndTopEdge.horizontalSnapLine = QLineF(70, 380, 690, 380);
hgs
parents:
diff changeset
   236
        QTest::newRow("snapToLeftEdgeAndTopEdgeOfInactiveRectDistanceToMovingRectsEdgesSame")
hgs
parents:
diff changeset
   237
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   238
            << (QList<QRectF>() << QRectF(100, 100, 200, 100) << QRectF(600, 380, 80, 300))
hgs
parents:
diff changeset
   239
            << QRectF(0, 0, 40, 40)
hgs
parents:
diff changeset
   240
            << QRectF(80, 400, 40, 40)
hgs
parents:
diff changeset
   241
            << snapResultSameDistanceToMovingEdgesSnapToLeftAndTopEdge;
hgs
parents:
diff changeset
   242
    }
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
    {
hgs
parents:
diff changeset
   245
        //Data for snapping when the inactive widgets edges are equal distance from the Left and top edge of Moving Rect
hgs
parents:
diff changeset
   246
        HsWidgetPositioningOnWidgetMove::Result snapResultMovingRectLeftAndTopEdgeSameDistance;
hgs
parents:
diff changeset
   247
        snapResultMovingRectLeftAndTopEdgeSameDistance.hasHorizontalSnap = true;
hgs
parents:
diff changeset
   248
        snapResultMovingRectLeftAndTopEdgeSameDistance.horizontalSnapPosition = 80;
hgs
parents:
diff changeset
   249
        snapResultMovingRectLeftAndTopEdgeSameDistance.verticalSnapLine = QLineF(80, 90, 80, 450);
hgs
parents:
diff changeset
   250
        snapResultMovingRectLeftAndTopEdgeSameDistance.hasVerticalSnap = true;
hgs
parents:
diff changeset
   251
        snapResultMovingRectLeftAndTopEdgeSameDistance.verticalSnapPosition = 80;
hgs
parents:
diff changeset
   252
        snapResultMovingRectLeftAndTopEdgeSameDistance.horizontalSnapLine = QLineF(90, 80, 450, 80);
hgs
parents:
diff changeset
   253
        QTest::newRow("movingRectsLeftAndtopEdgeAreEqualDistanceFromInactiveRectsEdges")
hgs
parents:
diff changeset
   254
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   255
            << (QList<QRectF>() << QRectF(280, 400, 40, 40) << QRectF(80, 400, 40, 40) << QRectF(400, 180, 40, 40) << QRectF(400, 80, 40, 40))
hgs
parents:
diff changeset
   256
            << QRectF(50, 50, 200, 100)
hgs
parents:
diff changeset
   257
            << QRectF(100, 100, 200, 100)
hgs
parents:
diff changeset
   258
            << snapResultMovingRectLeftAndTopEdgeSameDistance;
hgs
parents:
diff changeset
   259
    }
hgs
parents:
diff changeset
   260
hgs
parents:
diff changeset
   261
    {
hgs
parents:
diff changeset
   262
        //Data for snapping the Right and Bootom edge of moving rect which are equal distance from Inactive rects edges
hgs
parents:
diff changeset
   263
        HsWidgetPositioningOnWidgetMove::Result snapResultMovingRectRightAndBottomEdgeSameDistance;
hgs
parents:
diff changeset
   264
        snapResultMovingRectRightAndBottomEdgeSameDistance.hasHorizontalSnap = true;
hgs
parents:
diff changeset
   265
        snapResultMovingRectRightAndBottomEdgeSameDistance.horizontalSnapPosition = 690;
hgs
parents:
diff changeset
   266
        snapResultMovingRectRightAndBottomEdgeSameDistance.verticalSnapLine = QLineF(840, 190, 840, 950);
hgs
parents:
diff changeset
   267
        snapResultMovingRectRightAndBottomEdgeSameDistance.hasVerticalSnap = true;
hgs
parents:
diff changeset
   268
        snapResultMovingRectRightAndBottomEdgeSameDistance.verticalSnapPosition = 710;
hgs
parents:
diff changeset
   269
        snapResultMovingRectRightAndBottomEdgeSameDistance.horizontalSnapLine = QLineF(190, 860, 860, 860);
hgs
parents:
diff changeset
   270
        QTest::newRow("movingRectsRightAndBottomEdgeAreEqualDistanceFromInactiveRectsEdges")
hgs
parents:
diff changeset
   271
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   272
            << (QList<QRectF>() << QRectF(680, 200, 40, 40) << QRectF(800, 200, 40, 40) << QRectF(800, 900, 40, 40)
hgs
parents:
diff changeset
   273
                                << QRectF(200, 670, 40, 40) << QRectF(200, 820, 40, 40))
hgs
parents:
diff changeset
   274
            << QRectF(650, 640, 150, 150)
hgs
parents:
diff changeset
   275
            << QRectF(700, 690, 150, 150)
hgs
parents:
diff changeset
   276
            << snapResultMovingRectRightAndBottomEdgeSameDistance;
hgs
parents:
diff changeset
   277
    }
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
    {
hgs
parents:
diff changeset
   280
        //Data for snapping to Right Edge of Inactive Rectangle, inactive rect lies above the Moving rect,
hgs
parents:
diff changeset
   281
        //distance of moving rect's right edge from the inactive widget's right edge is equal to
hgs
parents:
diff changeset
   282
        //the distance of moving widget's left edge from the inactive widget's left edge.
hgs
parents:
diff changeset
   283
        HsWidgetPositioningOnWidgetMove::Result snapResultRightEdge;
hgs
parents:
diff changeset
   284
        snapResultRightEdge.hasHorizontalSnap = true;
hgs
parents:
diff changeset
   285
        snapResultRightEdge.horizontalSnapPosition = 200;
hgs
parents:
diff changeset
   286
        snapResultRightEdge.verticalSnapLine = QLineF(900, 90, 900, 610);
hgs
parents:
diff changeset
   287
        QTest::newRow("snapToRightEdgeOfInactiveRect")
hgs
parents:
diff changeset
   288
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   289
            << (QList<QRectF>() << QRectF(725, 75, 100, 150) << QRectF(800, 100, 100, 100))
hgs
parents:
diff changeset
   290
            << QRectF(225, 500, 700, 100)
hgs
parents:
diff changeset
   291
            << QRectF(225, 500, 700, 100)
hgs
parents:
diff changeset
   292
            << snapResultRightEdge;
hgs
parents:
diff changeset
   293
    }
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
    {
hgs
parents:
diff changeset
   296
        //Data for snapping to Top Edge of Inactive Rectangle.
hgs
parents:
diff changeset
   297
        HsWidgetPositioningOnWidgetMove::Result snapResultTopEdge;
hgs
parents:
diff changeset
   298
        snapResultTopEdge.hasVerticalSnap = true;
hgs
parents:
diff changeset
   299
        snapResultTopEdge.verticalSnapPosition = 100;
hgs
parents:
diff changeset
   300
        snapResultTopEdge.horizontalSnapLine = QLineF(90, 100, 630, 100);
hgs
parents:
diff changeset
   301
        QTest::newRow("snapToTopEdgeOfInactiveRect")
hgs
parents:
diff changeset
   302
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   303
            << (QList<QRectF>() << QRectF(100, 100, 100, 100) << QRectF(75, 175, 150, 100) << QRectF(100, 600, 100, 100) << QRectF(75, 675, 150, 100))
hgs
parents:
diff changeset
   304
            << QRectF(400, 120, 200, 400)
hgs
parents:
diff changeset
   305
            << QRectF(400, 120, 220, 440)
hgs
parents:
diff changeset
   306
            << snapResultTopEdge;
hgs
parents:
diff changeset
   307
    }
hgs
parents:
diff changeset
   308
hgs
parents:
diff changeset
   309
    {
hgs
parents:
diff changeset
   310
        //Data for snapping to Bottom Edge of Inactive Rectangle.
hgs
parents:
diff changeset
   311
        HsWidgetPositioningOnWidgetMove::Result snapResultBottomEdge;
hgs
parents:
diff changeset
   312
        snapResultBottomEdge.hasVerticalSnap = true;
hgs
parents:
diff changeset
   313
        snapResultBottomEdge.verticalSnapPosition = 315;
hgs
parents:
diff changeset
   314
        snapResultBottomEdge.horizontalSnapLine = QLineF(65, 800, 855, 800);
hgs
parents:
diff changeset
   315
        QTest::newRow("snapToBottomEdgeOfInactiveRect")
hgs
parents:
diff changeset
   316
            << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   317
            << (QList<QRectF>() << QRectF(100, 100, 100, 100) << QRectF(75, 175, 150, 100) << QRectF(100, 600, 100, 100) << QRectF(75, 675, 150, 125))
hgs
parents:
diff changeset
   318
            << QRectF(600, 300, 220, 485)
hgs
parents:
diff changeset
   319
            << QRectF(625, 325, 220, 485)
hgs
parents:
diff changeset
   320
            << snapResultBottomEdge;
hgs
parents:
diff changeset
   321
    }
hgs
parents:
diff changeset
   322
hgs
parents:
diff changeset
   323
}
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
void t_hsUtils::testHsSnapToLines()
hgs
parents:
diff changeset
   326
{
hgs
parents:
diff changeset
   327
    QFETCH(QRectF, containerArea);
hgs
parents:
diff changeset
   328
    QFETCH(QList<QRectF>, inActiveRects);
hgs
parents:
diff changeset
   329
    QFETCH(QRectF, activeRect);
hgs
parents:
diff changeset
   330
    QFETCH(QRectF, movingRect);
hgs
parents:
diff changeset
   331
    QFETCH(HsWidgetPositioningOnWidgetMove::Result, expectedResult);
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
    HsWidgetPositioningOnWidgetMove::setInstance(new HsSnapToLines);
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
    QVariantHash snapConfiguration;
hgs
parents:
diff changeset
   336
    snapConfiguration[Hs::snapEnabled] = QString::number(SNAP_ENABLED_VALUE);
hgs
parents:
diff changeset
   337
    snapConfiguration[Hs::snapForce] = QString::number(SNAP_FORCE_VALUE);
hgs
parents:
diff changeset
   338
    snapConfiguration[Hs::snapGap] = QString::number(SNAP_GAP_VALUE);
hgs
parents:
diff changeset
   339
hgs
parents:
diff changeset
   340
    HsWidgetPositioningOnWidgetMove::instance()->setConfiguration(snapConfiguration);
hgs
parents:
diff changeset
   341
    HsWidgetPositioningOnWidgetMove::instance()->setPagePresentation(containerArea, inActiveRects, activeRect);
hgs
parents:
diff changeset
   342
    HsWidgetPositioningOnWidgetMove::Result convertedResult = HsWidgetPositioningOnWidgetMove::instance()->run(movingRect);
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
    QVERIFY(hsResultCompare(convertedResult, expectedResult));
hgs
parents:
diff changeset
   345
}
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
void t_hsUtils::testHsSnapToLinesSnapDisabled_data()
hgs
parents:
diff changeset
   348
{
hgs
parents:
diff changeset
   349
    QTest::addColumn<QRectF>("containerArea");
hgs
parents:
diff changeset
   350
    QTest::addColumn< QList<QRectF> >("inActiveRects");
hgs
parents:
diff changeset
   351
    QTest::addColumn<QRectF>("activeRect");
hgs
parents:
diff changeset
   352
    QTest::addColumn<QRectF>("movingRect");
hgs
parents:
diff changeset
   353
    QTest::addColumn<HsWidgetPositioningOnWidgetMove::Result>("expectedResult");
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
    QTest::newRow("SnapDisabled")
hgs
parents:
diff changeset
   356
        << QRectF(0, 0, 1000, 1000)
hgs
parents:
diff changeset
   357
        << (QList<QRectF>())
hgs
parents:
diff changeset
   358
        << QRectF(5, 5, 200, 200)
hgs
parents:
diff changeset
   359
        << QRectF(380, 380, 200, 200)
hgs
parents:
diff changeset
   360
        << HsWidgetPositioningOnWidgetMove::Result();
hgs
parents:
diff changeset
   361
}
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
void t_hsUtils::testHsSnapToLinesSnapDisabled()
hgs
parents:
diff changeset
   364
{
hgs
parents:
diff changeset
   365
    QFETCH(QRectF, containerArea);
hgs
parents:
diff changeset
   366
    QFETCH(QList<QRectF>, inActiveRects);
hgs
parents:
diff changeset
   367
    QFETCH(QRectF, activeRect);
hgs
parents:
diff changeset
   368
    QFETCH(QRectF, movingRect);
hgs
parents:
diff changeset
   369
    QFETCH(HsWidgetPositioningOnWidgetMove::Result, expectedResult);
hgs
parents:
diff changeset
   370
hgs
parents:
diff changeset
   371
    HsWidgetPositioningOnWidgetMove::setInstance(new HsSnapToLines);
hgs
parents:
diff changeset
   372
hgs
parents:
diff changeset
   373
    QVariantHash snapConfiguration;
hgs
parents:
diff changeset
   374
    snapConfiguration[Hs::snapEnabled] = QString::number(SNAP_DISABLED_VALUE);
hgs
parents:
diff changeset
   375
hgs
parents:
diff changeset
   376
    HsWidgetPositioningOnWidgetMove::instance()->setConfiguration(snapConfiguration);
hgs
parents:
diff changeset
   377
    HsWidgetPositioningOnWidgetMove::instance()->setPagePresentation(containerArea, inActiveRects, activeRect);
hgs
parents:
diff changeset
   378
    HsWidgetPositioningOnWidgetMove::Result convertedResult = HsWidgetPositioningOnWidgetMove::instance()->run(movingRect);
hgs
parents:
diff changeset
   379
hgs
parents:
diff changeset
   380
    QVERIFY(hsResultCompare(convertedResult, expectedResult));
hgs
parents:
diff changeset
   381
}
hgs
parents:
diff changeset
   382
hgs
parents:
diff changeset
   383
bool t_hsUtils::hsLineCompare(QLineF l1, QLineF l2)
hgs
parents:
diff changeset
   384
{
hgs
parents:
diff changeset
   385
    if ((l1.p1() == l2.p1() || l1.p1() == l2.p2())
hgs
parents:
diff changeset
   386
        && (l1.p2() == l2.p1() || l1.p2() == l2.p2())) {
hgs
parents:
diff changeset
   387
        return true;
hgs
parents:
diff changeset
   388
    }
hgs
parents:
diff changeset
   389
    else {
hgs
parents:
diff changeset
   390
        return false;
hgs
parents:
diff changeset
   391
    }
hgs
parents:
diff changeset
   392
}
hgs
parents:
diff changeset
   393
hgs
parents:
diff changeset
   394
bool t_hsUtils::hsResultCompare(const HsWidgetPositioningOnWidgetMove::Result& sr1, const HsWidgetPositioningOnWidgetMove::Result& sr2)
hgs
parents:
diff changeset
   395
{
hgs
parents:
diff changeset
   396
    bool resultsAreSame = false;
hgs
parents:
diff changeset
   397
    bool horizontalLinesSame = false;
hgs
parents:
diff changeset
   398
    bool verticalLinesSame = false;
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
    qDebug() << "Converted Result = " <<sr1.hasHorizontalSnap <<sr1.horizontalSnapPosition<<sr1.hasVerticalSnap<<sr1.verticalSnapPosition;
hgs
parents:
diff changeset
   401
    qDebug() << "Expectted Result = " <<sr2.hasHorizontalSnap <<sr2.horizontalSnapPosition<<sr2.hasVerticalSnap<<sr2.verticalSnapPosition;
hgs
parents:
diff changeset
   402
hgs
parents:
diff changeset
   403
    if ((sr1.hasHorizontalSnap == sr2.hasHorizontalSnap)
hgs
parents:
diff changeset
   404
        && (sr1.horizontalSnapPosition == sr2.horizontalSnapPosition)
hgs
parents:
diff changeset
   405
        && (sr1.hasVerticalSnap == sr2.hasVerticalSnap)
hgs
parents:
diff changeset
   406
        && (sr1.verticalSnapPosition == sr2.verticalSnapPosition)) {
hgs
parents:
diff changeset
   407
        //Check if Horizontal Snap Position Exists and compare the vertical line
hgs
parents:
diff changeset
   408
        if (sr1.hasHorizontalSnap) {
hgs
parents:
diff changeset
   409
            QLineF l1 = sr1.verticalSnapLine;
hgs
parents:
diff changeset
   410
            QLineF l2 = sr2.verticalSnapLine;
hgs
parents:
diff changeset
   411
            verticalLinesSame = hsLineCompare(l1, l2);
hgs
parents:
diff changeset
   412
            qDebug() << "Converted Vertical Line = " << l1.x1() << l1.y1() << l1.x2() << l1.y2();
hgs
parents:
diff changeset
   413
            qDebug() << "Expected Vertical Line = " << l2.x1() << l2.y1() << l2.x2() << l2.y2();
hgs
parents:
diff changeset
   414
            qDebug() << "Vertical lines are same = " << verticalLinesSame;
hgs
parents:
diff changeset
   415
        }
hgs
parents:
diff changeset
   416
        else {
hgs
parents:
diff changeset
   417
            verticalLinesSame = true;
hgs
parents:
diff changeset
   418
        }
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
        //Check if Vertical Snap Position Exists and compare the horizontal line
hgs
parents:
diff changeset
   421
        if (sr1.hasVerticalSnap) {
hgs
parents:
diff changeset
   422
            QLineF l1 = sr1.horizontalSnapLine;
hgs
parents:
diff changeset
   423
            QLineF l2 = sr2.horizontalSnapLine;
hgs
parents:
diff changeset
   424
            horizontalLinesSame = hsLineCompare(l1, l2);
hgs
parents:
diff changeset
   425
            qDebug() << "Converted Horizontal Line = " << l1.x1() << l1.y1() << l1.x2() << l1.y2();
hgs
parents:
diff changeset
   426
            qDebug() << "Expected Horizontal Line = " << l2.x1() << l2.y1() << l2.x2() << l2.y2();
hgs
parents:
diff changeset
   427
            qDebug() << "Horizontal lines are same = " << horizontalLinesSame;
hgs
parents:
diff changeset
   428
        }
hgs
parents:
diff changeset
   429
        else {
hgs
parents:
diff changeset
   430
            horizontalLinesSame = true;
hgs
parents:
diff changeset
   431
        }
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
        if (horizontalLinesSame && verticalLinesSame) {
hgs
parents:
diff changeset
   434
            resultsAreSame = true;
hgs
parents:
diff changeset
   435
        }
hgs
parents:
diff changeset
   436
    }
hgs
parents:
diff changeset
   437
hgs
parents:
diff changeset
   438
    if ( !resultsAreSame) {
hgs
parents:
diff changeset
   439
        qDebug() << "results are not the same!!!";
hgs
parents:
diff changeset
   440
    }
hgs
parents:
diff changeset
   441
    return resultsAreSame;
hgs
parents:
diff changeset
   442
}
hgs
parents:
diff changeset
   443
#endif