aboutsummaryrefslogtreecommitdiffstats
path: root/tests/manual/x11vkbtest/testthread.cpp
diff options
context:
space:
mode:
authorMikko Seppänen <mikko.seppanen123@gmail.com>2019-06-19 15:56:13 +0300
committerJani Heikkinen <jani.heikkinen@qt.io>2019-10-08 10:53:15 +0000
commitae362d1e7ea48a2620a121f2848a9f12fa82d498 (patch)
treea0045479d86e9962ada7c7ea9de32ad1a98d5d9d /tests/manual/x11vkbtest/testthread.cpp
parent932ae053ab9ea8aed974e8dde1bf7ef8524826a3 (diff)
Qt virtual keyboard wrapper for X11v5.14.0-beta2
This application is a Qt virtual keyboard wrapper that uses Qt virtual keyboard for any X11 input. Application uses At-Spi2 library for listening focus-in events on text widgets and pops up the Qt virtual keyboard when an accepted focus-in event is received. There's also support for listening focus-in events from Chromium browser. For mapping and sending the key events to focused text widget the application uses libXtst, libX11 and libxdo which are also external dependencies to the application among At-Spi2 library. Change-Id: Ifa54969ab4f61e1d48f11ca11058c836f2a403b8 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io> (cherry picked from commit fb9e76c9ebcc9ca98ff04e7310a12b4511fa5539)
Diffstat (limited to 'tests/manual/x11vkbtest/testthread.cpp')
-rw-r--r--tests/manual/x11vkbtest/testthread.cpp135
1 files changed, 135 insertions, 0 deletions
diff --git a/tests/manual/x11vkbtest/testthread.cpp b/tests/manual/x11vkbtest/testthread.cpp
new file mode 100644
index 00000000..8bf4556c
--- /dev/null
+++ b/tests/manual/x11vkbtest/testthread.cpp
@@ -0,0 +1,135 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) any later version
+** approved by the KDE Free Qt Foundation. The licenses are as published by
+** the Free Software Foundation and appearing in the file LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QEventLoop>
+#include <QFile>
+#include <QElapsedTimer>
+#include <QLoggingCategory>
+
+#include "testreporter.h"
+#include "processhandler.h"
+#include "startclose.h"
+#include "testenglishletters.h"
+#include "testlanguagechange.h"
+#include "testthread.h"
+#include "windowhelper.h"
+
+namespace {
+const quint32 KTime_Wait_To_Start_Test = 1000000;
+}
+
+Q_LOGGING_CATEGORY(lcTestThread, "qt.virtualkeyboard.tests.manual.x11vkbtest.testthread")
+
+TestThread::TestThread(const QString &x11vkbPath, quint32 startCloseTest, quint32 keyOperationTest, quint32 langChangeTest, QObject *parent) :
+ QThread(parent),
+ m_x11vkbPath(x11vkbPath),
+ m_numberOfStartClose(startCloseTest),
+ m_numberOfKeyOperation(keyOperationTest),
+ m_numberOfLangChange(langChangeTest)
+{
+}
+
+void TestThread::run()
+{
+ QElapsedTimer testTimer;
+ testTimer.start();
+
+ QVector<TestBase*> tests;
+
+ TestReporter reporter;
+ WindowHelper windowHelper;
+ auto x11vkbProcHandler = new ProcessHandler(&windowHelper, m_x11vkbPath);
+
+ if (m_numberOfStartClose > 0 || (m_numberOfKeyOperation == 0 && m_numberOfLangChange == 0)) {
+ auto startClose = new StartClose(*x11vkbProcHandler->getPRocess(), m_numberOfStartClose, &windowHelper);
+ tests.append(startClose);
+ }
+
+ if (m_numberOfKeyOperation > 0 || (m_numberOfStartClose == 0 && m_numberOfLangChange == 0)) {
+ auto testEngLetters = new TestEnglishLetters(&windowHelper, windowHelper, m_numberOfKeyOperation);
+ tests.append(testEngLetters);
+ }
+
+ if (m_numberOfLangChange > 0 || (m_numberOfStartClose == 0 && m_numberOfKeyOperation == 0)) {
+ auto testLang = new TestLanguageChange(&windowHelper, windowHelper, m_numberOfLangChange);
+ tests.append(testLang);
+ }
+
+ bool startVKB = true;
+ if (tests.size() == 1 && nullptr != qobject_cast<StartClose*>(tests.first())) {
+ startVKB = false;
+ }
+ /* main loop to connect test each after another */
+ for (int i = 0 ; i < tests.size() - 1 ; ++i) {
+ if (nullptr != qobject_cast<StartClose*>(tests.at(i))) {
+ QObject::connect(tests.at(i), &StartClose::endTest, [&]() {
+
+ auto x11vkbProcId = x11vkbProcHandler->getProcId();
+
+ emit processID(x11vkbProcId);
+
+ for (int i = 1 ; i < tests.size() ; ++i) {
+ tests.at(i)->setProcID(x11vkbProcId);
+ }
+ if (tests.size() > 1) {
+ emit startMemoryMonitor();
+ usleep(KTime_Wait_To_Start_Test);
+ tests.at(1)->startTest();
+ }
+ });
+ startVKB = false;
+ } else {
+ QObject::connect(tests.at(i), &TestBase::endTest, tests.at(i+1), &TestBase::startTest);
+ }
+ }
+
+ if (startVKB) {
+ emit startMemoryMonitor();
+ x11vkbProcHandler->startProc();
+ qCDebug(lcTestThread) << "Explicitly start process";
+ auto x11vkbProcId = x11vkbProcHandler->getProcId();
+
+ emit processID(x11vkbProcId);
+
+ for (auto test : tests) {
+ test->setProcID(x11vkbProcId);
+ }
+ usleep(KTime_Wait_To_Start_Test);
+ }
+
+ QObject::connect(tests.last(), &TestBase::endTest, this, &QThread::quit);
+
+ tests.first()->startTest();
+ exec();
+
+ reporter.printTestResultsToCSV(tests);
+ reporter.printTestResultToConsole(tests);
+
+ x11vkbProcHandler->closeProcess();
+}