From b83e98d22c667ae36be5ed85b863c7086482afa4 Mon Sep 17 00:00:00 2001 From: Pekka Vuorela Date: Thu, 15 Dec 2011 16:22:52 +0200 Subject: Adapt QGraphicsScene test to use QPlatformInputContext Change-Id: Iaf61798cc78e57563fee088711d39090b722a946 Reviewed-by: Joona Petrell --- .../qgraphicsscene/tst_qgraphicsscene.cpp | 41 ++++----- tests/auto/widgets/shared/platforminputcontext.h | 101 +++++++++++++++++++++ 2 files changed, 118 insertions(+), 24 deletions(-) create mode 100644 tests/auto/widgets/shared/platforminputcontext.h (limited to 'tests/auto') diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp index eebea90a61..d359581f1a 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp @@ -51,6 +51,8 @@ #include #include #include "../../../gui/painting/qpathclipper/pathcompare.h" +#include "../../shared/platforminputcontext.h" +#include #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) #include @@ -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(&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; diff --git a/tests/auto/widgets/shared/platforminputcontext.h b/tests/auto/widgets/shared/platforminputcontext.h new file mode 100644 index 0000000000..63a47f013f --- /dev/null +++ b/tests/auto/widgets/shared/platforminputcontext.h @@ -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 + +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; +}; -- cgit v1.2.3