1
/****************************************************************************
3
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4
** Contact: http://www.qt-project.org/
6
** This file is part of the test suite of the Qt Toolkit.
8
** $QT_BEGIN_LICENSE:LGPL$
9
** GNU Lesser General Public License Usage
10
** This file may be used under the terms of the GNU Lesser General Public
11
** License version 2.1 as published by the Free Software Foundation and
12
** appearing in the file LICENSE.LGPL included in the packaging of this
13
** file. Please review the following information to ensure the GNU Lesser
14
** General Public License version 2.1 requirements will be met:
15
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17
** In addition, as a special exception, Nokia gives you certain additional
18
** rights. These rights are described in the Nokia Qt LGPL Exception
19
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21
** GNU General Public License Usage
22
** Alternatively, this file may be used under the terms of the GNU General
23
** Public License version 3.0 as published by the Free Software Foundation
24
** and appearing in the file LICENSE.GPL included in the packaging of this
25
** file. Please review the following information to ensure the GNU General
26
** Public License version 3.0 requirements will be met:
27
** http://www.gnu.org/copyleft/gpl.html.
30
** Alternatively, this file may be used in accordance with the terms and
31
** conditions contained in a signed written agreement between you and Nokia.
40
****************************************************************************/
42
#include <QtTest/QtTest>
43
#include <QtTest/QSignalSpy>
44
#include <QtQuick/qquickitem.h>
45
#include <QtQuick/qquickview.h>
46
#include <QtQml/qqmlcontext.h>
47
#include <QtQml/qqmlengine.h>
48
#include <QtQml/qqmlexpression.h>
50
#include <QtGui/qwindowsysteminterface_qpa.h>
51
#include <QtGui/qplatformdrag_qpa.h>
53
template <typename T> static T evaluate(QObject *scope, const QString &expression)
55
QQmlExpression expr(qmlContext(scope), scope, expression);
56
QVariant result = expr.evaluate();
58
qWarning() << expr.error().toString();
59
return result.value<T>();
62
template <> void evaluate<void>(QObject *scope, const QString &expression)
64
QQmlExpression expr(qmlContext(scope), scope, expression);
67
qWarning() << expr.error().toString();
70
class tst_QQuickDropArea: public QObject
75
void cleanupTestCase();
77
void containsDrag_internal();
78
void containsDrag_external();
81
void source_internal();
82
// void source_external();
83
void position_internal();
84
void position_external();
86
// void drop_external();
87
void simultaneousDrags();
93
void tst_QQuickDropArea::initTestCase()
98
void tst_QQuickDropArea::cleanupTestCase()
103
void tst_QQuickDropArea::containsDrag_internal()
106
QQmlComponent component(&engine);
108
"import QtQuick 2.0\n"
110
"property bool hasDrag: containsDrag\n"
111
"property int enterEvents: 0\n"
112
"property int exitEvents: 0\n"
113
"width: 100; height: 100\n"
114
"onEntered: {++enterEvents}\n"
115
"onExited: {++exitEvents}\n"
117
"objectName: \"dragItem\"\n"
119
"width: 10; height: 10\n"
122
QScopedPointer<QObject> object(component.create());
123
QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
125
dropArea->setParentItem(canvas.rootItem());
127
QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
130
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
131
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
133
evaluate<void>(dragItem, "Drag.active = true");
134
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
135
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
136
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
137
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
139
evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
140
evaluate<void>(dragItem, "Drag.active = false");
141
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
142
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
143
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
144
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
146
evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
148
dragItem->setPos(QPointF(150, 50));
149
evaluate<void>(dragItem, "Drag.active = true");
150
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
151
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
152
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
153
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
155
dragItem->setPos(QPointF(50, 50));
156
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
157
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
158
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
159
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
161
evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
162
dragItem->setPos(QPointF(150, 50));
164
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
165
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
166
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
167
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
169
evaluate<void>(dragItem, "Drag.active = false");
172
void tst_QQuickDropArea::containsDrag_external()
175
QQmlComponent component(&engine);
177
"import QtQuick 2.0\n"
179
"property bool hasDrag: containsDrag\n"
180
"property int enterEvents: 0\n"
181
"property int exitEvents: 0\n"
182
"width: 100; height: 100\n"
183
"onEntered: {++enterEvents}\n"
184
"onExited: {++exitEvents}\n"
186
QScopedPointer<QObject> object(component.create());
187
QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
189
dropArea->setParentItem(canvas.rootItem());
192
QQuickCanvas alternateCanvas;
194
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
195
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
197
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
198
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
199
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
200
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
201
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
203
evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
204
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
205
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
206
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
207
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
208
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
210
evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
212
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(150, 50), Qt::CopyAction);
213
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
214
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
215
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
216
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
218
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
219
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
220
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
221
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
222
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
224
evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
226
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(150, 50), Qt::CopyAction);
227
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
228
QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
229
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
230
QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
232
QWindowSystemInterface::handleDrop(&canvas, &data, QPoint(150, 50), Qt::CopyAction);
235
void tst_QQuickDropArea::keys_internal()
238
QQmlComponent component(&engine);
240
"import QtQuick 2.0\n"
242
"property variant dragKeys\n"
243
"property variant dropKeys: keys\n"
244
"property int enterEvents: 0\n"
245
"width: 100; height: 100\n"
246
"onEntered: {++enterEvents; dragKeys = drag.keys }\n"
248
"objectName: \"dragItem\"\n"
250
"width: 10; height: 10\n"
251
"Drag.keys: [\"red\", \"blue\"]\n"
254
QScopedPointer<QObject> object(component.create());
255
QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
257
dropArea->setParentItem(canvas.rootItem());
259
QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
262
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
264
evaluate<void>(dragItem, "Drag.active = true");
265
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
266
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
267
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
269
evaluate<void>(dragItem, "Drag.active = false");
270
evaluate<void>(dropArea, "keys = \"blue\"");
271
QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "blue");
272
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "blue");
273
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
274
evaluate<void>(dragItem, "Drag.active = true");
275
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
276
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
277
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
279
evaluate<void>(dragItem, "Drag.active = false");
280
evaluate<void>(dropArea, "keys = \"red\"");
281
QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "red");
282
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "red");
283
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
284
evaluate<void>(dragItem, "Drag.active = true");
285
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
286
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
287
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
289
evaluate<void>(dragItem, "Drag.active = false");
290
evaluate<void>(dropArea, "keys = \"green\"");
291
QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "green");
292
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "green");
293
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
294
evaluate<void>(dragItem, "Drag.active = true");
295
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
296
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
298
evaluate<void>(dragItem, "Drag.active = false");
299
evaluate<void>(dropArea, "keys = [\"red\", \"green\"]");
300
QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "red" << "green");
301
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "red" << "green");
302
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
303
evaluate<void>(dragItem, "Drag.active = true");
304
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
305
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
306
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
308
evaluate<void>(dragItem, "Drag.active = false");
309
evaluate<void>(dragItem, "Drag.keys = []");
310
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
311
evaluate<void>(dragItem, "Drag.active = true");
312
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
313
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
315
evaluate<void>(dragItem, "Drag.active = false");
316
evaluate<void>(dropArea, "keys = []");
317
QCOMPARE(dropArea->property("keys").toStringList(), QStringList());
318
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList());
319
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
320
evaluate<void>(dragItem, "Drag.active = true");
321
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
322
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
323
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList());
325
evaluate<void>(dragItem, "Drag.active = false");
326
evaluate<void>(dropArea, "keys = []");
327
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
328
evaluate<void>(dragItem, "Drag.active = true");
329
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
330
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
331
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList());
333
evaluate<void>(dragItem, "Drag.active = false");
334
evaluate<void>(dragItem, "Drag.keys = [\"red\", \"blue\"]");
335
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
336
evaluate<void>(dragItem, "Drag.active = true");
337
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
338
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
339
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
342
void tst_QQuickDropArea::keys_external()
345
QQmlComponent component(&engine);
347
"import QtQuick 2.0\n"
349
"property variant dragKeys\n"
350
"property variant dropKeys: keys\n"
351
"property int enterEvents: 0\n"
352
"width: 100; height: 100\n"
353
"onEntered: {++enterEvents; dragKeys = drag.keys }\n"
355
QScopedPointer<QObject> object(component.create());
356
QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
357
dropArea->setParentItem(canvas.rootItem());
360
QQuickCanvas alternateCanvas;
362
data.setData("text/x-red", "red");
363
data.setData("text/x-blue", "blue");
365
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
367
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
368
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
369
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
370
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
372
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
373
evaluate<void>(dropArea, "keys = \"text/x-blue\"");
374
QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-blue");
375
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-blue");
376
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
377
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
378
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
379
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
380
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
382
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
383
evaluate<void>(dropArea, "keys = \"text/x-red\"");
384
QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-red");
385
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-red");
386
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
387
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
388
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
389
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
390
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
392
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
393
evaluate<void>(dropArea, "keys = \"text/x-green\"");
394
QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-green");
395
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-green");
396
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
397
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
398
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
399
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
401
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
402
evaluate<void>(dropArea, "keys = [\"text/x-red\", \"text/x-green\"]");
403
QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-red" << "text/x-green");
404
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-red" << "text/x-green");
405
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
406
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
407
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
408
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
409
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
411
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
412
data.removeFormat("text/x-red");
413
data.removeFormat("text/x-blue");
414
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
415
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
416
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
417
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
419
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
420
evaluate<void>(dropArea, "keys = []");
421
QCOMPARE(dropArea->property("keys").toStringList(), QStringList());
422
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList());
423
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
424
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
425
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
426
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
427
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList());
429
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
430
data.setData("text/x-red", "red");
431
data.setData("text/x-blue", "blue");
432
QCOMPARE(dropArea->property("keys").toStringList(), QStringList());
433
QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList());
434
evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
435
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
436
QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
437
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
438
QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
440
QWindowSystemInterface::handleDrop(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
443
void tst_QQuickDropArea::source_internal()
446
QQmlComponent component(&engine);
448
"import QtQuick 2.0\n"
450
"property Item source: drag.source\n"
451
"property Item eventSource\n"
452
"width: 100; height: 100\n"
453
"onEntered: {eventSource = drag.source}\n"
455
"objectName: \"dragItem\"\n"
457
"width: 10; height: 10\n"
459
"Item { id: dragSource; objectName: \"dragSource\" }\n"
461
QScopedPointer<QObject> object(component.create());
462
QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
464
dropArea->setParentItem(canvas.rootItem());
466
QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
469
QQuickItem *dragSource = dropArea->findChild<QQuickItem *>("dragSource");
472
QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(0));
473
QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(0));
475
evaluate<void>(dragItem, "Drag.active = true");
476
QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(dragItem));
477
QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(dragItem));
478
QCOMPARE(evaluate<QObject *>(dropArea, "eventSource"), static_cast<QObject *>(dragItem));
480
evaluate<void>(dragItem, "Drag.active = false");
481
QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(0));
482
QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(0));
485
evaluate<void>(dropArea, "{ eventSource = null }");
486
evaluate<void>(dragItem, "Drag.source = dragSource");
488
evaluate<void>(dragItem, "Drag.active = true");
489
QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(dragSource));
490
QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(dragSource));
491
QCOMPARE(evaluate<QObject *>(dropArea, "eventSource"), static_cast<QObject *>(dragSource));
493
evaluate<void>(dragItem, "Drag.active = false");
494
QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(0));
495
QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(0));
498
// Setting a source can't be emulated using the QWindowSystemInterface API.
500
//void tst_QQuickDropArea::source_external()
504
void tst_QQuickDropArea::position_internal()
507
QQmlComponent component(&engine);
509
"import QtQuick 2.0\n"
511
"property real dragX: drag.x\n"
512
"property real dragY: drag.y\n"
513
"property real eventX\n"
514
"property real eventY\n"
515
"property int enterEvents: 0\n"
516
"property int moveEvents: 0\n"
517
"width: 100; height: 100\n"
518
"onEntered: {++enterEvents; eventX = drag.x; eventY = drag.y}\n"
519
"onPositionChanged: {++moveEvents; eventX = drag.x; eventY = drag.y}\n"
521
"objectName: \"dragItem\"\n"
523
"width: 10; height: 10\n"
526
QScopedPointer<QObject> object(component.create());
527
QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
529
dropArea->setParentItem(canvas.rootItem());
531
QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
534
evaluate<void>(dragItem, "Drag.active = true");
535
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
536
QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 0);
537
QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(50));
538
QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
539
QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(50));
540
QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
541
QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(50));
542
QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
544
evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
545
dragItem->setPos(QPointF(40, 50));
546
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
547
QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
548
QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(40));
549
QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
550
QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(40));
551
QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
552
QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(40));
553
QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
555
evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
556
dragItem->setPos(QPointF(75, 25));
557
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
558
QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
559
QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(75));
560
QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(25));
561
QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(75));
562
QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(25));
563
QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(75));
564
QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(25));
566
evaluate<void>(dragItem, "Drag.active = false");
569
void tst_QQuickDropArea::position_external()
572
QQmlComponent component(&engine);
574
"import QtQuick 2.0\n"
576
"property real dragX: drag.x\n"
577
"property real dragY: drag.y\n"
578
"property real eventX\n"
579
"property real eventY\n"
580
"property int enterEvents: 0\n"
581
"property int moveEvents: 0\n"
582
"width: 100; height: 100\n"
583
"onEntered: {++enterEvents; eventX = drag.x; eventY = drag.y}\n"
584
"onPositionChanged: {++moveEvents; eventX = drag.x; eventY = drag.y}\n"
586
QScopedPointer<QObject> object(component.create());
587
QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
589
dropArea->setParentItem(canvas.rootItem());
593
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
594
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
595
QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
596
QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(50));
597
QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
598
QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(50));
599
QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
600
QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(50));
601
QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
603
evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
604
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(40, 50), Qt::CopyAction);
605
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
606
QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
607
QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(40));
608
QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
609
QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(40));
610
QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
611
QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(40));
612
QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
614
evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
615
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(75, 25), Qt::CopyAction);
616
QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
617
QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
618
QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(75));
619
QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(25));
620
QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(75));
621
QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(25));
622
QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(75));
623
QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(25));
625
QWindowSystemInterface::handleDrop(&canvas, &data, QPoint(75, 25), Qt::CopyAction);
628
void tst_QQuickDropArea::drop_internal()
631
QQmlComponent component(&engine);
633
"import QtQuick 2.0\n"
635
"property bool accept: false\n"
636
"property bool setAccepted: false\n"
637
"property bool acceptDropAction: false\n"
638
"property bool setDropAction: false\n"
639
"property int dropAction: Qt.IgnoreAction\n"
640
"property int proposedAction: Qt.IgnoreAction\n"
641
"property int supportedActions: Qt.IgnoreAction\n"
642
"property int dropEvents: 0\n"
643
"width: 100; height: 100\n"
646
"supportedActions = drop.supportedActions\n"
647
"proposedAction = drop.action\n"
648
"if (setDropAction)\n"
649
"drop.action = dropAction\n"
650
"if (acceptDropAction)\n"
651
"drop.accept(dropAction)\n"
652
"else if (setAccepted)\n"
653
"drop.accepted = accept\n"
658
"objectName: \"dragItem\"\n"
660
"width: 10; height: 10\n"
663
QScopedPointer<QObject> object(component.create());
664
QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
666
dropArea->setParentItem(canvas.rootItem());
668
QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
671
evaluate<void>(dragItem, "Drag.active = true");
672
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::IgnoreAction));
673
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
674
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
675
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
677
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
678
evaluate<void>(dropArea, "{ accept = true; setDropAction = true; dropAction = Qt.LinkAction }");
679
evaluate<void>(dragItem, "Drag.active = true");
680
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
681
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
682
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
683
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
685
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
686
evaluate<void>(dropArea, "{ setAccepted = true; }");
687
evaluate<void>(dragItem, "Drag.active = true");
688
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
689
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
690
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
691
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
693
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
694
evaluate<void>(dropArea, "{ accept = false; setAccepted = true; }");
695
evaluate<void>(dragItem, "Drag.active = true");
696
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::IgnoreAction));
697
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
698
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
699
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
701
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
702
evaluate<void>(dropArea, "{ setAccepted = false; setDropAction = false; acceptDropAction = true; }");
703
evaluate<void>(dragItem, "Drag.active = true");
704
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
705
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
706
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
707
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
709
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
710
evaluate<void>(dropArea, "{ acceptDropAction = false; dropAction = Qt.IgnoreAction; accept = true }");
711
evaluate<void>(dragItem, "Drag.active = true");
712
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
713
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
714
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
715
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
717
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
718
evaluate<void>(dropArea, "{ setAccepted = true }");
719
evaluate<void>(dragItem, "Drag.active = true");
720
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
721
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
722
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
723
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
725
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
726
evaluate<void>(dropArea, "{ setAccepted = false }");
727
evaluate<void>(dragItem, "Drag.supportedActions = Qt.LinkAction");
728
evaluate<void>(dragItem, "Drag.active = true");
729
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
730
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
731
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
732
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
734
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
735
evaluate<void>(dropArea, "{ setAccepted = true }");
736
evaluate<void>(dragItem, "Drag.active = true");
737
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
738
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
739
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
740
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
742
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
743
evaluate<void>(dropArea, "{ setAccepted = false }");
744
evaluate<void>(dragItem, "Drag.proposedAction = Qt.LinkAction");
745
evaluate<void>(dragItem, "Drag.active = true");
746
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
747
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
748
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
749
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::LinkAction));
751
evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
752
evaluate<void>(dropArea, "{ setAccepted = true }");
753
evaluate<void>(dragItem, "Drag.active = true");
754
QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
755
QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
756
QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
757
QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::LinkAction));
760
// Setting the supportedActions can't be emulated using the QWindowSystemInterface API.
762
//void tst_QQuickDropArea::drop_external()
766
void tst_QQuickDropArea::simultaneousDrags()
769
QQmlComponent component(&engine);
771
"import QtQuick 2.0\n"
773
"property int enterEvents: 0\n"
774
"property int exitEvents: 0\n"
775
"width: 100; height: 100\n"
776
"keys: [\"red\", \"text/x-red\"]\n"
777
"onEntered: {++enterEvents}\n"
778
"onExited: {++exitEvents}\n"
780
"objectName: \"dropArea2\"\n"
781
"property int enterEvents: 0\n"
782
"property int exitEvents: 0\n"
783
"width: 100; height: 100\n"
784
"keys: [\"blue\", \"text/x-blue\"]\n"
785
"onEntered: {++enterEvents}\n"
786
"onExited: {++exitEvents}\n"
789
"objectName: \"dragItem1\"\n"
791
"width: 10; height: 10\n"
792
"Drag.keys: [\"red\", \"blue\"]"
795
"objectName: \"dragItem2\"\n"
797
"width: 10; height: 10\n"
798
"Drag.keys: [\"red\", \"blue\"]"
802
QScopedPointer<QObject> object(component.create());
803
QQuickItem *dropArea1 = qobject_cast<QQuickItem *>(object.data());
805
dropArea1->setParentItem(canvas.rootItem());
807
QQuickItem *dropArea2 = dropArea1->findChild<QQuickItem *>("dropArea2");
810
QQuickItem *dragItem1 = dropArea1->findChild<QQuickItem *>("dragItem1");
813
QQuickItem *dragItem2 = dropArea1->findChild<QQuickItem *>("dragItem2");
817
data.setData("text/x-red", "red");
818
data.setData("text/x-blue", "blue");
820
QQuickCanvas alternateCanvas;
822
// Mixed internal drags.
823
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
824
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
825
evaluate<void>(dragItem1, "Drag.active = true");
826
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
827
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
828
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
829
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
830
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
831
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
833
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
834
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
835
evaluate<void>(dragItem2, "Drag.active = true");
836
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
837
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
838
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
839
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
840
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
841
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
843
evaluate<void>(dragItem2, "Drag.active = false");
844
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
845
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
846
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
847
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
848
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
849
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
851
evaluate<void>(dragItem2, "Drag.active = true");
852
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
853
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
854
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
855
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
856
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
857
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
859
evaluate<void>(dragItem1, "Drag.active = false");
860
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
861
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
862
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
863
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
864
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
865
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
867
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
868
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
869
evaluate<void>(dragItem2, "Drag.active = false");
870
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
871
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
872
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
873
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
874
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
875
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
877
// internal then external.
878
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
879
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
880
evaluate<void>(dragItem1, "Drag.active = true");
881
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
882
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
883
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
884
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
885
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
886
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
888
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
889
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
890
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
891
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
892
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
893
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
894
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
895
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
896
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
898
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
899
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
900
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
901
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
902
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
903
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
904
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
906
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
907
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
908
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
909
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
910
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
911
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
912
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
914
evaluate<void>(dragItem1, "Drag.active = false");
915
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
916
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
917
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
918
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
919
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
920
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
922
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
923
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
924
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
925
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
926
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
927
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
928
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
929
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
930
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
932
// external then internal.
933
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
934
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
935
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
936
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
937
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
938
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
939
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
940
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
941
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
943
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
944
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
945
evaluate<void>(dragItem2, "Drag.active = true");
946
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
947
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
948
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
949
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
950
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
951
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
953
evaluate<void>(dragItem2, "Drag.active = false");
954
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
955
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
956
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
957
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
958
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
959
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
961
evaluate<void>(dragItem2, "Drag.active = true");
962
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
963
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
964
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
965
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
966
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
967
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
969
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
970
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
971
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
972
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
973
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
974
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
975
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
977
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
978
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
979
evaluate<void>(dragItem2, "Drag.active = false");
980
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
981
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
982
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
983
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
984
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
985
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
987
// Different acceptance
988
evaluate<void>(dragItem1, "Drag.keys = \"red\"");
989
evaluate<void>(dragItem2, "Drag.keys = \"blue\"");
990
data.removeFormat("text/x-red");
992
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
993
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
994
evaluate<void>(dragItem1, "Drag.active = true");
995
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
996
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
997
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
998
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
999
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1000
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1002
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1003
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1004
evaluate<void>(dragItem2, "Drag.active = true");
1005
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1006
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1007
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1008
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1009
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1010
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1012
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1013
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1014
evaluate<void>(dragItem2, "Drag.active = false");
1015
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1016
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1017
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1018
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1019
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1020
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1022
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1023
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1024
evaluate<void>(dragItem2, "Drag.active = true");
1025
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1026
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1027
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1028
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1029
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1030
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1032
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1033
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1034
evaluate<void>(dragItem1, "Drag.active = false");
1035
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1036
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1037
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
1038
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1039
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1040
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1042
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1043
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1044
evaluate<void>(dragItem2, "Drag.active = false");
1045
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1046
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1047
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1048
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1049
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1050
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1052
// internal then external
1053
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1054
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1055
evaluate<void>(dragItem1, "Drag.active = true");
1056
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1057
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
1058
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1059
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1060
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1061
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1063
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1064
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1065
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
1066
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1067
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1068
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1069
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1070
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1071
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1073
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1074
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1075
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
1076
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1077
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1078
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1079
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1080
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1081
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1083
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1084
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1085
QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50), Qt::CopyAction);
1086
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1087
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1088
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1089
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1090
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1091
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1093
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1094
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1095
evaluate<void>(dragItem1, "Drag.active = false");
1096
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1097
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1098
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
1099
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1100
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1101
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1103
evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1104
evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1105
QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
1106
QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1107
QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1108
QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1109
QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1110
QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1111
QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1113
QWindowSystemInterface::handleDrop(&alternateCanvas, &data, QPoint(50, 50), Qt::CopyAction);
1116
QTEST_MAIN(tst_QQuickDropArea)
1118
#include "tst_qquickdroparea.moc"