Refactor input context tests

Combined test input context instances and adapted changed
interfaces a bit.

Change-Id: Id5422cac5967d45dcaf2eb71b941d9c45e3b4dee
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
This commit is contained in:
Pekka Vuorela 2012-02-22 11:34:37 +02:00 committed by Qt by Nokia
parent 82fb03546b
commit 7401832a7d
4 changed files with 68 additions and 84 deletions

View File

@ -44,88 +44,20 @@
#include <private/qguiapplication_p.h> #include <private/qguiapplication_p.h>
#include <private/qinputmethod_p.h> #include <private/qinputmethod_p.h>
#include <qplatforminputcontext_qpa.h> #include <qplatforminputcontext_qpa.h>
#include "../../../shared/platforminputcontext.h"
class PlatformInputContext : public QPlatformInputContext
{
public:
PlatformInputContext() :
m_animating(false),
m_visible(false),
m_updateCallCount(0),
m_resetCallCount(0),
m_commitCallCount(0),
m_localeCallCount(0),
m_inputDirectionCallCount(0),
m_lastQueries(Qt::ImhNone),
m_action(QInputMethod::Click),
m_cursorPosition(0),
m_lastEventType(QEvent::None)
{}
virtual QRectF keyboardRect() const { return m_keyboardRect; }
virtual bool isAnimating() const { return m_animating; }
virtual void reset() { m_resetCallCount++; }
virtual void commit() { m_commitCallCount++; }
virtual void update(Qt::InputMethodQueries queries)
{
m_updateCallCount++;
m_lastQueries = queries;
}
virtual void invokeAction(QInputMethod::Action action, int cursorPosition)
{
m_action = action;
m_cursorPosition = cursorPosition;
}
virtual bool filterEvent(const QEvent *event)
{
m_lastEventType = event->type(); return false;
}
virtual void showInputPanel()
{
m_visible = true;
}
virtual void hideInputPanel()
{
m_visible = false;
}
virtual bool isInputPanelVisible() const
{
return m_visible;
}
virtual QLocale locale() const
{
m_localeCallCount++;
return QLocale::c();
}
virtual Qt::LayoutDirection inputDirection() const
{
m_inputDirectionCallCount++;
return Qt::LeftToRight;
}
bool m_animating;
bool m_visible;
int m_updateCallCount;
int m_resetCallCount;
int m_commitCallCount;
mutable int m_localeCallCount;
mutable int m_inputDirectionCallCount;
Qt::InputMethodQueries m_lastQueries;
QInputMethod::Action m_action;
int m_cursorPosition;
int m_lastEventType;
QRectF m_keyboardRect;
};
class InputItem : public QObject class InputItem : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
InputItem() : m_enabled(true) {}
bool event(QEvent *event) bool event(QEvent *event)
{ {
if (event->type() == QEvent::InputMethodQuery) { if (event->type() == QEvent::InputMethodQuery) {
QInputMethodQueryEvent *query = static_cast<QInputMethodQueryEvent *>(event); QInputMethodQueryEvent *query = static_cast<QInputMethodQueryEvent *>(event);
if (query->queries() & Qt::ImEnabled)
query->setValue(Qt::ImEnabled, m_enabled);
if (query->queries() & Qt::ImCursorRectangle) if (query->queries() & Qt::ImCursorRectangle)
query->setValue(Qt::ImCursorRectangle, QRectF(1, 2, 3, 4)); query->setValue(Qt::ImCursorRectangle, QRectF(1, 2, 3, 4));
if (query->queries() & Qt::ImPreferredLanguage) if (query->queries() & Qt::ImPreferredLanguage)
@ -136,9 +68,39 @@ public:
} }
return false; return false;
} }
void setEnabled(bool enabled) {
if (enabled != m_enabled) {
m_enabled = enabled;
qApp->inputMethod()->update(Qt::ImEnabled);
}
}
Qt::InputMethodQueries m_lastQueries; Qt::InputMethodQueries m_lastQueries;
bool m_enabled;
}; };
class DummyWindow : public QWindow
{
public:
DummyWindow() : m_focusObject(0) {}
virtual QObject *focusObject() const
{
return m_focusObject;
}
void setFocusObject(QObject *object)
{
m_focusObject = object;
emit focusObjectChanged(object);
}
QObject *m_focusObject;
};
class tst_qinputmethod : public QObject class tst_qinputmethod : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -249,17 +211,22 @@ void tst_qinputmethod::cursorRectangle()
{ {
QCOMPARE(qApp->inputMethod()->cursorRectangle(), QRectF()); QCOMPARE(qApp->inputMethod()->cursorRectangle(), QRectF());
DummyWindow window;
window.show();
QTest::qWaitForWindowShown(&window);
window.requestActivateWindow();
QTRY_COMPARE(qApp->focusWindow(), &window);
window.setFocusObject(&m_inputItem);
QTransform transform; QTransform transform;
transform.translate(10, 10); transform.translate(10, 10);
transform.scale(2, 2); transform.scale(2, 2);
transform.shear(2, 2); transform.shear(2, 2);
qApp->inputMethod()->setInputItemTransform(transform); qApp->inputMethod()->setInputItemTransform(transform);
qApp->inputMethod()->setInputItem(&m_inputItem);
QCOMPARE(qApp->inputMethod()->cursorRectangle(), transform.mapRect(QRectF(1, 2, 3, 4))); QCOMPARE(qApp->inputMethod()->cursorRectangle(), transform.mapRect(QRectF(1, 2, 3, 4)));
// reset // reset
qApp->inputMethod()->setInputItem(0);
qApp->inputMethod()->setInputItemTransform(QTransform()); qApp->inputMethod()->setInputItemTransform(QTransform());
} }
@ -297,7 +264,13 @@ void tst_qinputmethod::commit()
void tst_qinputmethod::update() void tst_qinputmethod::update()
{ {
qApp->inputMethod()->setInputItem(&m_inputItem); DummyWindow window;
window.show();
QTest::qWaitForWindowShown(&window);
window.requestActivateWindow();
QTRY_COMPARE(qApp->focusWindow(), &window);
window.setFocusObject(&m_inputItem);
QCOMPARE(m_platformInputContext.m_updateCallCount, 0); QCOMPARE(m_platformInputContext.m_updateCallCount, 0);
QCOMPARE(int(m_platformInputContext.m_lastQueries), int(Qt::ImhNone)); QCOMPARE(int(m_platformInputContext.m_lastQueries), int(Qt::ImhNone));
@ -310,9 +283,6 @@ void tst_qinputmethod::update()
QCOMPARE(int(m_platformInputContext.m_lastQueries), int(Qt::ImQueryAll)); QCOMPARE(int(m_platformInputContext.m_lastQueries), int(Qt::ImQueryAll));
QCOMPARE(qApp->inputMethod()->keyboardRectangle(), QRectF(10, 20, 30, 40)); QCOMPARE(qApp->inputMethod()->keyboardRectangle(), QRectF(10, 20, 30, 40));
// reset
qApp->inputMethod()->setInputItem(0);
} }
void tst_qinputmethod::query() void tst_qinputmethod::query()

