From 5103e8db6f8dec931f894cf3f625b5fffdf8099f Mon Sep 17 00:00:00 2001 From: Andre Heinecke Date: Wed, 30 May 2018 10:05:13 +0200 Subject: [PATCH] Add test for additional form actions Summary: This tests the newly added additional widget actions. Test Plan: Passes for me. Is my first GUI test, maybe the timing needs to be slower for slower machines? Reviewers: aacid Reviewed By: aacid Subscribers: okular-devel Tags: #okular Maniphest Tasks: T8627 Differential Revision: https://phabricator.kde.org/D13170 --- autotests/data/additionalFormActions.pdf | Bin 0 -> 45857 bytes autotests/parttest.cpp | 139 +++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 autotests/data/additionalFormActions.pdf diff --git a/autotests/data/additionalFormActions.pdf b/autotests/data/additionalFormActions.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c26379dd715ae720ffbbad63e1cc13d17f4a865d GIT binary patch literal 45857 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 literal 0 HcmV?d00001 diff --git a/autotests/parttest.cpp b/autotests/parttest.cpp index 9bb4a2d89..84f66b193 100644 --- a/autotests/parttest.cpp +++ b/autotests/parttest.cpp @@ -112,6 +112,7 @@ class PartTest void testCheckBoxReadOnly(); void testCrashTextEditDestroy(); void testAnnotWindow(); + void testAdditionalActionTriggers(); private: void simulateMouseSelection(double startX, double startY, double endX, double endY, QWidget *target); @@ -1500,8 +1501,146 @@ void PartTest::testAnnotWindow() QVERIFY( win2->visibleRegion().rects().count() == 4); } +// Helper for testAdditionalActionTriggers +static void verifyTargetStates( const QString & triggerName, + const QMap &fields, + bool focusVisible, bool cursorVisible, bool mouseVisible, + int line) +{ + Okular::FormField *focusTarget = fields.value( triggerName + QStringLiteral ("_focus_target") ); + Okular::FormField *cursorTarget = fields.value( triggerName + QStringLiteral ("_cursor_target") ); + Okular::FormField *mouseTarget = fields.value( triggerName + QStringLiteral ("_mouse_target") ); + + QVERIFY( focusTarget ); + QVERIFY( cursorTarget ); + QVERIFY( mouseTarget ); + + QTRY_VERIFY2( focusTarget->isVisible() == focusVisible, + QStringLiteral ("line: %1 focus for %2 not matched. Expected %3 Actual %4"). + arg( line ).arg( triggerName ).arg( focusTarget->isVisible() ).arg( focusVisible ).toUtf8().constData() ); + QTRY_VERIFY2( cursorTarget->isVisible() == cursorVisible, + QStringLiteral ("line: %1 cursor for %2 not matched. Actual %3 Expected %4"). + arg( line ).arg( triggerName ).arg( cursorTarget->isVisible() ).arg( cursorVisible ).toUtf8().constData() ); + QTRY_VERIFY2( mouseTarget->isVisible() == mouseVisible, + QStringLiteral ("line: %1 mouse for %2 not matched. Expected %3 Actual %4"). + arg( line ).arg( triggerName ).arg( mouseTarget->isVisible() ).arg( mouseVisible ).toUtf8().constData() ); } +void PartTest::testAdditionalActionTriggers() +{ +#ifndef HAVE_POPPLER_0_65 + return; +#endif + const QString testFile = QStringLiteral( KDESRCDIR "data/additionalFormActions.pdf" ); + Okular::Part part( nullptr, nullptr, QVariantList() ); + part.openDocument( testFile ); + part.widget()->resize(800, 600); + + part.widget()->show(); + QVERIFY( QTest::qWaitForWindowExposed( part.widget() ) ); + + QMap fields; + // Field names in test document are: + // For trigger fields: tf, cb, rb, dd, pb + // For target fields: _focus_target, _cursor_target, + // _mouse_target + const Okular::Page* page = part.m_document->page( 0 ); + for ( Okular::FormField *ff: page->formFields() ) + { + fields.insert( ff->name(), static_cast< Okular::FormField* >( ff ) ); + } + + // Verify that everything is set up. + verifyTargetStates( QStringLiteral( "tf" ), fields, true, true, true, __LINE__ ); + verifyTargetStates( QStringLiteral( "cb" ), fields, true, true, true, __LINE__ ); + verifyTargetStates( QStringLiteral( "rb" ), fields, true, true, true, __LINE__ ); + verifyTargetStates( QStringLiteral( "dd" ), fields, true, true, true, __LINE__ ); + verifyTargetStates( QStringLiteral( "pb" ), fields, true, true, true, __LINE__ ); + + const int width = part.m_pageView->horizontalScrollBar()->maximum() + + part.m_pageView->viewport()->width(); + const int height = part.m_pageView->verticalScrollBar()->maximum() + + part.m_pageView->viewport()->height(); + + part.m_document->setViewportPage( 0 ); + + // wait for pixmap + QTRY_VERIFY( part.m_document->page( 0 )->hasPixmap( part.m_pageView) ); + + part.actionCollection()->action( QStringLiteral( "view_toggle_forms" ) )->trigger(); + + QPoint tfPos( width * 0.045, height * 0.05 ); + QPoint cbPos( width * 0.045, height * 0.08 ); + QPoint rbPos( width * 0.045, height * 0.12 ); + QPoint ddPos( width * 0.045, height * 0.16 ); + QPoint pbPos( width * 0.045, height * 0.26 ); + + // Test text field + auto widget = part.m_pageView->viewport()->childAt( tfPos ); + QVERIFY( widget ); + + QTest::mouseMove( part.m_pageView->viewport(), QPoint( tfPos )); + verifyTargetStates( QStringLiteral( "tf" ), fields, true, false, true, __LINE__ ); + QTest::mousePress( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "tf" ), fields, false, false, false, __LINE__ ); + QTest::mouseRelease( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "tf" ), fields, false, false, true, __LINE__ ); + + // Checkbox + widget = part.m_pageView->viewport()->childAt( cbPos ); + QVERIFY( widget ); + + QTest::mouseMove( part.m_pageView->viewport(), QPoint( cbPos ) ); + verifyTargetStates( QStringLiteral( "cb" ), fields, true, false, true, __LINE__ ); + QTest::mousePress( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "cb" ), fields, false, false, false, __LINE__ ); + // Confirm that the textfield no longer has any invisible + verifyTargetStates( QStringLiteral( "tf" ), fields, true, true, true, __LINE__ ); + QTest::mouseRelease( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "cb" ), fields, false, false, true, __LINE__ ); + + // Radio + widget = part.m_pageView->viewport()->childAt( rbPos ); + QVERIFY( widget ); + + QTest::mouseMove( part.m_pageView->viewport(), QPoint( rbPos ) ); + verifyTargetStates( QStringLiteral( "rb" ), fields, true, false, true, __LINE__ ); + QTest::mousePress( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "rb" ), fields, false, false, false, __LINE__ ); + QTest::mouseRelease( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "rb" ), fields, false, false, true, __LINE__ ); + + // Dropdown + widget = part.m_pageView->viewport()->childAt( ddPos ); + QVERIFY( widget ); + + QTest::mouseMove( part.m_pageView->viewport(), QPoint( ddPos ) ); + verifyTargetStates( QStringLiteral( "dd" ), fields, true, false, true, __LINE__ ); + QTest::mousePress( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "dd" ), fields, false, false, false, __LINE__ ); + QTest::mouseRelease( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "dd" ), fields, false, false, true, __LINE__ ); + + // Pushbutton + widget = part.m_pageView->viewport()->childAt( pbPos ); + QVERIFY( widget ); + + QTest::mouseMove( part.m_pageView->viewport(), QPoint( pbPos ) ); + verifyTargetStates( QStringLiteral( "pb" ), fields, true, false, true, __LINE__ ); + QTest::mousePress( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "pb" ), fields, false, false, false, __LINE__ ); + QTest::mouseRelease( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "pb" ), fields, false, false, true, __LINE__ ); + + // Confirm that a mouse release outside does not trigger the show action. + QTest::mousePress( widget, Qt::LeftButton, Qt::NoModifier, QPoint( 5, 5 ) ); + verifyTargetStates( QStringLiteral( "pb" ), fields, false, false, false, __LINE__ ); + QTest::mouseRelease( part.m_pageView->viewport(), Qt::LeftButton, Qt::NoModifier, tfPos ); + verifyTargetStates( QStringLiteral( "pb" ), fields, false, false, false, __LINE__ ); +} + +} // namespace Okular + int main(int argc, char *argv[]) { // Force consistent locale