Experimental support for configuring parts of the test engine by using ${xmlunit.KEYWORD} sequences inside the control document.
This namepace and the whole package are considered experimental and any API may change between releases of XMLUnit.
The placeholder feature allows a placeholder sequence of ${xmlunit.KEYWORD(args...)} to be used as nested text in elements or as attribute values of the control document and trigger special handling based on the keyword.
The "special handling" is controlled by an instance of IPlaceholderHandler per keyword. The class PlaceholderDifferenceEvaluator loads all implementations from the current assembly via reflection.
The placeholder sequence can take any number of string values as arguments in the form ${xmlunit.KEYWORD(args1,arg2)} - if no arguments are used the parentheses can be omitted completely. Arguments are not quoted, whitespace inside of the argument list is significant. All separators (by default ${, }, (, ), and ,) can be configured explicitly.
Keywords currently supported by built-in handlers are:
${xmlunit.ignore} | which makes XMLUnit ignore the nested text or attribute completely. This is handled by IgnorePlaceholderHandler. |
${xmlunit.isNumber} | makes the comparison pass if the textual content of the element or attributes looks like a number. This is handled by IsNumberPlaceholderHandler. |
${xmlunit.matchesRegex} | makes the comparison pass if the textual content of the element or attribute matches the regular expression specified as the first (and only) argument. If there is no argument at all, the comparison will fail. This is handled by MatchesRegexPlaceholderHandler. |
${xmlunit.isDateTime} | makes the comparison pass if the textual content of the element or attributes looks like a date or datetime in the current locale or parsed by ISO rules. An optional argument can be used to specify a pattern unserstood by DateTime.ParseExact to use when trying to parse the test. This is handled by IsDateTimePlaceholderHandler. |
The default delimiters of ${ and } can be overwritten using custom regular expressions.
The easiest way to activate the placeholder feature is to use one of the methods in PlaceholderSupport to add it to a org.xmlunit.builder.DiffBuilder or org.xmlunit.matchers.CompareMatcher instance. The alternative approach is to create an instance of PlaceholderDifferenceEvaluator as a org.xmlunit.diff.DifferenceEvaluator and add it to the builder yourself.
Type | Description |
---|---|
IgnorePlaceholderHandler | Handler for the "ignore" placeholder keyword. |
IPlaceholderHandler | Interface implemented by classes that are responsible for a placeholder keyword. |
IsDateTimePlaceholderHandler | Handler for the "isDateTime" handler placeholder keyword |
IsNumberPlaceholderHandler | Handler for the "isNumber" placeholder keyword. |
MatchesRegexPlaceholderHandler | Handler for the "matchesRegex()" placeholder keyword. |
PlaceholderDifferenceEvaluator | This class is used to add placeholder feature to XML comparison. |
PlaceholderSupport | Adds support for the placeholder feature to a DifferenceEngineConfigurer - like DiffBuilder or CompareConstraint. |