View File

@ -50,8 +50,10 @@ public:
m_updateCallCount(0), m_updateCallCount(0),
m_resetCallCount(0), m_resetCallCount(0),
m_commitCallCount(0), m_commitCallCount(0),
m_localeCallCount(0),
m_inputDirectionCallCount(0),
m_lastQueries(Qt::ImhNone), m_lastQueries(Qt::ImhNone),
m_action(QInputPanel::Click), m_action(QInputMethod::Click),
m_cursorPosition(0), m_cursorPosition(0),
m_lastEventType(QEvent::None) m_lastEventType(QEvent::None)
{} {}
@ -66,7 +68,7 @@ public:
m_updateCallCount++; m_updateCallCount++;
m_lastQueries = queries; m_lastQueries = queries;
} }
virtual void invokeAction(QInputPanel::Action action, int cursorPosition) virtual void invokeAction(QInputMethod::Action action, int cursorPosition)
{ {
m_action = action; m_action = action;
m_cursorPosition = cursorPosition; m_cursorPosition = cursorPosition;
@ -87,14 +89,26 @@ public:
{ {
return m_visible; return m_visible;
} }
virtual QLocale locale() const
{
m_localeCallCount++;
return QLocale::c();
}
virtual Qt::LayoutDirection inputDirection() const
{
m_inputDirectionCallCount++;
return Qt::LeftToRight;
}
bool m_animating; bool m_animating;
bool m_visible; bool m_visible;
int m_updateCallCount; int m_updateCallCount;
int m_resetCallCount; int m_resetCallCount;
int m_commitCallCount; int m_commitCallCount;
mutable int m_localeCallCount;
mutable int m_inputDirectionCallCount;
Qt::InputMethodQueries m_lastQueries; Qt::InputMethodQueries m_lastQueries;
QInputPanel::Action m_action; QInputMethod::Action m_action;
int m_cursorPosition; int m_cursorPosition;
int m_lastEventType; int m_lastEventType;
QRectF m_keyboardRect; QRectF m_keyboardRect;

View File

@ -51,7 +51,7 @@
#include <private/qgraphicssceneindex_p.h> #include <private/qgraphicssceneindex_p.h>
#include <math.h> #include <math.h>
#include "../../../gui/painting/qpathclipper/pathcompare.h" #include "../../../gui/painting/qpathclipper/pathcompare.h"
#include "../../shared/platforminputcontext.h" #include "../../../shared/platforminputcontext.h"
#include <private/qinputmethod_p.h> #include <private/qinputmethod_p.h>
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)

View File

@ -71,7 +71,7 @@
#include <QtWidgets/QDesktopWidget> #include <QtWidgets/QDesktopWidget>
#include <private/qgraphicsview_p.h> #include <private/qgraphicsview_p.h>
#include "../../../platformquirks.h" #include "../../../platformquirks.h"
#include "../../shared/platforminputcontext.h" #include "../../../shared/platforminputcontext.h"
#include <private/qinputmethod_p.h> #include <private/qinputmethod_p.h>
Q_DECLARE_METATYPE(QList<int>) Q_DECLARE_METATYPE(QList<int>)