blob: dd98df67c78bc8bc250a3d90b3af12101974e8d1 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.0
import QtTest 1.0
import QtLocation 5.6
import QtPositioning 5.5
/*
MouseArea setup for this test case.
Map dimensions are 100 * 100
Item containing map is 120,120
(50,50)
(0,0) ---------------------------------------------------- (100,0)
| no mouse area | mouse area overlapper |
| | |
(0,20) ---------------------------------------------------- (100,20)
| mouse area upper | mouse area upper, |
| | mouse area overlapper |
| | |
| | |
| | |
(0,50) ---------------------------------------------------- (100,50)
| mouse area lower | mouse area lower, |
| | mouse area overlapper |
| | |
| | |
| | |
| | |
| | |
| | |
(0,100) ---------------------------------------------------- (100,100) |
|
|
----------(120, 120)
*/
Item {
id: page
x: 0; y: 0;
width: 120
height: 120
// General-purpose elements for the test:
Plugin { id: testPlugin; name : "qmlgeo.test.plugin"; allowExperimental: true }
function setMouseData(ma, me)
{
ma.lastX = me.x
ma.lastY = me.y
ma.lastButton = me.button
ma.lastButtons = me.buttons
ma.lastModifiers = me.modifiers
ma.lastWasHeld = me.wasHeld
ma.lastIsClick = me.isClick
ma.lastAccepted = me.accepted
}
Map {
id: map;
x: 0; y: 0; width: 100; height: 100
center {
latitude: 20
longitude: 20
}
plugin: testPlugin;
MouseArea {
id: mouseUpper
objectName: "mouseUpper"
x: 0; y: 20; width: 100; height: 29
property int lastX: -1
property int lastY: -1
property int lastButton: Qt.NoButton
property int lastButtons: Qt.NoButton
property int lastModifiers: Qt.NoModifier
property bool lastWasHeld: false;
property bool lastIsClick: false
property bool lastAccepted: false;
preventStealing: true
onClicked: page.setMouseData(mouseUpper, mouse)
onDoubleClicked: page.setMouseData(mouseUpper, mouse)
onPressed: page.setMouseData(mouseUpper, mouse)
onReleased: page.setMouseData(mouseUpper, mouse)
onPositionChanged: page.setMouseData(mouseUpper, mouse)
onPressAndHold: page.setMouseData(mouseUpper, mouse)
}
MouseArea {
id: mouseLower
objectName: "mouseLower"
x: 0; y: 50; width: 100; height: 50
property int lastX: -1
property int lastY: -1
property int lastButton: Qt.NoButton
property int lastButtons: Qt.NoButton
property int lastModifiers: Qt.NoModifier
property bool lastWasHeld: false;
property bool lastIsClick: false
property bool lastAccepted: false;
onClicked: page.setMouseData(mouseLower, mouse)
onDoubleClicked: page.setMouseData(mouseLower, mouse)
onPressed: page.setMouseData(mouseLower, mouse)
onReleased: page.setMouseData(mouseLower, mouse)
onPositionChanged: page.setMouseData(mouseLower, mouse)
onPressAndHold: page.setMouseData(mouseLower, mouse)
}
MouseArea {
id: mouseOverlapper
objectName: "mouseOverlapper"
x: 50; y: 0; width: 50; height: 100
property int lastX: -1
property int lastY: -1
property int lastButton: Qt.NoButton
property int lastButtons: Qt.NoButton
property int lastModifiers: Qt.NoModifier
property bool lastWasHeld: false;
property bool lastIsClick: false
property bool lastAccepted: false;
onClicked: page.setMouseData(mouseOverlapper, mouse)
onDoubleClicked: page.setMouseData(mouseOverlapper, mouse)
onPressed: page.setMouseData(mouseOverlapper, mouse)
onReleased: page.setMouseData(mouseOverlapper, mouse)
onPositionChanged: page.setMouseData(mouseOverlapper, mouse)
onPressAndHold: page.setMouseData(mouseOverlapper, mouse)
}
}
TestCase {
name: "MouseArea"
when: windowShown && map.mapReady
SignalSpy {id: mouseUpperClickedSpy; target: mouseUpper; signalName: "clicked"}
SignalSpy {id: mouseLowerClickedSpy; target: mouseLower; signalName: "clicked"}
SignalSpy {id: mouseOverlapperClickedSpy; target: mouseOverlapper; signalName: "clicked"}
SignalSpy {id: mouseUpperDoubleClickedSpy; target: mouseUpper; signalName: "doubleClicked"}
SignalSpy {id: mouseLowerDoubleClickedSpy; target: mouseLower; signalName: "doubleClicked"}
SignalSpy {id: mouseOverlapperDoubleClickedSpy; target: mouseOverlapper; signalName: "doubleClicked"}
SignalSpy {id: mouseUpperPressedSpy; target: mouseUpper; signalName: "onPressed"}
SignalSpy {id: mouseLowerPressedSpy; target: mouseLower; signalName: "onPressed"}
SignalSpy {id: mouseOverlapperPressedSpy; target: mouseOverlapper; signalName: "onPressed"}
SignalSpy {id: mouseUpperReleasedSpy; target: mouseUpper; signalName: "released"}
SignalSpy {id: mouseLowerReleasedSpy; target: mouseLower; signalName: "released"}
SignalSpy {id: mouseOverlapperReleasedSpy; target: mouseOverlapper; signalName: "released"}
SignalSpy {id: mouseUpperPositionChangedSpy; target: mouseUpper; signalName: "positionChanged"}
SignalSpy {id: mouseLowerPositionChangedSpy; target: mouseLower; signalName: "positionChanged"}
SignalSpy {id: mouseOverlapperPositionChangedSpy; target: mouseOverlapper; signalName: "positionChanged"}
SignalSpy {id: mouseUpperPressAndHoldSpy; target: mouseUpper; signalName: "pressAndHold"}
SignalSpy {id: mouseLowerPressAndHoldSpy; target: mouseLower; signalName: "pressAndHold"}
SignalSpy {id: mouseOverlapperPressAndHoldSpy; target: mouseOverlapper; signalName: "pressAndHold"}
SignalSpy {id: mouseUpperEnteredSpy; target: mouseUpper; signalName: "entered"}
SignalSpy {id: mouseLowerEnteredSpy; target: mouseLower; signalName: "entered"}
SignalSpy {id: mouseOverlapperEnteredSpy; target: mouseOverlapper; signalName: "entered"}
SignalSpy {id: mouseUpperExitedSpy; target: mouseUpper; signalName: "exited"}
SignalSpy {id: mouseLowerExitedSpy; target: mouseLower; signalName: "exited"}
SignalSpy {id: mouseOverlapperExitedSpy; target: mouseOverlapper; signalName: "exited"}
SignalSpy {id: mouseUpperEnabledChangedSpy; target: mouseUpper; signalName: "enabledChanged"}
SignalSpy {id: mouseUpperAcceptedButtonsChangedSpy; target: mouseUpper; signalName: "acceptedButtonsChanged"}
SignalSpy {id: mouseUpperPressedButtonsChangedSpy; target: mouseUpper; signalName: "pressedChanged"}
SignalSpy {id: mouseUpperHoveredChangedSpy; target: mouseUpper; signalName: "hoveredChanged"}
SignalSpy {id: mouseUpperPressedChangedSpy; target: mouseUpper; signalName: "pressedChanged"}
SignalSpy {id: mouseOverlapperEnabledChangedSpy; target: mouseOverlapper; signalName: "enabledChanged"}
function clear_data() {
mouseUpperClickedSpy.clear()
mouseLowerClickedSpy.clear()
mouseOverlapperClickedSpy.clear()
mouseUpperDoubleClickedSpy.clear()
mouseLowerDoubleClickedSpy.clear()
mouseOverlapperDoubleClickedSpy.clear()
mouseUpperPressedSpy.clear()
mouseLowerPressedSpy.clear()
mouseOverlapperPressedSpy.clear()
mouseUpperReleasedSpy.clear()
mouseLowerReleasedSpy.clear()
mouseOverlapperReleasedSpy.clear()
mouseUpperPositionChangedSpy.clear()
mouseLowerPositionChangedSpy.clear()
mouseOverlapperPositionChangedSpy.clear()
mouseUpperPressAndHoldSpy.clear()
mouseLowerPressAndHoldSpy.clear()
mouseOverlapperPressAndHoldSpy.clear()
mouseUpperEnteredSpy.clear()
mouseLowerEnteredSpy.clear()
mouseOverlapperEnteredSpy.clear()
mouseUpperExitedSpy.clear()
mouseLowerExitedSpy.clear()
mouseOverlapperExitedSpy.clear()
mouseUpperEnabledChangedSpy.clear()
mouseUpperAcceptedButtonsChangedSpy.clear()
mouseUpperPressedButtonsChangedSpy.clear()
mouseUpperHoveredChangedSpy.clear()
mouseUpperPressedChangedSpy.clear()
mouseUpperPositionChangedSpy.clear()
mouseOverlapperEnabledChangedSpy.clear()
}
// these 'real_' prefixed functions do sequences as
// it would occur on real app (e.g. doubleclick is in fact
// a sequence of press, release, doubleclick, release).
// (they were recorded as seen on test app). mouseClick() works ok
// because testlib internally converts it to mousePress + mouseRelease events
function real_click (target, x, y) {
mousePress(target, x,y)
mouseRelease(target, x, y)
}
function real_double_click (target, x, y) {
mousePress(target, x,y)
mouseRelease(target, x, y)
mousePress(target, x, y)
mouseDoubleClick(target, x, y)
mouseRelease(target, x, y)
}
function real_press_and_hold(target, x,y) {
mousePress(target,x,y)
wait(1000) // threshold is 800 ms
mouseRelease(target,x, y)
}
function test_enabled() {
clear_data()
// check that disabling overlapping mouse areas let events flow through
mouseUpper.enabled = false
compare(mouseUpperEnabledChangedSpy.count, 1)
compare(mouseUpperClickedSpy.count, 0)
mouseClick(map, 5, 25)
compare(mouseUpperClickedSpy.count, 0)
mouseUpper.enabled = true
mouseClick(map, 5, 25)
tryCompare(mouseUpperClickedSpy, "count", 1)
compare(mouseUpperEnabledChangedSpy.count, 2)
// when overlapping are is disabled, the event should flow through
compare(mouseOverlapperClickedSpy.count, 0)
mouseClick(map, 55, 25)
tryCompare(mouseUpperClickedSpy, "count", 1)
compare(mouseOverlapperClickedSpy.count, 1)
mouseOverlapper.enabled = false
compare(mouseOverlapperEnabledChangedSpy.count, 1)
compare(mouseOverlapper.enabled, false)
mouseClick(map, 55, 25)
tryCompare(mouseOverlapperClickedSpy, "count", 1)
compare(mouseUpperClickedSpy.count, 2)
// re-enable and verify that still works
mouseOverlapper.enabled = true
compare(mouseOverlapperEnabledChangedSpy.count, 2)
compare(mouseOverlapper.enabled, true)
mouseClick(map, 55, 25)
tryCompare(mouseOverlapperClickedSpy, "count", 2) // should consume again
compare(mouseUpperClickedSpy.count, 2)
}
function test_wheel() {
clear_data()
wait(500);
// on map but without mouse area
var startZoomLevel = 6.20
map.zoomLevel = startZoomLevel
mouseWheel(map, 5, 5, 15, 5, Qt.LeftButton, Qt.NoModifiers)
//see QDeclarativeGeoMapGestureArea::handleWheelEvent
var endZoomLevel = startZoomLevel + 5 * 0.001
compare(map.zoomLevel,endZoomLevel)
map.zoomLevel = startZoomLevel
mouseWheel(map, 5, 5, -15, -5, Qt.LeftButton, Qt.NoModifiers)
//see QDeclarativeGeoMapGestureArea::handleWheelEvent
endZoomLevel = startZoomLevel - 5 * 0.001
compare(map.zoomLevel,endZoomLevel)
// on map on top of mouse area
map.zoomLevel = startZoomLevel
mouseWheel(map, 55, 75, -30, -2, Qt.LeftButton, Qt.NoModifiers)
endZoomLevel = startZoomLevel - 2 * 0.001
compare(map.zoomLevel,endZoomLevel)
// outside of map
map.zoomLevel = startZoomLevel
mouseWheel(map, -100, -100, 40, 4, Qt.LeftButton, Qt.NoModifiers)
compare(map.zoomLevel,startZoomLevel)
}
function test_aaa_basic_properties() // _aaa_ to ensure execution first
{
clear_data()
wait(50)
// default values
compare(mouseUpper.containsMouse, false)
compare(mouseUpper.pressed, false)
compare(mouseUpper.enabled, true)
compare(mouseUpper.pressedButtons, 0)
compare(mouseUpper.acceptedButtons, Qt.LeftButton)
// accepted buttons
compare(mouseUpperAcceptedButtonsChangedSpy.count, 0)
mouseUpper.acceptedButtons = Qt.RightButton | Qt.MiddleButton
compare(mouseUpper.acceptedButtons, Qt.RightButton | Qt.MiddleButton)
compare(mouseUpperAcceptedButtonsChangedSpy.count, 1)
mouseClick(map, 5, 25)
compare(mouseUpperClickedSpy.count, 0) // left button not accepted
mouseUpper.acceptedButtons = Qt.LeftButton
compare(mouseUpperAcceptedButtonsChangedSpy.count, 2)
mouseClick(map, 5, 25)
tryCompare(mouseUpperClickedSpy, "count", 1)
}
function test_basic_position_changed() {
// tests basic position changed/move when button is being pressed
clear_data();
wait(500);
mousePress(map, 5, 25)
compare(mouseUpperPressedSpy.count, 1)
compare(mouseUpper.lastAccepted, true)
compare(mouseUpper.lastButton, Qt.LeftButton)
compare(mouseUpper.lastButtons, Qt.LeftButton)
compare(mouseUpper.lastModifiers, Qt.NoModifier)
// moves within the mouse area
mouseMove(map, 5, 26, 0, Qt.LeftButton) // '0' is 'delay'
wait(1) // mouseMove event goes one extra eventloop round in the test lib
compare(mouseUpperEnteredSpy.count, 1)
compare(mouseUpperPositionChangedSpy.count, 1)
compare(mouseUpper.mouseX, 5)
compare(mouseUpper.mouseY, 6) // 20 offset, mouseXY is relative to the mouse area
compare(mouseUpper.lastAccepted, true)
compare(mouseUpper.lastButton, Qt.NoButton)
compare(mouseUpper.lastButtons, Qt.LeftButton) // buttons being pressed whilst movin'
compare(mouseUpper.lastModifiers, Qt.NoModifier)
compare(mouseUpper.lastWasHeld, false) // testfunction won't take required 800 ms
compare(mouseUpper.lastX, 5)
compare(mouseUpper.lastY, 6) // remember 20 offset of the mouse area
mouseMove(map, 6, 27, 0, Qt.LeftButton | Qt.RightButton)
wait(1)
compare(mouseUpperEnteredSpy.count, 1) // no re-entry
compare(mouseUpperPositionChangedSpy.count, 2)
compare(mouseUpper.mouseX, 6)
compare(mouseUpper.mouseY, 7)
compare(mouseUpper.lastAccepted, true)
compare(mouseUpper.lastButton, Qt.NoButton)
compare(mouseUpper.lastButtons, Qt.LeftButton | Qt.RightButton) // buttons being pressed whilst movin'
compare(mouseUpper.lastModifiers, Qt.NoModifier)
compare(mouseUpper.lastWasHeld, false) // testfunction won't take required 800 ms
compare(mouseUpper.lastX, 6)
compare(mouseUpper.lastY, 7) // remember 20 offset of the mouse area
// moves outside of mouse but within map
mouseMove(map, 2, 2, 0)
wait(1)
compare(mouseUpperExitedSpy.count, 1)
compare(mouseUpperPositionChangedSpy.count, 3)
compare(mouseUpper.mouseX, 2)
compare(mouseUpper.mouseY, -18)
// come back to map
mouseMove(map, 7, 28, 0)
wait(1)
compare(mouseUpperEnteredSpy.count, 2)
compare(mouseUpperExitedSpy.count, 1)
compare(mouseUpperPositionChangedSpy.count, 4)
compare(mouseUpper.mouseX, 7)
compare(mouseUpper.mouseY, 8)
// move outside of widget area (left). make sure that other mouse areas won't get the events
mouseMove(map, -10, 10, 0)
wait(1)
compare(mouseUpperPositionChangedSpy.count, 5)
compare(mouseUpperExitedSpy.count, 2)
compare(mouseUpper.mouseX, -10)
compare(mouseUpper.mouseY, -10)
// back in and then on top of the widget
mouseMove(map, 5, 25, 0)
wait(1)
compare(mouseUpperPositionChangedSpy.count, 6)
compare(mouseUpperExitedSpy.count, 2)
compare(mouseUpperEnteredSpy.count, 3)
compare(mouseUpper.mouseX, 5)
compare(mouseUpper.mouseY, 5)
mouseMove(map, 5, -25, 0)
wait(1)
compare(mouseUpperPositionChangedSpy.count, 7)
compare(mouseUpperExitedSpy.count, 3)
compare(mouseUpperEnteredSpy.count, 3)
compare(mouseUpper.mouseX, 5)
compare(mouseUpper.mouseY, -45)
// back in then float on top of other mouse areas
mouseMove(map, 5, 25, 0)
wait(1)
compare(mouseUpperPositionChangedSpy.count, 8)
compare(mouseUpperExitedSpy.count, 3)
compare(mouseUpperEnteredSpy.count, 4)
compare(mouseUpper.mouseX, 5)
compare(mouseUpper.mouseY, 5)
mouseMove(map, 5, 75, 0)
wait(1)
compare(mouseUpperPositionChangedSpy.count, 9)
compare(mouseUpperExitedSpy.count, 4)
compare(mouseUpperEnteredSpy.count, 4)
compare(mouseUpper.mouseX, 5)
compare(mouseUpper.mouseY, 55) // remember the 20 offset of upper mouse area
mouseMove(map, 75, 75, 0)
wait(1)
compare(mouseUpperPositionChangedSpy.count, 10)
compare(mouseUpperExitedSpy.count, 4)
compare(mouseUpperEnteredSpy.count, 4)
compare(mouseUpper.mouseX, 75)
compare(mouseUpper.mouseY, 55)
// finally back in
mouseMove(map, 5, 25, 0)
wait(1)
compare(mouseUpperPositionChangedSpy.count, 11)
compare(mouseUpperExitedSpy.count, 4)
compare(mouseUpperEnteredSpy.count, 5)
compare(mouseUpper.mouseX, 5)
compare(mouseUpper.mouseY, 5)
// check that these fellas didn't get any stupid ideas
compare(mouseLowerEnteredSpy.count, 0)
compare(mouseLowerPositionChangedSpy.count, 0)
compare(mouseOverlapperEnteredSpy.count, 0)
compare(mouseOverlapperPositionChangedSpy.count, 0)
// release mouse
mouseRelease(map, 5, 25)
// TODO enable these!
compare(mouseUpperEnteredSpy.count, 5)
compare(mouseUpperExitedSpy.count, 5) // release triggers one more exited()
}
function test_basic_press_release() {
clear_data()
wait(500);
// send to emptiness
mousePress(map, 5, 5)
compare(mouseUpperPressedSpy.count, 0)
compare(mouseLowerPressedSpy.count, 0)
compare(mouseOverlapperPressedSpy.count, 0)
mouseRelease(map, 5, 5)
compare(mouseUpperReleasedSpy.count, 0)
compare(mouseLowerReleasedSpy.count, 0)
compare(mouseOverlapperReleasedSpy.count, 0)
// send to upper mouse area
mousePress(map, 5, 25)
compare(mouseUpperPressedSpy.count, 1)
compare(mouseLowerPressedSpy.count, 0)
compare(mouseOverlapperPressedSpy.count, 0)
compare(mouseUpper.lastAccepted, true)
compare(mouseUpper.lastButton, Qt.LeftButton)
compare(mouseUpper.lastModifiers, Qt.NoModifier)
compare(mouseUpper.lastWasHeld, false)
compare(mouseUpper.lastX, 5)
compare(mouseUpper.lastY, 5) // remember 20 offset of the mouse area
mouseRelease(map, 5, 25)
compare(mouseUpperPressedSpy.count, 1)
compare(mouseUpperReleasedSpy.count, 1)
compare(mouseLowerPressedSpy.count, 0)
compare(mouseLowerReleasedSpy.count, 0)
mousePress(map, 5, 26)
compare(mouseUpperPressedSpy.count, 2)
compare(mouseLowerPressedSpy.count, 0)
compare(mouseOverlapperPressedSpy.count, 0)
mouseRelease(map, 5, 26)
compare(mouseUpperPressedSpy.count, 2)
compare(mouseUpperReleasedSpy.count, 2)
compare(mouseLowerPressedSpy.count, 0)
compare(mouseLowerReleasedSpy.count, 0)
compare(mouseUpper.lastAccepted, true)
compare(mouseUpper.lastButton, Qt.LeftButton)
compare(mouseUpper.lastModifiers, Qt.NoModifier)
compare(mouseUpper.lastWasHeld, false)
compare(mouseUpper.lastX, 5)
compare(mouseUpper.lastY, 6) // remember 20 offset of the mouse area
mousePress(map, 5, 75)
compare(mouseUpperPressedSpy.count, 2)
compare(mouseLowerPressedSpy.count, 1)
compare(mouseOverlapperPressedSpy.count, 0)
compare(mouseLower.lastAccepted, true)
compare(mouseLower.lastButton, Qt.LeftButton)
compare(mouseLower.lastModifiers, Qt.NoModifier)
compare(mouseLower.lastWasHeld, false)
compare(mouseLower.lastX, 5)
compare(mouseLower.lastY, 25) // remember 50 offset of the mouse area
mouseRelease(map, 5, 75)
compare(mouseUpperPressedSpy.count, 2)
compare(mouseUpperReleasedSpy.count, 2)
compare(mouseLowerPressedSpy.count, 1)
compare(mouseLowerReleasedSpy.count, 1)
compare(mouseOverlapperPressedSpy.count, 0)
mousePress(map, 55, 75)
compare(mouseUpperPressedSpy.count, 2)
compare(mouseLowerPressedSpy.count, 1)
compare(mouseOverlapperPressedSpy.count, 1)
compare(mouseOverlapperReleasedSpy.count, 0)
mouseMove(map, 55, 25)
mouseRelease(map, 55, 25)
compare(mouseUpperPressedSpy.count, 2)
compare(mouseUpperReleasedSpy.count, 2)
compare(mouseLowerPressedSpy.count, 1)
compare(mouseLowerReleasedSpy.count, 1)
//this should follow the same logic as Flickable, after the gesture is detected, the map should steal events.
compare(mouseOverlapperReleasedSpy.count, 0)
}
function test_basic_click() {
clear_data();
wait(500);
mouseClick(map, 5, 5, Qt.RightButton, Qt.AltModifier)
compare(mouseUpperClickedSpy.count, 0)
compare(mouseLowerClickedSpy.count, 0)
compare(mouseOverlapperClickedSpy.count, 0)
mouseUpper.acceptedButtons = Qt.LeftButton | Qt.RightButton
// TC sending click event to upper mouse area 5,25
mouseClick(map, 5, 25, Qt.RightButton, Qt.AltModifier)
tryCompare(mouseUpperClickedSpy, "count", 1)
// TC done and clicked was received
//compare(mouseUpperClickedSpy.count, 1)
compare(mouseLowerClickedSpy.count, 0)
compare(mouseOverlapperClickedSpy.count, 0)
compare(mouseUpper.lastAccepted, true)
compare(mouseUpper.lastButton, Qt.RightButton)
compare(mouseUpper.lastModifiers, Qt.AltModifier)
compare(mouseUpper.lastWasHeld, false)
compare(mouseUpper.lastX, 5)
compare(mouseUpper.lastY, 5) // remember 20 offset of the mouse area
// check we get valid geocoordinates (would be NaN if something was wrong)
// todo
//verify(mouseUpper.lastMouseEvent.coordinate.longitude > -180 && mouseUpper.lastMouseEvent.coordinate.longitude < 180)
//verify(mouseUpper.lastMouseEvent.coordinate.longitude > -90 && mouseUpper.lastMouseEvent.coordinate.latitude < 90)
// mouse click with unaccepted buttons should not cause click
mouseUpper.acceptedButtons = Qt.LeftButton
mouseClick(map, 5, 25, Qt.RightButton, Qt.AltModifier)
tryCompare(mouseUpperClickedSpy, "count", 1)
compare(mouseLowerClickedSpy.count, 0)
compare(mouseOverlapperClickedSpy.count, 0)
mouseClick(map, 5, 25)
tryCompare(mouseUpperClickedSpy, "count", 2)
compare(mouseLowerClickedSpy.count, 0)
compare(mouseOverlapperClickedSpy.count, 0)
compare(mouseUpper.lastModifiers, Qt.NoModifier)
compare(mouseUpper.lastButton, Qt.LeftButton)
mouseClick(map, 5, 55)
tryCompare(mouseUpperClickedSpy, "count", 2)
compare(mouseLowerClickedSpy.count, 1)
compare(mouseOverlapperClickedSpy.count, 0)
mouseClick(map, 5, 55)
tryCompare(mouseUpperClickedSpy,"count", 2)
compare(mouseLowerClickedSpy.count, 2)
compare(mouseOverlapperClickedSpy.count, 0)
// declaration order counts on overlap case; overlapping area
// declared later will get the events
mouseClick(map, 55, 25)
tryCompare(mouseUpperClickedSpy, "count", 2)
compare(mouseLowerClickedSpy.count, 2)
compare(mouseOverlapperClickedSpy.count, 1)
mouseClick(map, 55, 75)
tryCompare(mouseUpperClickedSpy, "count", 2)
compare(mouseLowerClickedSpy.count, 2)
compare(mouseOverlapperClickedSpy.count, 2)
real_click(map, 55, 25)
tryCompare(mouseUpperClickedSpy, "count", 2)
compare(mouseLowerClickedSpy.count, 2)
compare(mouseOverlapperClickedSpy.count, 3)
real_click(map, 55, 75)
tryCompare(mouseUpperClickedSpy, "count", 2)
compare(mouseLowerClickedSpy.count, 2)
compare(mouseOverlapperClickedSpy.count, 4)
}
function test_basic_double_click() {
clear_data();
wait(500);
real_double_click(map, 5, 5)
compare(mouseUpperDoubleClickedSpy.count, 0)
compare(mouseLowerDoubleClickedSpy.count, 0)
compare(mouseOverlapperDoubleClickedSpy.count, 0)
real_double_click(map, 5, 25)
tryCompare(mouseUpper, "lastAccepted", true)
compare(mouseUpper.lastButton, Qt.LeftButton)
compare(mouseUpper.lastModifiers, Qt.NoModifier)
compare(mouseUpper.lastWasHeld, false)
compare(mouseUpper.lastX, 5)
compare(mouseUpper.lastY, 5) // remember 20 offset of the mouse area
compare(mouseUpperDoubleClickedSpy.count, 1)
compare(mouseLowerDoubleClickedSpy.count, 0)
compare(mouseOverlapperDoubleClickedSpy.count, 0)
real_double_click(map, 5, 25)
tryCompare(mouseUpperDoubleClickedSpy, "count", 2)
compare(mouseLowerDoubleClickedSpy.count, 0)
compare(mouseOverlapperDoubleClickedSpy.count, 0)
real_double_click(map, 5, 55)
tryCompare(mouseUpperDoubleClickedSpy, "count", 2)
compare(mouseLowerDoubleClickedSpy.count, 1)
compare(mouseOverlapperDoubleClickedSpy.count, 0)
real_double_click(map, 5, 55)
tryCompare(mouseUpperDoubleClickedSpy, "count", 2)
compare(mouseLowerDoubleClickedSpy.count, 2)
compare(mouseOverlapperDoubleClickedSpy.count, 0)
// declaration order counts on overlap case; overlapping area declared later will get the events
real_double_click(map, 55, 25)
tryCompare(mouseUpperDoubleClickedSpy, "count", 2)
compare(mouseLowerDoubleClickedSpy.count, 2)
compare(mouseOverlapperDoubleClickedSpy.count, 1)
compare(mouseOverlapperPressedSpy.count, 2)
compare(mouseOverlapperReleasedSpy.count, 2)
real_double_click(map, 55, 75)
tryCompare(mouseUpperDoubleClickedSpy, "count", 2)
compare(mouseLowerDoubleClickedSpy.count, 2)
compare(mouseOverlapperDoubleClickedSpy.count, 2)
compare(mouseOverlapperPressedSpy.count, 4)
compare(mouseOverlapperReleasedSpy.count, 4)
// disable overlapping area and check event is delivered to the ones beneath
mouseOverlapper.enabled = false
real_double_click(map, 55, 25)
tryCompare(mouseUpperDoubleClickedSpy, "count", 3)
compare(mouseLowerDoubleClickedSpy.count, 2)
compare(mouseOverlapperDoubleClickedSpy.count, 2)
real_double_click(map, 55, 75)
tryCompare(mouseUpperDoubleClickedSpy, "count", 3)
compare(mouseLowerDoubleClickedSpy.count, 3)
compare(mouseOverlapperDoubleClickedSpy.count, 2)
mouseOverlapper.enabled = true
real_double_click(map, 55, 25)
tryCompare(mouseUpperDoubleClickedSpy, "count", 3)
compare(mouseLowerDoubleClickedSpy.count, 3)
compare(mouseOverlapperDoubleClickedSpy.count, 3)
real_double_click(map, 55, 75)
tryCompare(mouseUpperDoubleClickedSpy, "count", 3)
compare(mouseLowerDoubleClickedSpy.count, 3)
compare(mouseOverlapperDoubleClickedSpy.count, 4)
}
function test_release_does_not_block_clicked() { // QTBUG-66534
clear_data()
mousePress(map, 55, 75)
compare(mouseOverlapperPressedSpy.count, 1)
mouseRelease(map, 55, 25)
compare(mouseOverlapperReleasedSpy.count, 1)
mouseClick(map, 25, 25)
compare(mouseUpperClickedSpy.count, 1)
}
function test_zzz_basic_press_and_hold() { // _zzz_ to ensure execution last (takes time)
clear_data();
wait(1000);
real_press_and_hold(map, 5, 5)
compare(mouseUpperPressAndHoldSpy.count, 0)
compare(mouseLowerPressAndHoldSpy.count, 0)
compare(mouseOverlapperPressAndHoldSpy.count, 0)
mousePress(map,5,25)
wait(1000) // threshold is 800 ms
compare(mouseUpperPressAndHoldSpy.count, 1)
compare(mouseLowerPressAndHoldSpy.count, 0)
compare(mouseOverlapperPressAndHoldSpy.count, 0)
compare(mouseUpper.lastAccepted, true)
compare(mouseUpper.lastButton, Qt.LeftButton)
compare(mouseUpper.lastModifiers, Qt.NoModifier)
compare(mouseUpper.lastWasHeld, true) // notable part
compare(mouseUpper.lastX, 5)
compare(mouseUpper.lastY, 5) // remember 20 offset of the mouse area
mouseRelease(map,5,25)
real_press_and_hold(map, 5, 55)
tryCompare(mouseUpperPressAndHoldSpy, "count", 1)
compare(mouseLowerPressAndHoldSpy.count, 1)
compare(mouseOverlapperPressAndHoldSpy.count, 0)
real_press_and_hold(map, 55, 75)
tryCompare(mouseUpperPressAndHoldSpy, "count", 1)
compare(mouseLowerPressAndHoldSpy.count, 1)
compare(mouseOverlapperPressAndHoldSpy.count, 1)
compare(mouseOverlapper.lastAccepted, true)
compare(mouseOverlapper.lastButton, Qt.LeftButton)
compare(mouseOverlapper.lastModifiers, Qt.NoModifier)
compare(mouseOverlapper.lastWasHeld, true)
compare(mouseOverlapper.lastX, 5)
compare(mouseOverlapper.lastY, 75)
// make sure that the wasHeld is cleared
mouseClick(map, 55, 75)
tryCompare(mouseOverlapper, "lastAccepted", true)
compare(mouseOverlapper.lastButton, Qt.LeftButton)
compare(mouseOverlapper.lastModifiers, Qt.NoModifier)
compare(mouseOverlapper.lastWasHeld, false)
compare(mouseOverlapper.lastX, 5)
compare(mouseOverlapper.lastY, 75)
real_press_and_hold(map, 55, 25)
tryCompare(mouseUpperPressAndHoldSpy, "count", 1)
compare(mouseLowerPressAndHoldSpy.count, 1)
compare(mouseOverlapperPressAndHoldSpy.count, 2)
}
}
}