001: /*
002: ******************************************************************
003: Copyright (c) 2007, Jeff Martin, Tim Bacon
004: All rights reserved.
005:
006: Redistribution and use in source and binary forms, with or without
007: modification, are permitted provided that the following conditions
008: are met:
009:
010: * Redistributions of source code must retain the above copyright
011: notice, this list of conditions and the following disclaimer.
012: * Redistributions in binary form must reproduce the above
013: copyright notice, this list of conditions and the following
014: disclaimer in the documentation and/or other materials provided
015: with the distribution.
016: * Neither the name of the xmlunit.sourceforge.net nor the names
017: of its contributors may be used to endorse or promote products
018: derived from this software without specific prior written
019: permission.
020:
021: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
022: "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
023: LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
024: FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
025: COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
026: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
027: BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
028: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
029: CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
030: LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
031: ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
032: POSSIBILITY OF SUCH DAMAGE.
033:
034: ******************************************************************
035: */
036:
037: package org.custommonkey.xmlunit.examples;
038:
039: import java.util.Arrays;
040: import java.util.List;
041:
042: import org.custommonkey.xmlunit.*;
043: import org.w3c.dom.*;
044:
045: /**
046: * Code from "Comparing Pieces of XML" section of User's Guide
047: */
048: public class ComparingPiecesOfXML extends XMLTestCase {
049:
050: class MyDifferenceListener implements DifferenceListener {
051: private boolean calledFlag = false;
052:
053: public boolean called() {
054: return calledFlag;
055: }
056:
057: public int differenceFound(Difference difference) {
058: calledFlag = true;
059: return RETURN_ACCEPT_DIFFERENCE;
060: }
061:
062: public void skippedComparison(Node control, Node test) {
063: }
064: }
065:
066: private void usingDifferenceEngineDirectly() {
067: ComparisonController myComparisonController = null;
068: Node controlNode = null;
069: Node testNode = null;
070: ElementQualifier myElementQualifier = null;
071:
072: DifferenceEngine engine = new DifferenceEngine(
073: myComparisonController);
074: MyDifferenceListener listener = new MyDifferenceListener();
075: engine.compare(controlNode, testNode, listener,
076: myElementQualifier);
077: System.err.println("There have been "
078: + (listener.called() ? "" : "no ") + "differences.");
079: }
080:
081: public class HaltOnNonRecoverable implements ComparisonController {
082: public boolean haltComparison(Difference afterDifference) {
083: return !afterDifference.isRecoverable();
084: }
085: }
086:
087: public static class IgnoreDoctype implements DifferenceListener {
088: private static final int[] IGNORE = new int[] {
089: DifferenceConstants.HAS_DOCTYPE_DECLARATION_ID,
090: DifferenceConstants.DOCTYPE_NAME_ID,
091: DifferenceConstants.DOCTYPE_PUBLIC_ID_ID,
092: DifferenceConstants.DOCTYPE_SYSTEM_ID_ID };
093:
094: static {
095: Arrays.sort(IGNORE);
096: }
097:
098: public int differenceFound(Difference difference) {
099: return Arrays.binarySearch(IGNORE, difference.getId()) >= 0 ? RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL
100: : RETURN_ACCEPT_DIFFERENCE;
101: }
102:
103: public void skippedComparison(Node control, Node test) {
104: }
105: }
106:
107: private void comparingTwoPiecesOfXMLUsingDiff() throws Exception {
108: Diff d = new Diff("<a><b/><c/></a>", "<a><c/><b/></a>");
109: assertFalse(d.identical()); // CHILD_NODELIST_SEQUENCE Difference
110: assertTrue(d.similar());
111: }
112:
113: private void FindingAllDifferencesUsingDetailedDiff()
114: throws Exception {
115: Diff d = new Diff("<a><b/><c/></a>", "<a><c/><b/></a>");
116: DetailedDiff dd = new DetailedDiff(d);
117: dd.overrideElementQualifier(null);
118: assertFalse(dd.similar());
119: List l = dd.getAllDifferences();
120: assertEquals(2, l.size()); // expexted <b/> but was <c/> and vice versa
121: }
122:
123: private void junit3() throws Exception {
124: String CONTROL = null;
125: String TEST = null;
126: Diff d = new Diff(CONTROL, TEST);
127: assertTrue("expected pieces to be similar, " + d.toString(), d
128: .similar());
129: assertXMLEqual("expected pieces to be similar", CONTROL, TEST);
130: }
131: }
|