Adapt QGraphicsScene test to use QPlatformInputContext
authorPekka Vuorela <pekka.ta.vuorela@nokia.com>
Thu, 15 Dec 2011 14:22:52 +0000 (16:22 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 30 Dec 2011 10:28:20 +0000 (11:28 +0100)
Change-Id: Iaf61798cc78e57563fee088711d39090b722a946
Reviewed-by: Joona Petrell <joona.t.petrell@nokia.com>
tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
tests/auto/widgets/shared/platforminputcontext.h [new file with mode: 0644]

index eebea90..d359581 100644 (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;
diff --git a/tests/auto/widgets/shared/platforminputcontext.h b/tests/auto/widgets/shared/platforminputcontext.h
new file mode 100644 (file)
index 0000000..63a47f0
--- /dev/null
@@ -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;
+};