summaryrefslogtreecommitdiff
path: root/tests/auto/declarative_ui/tst_map_keepgrab.qml
blob: 285757106d543f20643d616fb941d2b45ee27aac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0

import QtQuick
import QtTest
import QtLocation
import QtPositioning

Item {
    // General-purpose elements for the test:
    id: page
    width: 200
    height: 200
    Plugin { id: testPlugin; name: "qmlgeo.test.plugin"; allowExperimental: true }


    Flickable {
        id: flickable
        anchors.fill: parent
        contentWidth: flickable.width * 4; contentHeight: flickable.height

        MapView {
            id: mapView
            x: flickable.width
            height: flickable.height - 10
            width: flickable.width - 10
            map.plugin: testPlugin

            property DragHandler __drag: mapView.map.data[2] // verified in init()
        }
    }

    SignalSpy { id: panActiveSpy; target: mapView.__drag; signalName: 'activeChanged' }
    SignalSpy { id: flickStartedSpy; target: flickable; signalName: 'flickStarted' }
    SignalSpy { id: flickEndedSpy; target: flickable; signalName: 'flickEnded' }


    TestCase {
        when: windowShown && mapView.map.mapReady
        name: "MapKeepGrabAndPreventSteal"

        function init()
        {
            mapView.map.zoomLevel = 1
            mapView.map.center = QtPositioning.coordinate(50,50)
            flickable.contentX = 0
            flickable.contentY = 0
            panActiveSpy.clear()
            flickStartedSpy.clear()
            flickEndedSpy.clear()
            // sanity check: verify that map's third child is the main DragHandler
            compare(mapView.__drag.minimumPointCount, 1)
        }

        function flick()
        {
            var i = 0
            mousePress(flickable, flickable.width - 1, 0)
            for (i = flickable.width; i > 0; i -= 5) {
                wait(5)
                mouseMove(flickable, i, 0, 0, Qt.LeftButton);
            }
            mouseRelease(flickable, i, 0)
        }

        function pan()
        {
            var i = 0
            mousePress(mapView, 0, 0)
            for (i = 0; i < flickable.width; i += 5) {
                wait(5)
                mouseMove(mapView, i, 0, 0, Qt.LeftButton);
            }
            mouseRelease(mapView, i, 0)
        }

        function test_map_preventsteal()
        {
            var center = QtPositioning.coordinate(mapView.map.center.latitude,mapView.map.center.longitude)
            flick() // flick flickable
            tryCompare(flickStartedSpy,"count",1)
            compare(flickable.flicking, true)
            pan() // pan map: this interrupts flicking
            compare(flickStartedSpy.count, 1) // didn't start flicking again
            compare(flickable.flicking, false)
            tryCompare(flickEndedSpy, "count", 0) // canceled rather than ending normally
            tryCompare(panActiveSpy, "count", 2)
            // map should change
            verify(center != mapView.map.center)
        }
    }
}