1 /****************************************************************************
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
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 <QtDeclarative/qsgitem.h>
45 #include <QtDeclarative/qsgview.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_QSGDropArea: 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_QSGDropArea::initTestCase()
97 void tst_QSGDropArea::cleanupTestCase()
102 void tst_QSGDropArea::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 QSGItem *dropArea = qobject_cast<QSGItem *>(object.data());
124 dropArea->setParentItem(canvas.rootItem());
126 QSGItem *dragItem = dropArea->findChild<QSGItem *>("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_QSGDropArea::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 QSGItem *dropArea = qobject_cast<QSGItem *>(object.data());
187 dropArea->setParentItem(canvas.rootItem());
190 QSGCanvas alternateCanvas;
192 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
193 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
195 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
196 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
197 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
198 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
199 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
201 evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
202 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
203 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
204 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
205 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
206 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
208 evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
210 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(150, 50));
211 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
212 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
213 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
214 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
216 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
217 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
218 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), true);
219 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
220 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 0);
222 evaluate<void>(dropArea, "{ enterEvents = 0; exitEvents = 0 }");
224 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(150, 50));
225 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
226 QCOMPARE(evaluate<bool>(dropArea, "hasDrag"), false);
227 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
228 QCOMPARE(evaluate<int>(dropArea, "exitEvents"), 1);
230 QWindowSystemInterface::handleDrop(&canvas, &data, QPoint(150, 50));
233 void tst_QSGDropArea::keys_internal()
236 QDeclarativeComponent component(&engine);
238 "import QtQuick 2.0\n"
240 "property variant dragKeys\n"
241 "property variant dropKeys: keys\n"
242 "property int enterEvents: 0\n"
243 "width: 100; height: 100\n"
244 "onEntered: {++enterEvents; dragKeys = drag.keys }\n"
246 "objectName: \"dragItem\"\n"
248 "width: 10; height: 10\n"
249 "Drag.keys: [\"red\", \"blue\"]\n"
252 QScopedPointer<QObject> object(component.create());
253 QSGItem *dropArea = qobject_cast<QSGItem *>(object.data());
254 dropArea->setParentItem(canvas.rootItem());
256 QSGItem *dragItem = dropArea->findChild<QSGItem *>("dragItem");
259 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
261 evaluate<void>(dragItem, "Drag.active = true");
262 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
263 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
264 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
266 evaluate<void>(dragItem, "Drag.active = false");
267 evaluate<void>(dropArea, "keys = \"blue\"");
268 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "blue");
269 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "blue");
270 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
271 evaluate<void>(dragItem, "Drag.active = true");
272 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
273 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
274 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
276 evaluate<void>(dragItem, "Drag.active = false");
277 evaluate<void>(dropArea, "keys = \"red\"");
278 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "red");
279 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "red");
280 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
281 evaluate<void>(dragItem, "Drag.active = true");
282 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
283 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
284 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
286 evaluate<void>(dragItem, "Drag.active = false");
287 evaluate<void>(dropArea, "keys = \"green\"");
288 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "green");
289 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "green");
290 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
291 evaluate<void>(dragItem, "Drag.active = true");
292 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
293 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
295 evaluate<void>(dragItem, "Drag.active = false");
296 evaluate<void>(dropArea, "keys = [\"red\", \"green\"]");
297 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "red" << "green");
298 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "red" << "green");
299 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
300 evaluate<void>(dragItem, "Drag.active = true");
301 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
302 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
303 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
305 evaluate<void>(dragItem, "Drag.active = false");
306 evaluate<void>(dragItem, "Drag.keys = []");
307 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
308 evaluate<void>(dragItem, "Drag.active = true");
309 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
310 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
312 evaluate<void>(dragItem, "Drag.active = false");
313 evaluate<void>(dropArea, "keys = []");
314 QCOMPARE(dropArea->property("keys").toStringList(), QStringList());
315 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList());
316 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
317 evaluate<void>(dragItem, "Drag.active = true");
318 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
319 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
320 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList());
322 evaluate<void>(dragItem, "Drag.active = false");
323 evaluate<void>(dropArea, "keys = []");
324 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
325 evaluate<void>(dragItem, "Drag.active = true");
326 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
327 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
328 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList());
330 evaluate<void>(dragItem, "Drag.active = false");
331 evaluate<void>(dragItem, "Drag.keys = [\"red\", \"blue\"]");
332 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
333 evaluate<void>(dragItem, "Drag.active = true");
334 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
335 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
336 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "red" << "blue");
339 void tst_QSGDropArea::keys_external()
342 QDeclarativeComponent component(&engine);
344 "import QtQuick 2.0\n"
346 "property variant dragKeys\n"
347 "property variant dropKeys: keys\n"
348 "property int enterEvents: 0\n"
349 "width: 100; height: 100\n"
350 "onEntered: {++enterEvents; dragKeys = drag.keys }\n"
352 QScopedPointer<QObject> object(component.create());
353 QSGItem *dropArea = qobject_cast<QSGItem *>(object.data());
354 dropArea->setParentItem(canvas.rootItem());
357 QSGCanvas alternateCanvas;
359 data.setData("text/x-red", "red");
360 data.setData("text/x-blue", "blue");
362 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
364 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
365 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
366 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
367 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
369 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
370 evaluate<void>(dropArea, "keys = \"text/x-blue\"");
371 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-blue");
372 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-blue");
373 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
374 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
375 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
376 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
377 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
379 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
380 evaluate<void>(dropArea, "keys = \"text/x-red\"");
381 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-red");
382 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-red");
383 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
384 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
385 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
386 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
387 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
389 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
390 evaluate<void>(dropArea, "keys = \"text/x-green\"");
391 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-green");
392 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-green");
393 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
394 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
395 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
396 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
398 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
399 evaluate<void>(dropArea, "keys = [\"text/x-red\", \"text/x-green\"]");
400 QCOMPARE(dropArea->property("keys").toStringList(), QStringList() << "text/x-red" << "text/x-green");
401 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList() << "text/x-red" << "text/x-green");
402 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
403 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
404 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
405 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
406 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
408 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
409 data.removeFormat("text/x-red");
410 data.removeFormat("text/x-blue");
411 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
412 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
413 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), false);
414 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
416 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
417 evaluate<void>(dropArea, "keys = []");
418 QCOMPARE(dropArea->property("keys").toStringList(), QStringList());
419 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList());
420 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
421 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
422 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
423 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
424 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList());
426 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
427 data.setData("text/x-red", "red");
428 data.setData("text/x-blue", "blue");
429 QCOMPARE(dropArea->property("keys").toStringList(), QStringList());
430 QCOMPARE(dropArea->property("dropKeys").toStringList(), QStringList());
431 evaluate<void>(dropArea, "{ enterEvents = 0; dragKeys = undefined }");
432 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
433 QCOMPARE(evaluate<bool>(dropArea, "containsDrag"), true);
434 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
435 QCOMPARE(dropArea->property("dragKeys").toStringList(), QStringList() << "text/x-red" << "text/x-blue");
437 QWindowSystemInterface::handleDrop(&canvas, &data, QPoint(50, 50));
440 void tst_QSGDropArea::source_internal()
443 QDeclarativeComponent component(&engine);
445 "import QtQuick 2.0\n"
447 "property Item source: drag.source\n"
448 "property Item eventSource\n"
449 "width: 100; height: 100\n"
450 "onEntered: {eventSource = drag.source}\n"
452 "objectName: \"dragItem\"\n"
454 "width: 10; height: 10\n"
456 "Item { id: dragSource; objectName: \"dragSource\" }\n"
458 QScopedPointer<QObject> object(component.create());
459 QSGItem *dropArea = qobject_cast<QSGItem *>(object.data());
460 dropArea->setParentItem(canvas.rootItem());
462 QSGItem *dragItem = dropArea->findChild<QSGItem *>("dragItem");
465 QSGItem *dragSource = dropArea->findChild<QSGItem *>("dragSource");
468 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(0));
469 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(0));
471 evaluate<void>(dragItem, "Drag.active = true");
472 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(dragItem));
473 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(dragItem));
474 QCOMPARE(evaluate<QObject *>(dropArea, "eventSource"), static_cast<QObject *>(dragItem));
476 evaluate<void>(dragItem, "Drag.active = false");
477 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(0));
478 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(0));
481 evaluate<void>(dropArea, "{ eventSource = null }");
482 evaluate<void>(dragItem, "Drag.source = dragSource");
484 evaluate<void>(dragItem, "Drag.active = true");
485 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(dragSource));
486 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(dragSource));
487 QCOMPARE(evaluate<QObject *>(dropArea, "eventSource"), static_cast<QObject *>(dragSource));
489 evaluate<void>(dragItem, "Drag.active = false");
490 QCOMPARE(evaluate<QObject *>(dropArea, "source"), static_cast<QObject *>(0));
491 QCOMPARE(evaluate<QObject *>(dropArea, "drag.source"), static_cast<QObject *>(0));
494 // Setting a source can't be emulated using the QWindowSystemInterface API.
496 //void tst_QSGDropArea::source_external()
500 void tst_QSGDropArea::position_internal()
503 QDeclarativeComponent component(&engine);
505 "import QtQuick 2.0\n"
507 "property real dragX: drag.x\n"
508 "property real dragY: drag.y\n"
509 "property real eventX\n"
510 "property real eventY\n"
511 "property int enterEvents: 0\n"
512 "property int moveEvents: 0\n"
513 "width: 100; height: 100\n"
514 "onEntered: {++enterEvents; eventX = drag.x; eventY = drag.y}\n"
515 "onPositionChanged: {++moveEvents; eventX = drag.x; eventY = drag.y}\n"
517 "objectName: \"dragItem\"\n"
519 "width: 10; height: 10\n"
522 QScopedPointer<QObject> object(component.create());
523 QSGItem *dropArea = qobject_cast<QSGItem *>(object.data());
524 dropArea->setParentItem(canvas.rootItem());
526 QSGItem *dragItem = dropArea->findChild<QSGItem *>("dragItem");
529 evaluate<void>(dragItem, "Drag.active = true");
530 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
531 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 0);
532 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(50));
533 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
534 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(50));
535 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
536 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(50));
537 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
539 evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
540 dragItem->setPos(QPointF(40, 50));
541 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
542 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
543 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(40));
544 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
545 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(40));
546 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
547 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(40));
548 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
550 evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
551 dragItem->setPos(QPointF(75, 25));
552 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
553 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
554 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(75));
555 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(25));
556 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(75));
557 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(25));
558 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(75));
559 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(25));
561 evaluate<void>(dragItem, "Drag.active = false");
564 void tst_QSGDropArea::position_external()
567 QDeclarativeComponent component(&engine);
569 "import QtQuick 2.0\n"
571 "property real dragX: drag.x\n"
572 "property real dragY: drag.y\n"
573 "property real eventX\n"
574 "property real eventY\n"
575 "property int enterEvents: 0\n"
576 "property int moveEvents: 0\n"
577 "width: 100; height: 100\n"
578 "onEntered: {++enterEvents; eventX = drag.x; eventY = drag.y}\n"
579 "onPositionChanged: {++moveEvents; eventX = drag.x; eventY = drag.y}\n"
581 QScopedPointer<QObject> object(component.create());
582 QSGItem *dropArea = qobject_cast<QSGItem *>(object.data());
583 dropArea->setParentItem(canvas.rootItem());
587 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
588 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 1);
589 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
590 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(50));
591 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
592 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(50));
593 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
594 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(50));
595 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
597 evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
598 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(40, 50));
599 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
600 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
601 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(40));
602 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(50));
603 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(40));
604 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(50));
605 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(40));
606 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(50));
608 evaluate<void>(dropArea, "{ enterEvents = 0; moveEvents = 0; eventX = -1; eventY = -1 }");
609 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(75, 25));
610 QCOMPARE(evaluate<int>(dropArea, "enterEvents"), 0);
611 QCOMPARE(evaluate<int>(dropArea, "moveEvents"), 1);
612 QCOMPARE(evaluate<qreal>(dropArea, "drag.x"), qreal(75));
613 QCOMPARE(evaluate<qreal>(dropArea, "drag.y"), qreal(25));
614 QCOMPARE(evaluate<qreal>(dropArea, "dragX"), qreal(75));
615 QCOMPARE(evaluate<qreal>(dropArea, "dragY"), qreal(25));
616 QCOMPARE(evaluate<qreal>(dropArea, "eventX"), qreal(75));
617 QCOMPARE(evaluate<qreal>(dropArea, "eventY"), qreal(25));
619 QWindowSystemInterface::handleDrop(&canvas, &data, QPoint(75, 25));
622 void tst_QSGDropArea::drop_internal()
625 QDeclarativeComponent component(&engine);
627 "import QtQuick 2.0\n"
629 "property bool accept: false\n"
630 "property bool setAccepted: false\n"
631 "property bool acceptDropAction: false\n"
632 "property bool setDropAction: false\n"
633 "property int dropAction: Qt.IgnoreAction\n"
634 "property int proposedAction: Qt.IgnoreAction\n"
635 "property int supportedActions: Qt.IgnoreAction\n"
636 "property int dropEvents: 0\n"
637 "width: 100; height: 100\n"
640 "supportedActions = drop.supportedActions\n"
641 "proposedAction = drop.action\n"
642 "if (setDropAction)\n"
643 "drop.action = dropAction\n"
644 "if (acceptDropAction)\n"
645 "drop.accept(dropAction)\n"
646 "else if (setAccepted)\n"
647 "drop.accepted = accept\n"
652 "objectName: \"dragItem\"\n"
654 "width: 10; height: 10\n"
657 QScopedPointer<QObject> object(component.create());
658 QSGItem *dropArea = qobject_cast<QSGItem *>(object.data());
659 dropArea->setParentItem(canvas.rootItem());
661 QSGItem *dragItem = dropArea->findChild<QSGItem *>("dragItem");
664 evaluate<void>(dragItem, "Drag.active = true");
665 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::IgnoreAction));
666 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
667 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
668 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
670 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
671 evaluate<void>(dropArea, "{ accept = true; setDropAction = true; dropAction = Qt.LinkAction }");
672 evaluate<void>(dragItem, "Drag.active = true");
673 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
674 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
675 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
676 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
678 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
679 evaluate<void>(dropArea, "{ setAccepted = true; }");
680 evaluate<void>(dragItem, "Drag.active = true");
681 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
682 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
683 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
684 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
686 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
687 evaluate<void>(dropArea, "{ accept = false; setAccepted = true; }");
688 evaluate<void>(dragItem, "Drag.active = true");
689 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::IgnoreAction));
690 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
691 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
692 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
694 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
695 evaluate<void>(dropArea, "{ setAccepted = false; setDropAction = false; acceptDropAction = true; }");
696 evaluate<void>(dragItem, "Drag.active = true");
697 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
698 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
699 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
700 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
702 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
703 evaluate<void>(dropArea, "{ acceptDropAction = false; dropAction = Qt.IgnoreAction; accept = true }");
704 evaluate<void>(dragItem, "Drag.active = true");
705 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
706 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
707 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
708 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
710 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
711 evaluate<void>(dropArea, "{ setAccepted = true }");
712 evaluate<void>(dragItem, "Drag.active = true");
713 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
714 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
715 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction));
716 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
718 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
719 evaluate<void>(dropArea, "{ setAccepted = false }");
720 evaluate<void>(dragItem, "Drag.supportedActions = Qt.LinkAction");
721 evaluate<void>(dragItem, "Drag.active = true");
722 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
723 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
724 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
725 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
727 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
728 evaluate<void>(dropArea, "{ setAccepted = true }");
729 evaluate<void>(dragItem, "Drag.active = true");
730 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::MoveAction));
731 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
732 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
733 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::MoveAction));
735 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
736 evaluate<void>(dropArea, "{ setAccepted = false }");
737 evaluate<void>(dragItem, "Drag.proposedAction = Qt.LinkAction");
738 evaluate<void>(dragItem, "Drag.active = true");
739 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
740 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
741 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
742 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::LinkAction));
744 evaluate<void>(dropArea, "{ dropEvents = 0; proposedAction = Qt.IgnoreAction; supportedActions = Qt.IgnoreAction }");
745 evaluate<void>(dropArea, "{ setAccepted = true }");
746 evaluate<void>(dragItem, "Drag.active = true");
747 QCOMPARE(evaluate<int>(dragItem, "Drag.drop()"), int(Qt::LinkAction));
748 QCOMPARE(evaluate<int>(dropArea, "dropEvents"), 1);
749 QCOMPARE(evaluate<int>(dropArea, "supportedActions"), int(Qt::LinkAction));
750 QCOMPARE(evaluate<int>(dropArea, "proposedAction"), int(Qt::LinkAction));
753 // Setting the supportedActions can't be emulated using the QWindowSystemInterface API.
755 //void tst_QSGDropArea::drop_external()
759 void tst_QSGDropArea::simultaneousDrags()
762 QDeclarativeComponent component(&engine);
764 "import QtQuick 2.0\n"
766 "property int enterEvents: 0\n"
767 "property int exitEvents: 0\n"
768 "width: 100; height: 100\n"
769 "keys: [\"red\", \"text/x-red\"]\n"
770 "onEntered: {++enterEvents}\n"
771 "onExited: {++exitEvents}\n"
773 "objectName: \"dropArea2\"\n"
774 "property int enterEvents: 0\n"
775 "property int exitEvents: 0\n"
776 "width: 100; height: 100\n"
777 "keys: [\"blue\", \"text/x-blue\"]\n"
778 "onEntered: {++enterEvents}\n"
779 "onExited: {++exitEvents}\n"
782 "objectName: \"dragItem1\"\n"
784 "width: 10; height: 10\n"
785 "Drag.keys: [\"red\", \"blue\"]"
788 "objectName: \"dragItem2\"\n"
790 "width: 10; height: 10\n"
791 "Drag.keys: [\"red\", \"blue\"]"
795 QScopedPointer<QObject> object(component.create());
796 QSGItem *dropArea1 = qobject_cast<QSGItem *>(object.data());
797 dropArea1->setParentItem(canvas.rootItem());
799 QSGItem *dropArea2 = dropArea1->findChild<QSGItem *>("dropArea2");
802 QSGItem *dragItem1 = dropArea1->findChild<QSGItem *>("dragItem1");
805 QSGItem *dragItem2 = dropArea1->findChild<QSGItem *>("dragItem2");
809 data.setData("text/x-red", "red");
810 data.setData("text/x-blue", "blue");
812 QSGCanvas alternateCanvas;
814 // Mixed internal drags.
815 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
816 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
817 evaluate<void>(dragItem1, "Drag.active = true");
818 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
819 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
820 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
821 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
822 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
823 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
825 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
826 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
827 evaluate<void>(dragItem2, "Drag.active = true");
828 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
829 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
830 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
831 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
832 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
833 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
835 evaluate<void>(dragItem2, "Drag.active = false");
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 = true");
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>(dragItem1, "Drag.active = false");
852 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
853 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
854 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
855 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
856 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
857 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
859 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
860 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
861 evaluate<void>(dragItem2, "Drag.active = false");
862 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
863 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
864 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
865 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
866 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
867 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
869 // internal then external.
870 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
871 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
872 evaluate<void>(dragItem1, "Drag.active = true");
873 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
874 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
875 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
876 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
877 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
878 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
880 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
881 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
882 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
883 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
884 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
885 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
886 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
887 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
888 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
890 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
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(&canvas, &data, QPoint(50, 50));
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 evaluate<void>(dragItem1, "Drag.active = false");
907 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
908 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
909 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
910 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
911 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
912 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
914 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
915 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
916 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
917 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
918 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
919 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
920 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
921 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
922 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
924 // external then internal.
925 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
926 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
927 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
928 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
929 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
930 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
931 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
932 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
933 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
935 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
936 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
937 evaluate<void>(dragItem2, "Drag.active = true");
938 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
939 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
940 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
941 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
942 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
943 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
945 evaluate<void>(dragItem2, "Drag.active = false");
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 = true");
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 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
962 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
963 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
964 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
965 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
966 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
967 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
969 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
970 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
971 evaluate<void>(dragItem2, "Drag.active = false");
972 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
973 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
974 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
975 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
976 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
977 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
979 // Different acceptance
980 evaluate<void>(dragItem1, "Drag.keys = \"red\"");
981 evaluate<void>(dragItem2, "Drag.keys = \"blue\"");
982 data.removeFormat("text/x-red");
984 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
985 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
986 evaluate<void>(dragItem1, "Drag.active = true");
987 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
988 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
989 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
990 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
991 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
992 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
994 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
995 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
996 evaluate<void>(dragItem2, "Drag.active = true");
997 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
998 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
999 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1000 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1001 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1002 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1004 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1005 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1006 evaluate<void>(dragItem2, "Drag.active = false");
1007 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1008 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1009 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1010 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1011 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1012 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1014 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1015 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1016 evaluate<void>(dragItem2, "Drag.active = true");
1017 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1018 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1019 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1020 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1021 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1022 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1024 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1025 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1026 evaluate<void>(dragItem1, "Drag.active = false");
1027 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1028 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1029 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
1030 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1031 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1032 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1034 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1035 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1036 evaluate<void>(dragItem2, "Drag.active = false");
1037 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1038 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1039 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1040 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1041 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1042 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1044 // internal then external
1045 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1046 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1047 evaluate<void>(dragItem1, "Drag.active = true");
1048 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1049 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 1);
1050 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1051 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1052 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1053 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1055 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1056 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1057 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
1058 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1059 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1060 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1061 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1062 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1063 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1065 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1066 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1067 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
1068 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1069 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1070 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1071 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1072 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1073 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1075 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1076 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1077 QWindowSystemInterface::handleDrag(&canvas, &data, QPoint(50, 50));
1078 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), true);
1079 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1080 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1081 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1082 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 1);
1083 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1085 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1086 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1087 evaluate<void>(dragItem1, "Drag.active = false");
1088 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1089 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1090 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 1);
1091 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), true);
1092 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1093 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 0);
1095 evaluate<void>(dropArea1, "{ enterEvents = 0; exitEvents = 0 }");
1096 evaluate<void>(dropArea2, "{ enterEvents = 0; exitEvents = 0 }");
1097 QWindowSystemInterface::handleDrag(&alternateCanvas, &data, QPoint(50, 50));
1098 QCOMPARE(evaluate<bool>(dropArea1, "containsDrag"), false);
1099 QCOMPARE(evaluate<int>(dropArea1, "enterEvents"), 0);
1100 QCOMPARE(evaluate<int>(dropArea1, "exitEvents"), 0);
1101 QCOMPARE(evaluate<bool>(dropArea2, "containsDrag"), false);
1102 QCOMPARE(evaluate<int>(dropArea2, "enterEvents"), 0);
1103 QCOMPARE(evaluate<int>(dropArea2, "exitEvents"), 1);
1105 QWindowSystemInterface::handleDrop(&alternateCanvas, &data, QPoint(50, 50));
1108 QTEST_MAIN(tst_QSGDropArea)
1110 #include "tst_qsgdroparea.moc"