// Copyright � 2004-2007 Canoo Engineering AG, Switzerland. package com.canoo.webtest.plugins.pdftest; import java.util.Iterator; import java.util.List; import com.canoo.webtest.engine.IStringVerifier; import com.canoo.webtest.engine.StepFailedException; import com.canoo.webtest.plugins.pdftest.htmlunit.PDFField; import com.canoo.webtest.plugins.pdftest.htmlunit.PDFPage; import com.canoo.webtest.util.ConversionUtil; /** * @author Etienne Studer * @author Marc Guillemot * @webtest.step * category="PDF" * name="pdfVerifyTextField" * alias="verifyPdfTextField" * description="Verifies a text field in the <key>pdf</key> document. * According to the <key>pdf</key> specification, fields with the same name must have the same value." */ public class PdfVerifyTextFieldStep extends AbstractVerifyValuePdfStep { private String fName; private int fPage = ANY_PAGE; public String getName() { return fName; } /** * @param name * @webtest.parameter * required="yes" * description="The text of the <em>info</em> dictionary property key." */ public void setName(final String name) { fName = name; } public int getPage() { return fPage; } /** * @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; } protected void verifyParameters() { super.verifyParameters(); nullParamCheck(getName(), "name"); } protected void verifyPdf(final PDFPage pdfPage) { final List fields; if (getPage() == ANY_PAGE) fields = pdfPage.getFields(getName(), PDFField.TEXTBOX); else fields = pdfPage.getFields(getName(), getPage(), PDFField.TEXTBOX); if (getExists() != null) { boolean exists = ConversionUtil.convertToBoolean(getExists(), true); if (exists && fields.isEmpty()) throw new StepFailedException("No field found with name \"" + getName() + "\""); else if (!exists && !fields.isEmpty()) throw new StepFailedException(fields.size() + " fields found with name \"" + getName() + "\""); } else { if (fields.isEmpty()) { throw new StepFailedException("No text field named '" + getName() + "' found."); } boolean regex = ConversionUtil.convertToBoolean(getRegex(), false); final IStringVerifier verifier = getVerifier(regex); for (final Iterator iter = fields.iterator(); iter.hasNext();) { final PDFField field = (PDFField) iter.next(); if (!verifier.verifyStrings(getValue(), field.getValue())) throw new StepFailedException("Wrong field value", getValue(), field.getValue()); } } } }