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
remotes/origin/Applications/18.08
Andre Heinecke 8 years ago committed by Albert Astals Cid
parent 18d404c3ee
commit 5103e8db6f
  1. BIN
      autotests/data/additionalFormActions.pdf
  2. 139
      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<QString, Okular::FormField *> &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<QString, Okular::FormField *> fields;
// Field names in test document are:
// For trigger fields: tf, cb, rb, dd, pb
// For target fields: <trigger_name>_focus_target, <trigger_name>_cursor_target,
// <trigger_name>_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

Loading…
Cancel
Save