// Copyright � 2004-2007 Canoo Engineering AG, Switzerland. package com.canoo.webtest.plugins.pdftest; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import com.canoo.webtest.engine.StepFailedException; import com.canoo.webtest.plugins.pdftest.htmlunit.PDFField; import com.canoo.webtest.plugins.pdftest.htmlunit.PDFPage; /** * @author Etienne Studer * @author Marc Guillemot * @webtest.step * category="PDF" * name="pdfVerifyFieldCount" * alias="verifyPdfFieldCount" * description="This step verifies the number of fields in the <key>pdf</key> document." */ public class PdfVerifyNumberOfFieldsStep extends AbstractVerifyPdfStep { private int fCount = -1; private int fPage = ANY_PAGE; private boolean fIncludeDuplicates; /** * @param count * @webtest.parameter * required="yes" * description="The expected number of fields." */ public void setCount(final int count) { fCount = count; } public int getCount() { return fCount; } /** * @param page * @webtest.parameter * required="no" * description="The numeric value of the page to restrict the verification to." */ public void setPage(final int page) { fPage = page; } public int getPage() { return fPage; } /** * @param includeDuplicates * @webtest.parameter * required="no" * default="false" * description="Specifies whether fields with the same name should be counted only once or individually." */ public void setIncludeDuplicates(final boolean includeDuplicates) { fIncludeDuplicates = includeDuplicates; } public boolean getIncludeDuplicates() { return fIncludeDuplicates; } protected void verifyPdf(final PDFPage pdfPage) { final List fields; if (ANY_PAGE == getPage()) fields = pdfPage.getFields(); else fields = pdfPage.getFields(getPage()); final Collection fieldNames; if (getIncludeDuplicates()) fieldNames = new ArrayList(); // preserves duplicates else fieldNames = new HashSet(); // removes duplicates for (final Iterator iter = fields.iterator(); iter.hasNext();) { final PDFField field = (PDFField) iter.next(); fieldNames.add(field.getName()); } if (fieldNames.size() != getCount()) { throw new StepFailedException(buildFailureMessage(), getCount(), fieldNames.size()); } } protected String buildFailureMessage() { final StringBuffer sb = new StringBuffer("Wrong number of fields on "); if (ANY_PAGE == getPage()) sb.append("all pages "); else sb.append("page " + getPage()); sb.append("("); sb.append((getIncludeDuplicates() ? "including" : "without")); sb.append(" duplicates)"); return sb.toString(); } protected void verifyParameters() { super.verifyParameters(); paramCheck(getCount() == -1, "Required parameter \"count\" not set!"); } }