Zurück |  | Weiter

## 3.13. 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.

Das folgende Tag können Sie nutzen:

    <!-- Tag to verify JavaScript: -->

    <hasJavaScript>
      <containing       /> (optional)
      <equals           /> (optional)
      <matchingComplete /> (optional)
    </hasJavaScript>

### Existenz von JavaScript

Das folgende Beispiel zeigt, wie geprüft wird, ob das Dokument überhaupt JavaScript enthält:

    <testcase name="hasJavaScript">
      <assertThat testDocument="javascript/javaScriptClock.pdf">
        <hasJavaScript />
      </assertThat>
    </testcase>

### Vergleich gegen eine Vorlage

Das erwartete JavaScript kann aus einer Datei eingelesen und mit dem des PDF-Dokumentes verglichen werden. Das Hilfsprogramm `ExtractJavaScript` kann dazu benutzt werden, den JavaScript-Code eines PDF-Dokumentes in eine Textdatei extrahiert:

    <testcase name="hasJavaScript_ScriptFromFile">
      <assertThat testDocument="javascript/javaScriptClock.pdf">
        <hasJavaScript>
          <equals toFile="javascript/javascriptClock.js" />
        </hasJavaScript>
      </assertThat>
    </testcase>

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:

    <testcase name="hasJavaScript_ComparedToString">
      <assertThat testDocument="javascript/javaScriptClock.pdf">
        <hasJavaScript>
          <matchingComplete>
            <![CDATA[
            // Constants used by the time calculations
            var oneSec = 1000;
            var oneMin = 60 * oneSec;
            var oneHour = 60 * oneMin;

            var strokeNormal = this.getField(\"SWStart\").strokeColor;
            var strokeLight = [\"RGB\",.35,.35,1];
            var fillNormal = this.getField(\"SWStart\").fillColor;
            var fillLight = [\"RGB\",.35,.35,0.7];

            function SetFldEnable(oFld, bEnable)
            {
               if(oFld)
               {
                 oFld.strokeColor = bEnable?strokeNormal:strokeLight;
                 oFld.fillColor = bEnable?fillNormal:fillLight;
                 oFld.readonly = !bEnable;
                 oFld.textColor = bEnable?color.white:[\"G\",.7];
               }
            }

            ... (code shortened for presentation)

            ]]>
          </matchingComplete>
        </hasJavaScript>
      </assertThat>
    </testcase>

### 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:

    <testcase name="hasJavaScript_ContainingText">
      <assertThat testDocument="javascript/javaScriptClock.pdf">
        <hasJavaScript>
          <containing>
            function DoTimers()
            {
               var nCurTime = (new Date()).getTime();
               ClockProc(nCurTime);
               StopWatchProc(nCurTime);
               CountDownProc(nCurTime);
               this.dirty = false;
            }
          </containing>
        </hasJavaScript>
      </assertThat>
    </testcase>

    <testcase name="hasJavaScript_ContainingFunction_MultipleFunctionnames">
      <assertThat testDocument="javascript/javaScriptClock.pdf">
        <hasJavaScript>
          <containing>StopWatchProc</containing>
          <containing>SetFldEnable</containing>
          <containing>DoTimers</containing>
          <containing>ClockProc</containing>
          <containing>CountDownProc</containing>
          <containing>CDEnables</containing>
          <containing>SWSetEnables</containing>
        </hasJavaScript>
      </assertThat>
    </testcase>

Whitespaces spielen bei allen Vergleichen keine Rolle, weder bei dem JavaScript aus dem PDF-Dokument, noch beim dem aus Dateien oder Tag-Inhalten.

Da es sich bei dem extrahierten JavaScript um eine Textdatei handelt und nicht um XML, gibt es keine XML- und XPath-basierten Tests.

Zurück | Nach oben | Weiter
3.12. Formularfelder, Textüberlauf | Zum Anfang | 3.14. Layer