package net.sf.jsptest.assertion;
import java.util.List;
import junit.framework.Assert;
import net.sf.jsptest.utils.XML;
import org.jaxen.JaxenException;
import org.jaxen.dom.DOMXPath;
import org.w3c.dom.Element;
/**
* Base class providing assertion methods related to the HTML DOM tree.
*
* @author Lasse Koskela
*/
public abstract class DOMAssertion extends AbstractAssertion {
protected Element context;
/**
* Returns the <tt>Element</tt> as the context of assertions.
*/
public Element getElement() {
return context;
}
/**
* Assert that the selected DOM element contains the given text.
*
* @param text
* The (partial) content that should be found.
*/
public void shouldContain(String text) {
assertContains(XML.textContentOf(context), text);
}
/**
* Assert that the selected DOM element does not contain the given text.
*
* @param text
* The (partial) content that should not be found.
*/
public void shouldNotContain(String text) {
assertDoesNotContain(XML.textContentOf(context), text);
}
/**
* Assert that the selected DOM element contains the given element.
*
* @param xpathExpression
* An XPath expression describing the expected child element.
*/
public void shouldContainElement(String xpathExpression) {
shouldContainElement("No matching nodes found for XPath: " + xpathExpression + " from" + System.getProperty("line.separator")
+ getContextAsString(), xpathExpression);
}
/**
* Assert that the selected DOM element contains the given element.
*
* @param message
* The optional failure message.
* @param xpathExpression
* An XPath expression describing the expected child element.
*/
public void shouldContainElement(String message, String xpathExpression) {
try {
DOMXPath xpath = new DOMXPath(xpathExpression);
List matchingNodes = xpath.selectNodes(context);
Assert.assertFalse(message, matchingNodes.isEmpty());
} catch (JaxenException e) {
throw new RuntimeException(e);
}
}
/**
* Renders the content of the selected element as a <tt>String</tt>.
*/
protected String getContextAsString() {
return XML.toString(context);
}
}