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 java.lang.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(java.io.Reader control, java.io.Reader test)Construct a Diff that compares the XML read from two ReadersDiff(java.lang.String control, java.lang.String test)Construct a Diff that compares the XML in two StringsDiff(java.lang.String control, Transform testTransform)Construct a Diff that compares the XML in a control Document against the result of a transformationDiff(javax.xml.transform.dom.DOMSource control, javax.xml.transform.dom.DOMSource test)Construct a Diff that compares the XML in two JAXP DOMSourcesprotectedDiff(Diff prototype)Construct a Diff from a prototypical instance.Diff(org.w3c.dom.Document controlDoc, org.w3c.dom.Document testDoc)Construct a Diff that compares the XML in two DocumentsDiff(org.w3c.dom.Document controlDoc, org.w3c.dom.Document testDoc, DifferenceEngineContract comparator)Construct a Diff that compares the XML in two Documents using a specific DifferenceEngineDiff(org.w3c.dom.Document controlDoc, org.w3c.dom.Document testDoc, DifferenceEngineContract comparator, ElementQualifier elementQualifier)Construct a Diff that compares the XML in two Documents using a specific DifferenceEngine and ElementQualifier DifferenceEngineDiff(org.xml.sax.InputSource control, org.xml.sax.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 java.lang.StringBufferappendMessage(java.lang.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(org.w3c.dom.Node control, org.w3c.dom.Node test)DifferenceListener implementation.java.lang.StringtoString()Get the result of this Diff instance as a String
-
-
-
Constructor Detail
-
Diff
public Diff(java.lang.String control, java.lang.String test) throws org.xml.sax.SAXException, java.io.IOExceptionConstruct a Diff that compares the XML in two Strings- Parameters:
control- the control XMLtest- the test XML- Throws:
org.xml.sax.SAXException- if the parser feels like itjava.io.IOException- on i/o errors
-
Diff
public Diff(java.io.Reader control, java.io.Reader test) throws org.xml.sax.SAXException, java.io.IOExceptionConstruct a Diff that compares the XML read from two Readers- Parameters:
control- the control XMLtest- the test XML- Throws:
org.xml.sax.SAXException- if the parser feels like itjava.io.IOException- on i/o errors
-
Diff
public Diff(org.w3c.dom.Document controlDoc, org.w3c.dom.Document testDoc)Construct a Diff that compares the XML in two Documents- Parameters:
controlDoc- the control XMLtestDoc- the test XML
-
Diff
public Diff(java.lang.String control, Transform testTransform) throws java.io.IOException, javax.xml.transform.TransformerException, org.xml.sax.SAXExceptionConstruct 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:
org.xml.sax.SAXException- if the parser feels like itjavax.xml.transform.TransformerException- if the transformer feels like itjava.io.IOException- on i/o errors
-
Diff
public Diff(org.xml.sax.InputSource control, org.xml.sax.InputSource test) throws org.xml.sax.SAXException, java.io.IOExceptionConstruct a Diff that compares the XML read from two JAXP InputSources- Parameters:
control- the control XMLtest- the test XML- Throws:
org.xml.sax.SAXException- if the parser feels like itjava.io.IOException- on i/o errors
-
Diff
public Diff(javax.xml.transform.dom.DOMSource control, javax.xml.transform.dom.DOMSource test)Construct a Diff that compares the XML in two JAXP DOMSources- Parameters:
control- the control XMLtest- the test XML
-
Diff
public Diff(org.w3c.dom.Document controlDoc, org.w3c.dom.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(org.w3c.dom.Document controlDoc, org.w3c.dom.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(org.w3c.dom.Node control, org.w3c.dom.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 java.lang.StringBuffer appendMessage(java.lang.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 java.lang.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.
- Overrides:
toStringin classjava.lang.Object- Returns:
- result of this Diff
-
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.
-
-