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/other/macgui/guitest.h | |
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/other/macgui/guitest.h')
-rw-r--r-- | tests/auto/other/macgui/guitest.h | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/tests/auto/other/macgui/guitest.h b/tests/auto/other/macgui/guitest.h new file mode 100644 index 0000000000..170fc5c19c --- /dev/null +++ b/tests/auto/other/macgui/guitest.h @@ -0,0 +1,172 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ +#ifndef GUITEST_H +#define GUITEST_H + +#include <QAccessibleInterface> +#include <QSet> +#include <QWidget> +#include <QPainter> + +QT_USE_NAMESPACE + +/* + GuiTest provides tools for: + - navigating the Qt Widget hiearchy using the accessibilty APIs. + - Simulating platform mouse and keybord events. +*/ + +class TestBase { +public: + virtual bool operator()(QAccessibleInterface *candidate) = 0; + virtual ~TestBase() {} +}; + +/* + WidgetNavigator navigates a Qt GUI hierarchy using the QAccessibility APIs. +*/ +class WidgetNavigator { +public: + WidgetNavigator() {}; + ~WidgetNavigator(); + + void printAll(QWidget *widget); + void printAll(QAccessibleInterface *interface); + + QAccessibleInterface *find(QAccessible::Text textType, const QString &text, QWidget *start); + QAccessibleInterface *find(QAccessible::Text textType, const QString &text, QAccessibleInterface *start); + + QAccessibleInterface *recursiveSearch(TestBase *test, QAccessibleInterface *iface); + + void deleteInDestructor(QAccessibleInterface * interface); + static QWidget *getWidget(QAccessibleInterface *interface); +private: + QSet<QAccessibleInterface *> interfaces; +}; + +/* + NativeEvents contains platform-specific code for simulating mouse and keybord events. + (Implemented so far: mouseClick on Mac) +*/ +namespace NativeEvents { + enum MousePosition { UpdatePosition, DontUpdatePosition }; + /* + Simulates a mouse click with button at globalPos. + */ + void mouseClick(const QPoint &globalPos, Qt::MouseButtons buttons, MousePosition updateMouse = DontUpdatePosition); +}; + +class ColorWidget : public QWidget +{ +public: + ColorWidget(QWidget *parent = 0, QColor color = QColor(Qt::red)) + : QWidget(parent), color(color) {} + + QColor color; + +protected: + void paintEvent(QPaintEvent *) + { + QPainter p(this); + p.fillRect(this->rect(), color); + } +}; + +class DelayedAction : public QObject +{ +Q_OBJECT +public: + DelayedAction() : delay(0), next(0) {} + virtual ~DelayedAction(){} +public slots: + virtual void run(); +public: + int delay; + DelayedAction *next; +}; + +class ClickLaterAction : public DelayedAction +{ +Q_OBJECT +public: + ClickLaterAction(QAccessibleInterface *interface, Qt::MouseButtons buttons = Qt::LeftButton); + ClickLaterAction(QWidget *widget, Qt::MouseButtons buttons = Qt::LeftButton); +protected slots: + void run(); +private: + bool useInterface; + QAccessibleInterface *interface; + QWidget *widget; + Qt::MouseButtons buttons; +}; + +/* + +*/ +class GuiTester : public QObject +{ +Q_OBJECT +public: + GuiTester(); + ~GuiTester(); + enum Direction {Horizontal = 1, Vertical = 2, HorizontalAndVertical = 3}; + Q_DECLARE_FLAGS(Directions, Direction) + bool isFilled(const QImage image, const QRect &rect, const QColor &color); + bool isContent(const QImage image, const QRect &rect, Directions directions = HorizontalAndVertical); +protected slots: + void exitLoopSlot(); +protected: + void clickLater(QAccessibleInterface *interface, Qt::MouseButtons buttons = Qt::LeftButton, int delay = 300); + void clickLater(QWidget *widget, Qt::MouseButtons buttons = Qt::LeftButton, int delay = 300); + + void clearSequence(); + void addToSequence(DelayedAction *action, int delay = 0); + void runSequence(); + WidgetNavigator wn; +private: + QSet<DelayedAction *> actions; + DelayedAction *startAction; + DelayedAction *lastAction; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(GuiTester::Directions) + +#endif |