org.xmlunit.matchers.EvaluateXPathMatcher Maven / Gradle / Ivy
package org.xmlunit.matchers;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
import org.w3c.dom.Node;
import org.xmlunit.builder.Input;
import org.xmlunit.util.Convert;
import org.xmlunit.xpath.JAXPXPathEngine;
import javax.xml.transform.Source;
import java.util.Map;
/**
* This Hamcrest {@link Matcher} verifies whether the evaluation of the provided XPath expression
* corresponds to the value matcher specified for the provided input XML object.
*
* All types which are supported by {@link Input#from(Object)} can be used as input for the XML object
* against the matcher is evaluated.
*
* Simple Example
*
* final String xml = "<a><b attr=\"abc\"></b></a>";
*
* assertThat(xml, hasXPath("//a/b/@attr", equalTo("abc")));
* assertThat(xml, hasXPath("count(//a/b/c)", equalTo("0")));
*
*
* Example with namespace mapping
*
* String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
* "<feed xmlns=\"http://www.w3.org/2005/Atom\">" +
* " <title>title</title>" +
* " <entry>" +
* " <title>title1</title>" +
* " <id>id1</id>" +
* " </entry>" +
* "</feed>";
*
* HashMap<String, String> prefix2Uri = new HashMap<String, String>();
* prefix2Uri.put("atom", "http://www.w3.org/2005/Atom");
* assertThat(xml,
* hasXPath("//atom:feed/atom:entry/atom:id/text()", equalTo("id1"))
* .withNamespaceContext(prefix2Uri));
*
*
* @since XMLUnit 2.1.0
*/
public class EvaluateXPathMatcher extends BaseMatcher