4.9. Formularfelder vergleichen

Anzahl

Der einfachste vergleichende Test für Felder ist der, festzustellen, dass beide Dokumente gleich viele Felder enthalten:

<testcase name="haveSameNumberOfFields">
  <assertThat testDocument="test/test.pdf"
              masterDocument="master/master.pdf"
  >
    <haveSameNumberOfFields />
  </assertThat>
</testcase>

Feldnamen

Beim nächst größeren Test müssen neben der Anzahl auch die Namen der Felder in jedem PDF-Dokument gleich sein. Diese Aussage wird folgendermaßen getestet:

<testcase name="haveSameFields_ByName">
  <assertThat testDocument="test/test.pdf"
              masterDocument="master/master.pdf"
  >
    <haveSameFields by="NAME" />
  </assertThat>
</testcase>

Feldeigenschaften

Wenn über die Namen von Feldern hinaus auch die weiteren Eigenschaften verglichen werden sollen, muss das Tag <haveSameFields /> mit dem Attribut by="PROPERTIES" verwendet werden:

<testcase name="haveSameFields_ByProperties">
  <assertThat testDocument="test/test.pdf"
              masterDocument="master/master.pdf"
  >
    <haveSameFields by="PROPERTIES" />
  </assertThat>
</testcase>

Feldeigenschaften können mit dem Hilfsprogramm ExtractFieldsInfo in eine XML-Datei überführt und analysiert werden, siehe Kapitel 9.4: „Feldeigenschaften nach XML extrahieren“.

Feldinhalte

Und als Letztes können mit dem Tag <haveSameFields /> und dem Attribut by="VALUE" auch die Inhalte der Felder verglichen werden. Gleichnamige Felder müssen gleiche Inhalte haben, sonst schlägt der Test fehl:

<testcase name="haveSameFields_ByValues">
  <assertThat testDocument="test/test.pdf"
              masterDocument="master/master.pdf"
  >
    <haveSameFields by="VALUE" /> 1
  </assertThat>
</testcase>

1

Whitespaces werden für den Vergleich normalisiert, siehe 13.4: „Behandlung von Whitespaces“.

Kombination mehrerer Tests

In einem Testfall können mehrere Vergleiche durchgeführt werden, allerdings gibt es dann Probleme mit dem Namen des Tests:

<testcase name="compareManyItems">
  <assertThat testDocument="test/test.pdf"
              masterDocument="master/master.pdf"
  >
    <haveSameFields by="PROPERTIES" />
    <haveSameFields by="VALUE"      />
    <haveSameFonts  />
    <haveSameTitle  />
    <haveSameAuthor />
  </assertThat>
</testcase>