summaryrefslogtreecommitdiffstats
path: root/tests/manual/widgets/inputmethods/testview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/widgets/inputmethods/testview.cpp')
-rw-r--r--tests/manual/widgets/inputmethods/testview.cpp141
1 files changed, 141 insertions, 0 deletions
diff --git a/tests/manual/widgets/inputmethods/testview.cpp b/tests/manual/widgets/inputmethods/testview.cpp
new file mode 100644
index 000000000..d41734c2d
--- /dev/null
+++ b/tests/manual/widgets/inputmethods/testview.cpp
@@ -0,0 +1,141 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** 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 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** 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 "testview.h"
+
+#include <QDebug>
+#include <QFile>
+#include <QPushButton>
+#include <QRegExp>
+#include <QStandardItemModel>
+#include <QTableView>
+#include <QTest>
+#include <QTextCharFormat>
+#include <QVBoxLayout>
+
+TestView::TestView(QWidget *parent)
+ : QWidget(parent)
+ , m_tableView(new QTableView)
+ , m_testButton(new QPushButton)
+ , m_testRunning(false)
+{
+ m_testButton->setText(tr("Start Test"));
+ connect(m_testButton, &QPushButton::clicked, this, &TestView::startOrCancelTest);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(m_tableView);
+ layout->addWidget(m_testButton);
+ setLayout(layout);
+
+ QStandardItemModel *model = new QStandardItemModel(0, 6, this);
+ model->setHorizontalHeaderItem(0, new QStandardItem(tr("Input")));
+ model->setHorizontalHeaderItem(1, new QStandardItem(tr("Start")));
+ model->setHorizontalHeaderItem(2, new QStandardItem(tr("Length")));
+ model->setHorizontalHeaderItem(3, new QStandardItem(tr("Underline")));
+ model->setHorizontalHeaderItem(4, new QStandardItem(tr("Underline Color")));
+ model->setHorizontalHeaderItem(5, new QStandardItem(tr("Background Color")));
+
+ m_tableView->setModel(model);
+ connect(m_tableView, &QTableView::clicked, this, &TestView::collectAndSendData);
+
+ loadTestData(":/testdata.csv");
+}
+
+void TestView::loadTestData(const QString &testDataPath)
+{
+ QFile testDataFile(testDataPath);
+ if (!testDataFile.open(QIODevice::ReadOnly)) {
+ qWarning() << "Unable to open " << testDataFile.fileName() << ":" << testDataFile.errorString();
+ return;
+ }
+
+ QTextStream testDataStream(&testDataFile);
+ while (!testDataStream.atEnd()) {
+ QString line = testDataStream.readLine();
+ QRegExp data("^\"(.*)\"\\s*,\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*,\\s*(\\d+)\\s*,\\s*\"(.*)\"\\s*,\\s*\"(.*)\"\\s*$");
+ if (!data.exactMatch(line))
+ continue;
+
+ QStandardItemModel *model = qobject_cast<QStandardItemModel *>(m_tableView->model());
+
+ QList<QStandardItem *> row;
+ for (int i = 1; i <= data.captureCount(); ++i)
+ row.append(new QStandardItem(data.cap(i)));
+
+ model->appendRow(row);
+ }
+
+ testDataFile.close();
+}
+
+void TestView::startOrCancelTest()
+{
+ if (m_testRunning) {
+ m_testRunning = false;
+ m_testButton->setText(tr("Start Test"));
+ return;
+ }
+
+ m_testRunning = true;
+ m_testButton->setText(tr("Cancel Test"));
+
+ int firstRowIndex = m_tableView->currentIndex().row() + 1;
+ if (firstRowIndex == m_tableView->model()->rowCount())
+ firstRowIndex = 0;
+
+ for (int row = firstRowIndex; row < m_tableView->model()->rowCount(); ++row) {
+ if (!m_testRunning)
+ break;
+
+ m_tableView->selectRow(row);
+ collectAndSendData();
+ emit requestInputMethodEvent();
+
+ QTest::qWait(1000);
+ }
+
+ if (m_testRunning) {
+ m_testRunning = false;
+ m_testButton->setText(tr("Start Test"));
+ }
+}
+
+void TestView::collectAndSendData()
+{
+ int row = m_tableView->currentIndex().row();
+ QStandardItemModel *model = static_cast<QStandardItemModel *>(m_tableView->model());
+
+ const QString &input = model->data(model->index(row, 0)).toString();
+ const int start = model->data(model->index(row, 1)).toInt();
+ const int length = model->data(model->index(row, 2)).toInt();
+ const QTextCharFormat::UnderlineStyle underlineStyle = static_cast<QTextCharFormat::UnderlineStyle>(model->data(model->index(row, 3)).toInt());
+ const QColor &underlineColor = qvariant_cast<QColor>(model->data(model->index(row, 4)));
+ const QColor &backgroundColor = qvariant_cast<QColor>(model->data(model->index(row, 5)));
+
+ emit sendInputMethodData(start, length, underlineStyle, underlineColor, backgroundColor.isValid() ? backgroundColor : Qt::white, input);
+}