Class PlaceholderDifferenceEvaluator

java.lang.Object
org.xmlunit.placeholder.PlaceholderDifferenceEvaluator
All Implemented Interfaces:
DifferenceEvaluator

public class PlaceholderDifferenceEvaluator extends Object implements DifferenceEvaluator
This class is used to add placeholder feature to XML comparison.

This class and the whole module are considered experimental and any API may change between releases of XMLUnit.

To use it, just add it with DiffBuilder like below

 Diff diff = DiffBuilder.compare(control).withTest(test).withDifferenceEvaluator(new PlaceholderDifferenceEvaluator()).build();
 

Supported scenarios are demonstrated in the unit tests (PlaceholderDifferenceEvaluatorTest).

Default delimiters for placeholder are ${ and }. Arguments to placeholders are by default enclosed in ( and ) and separated by , - whitespace is significant, arguments are not quoted.

To use custom delimiters (in regular expression), create instance with the PlaceholderDifferenceEvaluator(String, String) or PlaceholderDifferenceEvaluator(String, String, String, String, String) constructors.

Since:
2.6.0
  • Field Details

    • PLACEHOLDER_DEFAULT_OPENING_DELIMITER_REGEX

      public static final String PLACEHOLDER_DEFAULT_OPENING_DELIMITER_REGEX
      Pattern used to find the start of a placeholder.
    • PLACEHOLDER_DEFAULT_CLOSING_DELIMITER_REGEX

      public static final String PLACEHOLDER_DEFAULT_CLOSING_DELIMITER_REGEX
      Pattern used to find the end of a placeholder.
    • PLACEHOLDER_DEFAULT_ARGS_OPENING_DELIMITER_REGEX

      public static final String PLACEHOLDER_DEFAULT_ARGS_OPENING_DELIMITER_REGEX
      Pattern used to find the start of an argument list.
      Since:
      2.7.0
    • PLACEHOLDER_DEFAULT_ARGS_CLOSING_DELIMITER_REGEX

      public static final String PLACEHOLDER_DEFAULT_ARGS_CLOSING_DELIMITER_REGEX
      Pattern used to find then end of an argument list.
      Since:
      2.7.0
    • PLACEHOLDER_DEFAULT_ARGS_SEPARATOR_REGEX

      public static final String PLACEHOLDER_DEFAULT_ARGS_SEPARATOR_REGEX
      Pattern used to find an argument separator.
      Since:
      2.7.0
    • PLACEHOLDER_PREFIX_REGEX

      private static final String PLACEHOLDER_PREFIX_REGEX
    • KNOWN_HANDLERS

      private static final Map<String,PlaceholderHandler> KNOWN_HANDLERS
    • NO_ARGS

      private static final String[] NO_ARGS
    • placeholderRegex

      private final Pattern placeholderRegex
    • argsRegex

      private final Pattern argsRegex
    • argsSplitter

      private final String argsSplitter
  • Constructor Details

    • PlaceholderDifferenceEvaluator

      public PlaceholderDifferenceEvaluator()
      Creates a PlaceholderDifferenceEvaluator with default delimiters PLACEHOLDER_DEFAULT_OPENING_DELIMITER_REGEX and PLACEHOLDER_DEFAULT_CLOSING_DELIMITER_REGEX.
    • PlaceholderDifferenceEvaluator

      public PlaceholderDifferenceEvaluator(String placeholderOpeningDelimiterRegex, String placeholderClosingDelimiterRegex)
      Creates a PlaceholderDifferenceEvaluator with custom delimiters.
      Parameters:
      placeholderOpeningDelimiterRegex - regular expression for the opening delimiter of placeholder, defaults to PLACEHOLDER_DEFAULT_OPENING_DELIMITER_REGEX if the parameter is null or blank
      placeholderClosingDelimiterRegex - regular expression for the closing delimiter of placeholder, defaults to PLACEHOLDER_DEFAULT_CLOSING_DELIMITER_REGEX if the parameter is null or blank
    • PlaceholderDifferenceEvaluator

      public PlaceholderDifferenceEvaluator(String placeholderOpeningDelimiterRegex, String placeholderClosingDelimiterRegex, String placeholderArgsOpeningDelimiterRegex, String placeholderArgsClosingDelimiterRegex, String placeholderArgsSeparatorRegex)
      Creates a PlaceholderDifferenceEvaluator with custom delimiters.
      Parameters:
      placeholderOpeningDelimiterRegex - regular expression for the opening delimiter of placeholder, defaults to PLACEHOLDER_DEFAULT_OPENING_DELIMITER_REGEX if the parameter is null or blank
      placeholderClosingDelimiterRegex - regular expression for the closing delimiter of placeholder, defaults to PLACEHOLDER_DEFAULT_CLOSING_DELIMITER_REGEX if the parameter is null or blank
      placeholderArgsOpeningDelimiterRegex - regular expression for the opening delimiter of the placeholder's argument list, defaults to PLACEHOLDER_DEFAULT_ARGS_OPENING_DELIMITER_REGEX if the parameter is null or blank
      placeholderArgsClosingDelimiterRegex - regular expression for the closing delimiter of the placeholder's argument list, defaults to PLACEHOLDER_DEFAULT_ARGS_CLOSING_DELIMITER_REGEX if the parameter is null or blank
      placeholderArgsSeparatorRegex - regular expression for the delimiter between arguments inside of the placeholder's argument list, defaults to PLACEHOLDER_DEFAULT_ARGS_SEPARATOR_REGEX if the parameter is null or blank
      Since:
      2.7.0
  • Method Details

    • evaluate

      public ComparisonResult evaluate(Comparison comparison, ComparisonResult outcome)
      Description copied from interface: DifferenceEvaluator
      May alter the outcome of a comparison.
      Specified by:
      evaluate in interface DifferenceEvaluator
      Parameters:
      comparison - the comparison
      outcome - the current outcome of the comparison
      Returns:
      the new result of the comparison.
    • isMissingTextNodeDifference

      private boolean isMissingTextNodeDifference(Comparison comparison)
    • controlHasOneTextChildAndTestHasNone

      private boolean controlHasOneTextChildAndTestHasNone(Comparison comparison)
    • cantFindControlTextChildInTest

      private boolean cantFindControlTextChildInTest(Comparison comparison)
    • evaluateMissingTextNodeConsideringPlaceholders

      private ComparisonResult evaluateMissingTextNodeConsideringPlaceholders(Comparison comparison, ComparisonResult outcome)
    • isTextCDATAMismatch

      private boolean isTextCDATAMismatch(Comparison comparison)
    • isTextLikeNode

      private boolean isTextLikeNode(Node node)
    • isMissingAttributeDifference

      private boolean isMissingAttributeDifference(Comparison comparison)
    • evaluateMissingAttributeConsideringPlaceholders

      private ComparisonResult evaluateMissingAttributeConsideringPlaceholders(Comparison comparison, ComparisonResult outcome)
    • evaluateAttributeListLengthConsideringPlaceholders

      private ComparisonResult evaluateAttributeListLengthConsideringPlaceholders(Comparison comparison, ComparisonResult outcome)
    • evaluateConsideringPlaceholders

      private ComparisonResult evaluateConsideringPlaceholders(String controlText, String testText, ComparisonResult outcome)
    • isKnown

      private boolean isKnown(String keyword)
    • evaluate

      private ComparisonResult evaluate(String keyword, String testText, String[] args)