Adapt QGraphicsScene test to use QPlatformInputContext

Change-Id: Iaf61798cc78e57563fee088711d39090b722a946
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
This commit is contained in:
Pekka Vuorela 2011-12-15 16:22:52 +02:00 committed by Qt by Nokia
parent 14e139f391
commit b83e98d22c
2 changed files with 118 additions and 24 deletions

View File

@ -51,6 +51,8 @@
#include <private/qgraphicssceneindex_p.h>
#include <math.h>
#include "../../../gui/painting/qpathclipper/pathcompare.h"
#include "../../shared/platforminputcontext.h"
#include <private/qinputpanel_p.h>
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
#include <windows.h>
@ -186,6 +188,7 @@ class tst_QGraphicsScene : public QObject
Q_OBJECT
public slots:
void initTestCase();
void cleanup();
private slots:
void construction();
@ -289,6 +292,13 @@ void tst_QGraphicsScene::initTestCase()
#endif
}
void tst_QGraphicsScene::cleanup()
{
// ensure not even skipped tests with custom input context leave it dangling
QInputPanelPrivate *inputPanelPrivate = QInputPanelPrivate::get(qApp->inputPanel());
inputPanelPrivate->testContext = 0;
}
void tst_QGraphicsScene::construction()
{
QGraphicsScene scene;
@ -3753,25 +3763,12 @@ public:
mutable int queryCalls;
};
class TestInputContext : public QInputContext
{
public:
TestInputContext() {}
QString identifierName() { return QString(); }
QString language() { return QString(); }
void reset() {
++resetCalls;
sendEvent(QInputMethodEvent()); }
bool isComposing() const { return false; }
int resetCalls;
};
void tst_QGraphicsScene::inputMethod()
{
PlatformInputContext inputContext;
QInputPanelPrivate *inputPanelPrivate = QInputPanelPrivate::get(qApp->inputPanel());
inputPanelPrivate->testContext = &inputContext;
QFETCH(int, flags);
QFETCH(bool, callFocusItem);
@ -3780,21 +3777,19 @@ void tst_QGraphicsScene::inputMethod()
QGraphicsScene scene;
QGraphicsView view(&scene);
TestInputContext *inputContext = new TestInputContext;
qApp->setInputContext(inputContext);
view.show();
QApplication::setActiveWindow(&view);
view.setFocus();
QTest::qWaitForWindowShown(&view);
QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
inputContext->resetCalls = 0;
inputContext.m_resetCallCount = 0;
scene.addItem(item);
QInputMethodEvent event;
scene.setFocusItem(item);
QCOMPARE(!!(item->flags() & QGraphicsItem::ItemIsFocusable), scene.focusItem() == item);
QCOMPARE(inputContext->resetCalls, 0);
QCOMPARE(inputContext.m_resetCallCount, 0);
item->eventCalls = 0;
qApp->sendEvent(&scene, &event);
@ -3807,9 +3802,7 @@ void tst_QGraphicsScene::inputMethod()
scene.setFocusItem(0);
// the input context is reset twice, once because an item has lost focus and again because
// the Qt::WA_InputMethodEnabled flag is cleared because no item has focus.
QEXPECT_FAIL("3", "QTBUG-22456", Abort);
QCOMPARE(inputContext->resetCalls, callFocusItem ? 2 : 0);
QCOMPARE(item->eventCalls, callFocusItem ? 2 : 0); // verify correct delivery of "reset" event
QCOMPARE(inputContext.m_resetCallCount, callFocusItem ? 2 : 0);
QCOMPARE(item->queryCalls, callFocusItem ? 1 : 0); // verify that value is unaffected
item->eventCalls = 0;

View File

@ -0,0 +1,101 @@
/****************************************************************************
**
** 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 <qplatforminputcontext_qpa.h>
class PlatformInputContext : public QPlatformInputContext
{
public:
PlatformInputContext() :
m_animating(false),
m_visible(false),
m_updateCallCount(0),
m_resetCallCount(0),
m_commitCallCount(0),
m_lastQueries(Qt::ImhNone),
m_action(QInputPanel::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(QInputPanel::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;
}
bool m_animating;
bool m_visible;
int m_updateCallCount;
int m_resetCallCount;
int m_commitCallCount;
Qt::InputMethodQueries m_lastQueries;
QInputPanel::Action m_action;
int m_cursorPosition;
int m_lastEventType;
QRectF m_keyboardRect;
};