Package org.custommonkey.xmlunit
Class Diff
- java.lang.Object
-
- org.custommonkey.xmlunit.Diff
-
- All Implemented Interfaces:
ComparisonController,DifferenceListener
- Direct Known Subclasses:
DetailedDiff
public class Diff extends Object implements DifferenceListener, ComparisonController
Compares and describes any difference between XML documents. Two documents are either:- identical: the content and sequence of the nodes in the documents are exactly the same
- similar: the content of the nodes in the documents are the same, but minor differences exist e.g. sequencing of sibling elements, values of namespace prefixes, use of implied attribute values
- different: the contents of the documents are fundamentally different
appendMessageortoStringmethods. NB: When comparing documents, the comparison is halted as soon as the status (identical / similar / different) is known with certainty. For a list of all differences between the documents an instance ofthe DetailedDiff classcan be used instead.
-
-
Field Summary
-
Fields inherited from interface org.custommonkey.xmlunit.DifferenceListener
RETURN_ACCEPT_DIFFERENCE, RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL, RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR, RETURN_UPGRADE_DIFFERENCE_NODES_DIFFERENT
-
-
Constructor Summary
Constructors Modifier Constructor Description Diff(Reader control, Reader test)Construct a Diff that compares the XML read from two ReadersDiff(String control, String test)Construct a Diff that compares the XML in two StringsDiff(String control, Transform testTransform)Construct a Diff that compares the XML in a control Document against the result of a transformationDiff(DOMSource control, DOMSource test)Construct a Diff that compares the XML in two JAXP DOMSourcesprotectedDiff(Diff prototype)Construct a Diff from a prototypical instance.Diff(Document controlDoc, Document testDoc)Construct a Diff that compares the XML in two DocumentsDiff(Document controlDoc, Document testDoc, DifferenceEngineContract comparator)Construct a Diff that compares the XML in two Documents using a specific DifferenceEngineDiff(Document controlDoc, Document testDoc, DifferenceEngineContract comparator, ElementQualifier elementQualifier)Construct a Diff that compares the XML in two Documents using a specific DifferenceEngine and ElementQualifier DifferenceEngineDiff(InputSource control, InputSource test)Construct a Diff that compares the XML read from two JAXP InputSources
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description StringBufferappendMessage(StringBuffer toAppendTo)Append the message from the result of this Diff instance to a specified StringBufferprotected voidcompare()Top of the recursive comparison execution treeintdifferenceFound(Difference difference)DifferenceListener implementation.intevaluate(Difference difference)Evaluate the difference.booleanhaltComparison(Difference afterDifference)ComparisonController implementation.booleanidentical()Return the result of a comparison.voidoverrideDifferenceListener(DifferenceListener delegate)Override theDifferenceListenerused to determine how to handle differences that are found.voidoverrideElementQualifier(ElementQualifier delegate)Override theElementQualifierused to determine which control and test nodes are comparable for this difference comparison.voidoverrideMatchTracker(MatchTracker delegate)Override theMatchTrackerused to track successfully matched nodes.booleansimilar()Return the result of a comparison.voidskippedComparison(Node control, Node test)DifferenceListener implementation.StringtoString()Get the result of this Diff instance as a String
-
-
-
Constructor Detail
-
Diff
public Diff(String control, String test) throws SAXException, IOException
Construct a Diff that compares the XML in two Strings- Parameters:
control- the control XMLtest- the test XML- Throws:
SAXException- if the parser feels like itIOException- on i/o errors
-
Diff
public Diff(Reader control, Reader test) throws SAXException, IOException
Construct a Diff that compares the XML read from two Readers- Parameters:
control- the control XMLtest- the test XML- Throws:
SAXException- if the parser feels like itIOException- on i/o errors
-
Diff
public Diff(Document controlDoc, Document testDoc)
Construct a Diff that compares the XML in two Documents- Parameters:
controlDoc- the control XMLtestDoc- the test XML
-
Diff
public Diff(String control, Transform testTransform) throws IOException, TransformerException, SAXException
Construct a Diff that compares the XML in a control Document against the result of a transformation- Parameters:
control- the control XMLtestTransform- the test XML- Throws:
SAXException- if the parser feels like itTransformerException- if the transformer feels like itIOException- on i/o errors
-
Diff
public Diff(InputSource control, InputSource test) throws SAXException, IOException
Construct a Diff that compares the XML read from two JAXP InputSources- Parameters:
control- the control XMLtest- the test XML- Throws:
SAXException- if the parser feels like itIOException- on i/o errors
-
Diff
public Diff(DOMSource control, DOMSource test)
Construct a Diff that compares the XML in two JAXP DOMSources- Parameters:
control- the control XMLtest- the test XML
-
Diff
public Diff(Document controlDoc, Document testDoc, DifferenceEngineContract comparator)
Construct a Diff that compares the XML in two Documents using a specific DifferenceEngine- Parameters:
controlDoc- the control XMLtestDoc- the test XMLcomparator- the difference engine
-
Diff
public Diff(Document controlDoc, Document testDoc, DifferenceEngineContract comparator, ElementQualifier elementQualifier)
Construct a Diff that compares the XML in two Documents using a specific DifferenceEngine and ElementQualifier DifferenceEngine- Parameters:
controlDoc- the control XMLtestDoc- the test XMLcomparator- the difference engineelementQualifier- the element qualifier
-
Diff
protected Diff(Diff prototype)
Construct a Diff from a prototypical instance. Used by extension subclasses- Parameters:
prototype- a prototypical instance
-
-
Method Detail
-
compare
protected final void compare()
Top of the recursive comparison execution tree
-
similar
public boolean similar()
Return the result of a comparison. Two documents are considered to be "similar" if they contain the same elements and attributes regardless of order.- Returns:
- whether the two pieces of XML are similar
-
identical
public boolean identical()
Return the result of a comparison. Two documents are considered to be "identical" if they contain the same elements and attributes in the same order.- Returns:
- whether the two pieces of XML are identical
-
differenceFound
public int differenceFound(Difference difference)
DifferenceListener implementation. If theoverrideDifferenceListenermethod has been called then the interpretation of the difference will be delegated.- Specified by:
differenceFoundin interfaceDifferenceListener- Parameters:
difference- a Difference instance as defined inDifferenceConstantsdescribing the cause of the difference and containing the detail of the nodes that differ- Returns:
- a DifferenceListener.RETURN_... constant indicating how the difference was interpreted. Always RETURN_ACCEPT_DIFFERENCE if the call is not delegated.
-
evaluate
public int evaluate(Difference difference)
Evaluate the difference.- Parameters:
difference- the difference- Returns:
- a DifferenceListener.RETURN_... constant indicating how the difference was interpreted.
-
skippedComparison
public void skippedComparison(Node control, Node test)
DifferenceListener implementation. If theoverrideDifferenceListenermethod has been called then the call will be delegated otherwise a message is printed toSystem.err.- Specified by:
skippedComparisonin interfaceDifferenceListener- Parameters:
control- the control node being comparedtest- the test node being compared- See Also:
DifferenceEngine
-
haltComparison
public boolean haltComparison(Difference afterDifference)
ComparisonController implementation.- Specified by:
haltComparisonin interfaceComparisonController- Parameters:
afterDifference- the last Difference passed todifferenceFound- Returns:
- true if the difference is not recoverable and the comparison should be halted, or false if the difference is recoverable and the comparison can continue
- See Also:
Difference.isRecoverable()
-
appendMessage
public StringBuffer appendMessage(StringBuffer toAppendTo)
Append the message from the result of this Diff instance to a specified StringBuffer- Parameters:
toAppendTo- buffer to append messages to- Returns:
- specified StringBuffer with message appended
-
toString
public String toString()
Get the result of this Diff instance as a StringNote: This method will perform the comparison and cache the result if it hasn't been performed already. Any configuration changes made after calling this method will be ignored.
-
overrideDifferenceListener
public void overrideDifferenceListener(DifferenceListener delegate)
Override theDifferenceListenerused to determine how to handle differences that are found.- Parameters:
delegate- the DifferenceListener instance to delegate handling to.
-
overrideElementQualifier
public void overrideElementQualifier(ElementQualifier delegate)
Override theElementQualifierused to determine which control and test nodes are comparable for this difference comparison.- Parameters:
delegate- the ElementQualifier instance to delegate to.
-
overrideMatchTracker
public void overrideMatchTracker(MatchTracker delegate)
Override theMatchTrackerused to track successfully matched nodes.- Parameters:
delegate- the MatchTracker instance to delegate handling to.
-
-