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