// Copyright � 2004-2007 ASERT. Released under the Canoo Webtest license.
package com.canoo.webtest.plugins.pdftest;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.canoo.webtest.engine.IStringVerifier;
import com.canoo.webtest.engine.StepFailedException;
import com.canoo.webtest.plugins.pdftest.htmlunit.PDFLink;
import com.canoo.webtest.plugins.pdftest.htmlunit.PDFPage;
/**
* @author Paul King
* @author Marc Guillemot
* @webtest.step
* category="PDF"
* name="pdfVerifyLink"
* alias="verifyPdfLink"
* description="This step verifies the existence of a link within a <key>pdf</key> document."
*/
public class PdfVerifyLinkStep extends AbstractVerifyPdfStep {
private boolean fRegex;
private String fLinkText;
private String fLinkHref;
private int fPage = ANY_PAGE;
/**
* @param value
* @webtest.parameter
* required="yes/no"
* description="The text of the link to find. One of <em>text</em> or <em>href</em> must be set."
*/
public void setText(final String value) {
fLinkText = value;
}
public String getText() {
return fLinkText;
}
/**
* @param value
* @webtest.parameter
* required="yes/no"
* description="The href of the link to find. One of <em>text</em> or <em>href</em> must be set."
*/
public void setHref(final String value) {
fLinkHref = value;
}
public String getHref() {
return fLinkHref;
}
public int getPage() {
return fPage;
}
/**
* @param value
* @webtest.parameter
* required="no"
* default="all pages"
* description="The page on which to search."
*/
public void setPage(final int value) {
fPage = value;
}
/**
* @param regex
* @webtest.parameter required="no"
* default="'false'"
* description="Specifies whether the search value represents a <key>regex</key>."
*/
public void setRegex(final boolean regex) {
fRegex = regex;
}
public boolean getRegex() {
return fRegex;
}
protected void verifyParameters() {
super.verifyParameters();
paramCheck(getText() == null && getHref() == null, "One of 'text' or 'href' is required!");
paramCheck(getText() != null && getHref() != null, "Only one of 'text' and 'href' can be set!");
}
protected void verifyPdf(final PDFPage pdfPage)
{
final IStringVerifier verifier = getVerifier(getRegex());
final String expectedValue = StringUtils.defaultString(getText(), getHref());
final List links = pdfPage.getLinks();
for (final Iterator iter = links.iterator(); iter.hasNext();)
{
final PDFLink element = (PDFLink) iter.next();
if (verifyLink(element, verifier, expectedValue))
return;
}
throw new StepFailedException("No link found matching criteria.");
}
boolean verifyLink(final PDFLink link, final IStringVerifier verifier, final String expectedValue)
{
if (getPage() != ANY_PAGE && getPage() != link.getPage())
{
return false;
}
final String actualValue = (getHref() != null) ? link.getHref() : link.getText();
return verifier.verifyStrings(expectedValue, actualValue);
}
}