From 126b9fdf8c581610f3af54b6906f00b3d814e9c9 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sun, 24 Nov 2013 16:36:00 +0100 Subject: [PATCH] Add unit tests for editing PDF forms REVIEW: 114049 --- tests/CMakeLists.txt | 3 + tests/data/formSamples.pdf | Bin 0 -> 27196 bytes tests/editformstest.cpp | 431 +++++++++++++++++++++++++++++++++++++ 3 files changed, 434 insertions(+) create mode 100644 tests/data/formSamples.pdf create mode 100644 tests/editformstest.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 800a2a7f6..3b3fbdd8e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -29,3 +29,6 @@ target_link_libraries( translateannotationtest ${KDE4_KDECORE_LIBS} ${QT_QTGUI_L kde4_add_unit_test( modifyannotationpropertiestest modifyannotationpropertiestest.cpp testingutils.cpp) target_link_libraries( modifyannotationpropertiestest ${KDE4_KDECORE_LIBS} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} ${QT_QTXML_LIBRARY} okularcore ) + +kde4_add_unit_test( editformstest editformstest.cpp ) +target_link_libraries( editformstest ${KDE4_KDECORE_LIBS} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} ${QT_QTXML_LIBRARY} okularcore ) diff --git a/tests/data/formSamples.pdf b/tests/data/formSamples.pdf new file mode 100644 index 0000000000000000000000000000000000000000..84607206567567d51ce1c9e4ffbad1514e9f8bcc GIT binary patch literal 27196 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 D2}Z;8 literal 0 HcmV?d00001 diff --git a/tests/editformstest.cpp b/tests/editformstest.cpp new file mode 100644 index 000000000..bc192c92f --- /dev/null +++ b/tests/editformstest.cpp @@ -0,0 +1,431 @@ +/*************************************************************************** + * Copyright (C) 2013 by Jon Mease * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#include +#include +#include "../settings_core.h" +#include "core/document.h" +#include +#include + +class EditFormsTest : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void cleanupTestCase(); + void init(); + void cleanup(); + + void testRadioButtonForm(); + void testCheckBoxForm(); + void testTextLineForm(); + void testTextAreaForm(); + void testFileEditForm(); + void testComboEditForm(); + void testListSingleEdit(); + void testListMultiEdit(); + + // helper methods + void verifyRadioButtonStates(bool state1, bool state2, bool state3); + void setRadioButtonStates(bool state1, bool state2, bool state3); + void verifyTextForm( Okular::FormFieldText *form ); + +private: + Okular::Document *m_document; + QList m_radioButtonForms; + QList m_checkBoxForms; + Okular::FormFieldText* m_textLineForm; + Okular::FormFieldText* m_textAreaForm; + Okular::FormFieldText* m_fileEditForm; + Okular::FormFieldChoice* m_comboEdit; + Okular::FormFieldChoice* m_listSingleEdit; + Okular::FormFieldChoice* m_listMultiEdit; +}; + +void EditFormsTest::initTestCase() +{ + Okular::SettingsCore::instance( "editformstest" ); + m_document = new Okular::Document( 0 ); +} + +void EditFormsTest::cleanupTestCase() +{ + delete m_document; +} + +void EditFormsTest::init() +{ + const QString testFile = KDESRCDIR "data/formSamples.pdf"; + const KMimeType::Ptr mime = KMimeType::findByPath( testFile ); + m_document->openDocument( testFile, KUrl(), mime ); + + // Undo and Redo should be unavailable when docuemnt is first opened. + QVERIFY( !m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + const Okular::Page* page = m_document->page( 0 ); + QLinkedList pageFields = page->formFields(); + + // Clear lists + m_checkBoxForms.clear(); + m_radioButtonForms.clear(); + + // Collect forms of the various types + QLinkedList< Okular::FormField * >::const_iterator ffIt = pageFields.constBegin(), ffEnd = pageFields.constEnd(); + for ( ; ffIt != ffEnd; ++ffIt ) + { + Okular::FormField * ff = *ffIt; + ff->type(); + + switch ( ff->type() ) + { + case Okular::FormField::FormButton: + { + Okular::FormFieldButton * ffb = static_cast< Okular::FormFieldButton * >( ff ); + switch ( ffb->buttonType() ) + { + case Okular::FormFieldButton::Push: + break; + case Okular::FormFieldButton::CheckBox: + m_checkBoxForms.append(ffb); + break; + case Okular::FormFieldButton::Radio: + m_radioButtonForms.append(ffb); + break; + default: ; + } + break; + } + case Okular::FormField::FormText: + { + Okular::FormFieldText * fft = static_cast< Okular::FormFieldText * >( ff ); + switch ( fft->textType() ) + { + case Okular::FormFieldText::Multiline: + m_textAreaForm = fft; + break; + case Okular::FormFieldText::Normal: + m_textLineForm = fft; + break; + case Okular::FormFieldText::FileSelect: + m_fileEditForm = fft; + break; + } + break; + } + case Okular::FormField::FormChoice: + { + Okular::FormFieldChoice * ffc = static_cast< Okular::FormFieldChoice * >( ff ); + switch ( ffc->choiceType() ) + { + case Okular::FormFieldChoice::ListBox: + if ( ffc->multiSelect() ) + { + m_listMultiEdit = ffc; + } + else + { + m_listSingleEdit = ffc; + } + break; + case Okular::FormFieldChoice::ComboBox: + m_comboEdit = ffc; + break; + } + break; + } + default: ; + } + } +} + +void EditFormsTest::cleanup() +{ + m_document->closeDocument(); +} + +void EditFormsTest::testRadioButtonForm() +{ + // Initially the first radio button is checked + verifyRadioButtonStates( true, false, false ); + + // Set the second radio to checked and make sure the first + // is now unchecked and that an undo action is available + setRadioButtonStates( false, true, false); + verifyRadioButtonStates( false, true, false ); + QVERIFY( m_document->canUndo() ); + + // Now undo the action + m_document->undo(); + verifyRadioButtonStates( true, false, false ); + QVERIFY( !m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); + + // Now redo the action + m_document->redo(); + verifyRadioButtonStates( false, true, false ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); +} + +void EditFormsTest::testCheckBoxForm() +{ + // Examine the first and second checkboxes + // Initially both checkboxes are unchecked + QVERIFY ( m_checkBoxForms[0]->state() == false ); + QVERIFY ( m_checkBoxForms[1]->state() == false ); + + // Set checkbox 1 to true + m_document->editFormButtons( 0, QList() << m_checkBoxForms[0], QList() << true); + QVERIFY ( m_checkBoxForms[0]->state() == true ); + QVERIFY ( m_checkBoxForms[1]->state() == false ); + QVERIFY( m_document->canUndo() ); + + // Set checkbox 2 to true + m_document->editFormButtons( 0, QList() << m_checkBoxForms[1], QList() << true); + QVERIFY ( m_checkBoxForms[0]->state() == true ); + QVERIFY ( m_checkBoxForms[1]->state() == true ); + QVERIFY( m_document->canUndo() ); + + // Undo checking of second checkbox + m_document->undo(); + QVERIFY ( m_checkBoxForms[0]->state() == true ); + QVERIFY ( m_checkBoxForms[1]->state() == false ); + QVERIFY( m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); + + // Undo checking of first checkbox + m_document->undo(); + QVERIFY ( m_checkBoxForms[0]->state() == false ); + QVERIFY ( m_checkBoxForms[1]->state() == false ); + QVERIFY( !m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); + + // Redo checking of first checkbox + m_document->redo(); + QVERIFY ( m_checkBoxForms[0]->state() == true ); + QVERIFY ( m_checkBoxForms[1]->state() == false ); + QVERIFY( m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); +} + +void EditFormsTest::testTextLineForm() +{ + verifyTextForm( m_textLineForm ); +} + +void EditFormsTest::testTextAreaForm() +{ + verifyTextForm( m_textAreaForm ); +} + +void EditFormsTest::testFileEditForm() +{ + verifyTextForm( m_fileEditForm ); +} + +void EditFormsTest::testComboEditForm() +{ + // Editable combo with predefined choices: + // - combo1 + // - combo2 + // - combo3 + + // Initially no choice is selected + QCOMPARE( m_comboEdit->currentChoices().length(), 0 ); + QCOMPARE( m_comboEdit->editChoice(), QString( "" ) ); + + // Select first choice + m_document->editFormCombo( 0, m_comboEdit, "combo1", 0, 0, 0); + QCOMPARE( m_comboEdit->currentChoices().length(), 1 ); + QCOMPARE( m_comboEdit->currentChoices()[0], 0 ); + QCOMPARE( m_comboEdit->editChoice(), QString( "" ) ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Select third choice + m_document->editFormCombo( 0, m_comboEdit, "combo3", 0, 0, 0); + QCOMPARE( m_comboEdit->currentChoices().length(), 1 ); + QCOMPARE( m_comboEdit->currentChoices()[0], 2 ); + QCOMPARE( m_comboEdit->editChoice(), QString( "" ) ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Undo and verify that first choice is selected + m_document->undo(); + QCOMPARE( m_comboEdit->currentChoices().length(), 1 ); + QCOMPARE( m_comboEdit->currentChoices()[0], 0 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); + + // Redo and verify that third choice is selected + m_document->redo(); + QCOMPARE( m_comboEdit->currentChoices().length(), 1 ); + QCOMPARE( m_comboEdit->currentChoices()[0], 2 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Select a custom choice and verify that no predefined choices are selected + m_document->editFormCombo( 0, m_comboEdit, "comboEdit", 0, 0, 0); + QCOMPARE( m_comboEdit->currentChoices().length(), 0 ); + QCOMPARE( m_comboEdit->editChoice(), QString( "comboEdit" ) ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Undo and verify that third choice is selected + m_document->undo(); + QCOMPARE( m_comboEdit->currentChoices().length(), 1 ); + QCOMPARE( m_comboEdit->currentChoices()[0], 2 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); +} + +void EditFormsTest::testListSingleEdit() +{ + // A list with three items that allows only single selections + // Initially no choice is selected + QCOMPARE( m_listSingleEdit->currentChoices().length(), 0 ); + + // Select first item + m_document->editFormList( 0, m_listSingleEdit, QList() << 0); + QCOMPARE( m_listSingleEdit->currentChoices().length(), 1 ); + QCOMPARE( m_listSingleEdit->currentChoices()[0], 0 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Select second item + m_document->editFormList( 0, m_listSingleEdit, QList() << 1); + QCOMPARE( m_listSingleEdit->currentChoices().length(), 1 ); + QCOMPARE( m_listSingleEdit->currentChoices()[0], 1 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Undo and verify that first item is selected + m_document->undo(); + QCOMPARE( m_listSingleEdit->currentChoices().length(), 1 ); + QCOMPARE( m_listSingleEdit->currentChoices()[0], 0 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); + + // Redo and verify that second item is selected + m_document->redo(); + QCOMPARE( m_listSingleEdit->currentChoices().length(), 1 ); + QCOMPARE( m_listSingleEdit->currentChoices()[0], 1 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); +} + +void EditFormsTest::testListMultiEdit() +{ + // A list with three items that allows for multiple selections + // Initially no choice is selected + QCOMPARE( m_listMultiEdit->currentChoices().length(), 0 ); + + // Select first item + m_document->editFormList( 0, m_listMultiEdit, QList() << 0); + QCOMPARE( m_listMultiEdit->currentChoices(), QList() << 0 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Select first and third items + m_document->editFormList( 0, m_listMultiEdit, QList() << 0 << 2); + QCOMPARE( m_listMultiEdit->currentChoices(), QList() << 0 << 2 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Select all three items + m_document->editFormList( 0, m_listMultiEdit, QList() << 0 << 1 << 2); + QCOMPARE( m_listMultiEdit->currentChoices(), QList() << 0 << 1 << 2); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Undo and verify that first and third items are selected + m_document->undo(); + QCOMPARE( m_listMultiEdit->currentChoices(), QList() << 0 << 2 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); + + // Undo and verify that first item is selected + m_document->undo(); + QCOMPARE( m_listMultiEdit->currentChoices(), QList() << 0 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); + + // Redo and verify that first and third items are selected + m_document->redo(); + QCOMPARE( m_listMultiEdit->currentChoices(), QList() << 0 << 2 ); + QVERIFY( m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); +} + +// helper methods +void EditFormsTest::verifyRadioButtonStates( bool state1, bool state2, bool state3 ) +{ + QVERIFY ( m_radioButtonForms[0]->state() == state1 ); + QVERIFY ( m_radioButtonForms[1]->state() == state2 ); + QVERIFY ( m_radioButtonForms[2]->state() == state3 ); +} + +void EditFormsTest::setRadioButtonStates( bool state1, bool state2, bool state3 ) +{ + QList newButtonStates; + newButtonStates.append(state1); + newButtonStates.append(state2); + newButtonStates.append(state3); + m_document->editFormButtons( 0, m_radioButtonForms, newButtonStates); +} + +void EditFormsTest::verifyTextForm( Okular::FormFieldText* form ) +{ + // Text in form is initially empty + QCOMPARE( form->text(), QString("") ); + + // Insert the string "Hello" into the form + m_document->editFormText(0, form, QString("Hello"), 5, 0, 0); + QCOMPARE( form->text(), QString("Hello") ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Undo the insertion and verify that form is empty again + m_document->undo(); + QCOMPARE( form->text(), QString("") ); + QVERIFY( !m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); + + // Redo the insertion of "Hello" + m_document->redo(); + QCOMPARE( form->text(), QString("Hello") ); + QVERIFY( m_document->canUndo() ); + QVERIFY( !m_document->canRedo() ); + + // Type "_World" after "Hello" + m_document->editFormText(0, form, QString("Hello_"), 6, 5, 5); + m_document->editFormText(0, form, QString("Hello_W"), 7, 6, 6); + m_document->editFormText(0, form, QString("Hello_Wo"), 8, 7, 7); + m_document->editFormText(0, form, QString("Hello_Wor"), 9, 8, 8); + m_document->editFormText(0, form, QString("Hello_Worl"), 10, 9, 9); + m_document->editFormText(0, form, QString("Hello_World"), 11, 10, 10); + + // Verify that character insertion operations were merged together into a single undo command + m_document->undo(); + QCOMPARE( form->text(), QString("Hello") ); + QVERIFY( m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); + + // Verify that one more undo gets us back to the original state (empty form) + m_document->undo(); + QCOMPARE( form->text(), QString("") ); + QVERIFY( !m_document->canUndo() ); + QVERIFY( m_document->canRedo() ); +} + +QTEST_KDEMAIN( EditFormsTest, GUI ) +#include "editformstest.moc"