File indexing completed on 2025-12-16 10:27:33
0001
0002
0003
0004 #ifndef QTESTEVENT_H
0005 #define QTESTEVENT_H
0006
0007 #if 0
0008
0009 #pragma qt_no_master_include
0010 #endif
0011
0012 #include <QtTest/qttestglobal.h>
0013 #ifdef QT_GUI_LIB
0014 #include <QtTest/qtestkeyboard.h>
0015 #include <QtTest/qtestmouse.h>
0016 #endif
0017 #include <QtTest/qtestsystem.h>
0018
0019 #include <QtCore/qlist.h>
0020
0021 #include <stdlib.h>
0022
0023 QT_BEGIN_NAMESPACE
0024
0025 #ifdef QT_WIDGETS_LIB
0026 # define QT_ONLY_WIDGETLIB_USES
0027 #else
0028 # define QT_ONLY_WIDGETLIB_USES Q_DECL_UNUSED_MEMBER
0029 #endif
0030
0031 QT_WARNING_PUSH
0032 QT_WARNING_DISABLE_CLANG("-Wweak-vtables")
0033
0034 class QTestEvent
0035 {
0036 public:
0037 #ifdef QT_WIDGETS_LIB
0038 virtual void simulate(QWidget *w) = 0;
0039 #endif
0040 virtual QTestEvent *clone() const = 0;
0041
0042 virtual ~QTestEvent() = default;
0043 };
0044
0045 #ifdef QT_GUI_LIB
0046 class QTestKeyEvent: public QTestEvent
0047 {
0048 public:
0049 ~QTestKeyEvent() override = default;
0050
0051 inline QTestKeyEvent(QTest::KeyAction action, Qt::Key key, Qt::KeyboardModifiers modifiers, int delay)
0052 : _action(action), _delay(delay), _modifiers(modifiers), _ascii(0), _key(key) {}
0053 inline QTestKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers, int delay)
0054 : _action(action), _delay(delay), _modifiers(modifiers),
0055 _ascii(ascii), _key(Qt::Key_unknown) {}
0056 inline QTestEvent *clone() const override { return new QTestKeyEvent(*this); }
0057
0058 #ifdef QT_WIDGETS_LIB
0059 inline void simulate(QWidget *w) override
0060 {
0061 if (_ascii == 0)
0062 QTest::keyEvent(_action, w, _key, _modifiers, _delay);
0063 else
0064 QTest::keyEvent(_action, w, _ascii, _modifiers, _delay);
0065 }
0066 #endif
0067
0068 protected:
0069 QTest::KeyAction _action;
0070 int _delay;
0071 Qt::KeyboardModifiers _modifiers;
0072 char _ascii;
0073 Qt::Key _key;
0074 };
0075
0076 class QTestKeyClicksEvent: public QTestEvent
0077 {
0078 public:
0079 ~QTestKeyClicksEvent() override = default;
0080
0081 inline QTestKeyClicksEvent(const QString &keys, Qt::KeyboardModifiers modifiers, int delay)
0082 : _keys(keys), _modifiers(modifiers), _delay(delay) {}
0083 inline QTestEvent *clone() const override { return new QTestKeyClicksEvent(*this); }
0084
0085 #ifdef QT_WIDGETS_LIB
0086 inline void simulate(QWidget *w) override
0087 {
0088 QTest::keyClicks(w, _keys, _modifiers, _delay);
0089 }
0090 #endif
0091
0092 private:
0093 QT_ONLY_WIDGETLIB_USES QString _keys;
0094 QT_ONLY_WIDGETLIB_USES Qt::KeyboardModifiers _modifiers;
0095 QT_ONLY_WIDGETLIB_USES int _delay;
0096 };
0097
0098 class QTestMouseEvent: public QTestEvent
0099 {
0100 public:
0101 ~QTestMouseEvent() override = default;
0102
0103 inline QTestMouseEvent(QTest::MouseAction action, Qt::MouseButton button,
0104 Qt::KeyboardModifiers modifiers, QPoint position, int delay)
0105 : _action(action), _button(button), _modifiers(modifiers), _pos(position), _delay(delay) {}
0106 inline QTestEvent *clone() const override { return new QTestMouseEvent(*this); }
0107
0108 #ifdef QT_WIDGETS_LIB
0109 inline void simulate(QWidget *w) override
0110 {
0111 QTest::mouseEvent(_action, w, _button, _modifiers, _pos, _delay);
0112 }
0113 #endif
0114
0115 private:
0116 QT_ONLY_WIDGETLIB_USES QTest::MouseAction _action;
0117 QT_ONLY_WIDGETLIB_USES Qt::MouseButton _button;
0118 QT_ONLY_WIDGETLIB_USES Qt::KeyboardModifiers _modifiers;
0119 QT_ONLY_WIDGETLIB_USES QPoint _pos;
0120 QT_ONLY_WIDGETLIB_USES int _delay;
0121 };
0122 #endif
0123
0124
0125 class QTestDelayEvent: public QTestEvent
0126 {
0127 public:
0128 inline QTestDelayEvent(int msecs): _delay(msecs) {}
0129 ~QTestDelayEvent() override = default;
0130
0131 inline QTestEvent *clone() const override { return new QTestDelayEvent(*this); }
0132
0133 #ifdef QT_WIDGETS_LIB
0134 inline void simulate(QWidget * ) override { QTest::qWait(_delay); }
0135 #endif
0136
0137 private:
0138 QT_ONLY_WIDGETLIB_USES int _delay;
0139 };
0140
0141 class QTestEventList: public QList<QTestEvent *>
0142 {
0143 public:
0144 inline QTestEventList() {}
0145 inline QTestEventList(const QTestEventList &other): QList<QTestEvent *>()
0146 { for (int i = 0; i < other.size(); ++i) append(other.at(i)->clone()); }
0147 inline ~QTestEventList()
0148 { clear(); }
0149 inline void clear()
0150 { qDeleteAll(*this); QList<QTestEvent *>::clear(); }
0151
0152 #ifdef QT_GUI_LIB
0153 inline void addKeyClick(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0154 { addKeyEvent(QTest::Click, qtKey, modifiers, msecs); }
0155 inline void addKeyPress(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0156 { addKeyEvent(QTest::Press, qtKey, modifiers, msecs); }
0157 inline void addKeyRelease(Qt::Key qtKey, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0158 { addKeyEvent(QTest::Release, qtKey, modifiers, msecs); }
0159 inline void addKeyEvent(QTest::KeyAction action, Qt::Key qtKey,
0160 Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0161 { append(new QTestKeyEvent(action, qtKey, modifiers, msecs)); }
0162
0163 inline void addKeyClick(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0164 { addKeyEvent(QTest::Click, ascii, modifiers, msecs); }
0165 inline void addKeyPress(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0166 { addKeyEvent(QTest::Press, ascii, modifiers, msecs); }
0167 inline void addKeyRelease(char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0168 { addKeyEvent(QTest::Release, ascii, modifiers, msecs); }
0169 inline void addKeyClicks(const QString &keys, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0170 { append(new QTestKeyClicksEvent(keys, modifiers, msecs)); }
0171 inline void addKeyEvent(QTest::KeyAction action, char ascii, Qt::KeyboardModifiers modifiers = Qt::NoModifier, int msecs = -1)
0172 { append(new QTestKeyEvent(action, ascii, modifiers, msecs)); }
0173
0174 inline void addMousePress(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0175 QPoint pos = QPoint(), int delay=-1)
0176 { append(new QTestMouseEvent(QTest::MousePress, button, stateKey, pos, delay)); }
0177 inline void addMouseRelease(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0178 QPoint pos = QPoint(), int delay=-1)
0179 { append(new QTestMouseEvent(QTest::MouseRelease, button, stateKey, pos, delay)); }
0180 inline void addMouseClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0181 QPoint pos = QPoint(), int delay=-1)
0182 { append(new QTestMouseEvent(QTest::MouseClick, button, stateKey, pos, delay)); }
0183 inline void addMouseDClick(Qt::MouseButton button, Qt::KeyboardModifiers stateKey = Qt::KeyboardModifiers(),
0184 QPoint pos = QPoint(), int delay=-1)
0185 { append(new QTestMouseEvent(QTest::MouseDClick, button, stateKey, pos, delay)); }
0186 inline void addMouseMove(QPoint pos = QPoint(), int delay=-1)
0187 { append(new QTestMouseEvent(QTest::MouseMove, Qt::NoButton, Qt::KeyboardModifiers(), pos, delay)); }
0188 #endif
0189
0190 inline void addDelay(int msecs)
0191 { append(new QTestDelayEvent(msecs)); }
0192
0193 #ifdef QT_WIDGETS_LIB
0194 inline void simulate(QWidget *w)
0195 {
0196 for (int i = 0; i < size(); ++i)
0197 at(i)->simulate(w);
0198 }
0199 #endif
0200 };
0201
0202 #undef QT_ONLY_WIDGETLIB_USES
0203
0204 QT_WARNING_POP
0205
0206 QT_END_NAMESPACE
0207
0208 Q_DECLARE_METATYPE(QTestEventList)
0209
0210 #endif