File indexing completed on 2024-05-12 16:06:02
0001 /* 0002 SPDX-FileCopyrightText: 2019 João Netto <joaonetto901@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include <QTest> 0008 0009 #include "../settings_core.h" 0010 #include <QLocale> 0011 #include <QMap> 0012 #include <QMimeDatabase> 0013 #include <QMimeType> 0014 #include <core/document.h> 0015 #include <core/form.h> 0016 #include <core/page.h> 0017 #include <qtestcase.h> 0018 0019 class KeystrokeTest : public QObject 0020 { 0021 Q_OBJECT 0022 0023 private Q_SLOTS: 0024 void initTestCase(); 0025 void cleanupTestCase(); 0026 0027 void testCommit(); 0028 void testKeystroke(); 0029 0030 private: 0031 Okular::Document *m_document; 0032 QMap<QString, Okular::FormField *> m_fields; 0033 }; 0034 0035 void KeystrokeTest::initTestCase() 0036 { 0037 Okular::SettingsCore::instance(QStringLiteral("keystroketest")); 0038 m_document = new Okular::Document(nullptr); 0039 0040 // Force consistent locale 0041 QLocale locale(QStringLiteral("en_US")); 0042 QLocale::setDefault(locale); 0043 0044 const QString testFile = QStringLiteral(KDESRCDIR "data/keystroketest.pdf"); 0045 QMimeDatabase db; 0046 const QMimeType mime = db.mimeTypeForFile(testFile); 0047 QCOMPARE(m_document->openDocument(testFile, QUrl(), mime), Okular::Document::OpenSuccess); 0048 0049 const Okular::Page *page = m_document->page(0); 0050 const QList<Okular::FormField *> pageFormFields = page->formFields(); 0051 for (Okular::FormField *ff : pageFormFields) { 0052 m_fields.insert(ff->name(), ff); 0053 } 0054 } 0055 0056 void KeystrokeTest::testCommit() 0057 { 0058 Okular::FormFieldText *fft = reinterpret_cast<Okular::FormFieldText *>(m_fields[QStringLiteral("field2")]); 0059 0060 // text that will be accepted 0061 fft->setText(QStringLiteral("Lorem ipsum")); 0062 m_document->processKeystrokeCommitAction(fft->additionalAction(Okular::FormField::FieldModified), fft); 0063 QCOMPARE(fft->text(), QStringLiteral("Lorem ipsum")); 0064 0065 // text that will be rejected 0066 fft->setText(QStringLiteral("foo")); 0067 m_document->processKeystrokeCommitAction(fft->additionalAction(Okular::FormField::FieldModified), fft); 0068 QEXPECT_FAIL("", "reset to commited value not implemented", Continue); 0069 QCOMPARE(fft->text(), QStringLiteral("Lorem ipsum")); 0070 } 0071 0072 void KeystrokeTest::testKeystroke() 0073 { 0074 Okular::FormFieldText *fft = reinterpret_cast<Okular::FormFieldText *>(m_fields[QStringLiteral("field3")]); 0075 0076 // accept 0077 m_document->processKeystrokeAction(fft->additionalAction(Okular::FormField::FieldModified), fft, QStringLiteral("hello")); 0078 QCOMPARE(fft->text(), QStringLiteral("hello")); 0079 0080 // accept 0081 m_document->processKeystrokeAction(fft->additionalAction(Okular::FormField::FieldModified), fft, QStringLiteral("e")); 0082 QCOMPARE(fft->text(), QStringLiteral("e")); 0083 0084 // accept 0085 m_document->processKeystrokeAction(fft->additionalAction(Okular::FormField::FieldModified), fft, QStringLiteral("ee")); 0086 QCOMPARE(fft->text(), QStringLiteral("ee")); 0087 0088 // accept 0089 m_document->processKeystrokeAction(fft->additionalAction(Okular::FormField::FieldModified), fft, QStringLiteral("eee")); 0090 QCOMPARE(fft->text(), QStringLiteral("eee")); 0091 0092 // reject 0093 m_document->processKeystrokeAction(fft->additionalAction(Okular::FormField::FieldModified), fft, QStringLiteral("eeef")); 0094 QCOMPARE(fft->text(), QStringLiteral("eee")); 0095 } 0096 0097 void KeystrokeTest::cleanupTestCase() 0098 { 0099 m_document->closeDocument(); 0100 delete m_document; 0101 } 0102 0103 QTEST_MAIN(KeystrokeTest) 0104 #include "keystroketest.moc"