Zurück |  | Weiter

## 3.2. Aktionen (Actions)

### Überblick

PDF-Dokumente werden durch Aktionen interaktiv aber auch komplizierter. Und „kompliziert“ bedeutet, dass sie getestet werden müssen, zumal wenn die interaktiven Teile eines Dokumentes ein wichtiger Teil einer Prozesskette sind.

Technisch betrachtet ist eine „Aktion“ ein Dictionary-Objekt mit den Elementen `/S` und `/Type`. Das Element `/Type` hat immer immer den Wert „Action“ und das Element `/S` (Subtype) hat typabhängige Werte:

    // Types of actions:

    GoTo:        Set the focus to a destination in the current PDF document
    GoToR:       Set the focus to a destination in another PDF document
    GoToE:       Go to a destination inside an embedded file
    GoTo3DView:  Set the view to a 3D annotation
    Hide:        Set the hidden flag of the specified annotation
    ImportData:  Import data from a file to the current document
    JavaScript:  Execute JavaScript code
    Movie:       Play a specified movie
    Named:       Execute an action, which is predefined by the PDF viewer
    Rendition:   Control the playing of multimedia content
    ResetForm:   Set the values of form fields to default
    SetOCGState: Set the state of an OCG
    Sound:       Play a specified sound
    SubmitForm:  Send the form data to an URL
    Launch:      Execute an application
    Thread:      Set the viewer to the beginning of a specified article
    Trans:       Update the display of a document, using a transition dictionary
    URI:         Go to the remote URI

Für einige dieser Aktionen stellt PDFUnit Testmethoden zur Verfügung. In zukünftigen Releases werden weitere Testmethoden zur Verfügung gestellt.

    // Simple tests:

    .hasNumberOfActions(..)

    // Action specific tests:

    .hasJavaScriptAction()
    .hasJavaScriptAction().containing(..)
    .hasJavaScriptAction().containingSource(..)
    .hasJavaScriptAction().equalsTo(..)
    .hasJavaScriptAction().equalsToSource(..)
    .hasJavaScriptAction().matchingRegex(..)

    .hasLocalGotoAction()
    .hasLocalGotoAction().toDestination(..)
    .hasLocalGotoAction().toDestination(.., pageNumber)

Die folgenden Abschnitte zeigen Beispiele für diese Testmethoden.

### JavaScript-Actions

JavaScript-Text ist gewöhnlich etwas umfangreich, deshalb macht es Sinn, den Vergleichstext für einen JavaScript-Action-Test aus einer Datei zu lesen:

    @Test
    public void hasJavaScriptAction_WithWhitespaceProcessing() throws Exception {
      String filename = "documentUnderTest.pdf";
      String scriptFileName = "javascript/javascriptAction_OneSimpleAlert.js";
      Reader scriptFileAsReader = new FileReader(scriptFileName);

      AssertThat.document(filename)
                .hasJavaScriptAction()
                .equalsToSource(scriptFileAsReader, WhitespaceProcessing.IGNORE)
      ;
    }

Die Methoden `containingSource(..)` und `equalsToSource(..)` nehmen Parameter vom Typ `java.io.Reader`, `java.io.InputStream` oder `java.lang.String` entgegen.

In dem vorhergehenden Beispiel wird der vollständige Inhalt der JavaScript-Datei mit dem Inhalt der JavaScript-Action verglichen. Whitespaces werden dabei ignoriert.

Es können aber auch einfache Zeichenkette innerhalb des JavaScript-Codes geprüft werden:

    @Test
    public void hasJavaScript_ContainingText_FunctionNames() throws Exception {
      String filename = "javaScriptClock.pdf";

      AssertThat.document(filename)
                .hasJavaScript()
                .containing("StopWatchProc")
                .containing("SetFldEnable")
                .containing("DoTimers")
                .containing("ClockProc")
                .containing("CountDownProc")
                .containing("CDEnables")
                .containing("SWSetEnables")
      ;
    }

Das Kapitel 13.5: „Behandlung von Whitespaces“ geht ausführlich auf den flexiblen Umgang mit Whitespaces ein.

### Goto-Actions

Goto-Actions benötigen ein Sprungziel in derselben Datei:

    @Test
    public void hasGotoAction_ToNamedDestination() throws Exception {
      String filename = "documentUnderTest.pdf";
      String destinationName21 = "destination2.1";

      AssertThat.document(filename)
                .hasLocalGotoAction()
                .toDestination(destinationName21)
      ;
    }

Dieser Test ist erfolgreich, wenn das aktuelle Test-PDF eine GoTo-Action enthält die auf das Sprungziel „destination2.1“ zeigt. Sprungziele können im Zusammenhang mit Lesezeichen (Bookmarks) getestet werden. Darauf geht Kapitel 4.12: „"Named Destinations" vergleichen“ ein.

Es kann auch geprüft werden, ob sich ein Sprungziel auf einer bestimmten Seite befindet:

    @Test
    public void hasGotoAction_ToDestinationWithPage_Page3() throws Exception {
      String filename = "documentUnderTest.pdf";
      String destinationName21 = "destination2.1";
      int page3 = 3;

      AssertThat.document(filename)
                .hasLocalGotoAction()
                .toDestination(destinationName21, page3)
      ;
    }

Zurück | Nach oben | Weiter
Kapitel 3. Funktionsumfang | Zum Anfang | 3.3. Anhänge (Attachments)