File indexing completed on 2024-05-12 04:33:27

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"