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(..)
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() ; }
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 |
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) ; }
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.