Zurück |  | Weiter

## 3.16. JavaScript

### Überblick

Wenn JavaScript in Ihren PDF-Dokumenten überhaupt existiert, wird es wohl wichtig sein. Nicht selten übernimmt JavaScript eine aktive Rolle innerhalb eines Dokumenten-Workflows.

Zwar ersetzt PDFUnit kein separates JavaScript-Unittest-Werkzeug wie beispielsweise „Google JS Test“ , aber besser wenig getestet, als überhaupt nicht. Die folgenden Testfunktionen stehen zur Verfügung:

    // Methods to validate JavaScript:
    .hasJavaScript()
    .hasJavaScript().containing(..)
    .hasJavaScript().equalsTo(..)
    .hasJavaScript().equalsToSource(..)

### Existenz von JavaScript

Mit der folgenden Funktion lässt sich feststellen, ob das Dokument überhaupt JavaScript enthält:

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

      AssertThat.document(filename)
                .hasJavaScript()
      ;
    }

### Vergleich gegen eine Vorlage

Das erwartete JavaScript kann aus einer Datei eingelesen und mit dem des PDF-Dokumentes verglichen werden. Für die Extraktion steht das Hilfsprogramm `ExtractJavaScript` zur Verfügung. Die so erzeugte Datei kann in einem Test verwendet werden:

    @Test
    public void hasJavaScript_ScriptFromFile() throws Exception {
      String filename = "javaScriptClock.pdf";
      File file = new File("javascript/javascriptClock.js");

      AssertThat.document(filename)
                .hasJavaScript()
                .equalsToSource(file)
      ;
    }

| Neben `java.io.File` sind auch `java.io.Reader`, `java.io.InputStream` und der Dateiname als `java.lang.String` möglich.

Das JavaScript, das mit dem JavaScript des PDF-Dokumentes verglichen wird, muss aber nicht aus einer Datei gelesen werden. Es kann auch direkt als String übergeben werden:

    @Test
    public void hasJavaScript_ComparedToString() throws Exception {
      String filename = "javaScriptClock.pdf";
      String scriptFile = "javascript/javascriptClock.js";
      String scriptContent = IOHelper.getContentAsString(scriptFile);

      AssertThat.document(filename)
                .hasJavaScript()
                .equalsTo(scriptContent)
      ;
    }

### Teilstrings vergleichen

In den bisherigen Tests wurde das JavaScript eines PDF-Dokumentes immer gegen eine komplette Datei verglichen. Es kann aber auch auf Teil-Strings getestet werden, wie die folgenden Beispiele zeigen:

    public void hasJavaScript_ContainingText() throws Exception {
      String filename = "javaScriptClock.pdf";

      String javascriptFunction =  "function DoTimers() "
                                 + "{ "
                                 + "   var nCurTime = (new Date()).getTime(); "
                                 + "   ClockProc(nCurTime); "
                                 + "   StopWatchProc(nCurTime); "
                                 + "   CountDownProc(nCurTime); "
                                 + "   this.dirty = false; "
                                 + "}"
                                 ;

      AssertThat.document(filename)
                .hasJavaScript()
                .containing(javascriptFunction)
      ;
    }

    @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")
      ;
    }

Whitespaces werden bei allen Vergleichen ignoriert, sowohl bei dem JavaScript aus dem PDF-Dokument, als auch bei dem aus Dateien oder String-Parametern.

Zurück | Nach oben | Weiter
3.15. Formularfelder, Textüberlauf | Zum Anfang | 3.17. Layer