diff options
author | Jo Asplin <jo.asplin@nokia.com> | 2011-11-25 09:30:03 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-30 09:30:22 +0100 |
commit | 9acec431c360379a21cdbe36d8e342083f344c3c (patch) | |
tree | dcd0e4d4d60f7f9cfb6f6d210b6ebaf016573d1b /tests/auto/integrationtests/macnativeevents/tst_macnativeevents.cpp | |
parent | 75b66dc8b036c4f4ef3ff8ea109efd698b72732d (diff) |
Moved integrationtests/* into other/
Currently there seems to be no precise definition of what
an integrationtest is in the context of Qt testing.
To avoid confusion, the tests under integrationtests/ are
moved into other/ (which is effectively where we keep
tests that don't clearly fit into any other category).
Tests can be moved back into an integrationtests/ directory
at a later point, should an unambiguous definition be established.
Change-Id: I3bb289be2dc2aca11b51a8ce8fcc5942f06d6c5c
Reviewed-by: Jason McDonald <jason.mcdonald@nokia.com>
Diffstat (limited to 'tests/auto/integrationtests/macnativeevents/tst_macnativeevents.cpp')
-rw-r--r-- | tests/auto/integrationtests/macnativeevents/tst_macnativeevents.cpp | 522 |
1 files changed, 0 insertions, 522 deletions
diff --git a/tests/auto/integrationtests/macnativeevents/tst_macnativeevents.cpp b/tests/auto/integrationtests/macnativeevents/tst_macnativeevents.cpp deleted file mode 100644 index ea30b0b5c2..0000000000 --- a/tests/auto/integrationtests/macnativeevents/tst_macnativeevents.cpp +++ /dev/null @@ -1,522 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QApplication> -#include <QWidget> -#include <QDialog> -#include <QPushButton> -#include <QtTest/QtTest> - -#include "qnativeevents.h" -#include "nativeeventlist.h" -#include "expectedeventlist.h" -#include <Carbon/Carbon.h> - -QT_USE_NAMESPACE - -class tst_MacNativeEvents : public QObject -{ -Q_OBJECT -private slots: - void testMouseMoveLocation(); - void testPushButtonPressRelease(); - void testMouseLeftDoubleClick(); - void stressTestMouseLeftDoubleClick(); - void testMouseDragInside(); - void testMouseDragOutside(); - void testMouseDragToNonClientArea(); - void testDragWindow(); - void testMouseEnter(); - void testChildDialogInFrontOfModalParent(); -// void testChildWindowInFrontOfParentWindow(); -// void testChildToolWindowInFrontOfChildNormalWindow(); - void testChildWindowInFrontOfStaysOnTopParentWindow(); - void testKeyPressOnToplevel(); - void testModifierShift(); - void testModifierAlt(); - void testModifierCtrl(); - void testModifierCtrlWithDontSwapCtrlAndMeta(); -}; - -void tst_MacNativeEvents::testMouseMoveLocation() -{ - QWidget w; - w.setMouseTracking(true); - w.show(); - QPoint p = w.geometry().center(); - - NativeEventList native; - native.append(new QNativeMouseMoveEvent(p, Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QMouseEvent(QEvent::MouseMove, w.mapFromGlobal(p), p, Qt::NoButton, Qt::NoButton, Qt::NoModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testPushButtonPressRelease() -{ - // Check that a native mouse press and release generates the - // same qevents on a pushbutton: - QPushButton w("click me"); - w.show(); - QPoint p = w.geometry().center(); - - NativeEventList native; - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 0, Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QMouseEvent(QEvent::MouseButtonPress, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonRelease, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::NoButton, Qt::NoModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testMouseLeftDoubleClick() -{ - // Check that a native double click makes - // the test widget receive a press-release-click-release: - QWidget w; - w.show(); - QPoint p = w.geometry().center(); - - NativeEventList native; - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 0, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 2, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 0, Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QMouseEvent(QEvent::MouseButtonPress, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonRelease, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::NoButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonDblClick, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonRelease, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::NoButton, Qt::NoModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::stressTestMouseLeftDoubleClick() -{ - // Check that multiple, fast, double clicks makes - // the test widget receive correct click events - QWidget w; - w.show(); - QPoint p = w.geometry().center(); - - NativeEventList native; - ExpectedEventList expected(&w); - - for (int i=0; i<10; ++i){ - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 0, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 2, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(p, Qt::LeftButton, 0, Qt::NoModifier)); - - expected.append(new QMouseEvent(QEvent::MouseButtonPress, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonRelease, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::NoButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonDblClick, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonRelease, w.mapFromGlobal(p), p, Qt::LeftButton, Qt::NoButton, Qt::NoModifier)); - } - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testMouseDragInside() -{ - // Check that a mouse drag inside a widget - // will cause press-move-release events to be delivered - QWidget w; - w.show(); - QPoint p1 = w.geometry().center(); - QPoint p2 = p1 - QPoint(10, 0); - QPoint p3 = p1 - QPoint(20, 0); - QPoint p4 = p1 - QPoint(30, 0); - - NativeEventList native; - native.append(new QNativeMouseButtonEvent(p1, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseDragEvent(p2, Qt::LeftButton, Qt::NoModifier)); - native.append(new QNativeMouseDragEvent(p3, Qt::LeftButton, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(p4, Qt::LeftButton, 0, Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QMouseEvent(QEvent::MouseButtonPress, w.mapFromGlobal(p1), p1, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseMove, w.mapFromGlobal(p2), p2, Qt::NoButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseMove, w.mapFromGlobal(p3), p3, Qt::NoButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonRelease, w.mapFromGlobal(p4), p4, Qt::LeftButton, Qt::NoButton, Qt::NoModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testMouseDragOutside() -{ - // Check that if we drag the mouse from inside the - // widget, and release it outside, we still get mouse move - // and release events when the mouse is outside the widget. - QWidget w; - w.show(); - QPoint inside1 = w.geometry().center(); - QPoint inside2 = inside1 - QPoint(10, 0); - QPoint outside1 = w.geometry().topLeft() - QPoint(50, 0); - QPoint outside2 = outside1 - QPoint(10, 0); - - NativeEventList native; - native.append(new QNativeMouseButtonEvent(inside1, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseDragEvent(inside2, Qt::LeftButton, Qt::NoModifier)); - native.append(new QNativeMouseDragEvent(outside1, Qt::LeftButton, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(outside2, Qt::LeftButton, 0, Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QMouseEvent(QEvent::MouseButtonPress, w.mapFromGlobal(inside1), inside1, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseMove, w.mapFromGlobal(inside2), inside2, Qt::NoButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseMove, w.mapFromGlobal(outside1), outside1, Qt::NoButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonRelease, w.mapFromGlobal(outside2), outside2, Qt::LeftButton, Qt::NoButton, Qt::NoModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testMouseDragToNonClientArea() -{ - // Check that if we drag the mouse from inside the - // widget, and release it on the title bar, we still get mouse move - // and release events when the mouse is on the title bar - QWidget w; - w.show(); - QPoint inside1 = w.geometry().center(); - QPoint inside2 = inside1 - QPoint(10, 0); - QPoint titlebar1 = w.geometry().topLeft() - QPoint(-100, 10); - QPoint titlebar2 = titlebar1 - QPoint(10, 0); - - NativeEventList native; - native.append(new QNativeMouseButtonEvent(inside1, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseDragEvent(inside2, Qt::LeftButton, Qt::NoModifier)); - native.append(new QNativeMouseDragEvent(titlebar1, Qt::LeftButton, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(titlebar2, Qt::LeftButton, 0, Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QMouseEvent(QEvent::MouseButtonPress, w.mapFromGlobal(inside1), inside1, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseMove, w.mapFromGlobal(inside2), inside2, Qt::NoButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseMove, w.mapFromGlobal(titlebar1), titlebar1, Qt::NoButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::MouseButtonRelease, w.mapFromGlobal(titlebar2), titlebar2, Qt::LeftButton, Qt::NoButton, Qt::NoModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testDragWindow() -{ - // Check that if we drag the mouse from inside the - // widgets title bar, we get a move event on the window - QWidget w; - w.show(); - QPoint titlebar = w.geometry().topLeft() - QPoint(-100, 10); - QPoint moveTo = titlebar + QPoint(100, 0); - - NativeEventList native; - native.append(new QNativeMouseButtonEvent(titlebar, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseDragEvent(moveTo, Qt::LeftButton, Qt::NoModifier)); - native.append(500, new QNativeMouseButtonEvent(moveTo, Qt::LeftButton, 0, Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QMouseEvent(QEvent::NonClientAreaMouseButtonPress, w.mapFromGlobal(titlebar), titlebar, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); - expected.append(new QMouseEvent(QEvent::NonClientAreaMouseButtonRelease, w.mapFromGlobal(titlebar), moveTo, Qt::LeftButton, Qt::NoButton, Qt::NoModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testMouseEnter() -{ - // When a mouse enters a widget, both a mouse enter events and a - // mouse move event should be sendt. Lets test this: - QWidget w; - w.setMouseTracking(true); - w.show(); - QPoint outside = w.geometry().topLeft() - QPoint(50, 0); - QPoint inside = w.geometry().center(); - - NativeEventList native; - native.append(new QNativeMouseMoveEvent(outside, Qt::NoModifier)); - native.append(new QNativeMouseMoveEvent(inside, Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QEvent(QEvent::Enter)); - expected.append(new QMouseEvent(QEvent::MouseMove, w.mapFromGlobal(inside), inside, Qt::NoButton, Qt::NoButton, Qt::NoModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testChildDialogInFrontOfModalParent() -{ - // Test that a child dialog of a modal parent dialog is - // in front of the parent, and active: - QDialog parent; - parent.setWindowModality(Qt::ApplicationModal); - QDialog child(&parent); - QPushButton button("close", &child); - connect(&button, SIGNAL(clicked()), &child, SLOT(close())); - parent.show(); - child.show(); - QPoint inside = button.mapToGlobal(button.geometry().center()); - - // Post a click on the button to close the child dialog: - NativeEventList native; - native.append(new QNativeMouseButtonEvent(inside, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(inside, Qt::LeftButton, 0, Qt::NoModifier)); - - native.play(); - QTest::qWait(100); - QVERIFY(!child.isVisible()); -} - -#if 0 -// This test is disabled as of Qt-4.7.4 because we cannot do it -// unless we use the Cocoa sub window API. But using that opens up -// a world of side effects that we cannot live with. So we rather -// not support child-on-top-of-parent instead. -void tst_MacNativeEvents::testChildWindowInFrontOfParentWindow() -{ - // Test that a child window always stacks in front of its parent window. - // Do this by first click on the parent, then on the child window button. - QWidget parent; - QPushButton child("a button", &parent); - child.setWindowFlags(Qt::Window); - connect(&child, SIGNAL(clicked()), &child, SLOT(close())); - parent.show(); - child.show(); - - QPoint parent_p = parent.geometry().bottomLeft() + QPoint(20, -20); - QPoint child_p = child.geometry().center(); - - NativeEventList native; - native.append(new QNativeMouseButtonEvent(parent_p, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(parent_p, Qt::LeftButton, 0, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(child_p, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(child_p, Qt::LeftButton, 0, Qt::NoModifier)); - - native.play(); - QTest::qWait(100); - QVERIFY(!child.isVisible()); -} -#endif - -/* This test can be enabled once setStackingOrder has been fixed in qwidget_mac.mm -void tst_MacNativeEvents::testChildToolWindowInFrontOfChildNormalWindow() -{ - // Test that a child tool window always stacks in front of normal sibling windows. - // Do this by first click on the sibling, then on the tool window button. - QWidget parent; - QWidget normalChild(&parent, Qt::Window); - QPushButton toolChild("a button", &parent); - toolChild.setWindowFlags(Qt::Tool); - connect(&toolChild, SIGNAL(clicked()), &toolChild, SLOT(close())); - parent.show(); - normalChild.show(); - toolChild.show(); - - QPoint normalChild_p = normalChild.geometry().bottomLeft() + QPoint(20, -20); - QPoint toolChild_p = toolChild.geometry().center(); - - NativeEventList native; - native.append(new QNativeMouseButtonEvent(normalChild_p, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(normalChild_p, Qt::LeftButton, 0, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(toolChild_p, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(toolChild_p, Qt::LeftButton, 0, Qt::NoModifier)); - - native.play(); - QTest::qWait(100); - QVERIFY(!toolChild.isVisible()); -} -*/ -void tst_MacNativeEvents::testChildWindowInFrontOfStaysOnTopParentWindow() -{ - // Test that a child window stacks on top of a stays-on-top parent. - QWidget parent(0, Qt::WindowStaysOnTopHint); - QPushButton button("close", &parent); - button.setWindowFlags(Qt::Window); - connect(&button, SIGNAL(clicked()), &button, SLOT(close())); - parent.show(); - button.show(); - QPoint inside = button.geometry().center(); - - // Post a click on the button to close the child dialog: - NativeEventList native; - native.append(new QNativeMouseButtonEvent(inside, Qt::LeftButton, 1, Qt::NoModifier)); - native.append(new QNativeMouseButtonEvent(inside, Qt::LeftButton, 0, Qt::NoModifier)); - - native.play(); - QTest::qWait(100); - QVERIFY(!button.isVisible()); -} - -void tst_MacNativeEvents::testKeyPressOnToplevel() -{ - // Check that we receive keyevents for - // toplevel widgets. For leagacy reasons, and according to Qt on - // other platforms (carbon port + linux), we should get these events - // even when the focus policy is set to Qt::NoFocus when there is no - // other focus widget on screen: - QWidget w; - w.show(); - - NativeEventList native; - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, true, Qt::NoModifier)); - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, false, Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier)); - expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_A, Qt::NoModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testModifierShift() -{ - QWidget w; - w.show(); - - NativeEventList native; - native.append(new QNativeModifierEvent(Qt::ShiftModifier)); - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, true, Qt::ShiftModifier)); - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, false, Qt::ShiftModifier)); - native.append(new QNativeModifierEvent(Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_Shift, Qt::NoModifier)); - expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::ShiftModifier)); - expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_A, Qt::ShiftModifier)); - expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_Shift, Qt::ShiftModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testModifierAlt() -{ - QWidget w; - w.show(); - - NativeEventList native; - native.append(new QNativeModifierEvent(Qt::AltModifier)); - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, true, Qt::AltModifier)); - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, false, Qt::AltModifier)); - native.append(new QNativeModifierEvent(Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_Alt, Qt::NoModifier)); - expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::AltModifier)); - expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_A, Qt::AltModifier)); - expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_Alt, Qt::AltModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testModifierCtrl() -{ - // On Mac, we switch the Command and Control modifier by default, so that Command - // means Meta, and Control means Command. Lets check that this works: - QWidget w; - w.show(); - - QVERIFY(kControlUnicode == QKeySequence(Qt::Key_Meta).toString(QKeySequence::NativeText)[0]); - QVERIFY(kCommandUnicode == QKeySequence(Qt::Key_Control).toString(QKeySequence::NativeText)[0]); - - NativeEventList native; - native.append(new QNativeModifierEvent(Qt::ControlModifier)); - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, true, Qt::ControlModifier)); - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, false, Qt::ControlModifier)); - native.append(new QNativeModifierEvent(Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_Meta, Qt::NoModifier)); - expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::MetaModifier)); - expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_A, Qt::MetaModifier)); - expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_Meta, Qt::MetaModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); -} - -void tst_MacNativeEvents::testModifierCtrlWithDontSwapCtrlAndMeta() -{ - // On Mac, we switch the Command and Control modifier by default, so that Command - // means Meta, and Control means Command. Lets check that the flag to swith off - // this behaviour works. While working on this test I realized that we actually - // don't (and never have) respected this flag for raw key events. Only for - // menus, through QKeySequence. I don't want to change this behaviour now, at - // least not until someone complains. So I choose to let the test just stop - // any unintended regressions instead. If we decide to resepect the the flag at one - // point, fix the test. - QCoreApplication::setAttribute(Qt::AA_MacDontSwapCtrlAndMeta); - QWidget w; - w.show(); - - QVERIFY(kCommandUnicode == QKeySequence(Qt::Key_Meta).toString(QKeySequence::NativeText)[0]); - QVERIFY(kControlUnicode == QKeySequence(Qt::Key_Control).toString(QKeySequence::NativeText)[0]); - - NativeEventList native; - native.append(new QNativeModifierEvent(Qt::ControlModifier)); - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, true, Qt::ControlModifier)); - native.append(new QNativeKeyEvent(QNativeKeyEvent::Key_A, false, Qt::ControlModifier)); - native.append(new QNativeModifierEvent(Qt::NoModifier)); - - ExpectedEventList expected(&w); - expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_Meta, Qt::NoModifier)); - expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::ControlModifier)); - expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_A, Qt::ControlModifier)); - expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_Meta, Qt::ControlModifier)); - - native.play(); - QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!"); - QCoreApplication::setAttribute(Qt::AA_MacDontSwapCtrlAndMeta, false); -} - -QTEST_MAIN(tst_MacNativeEvents) -#include "tst_macnativeevents.moc" |