1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: http://www.qt-project.org/
7 ** This file is part of the test suite of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** 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 <QtDeclarative/qdeclarativecontext.h>
47 #include <QtDeclarative/qdeclarativeengine.h>
48 #include <QtDeclarative/qdeclarativeexpression.h>
50 #include <QtGui/qwindowsysteminterface_qpa.h>
52 template <typename T> static T evaluate(QObject *scope, const QString &expression)
54 QDeclarativeExpression expr(qmlContext(scope), scope, expression);
55 QVariant result = expr.evaluate();
57 qWarning() << expr.error().toString();
58 return result.value<T>();
61 template <> void evaluate<void>(QObject *scope, const QString &expression)
63 QDeclarativeExpression expr(qmlContext(scope), scope, expression);
66 qWarning() << expr.error().toString();
69 class tst_QQuickDropArea: public QObject
74 void cleanupTestCase();
76 void containsDrag_internal();
77 void containsDrag_external();
80 void source_internal();
81 // void source_external();
82 void position_internal();
83 void position_external();
85 // void drop_external();
86 void simultaneousDrags();
89 QDeclarativeEngine engine;
92 void tst_QQuickDropArea::initTestCase()
97 void tst_QQuickDropArea::cleanupTestCase()
102 void tst_QQuickDropArea::containsDrag_internal()
105 QDeclarativeComponent component(&engine);
107 "import QtQuick 2.0\n"
109 "property bool hasDrag: containsDrag\n"
110 "property int enterEvents: 0\n"
111 "property int exitEvents: 0\n"
112 "width: 100; height: 100\n"
113 "onEntered: {++enterEvents}\n"
114 "onExited: {++exitEvents}\n"
116 "objectName: \"dragItem\"\n"
118 "width: 10; height: 10\n"
121 QScopedPointer<QObject> object(component.create());
122 QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
124 dropArea->setParentItem(canvas.rootItem());
126 QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
129 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
130 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
132 evaluate<void>(dragItem, "Drag.active = true");
133 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
134 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
135 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
136 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
138 evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
139 evaluate<void>(dragItem, "Drag.active = false");
140 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
141 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
142 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
143 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
145 evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
147 dragItem->setPos(QPointF(150, 50));
148 evaluate<void>(dragItem, "Drag.active = true");
149 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
150 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
151 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
152 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
154 dragItem->setPos(QPointF(50, 50));
155 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
156 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
157 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
158 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
160 evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
161 dragItem->setPos(QPointF(150, 50));
163 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
164 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
165 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
166 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
168 evaluate<void>(dragItem, "Drag.active = false");
171 void tst_QQuickDropArea::containsDrag_external()
174 QDeclarativeComponent component(&engine);
176 "import QtQuick 2.0\n"
178 "property bool hasDrag: containsDrag\n"
179 "property int enterEvents: 0\n"
180 "property int exitEvents: 0\n"
181 "width: 100; height: 100\n"
182 "onEntered: {++enterEvents}\n"
183 "onExited: {++exitEvents}\n"
185 QScopedPointer<QObject> object(component.create());
186 QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
188 dropArea->setParentItem(canvas.rootItem());
191 QQuickCanvas alternateCanvas;
193 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
194 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
196 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
197 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
198 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
199 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
200 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
202 evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
203 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
204 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
205 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
206 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
207 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
209 evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
211 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(150, 50));
212 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
213 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
214 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
215 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
217 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
218 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
219 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
220 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
221 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
223 evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
225 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(150, 50));
226 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
227 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
228 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
229 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
231 QWindowSystemInterface::handleDrop(&canvas, &data, QPoint(150, 50));
234 void tst_QQuickDropArea::keys_internal()
237 QDeclarativeComponent component(&engine);
239 "import QtQuick 2.0\n"
241 "property variant dragKeys\n"
242 "property variant dropKeys: keys\n"
243 "property int enterEvents: 0\n"
244 "width: 100; height: 100\n"
245 "onEntered: {++enterEvents; dragKeys = drag.keys }\n"
247 "objectName: \"dragItem\"\n"
249 "width: 10; height: 10\n"
250 "Drag.keys: [\"red\", \"blue\"]\n"
253 QScopedPointer<QObject> object(component.create());
254 QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
256 dropArea->setParentItem(canvas.rootItem());
258 QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
261 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
263 evaluate<void>(dragItem, "Drag.active = true");
264 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
265 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
266 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
268 evaluate<void>(dragItem, "Drag.active = false");
269 evaluate<void>(dropArea, "keys = \"blue\"");
270 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "blue");
271 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "blue");
272 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
273 evaluate<void>(dragItem, "Drag.active = true");
274 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
275 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
276 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
278 evaluate<void>(dragItem, "Drag.active = false");
279 evaluate<void>(dropArea, "keys = \"red\"");
280 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "red");
281 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "red");
282 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
283 evaluate<void>(dragItem, "Drag.active = true");
284 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
285 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
286 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
288 evaluate<void>(dragItem, "Drag.active = false");
289 evaluate<void>(dropArea, "keys = \"green\"");
290 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "green");
291 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "green");
292 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
293 evaluate<void>(dragItem, "Drag.active = true");
294 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
295 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
297 evaluate<void>(dragItem, "Drag.active = false");
298 evaluate<void>(dropArea, "keys = [\"red\", \"green\"]");
299 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "red" << "green");
300 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "red" << "green");
301 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
302 evaluate<void>(dragItem, "Drag.active = true");
303 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
304 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
305 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
307 evaluate<void>(dragItem, "Drag.active = false");
308 evaluate<void>(dragItem, "Drag.keys = []");
309 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
310 evaluate<void>(dragItem, "Drag.active = true");
311 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
312 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
314 evaluate<void>(dragItem, "Drag.active = false");
315 evaluate<void>(dropArea, "keys = []");
316 QCOMPARE(dropArea->property("keys").toStringList(), QStringList());
317 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList());
318 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
319 evaluate<void>(dragItem, "Drag.active = true");
320 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
321 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
322 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList());
324 evaluate<void>(dragItem, "Drag.active = false");
325 evaluate<void>(dropArea, "keys = []");
326 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
327 evaluate<void>(dragItem, "Drag.active = true");
328 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
329 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
330 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList());
332 evaluate<void>(dragItem, "Drag.active = false");
333 evaluate<void>(dragItem, "Drag.keys = [\"red\", \"blue\"]");
334 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
335 evaluate<void>(dragItem, "Drag.active = true");
336 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
337 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
338 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
341 void tst_QQuickDropArea::keys_external()
344 QDeclarativeComponent component(&engine);
346 "import QtQuick 2.0\n"
348 "property variant dragKeys\n"
349 "property variant dropKeys: keys\n"
350 "property int enterEvents: 0\n"
351 "width: 100; height: 100\n"
352 "onEntered: {++enterEvents; dragKeys = drag.keys }\n"
354 QScopedPointer<QObject> object(component.create());
355 QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
356 dropArea->setParentItem(canvas.rootItem());
359 QQuickCanvas alternateCanvas;
361 data.setData("text/x-red", "red");
362 data.setData("text/x-blue", "blue");
364 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
366 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
367 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
368 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
369 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
371 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
372 evaluate<void>(dropArea, "keys = \"text/x-blue\"");
373 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-blue");
374 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-blue");
375 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
376 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
377 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
378 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
379 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
381 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
382 evaluate<void>(dropArea, "keys = \"text/x-red\"");
383 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-red");
384 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-red");
385 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
386 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
387 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
388 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
389 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
391 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
392 evaluate<void>(dropArea, "keys = \"text/x-green\"");
393 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-green");
394 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-green");
395 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
396 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
397 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
398 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
400 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
401 evaluate<void>(dropArea, "keys = [\"text/x-red\", \"text/x-green\"]");
402 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-red" << "text/x-green");
403 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-red" << "text/x-green");
404 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
405 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
406 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
407 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
408 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
410 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
411 data.removeFormat("text/x-red");
412 data.removeFormat("text/x-blue");
413 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
414 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
415 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
416 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
418 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
419 evaluate<void>(dropArea, "keys = []");
420 QCOMPARE(dropArea->property("keys").toStringList(), QStringList());
421 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList());
422 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
423 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
424 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
425 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
426 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList());
428 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
429 data.setData("text/x-red", "red");
430 data.setData("text/x-blue", "blue");
431 QCOMPARE(dropArea->property("keys").toStringList(), QStringList());
432 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList());
433 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
434 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
435 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
436 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
437 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
439 QWindowSystemInterface::handleDrop(&canvas, &data, QPoint(50, 50));
442 void tst_QQuickDropArea::source_internal()
445 QDeclarativeComponent component(&engine);
447 "import QtQuick 2.0\n"
449 "property Item source: drag.source\n"
450 "property Item eventSource\n"
451 "width: 100; height: 100\n"
452 "onEntered: {eventSource = drag.source}\n"
454 "objectName: \"dragItem\"\n"
456 "width: 10; height: 10\n"
458 "Item { id: dragSource; objectName: \"dragSource\" }\n"
460 QScopedPointer<QObject> object(component.create());
461 QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
463 dropArea->setParentItem(canvas.rootItem());
465 QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
468 QQuickItem *dragSource = dropArea->findChild<QQuickItem *>("dragSource");
471 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(0));
472 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(0));
474 evaluate<void>(dragItem, "Drag.active = true");
475 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(dragItem));
476 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(dragItem));
477 QCOMPARE(evaluate<QObject *>(dropArea, "eventSource"), static_cast<QObject *>(dragItem));
479 evaluate<void>(dragItem, "Drag.active = false");
480 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(0));
481 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(0));
484 evaluate<void>(dropArea, "{ eventSource = null }");
485 evaluate<void>(dragItem, "Drag.source = dragSource");
487 evaluate<void>(dragItem, "Drag.active = true");
488 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(dragSource));
489 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(dragSource));
490 QCOMPARE(evaluate<QObject *>(dropArea, "eventSource"), static_cast<QObject *>(dragSource));
492 evaluate<void>(dragItem, "Drag.active = false");
493 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(0));
494 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(0));
497 // Setting a source can't be emulated using the QWindowSystemInterface API.
499 //void tst_QQuickDropArea::source_external()
503 void tst_QQuickDropArea::position_internal()
506 QDeclarativeComponent component(&engine);
508 "import QtQuick 2.0\n"
510 "property real dragX: drag.x\n"
511 "property real dragY: drag.y\n"
512 "property real eventX\n"
513 "property real eventY\n"
514 "property int enterEvents: 0\n"
515 "property int moveEvents: 0\n"
516 "width: 100; height: 100\n"
517 "onEntered: {++enterEvents; eventX = drag.x; eventY = drag.y}\n"
518 "onPositionChanged: {++moveEvents; eventX = drag.x; eventY = drag.y}\n"
520 "objectName: \"dragItem\"\n"
522 "width: 10; height: 10\n"
525 QScopedPointer<QObject> object(component.create());
526 QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
528 dropArea->setParentItem(canvas.rootItem());
530 QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
533 evaluate<void>(dragItem, "Drag.active = true");
534 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
535 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 0);
536 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(50));
537 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
538 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(50));
539 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
540 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(50));
541 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
543 evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
544 dragItem->setPos(QPointF(40, 50));
545 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
546 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
547 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(40));
548 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
549 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(40));
550 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
551 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(40));
552 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
554 evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
555 dragItem->setPos(QPointF(75, 25));
556 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
557 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
558 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(75));
559 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(25));
560 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(75));
561 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(25));
562 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(75));
563 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(25));
565 evaluate<void>(dragItem, "Drag.active = false");
568 void tst_QQuickDropArea::position_external()
571 QDeclarativeComponent component(&engine);
573 "import QtQuick 2.0\n"
575 "property real dragX: drag.x\n"
576 "property real dragY: drag.y\n"
577 "property real eventX\n"
578 "property real eventY\n"
579 "property int enterEvents: 0\n"
580 "property int moveEvents: 0\n"
581 "width: 100; height: 100\n"
582 "onEntered: {++enterEvents; eventX = drag.x; eventY = drag.y}\n"
583 "onPositionChanged: {++moveEvents; eventX = drag.x; eventY = drag.y}\n"
585 QScopedPointer<QObject> object(component.create());
586 QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
588 dropArea->setParentItem(canvas.rootItem());
592 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
593 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
594 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
595 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(50));
596 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
597 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(50));
598 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
599 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(50));
600 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
602 evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
603 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(40, 50));
604 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
605 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
606 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(40));
607 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
608 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(40));
609 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
610 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(40));
611 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
613 evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
614 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(75, 25));
615 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
616 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
617 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(75));
618 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(25));
619 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(75));
620 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(25));
621 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(75));
622 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(25));
624 QWindowSystemInterface::handleDrop(&canvas, &data, QPoint(75, 25));
627 void tst_QQuickDropArea::drop_internal()
630 QDeclarativeComponent component(&engine);
632 "import QtQuick 2.0\n"
634 "property bool accept: false\n"
635 "property bool setAccepted: false\n"
636 "property bool acceptDropAction: false\n"
637 "property bool setDropAction: false\n"
638 "property int dropAction: Qt.IgnoreAction\n"
639 "property int proposedAction: Qt.IgnoreAction\n"
640 "property int supportedActions: Qt.IgnoreAction\n"
641 "property int dropEvents: 0\n"
642 "width: 100; height: 100\n"
645 "supportedActions = drop.supportedActions\n"
646 "proposedAction = drop.action\n"
647 "if (setDropAction)\n"
648 "drop.action = dropAction\n"
649 "if (acceptDropAction)\n"
650 "drop.accept(dropAction)\n"
651 "else if (setAccepted)\n"
652 "drop.accepted = accept\n"
657 "objectName: \"dragItem\"\n"
659 "width: 10; height: 10\n"
662 QScopedPointer<QObject> object(component.create());
663 QQuickItem *dropArea = qobject_cast<QQuickItem *>(object.data());
665 dropArea->setParentItem(canvas.rootItem());
667 QQuickItem *dragItem = dropArea->findChild<QQuickItem *>("dragItem");
670 evaluate<void>(dragItem, "Drag.active = true");
671 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::IgnoreAction));
672 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
673 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
674 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
676 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
677 evaluate<void>(dropArea, "{ accept = true; setDropAction = true; dropAction = Qt.LinkAction }");
678 evaluate<void>(dragItem, "Drag.active = true");
679 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
680 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
681 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
682 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
684 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
685 evaluate<void>(dropArea, "{ setAccepted = true; }");
686 evaluate<void>(dragItem, "Drag.active = true");
687 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
688 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
689 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
690 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
692 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
693 evaluate<void>(dropArea, "{ accept = false; setAccepted = true; }");
694 evaluate<void>(dragItem, "Drag.active = true");
695 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::IgnoreAction));
696 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
697 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
698 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
700 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
701 evaluate<void>(dropArea, "{ setAccepted = false; setDropAction = false; acceptDropAction = true; }");
702 evaluate<void>(dragItem, "Drag.active = true");
703 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
704 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
705 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
706 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
708 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
709 evaluate<void>(dropArea, "{ acceptDropAction = false; dropAction = Qt.IgnoreAction; accept = true }");
710 evaluate<void>(dragItem, "Drag.active = true");
711 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
712 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
713 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
714 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
716 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
717 evaluate<void>(dropArea, "{ setAccepted = true }");
718 evaluate<void>(dragItem, "Drag.active = true");
719 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
720 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
721 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
722 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
724 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
725 evaluate<void>(dropArea, "{ setAccepted = false }");
726 evaluate<void>(dragItem, "Drag.supportedActions = Qt.LinkAction");
727 evaluate<void>(dragItem, "Drag.active = true");
728 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
729 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
730 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
731 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
733 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
734 evaluate<void>(dropArea, "{ setAccepted = true }");
735 evaluate<void>(dragItem, "Drag.active = true");
736 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
737 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
738 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
739 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
741 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
742 evaluate<void>(dropArea, "{ setAccepted = false }");
743 evaluate<void>(dragItem, "Drag.proposedAction = Qt.LinkAction");
744 evaluate<void>(dragItem, "Drag.active = true");
745 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
746 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
747 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
748 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::LinkAction));
750 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
751 evaluate<void>(dropArea, "{ setAccepted = true }");
752 evaluate<void>(dragItem, "Drag.active = true");
753 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
754 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
755 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
756 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::LinkAction));
759 // Setting the supportedActions can't be emulated using the QWindowSystemInterface API.
761 //void tst_QQuickDropArea::drop_external()
765 void tst_QQuickDropArea::simultaneousDrags()
768 QDeclarativeComponent component(&engine);
770 "import QtQuick 2.0\n"
772 "property int enterEvents: 0\n"
773 "property int exitEvents: 0\n"
774 "width: 100; height: 100\n"
775 "keys: [\"red\", \"text/x-red\"]\n"
776 "onEntered: {++enterEvents}\n"
777 "onExited: {++exitEvents}\n"
779 "objectName: \"dropArea2\"\n"
780 "property int enterEvents: 0\n"
781 "property int exitEvents: 0\n"
782 "width: 100; height: 100\n"
783 "keys: [\"blue\", \"text/x-blue\"]\n"
784 "onEntered: {++enterEvents}\n"
785 "onExited: {++exitEvents}\n"
788 "objectName: \"dragItem1\"\n"
790 "width: 10; height: 10\n"
791 "Drag.keys: [\"red\", \"blue\"]"
794 "objectName: \"dragItem2\"\n"
796 "width: 10; height: 10\n"
797 "Drag.keys: [\"red\", \"blue\"]"
801 QScopedPointer<QObject> object(component.create());
802 QQuickItem *dropArea1 = qobject_cast<QQuickItem *>(object.data());
804 dropArea1->setParentItem(canvas.rootItem());
806 QQuickItem *dropArea2 = dropArea1->findChild<QQuickItem *>("dropArea2");
809 QQuickItem *dragItem1 = dropArea1->findChild<QQuickItem *>("dragItem1");
812 QQuickItem *dragItem2 = dropArea1->findChild<QQuickItem *>("dragItem2");
816 data.setData("text/x-red", "red");
817 data.setData("text/x-blue", "blue");
819 QQuickCanvas alternateCanvas;
821 // Mixed internal drags.
822 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
823 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
824 evaluate<void>(dragItem1, "Drag.active = true");
825 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
826 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
827 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
828 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
829 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
830 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
832 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
833 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
834 evaluate<void>(dragItem2, "Drag.active = true");
835 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
836 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
837 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
838 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
839 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
840 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
842 evaluate<void>(dragItem2, "Drag.active = false");
843 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
844 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
845 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
846 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
847 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
848 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
850 evaluate<void>(dragItem2, "Drag.active = true");
851 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
852 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
853 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
854 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
855 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
856 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
858 evaluate<void>(dragItem1, "Drag.active = false");
859 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
860 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
861 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
862 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
863 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
864 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
866 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
867 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
868 evaluate<void>(dragItem2, "Drag.active = false");
869 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
870 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
871 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
872 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
873 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
874 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
876 // internal then external.
877 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
878 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
879 evaluate<void>(dragItem1, "Drag.active = true");
880 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
881 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
882 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
883 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
884 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
885 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
887 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
888 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
889 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
890 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
891 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
892 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
893 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
894 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
895 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
897 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
898 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
899 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
900 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
901 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
902 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
903 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
905 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
906 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
907 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
908 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
909 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
910 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
911 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
913 evaluate<void>(dragItem1, "Drag.active = false");
914 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
915 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
916 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
917 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
918 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
919 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
921 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
922 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
923 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
924 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
925 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
926 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
927 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
928 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
929 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
931 // external then internal.
932 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
933 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
934 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
935 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
936 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
937 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
938 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
939 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
940 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
942 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
943 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
944 evaluate<void>(dragItem2, "Drag.active = true");
945 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
946 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
947 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
948 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
949 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
950 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
952 evaluate<void>(dragItem2, "Drag.active = false");
953 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
954 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
955 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
956 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
957 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
958 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
960 evaluate<void>(dragItem2, "Drag.active = true");
961 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
962 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
963 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
964 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
965 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
966 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
968 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
969 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
970 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
971 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
972 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
973 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
974 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
976 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
977 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
978 evaluate<void>(dragItem2, "Drag.active = false");
979 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
980 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
981 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
982 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
983 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
984 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
986 // Different acceptance
987 evaluate<void>(dragItem1, "Drag.keys = \"red\"");
988 evaluate<void>(dragItem2, "Drag.keys = \"blue\"");
989 data.removeFormat("text/x-red");
991 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
992 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
993 evaluate<void>(dragItem1, "Drag.active = true");
994 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
995 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
996 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
997 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
998 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
999 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1001 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1002 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1003 evaluate<void>(dragItem2, "Drag.active = true");
1004 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1005 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1006 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1007 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1008 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1009 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1011 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1012 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1013 evaluate<void>(dragItem2, "Drag.active = false");
1014 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1015 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1016 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1017 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1018 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1019 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1021 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1022 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1023 evaluate<void>(dragItem2, "Drag.active = true");
1024 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1025 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1026 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1027 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1028 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1029 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1031 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1032 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1033 evaluate<void>(dragItem1, "Drag.active = false");
1034 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1035 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1036 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
1037 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1038 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1039 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1041 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1042 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1043 evaluate<void>(dragItem2, "Drag.active = false");
1044 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1045 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1046 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1047 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1048 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1049 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1051 // internal then external
1052 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1053 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1054 evaluate<void>(dragItem1, "Drag.active = true");
1055 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1056 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
1057 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1058 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1059 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1060 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1062 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1063 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1064 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
1065 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1066 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1067 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1068 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1069 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1070 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1072 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1073 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1074 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
1075 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1076 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1077 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1078 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1079 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1080 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1082 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1083 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1084 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
1085 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1086 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1087 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1088 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1089 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1090 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1092 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1093 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1094 evaluate<void>(dragItem1, "Drag.active = false");
1095 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1096 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1097 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
1098 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1099 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1100 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1102 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1103 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1104 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
1105 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1106 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1107 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1108 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1109 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1110 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1112 QWindowSystemInterface::handleDrop(&alternateCanvas, &data, QPoint(50, 50));
1115 QTEST_MAIN(tst_QQuickDropArea)
1117 #include "tst_qquickdroparea.moc"