final DOMDifferenceEngine d = new DOMDifferenceEngine(); final CollectResultsListener collectResultsListener = new CollectResultsListener(comparisonResultsToCheck); d.addDifferenceListener(collectResultsListener); if (nodeMatcher != null) { d.setNodeMatcher(nodeMatcher); d.setDifferenceEvaluator(differenceEvaluator); d.setComparisonController(comparisonController); for (ComparisonListener comparisonListener : comparisonListeners) { d.addComparisonListener(comparisonListener); d.addDifferenceListener(comparisonListener); d.setNamespaceContext(namespaceContext); d.setAttributeFilter(attributeFilter); d.setNodeFilter(nodeFilter); d.setDocumentBuilderFactory(documentBuilderFactory); d.compare(wrap(controlSource), wrap(testSource));
/** * Compares properties of an attribute. */ private ComparisonState compareAttributes(Attr control, XPathContext controlContext, Attr test, XPathContext testContext) { return compareAttributeExplicitness(control, controlContext, test, testContext).apply() .andThen(new Comparison(ComparisonType.ATTR_VALUE, control, getXPath(controlContext), control.getValue(), getParentXPath(controlContext), test, getXPath(testContext), test.getValue(), getParentXPath(testContext))); }
/** * Compares textual content. */ private ComparisonState compareCharacterData(CharacterData control, XPathContext controlContext, CharacterData test, XPathContext testContext) { return compare(new Comparison(ComparisonType.TEXT_VALUE, control, getXPath(controlContext), control.getData(), getParentXPath(controlContext), test, getXPath(testContext), test.getData(), getParentXPath(testContext))); }
/** * Compares document node, doctype and XML declaration properties */ private ComparisonState compareDocuments(final Document control, final XPathContext controlContext, final Document test, final XPathContext testContext) { final DocumentType controlDt = filterNode(control.getDoctype()); final DocumentType testDt = filterNode(test.getDoctype()); return compare(new Comparison(ComparisonType.HAS_DOCTYPE_DECLARATION, control, getXPath(controlContext), Boolean.valueOf(controlDt != null), getParentXPath(controlContext), test, getXPath(testContext), Boolean.valueOf(testDt != null), getParentXPath(testContext))) .andIfTrueThen(controlDt != null && testDt != null, new DeferredComparison() { @Override public ComparisonState apply() { return compareNodes(controlDt, controlContext, testDt, testContext); } }) .andThen(compareDeclarations(control, controlContext, test, testContext)); }
DOMDifferenceEngine engine = new DOMDifferenceEngine(); engine.setNodeFilter(NodeFilters.AcceptAll); engine.addComparisonListener(checkPrelude); .addMatchListener(new MatchTracker2ComparisonListener(matchTracker)); engine.setComparisonController(mappedController); if (listener != null) { final DifferenceEvaluator evaluator = new IgnoreDoctypeNotPresentDifferences(), new DifferenceListener2DifferenceEvaluator(listener)); engine.setDifferenceEvaluator(evaluator); engine.setNodeMatcher(m); } else { engine.setNodeMatcher(new CompareUnmatchedNodeMatcher(m)); engine.compare(ctrlSource, tstSource);
final Iterable<Node> controlChildren = Linqy.filter(new IterableNodeList(control.getChildNodes()), getNodeFilter()); final Iterable<Node> testChildren = Linqy.filter(new IterableNodeList(test.getChildNodes()), getNodeFilter()); return compare(new Comparison(ComparisonType.NODE_TYPE, control, getXPath(controlContext), control.getNodeType(), getParentXPath(controlContext), test, getXPath(testContext), test.getNodeType(), getParentXPath(testContext))) .andThen(new Comparison(ComparisonType.NAMESPACE_URI, control, getXPath(controlContext), control.getNamespaceURI(), getParentXPath(controlContext), test, getXPath(testContext), test.getNamespaceURI(), getParentXPath(testContext))) .andThen(new Comparison(ComparisonType.NAMESPACE_PREFIX, control, getXPath(controlContext), control.getPrefix(), getParentXPath(controlContext), test, getXPath(testContext), test.getPrefix(), getParentXPath(testContext))) .andIfTrueThen(control.getNodeType() != Node.ATTRIBUTE_NODE, new Comparison(ComparisonType.CHILD_NODELIST_LENGTH, control, getXPath(controlContext), Linqy.count(controlChildren), getParentXPath(controlContext), test, getXPath(testContext), Linqy.count(testChildren), getParentXPath(testContext))) .andThen(new DeferredComparison() {
compare(new Comparison(ComparisonType.ATTR_NAME_LOOKUP, controlAttr, getXPath(controlContext), controlAttrName, getParentXPath(controlContext), testAttr, getXPath(testContext), testAttrName, getParentXPath(testContext))) .andIfTrueThen(attributePresentOnBothSides, compareAttributeExplicitness(controlAttr, controlContext, testAttr, testContext)) .andIfTrueThen(attributePresentOnBothSides, new Comparison(ComparisonType.ATTR_VALUE, controlAttr, getXPath(controlContext), valueAsQName(controlAttr), getParentXPath(controlContext), testAttr, getXPath(testContext), valueAsQName(testAttr), getParentXPath(testContext))); } finally { if (mustChangeControlContext) {
final Element test, final XPathContext testContext) { final Attributes controlAttributes = splitAttributes(control.getAttributes()); controlContext .addAttributes(Linqy.map(controlAttributes.remainingAttributes, QNAME_MAPPER)); final Attributes testAttributes = splitAttributes(test.getAttributes()); testContext .addAttributes(Linqy.map(testAttributes.remainingAttributes, QNAME_MAPPER)); return compare(new Comparison(ComparisonType.ELEMENT_NUM_ATTRIBUTES, control, getXPath(controlContext), controlAttributes.remainingAttributes.size(), getParentXPath(controlContext), test, getXPath(testContext), testAttributes.remainingAttributes.size(), getParentXPath(testContext))) .andThen(new DeferredComparison() { @Override control, getXPath(controlContext), controlAttributes.schemaLocation != null ? controlAttributes.schemaLocation.getValue() : null, getParentXPath(controlContext), test, getXPath(testContext), testAttributes.schemaLocation != null ? testAttributes.schemaLocation.getValue() : null, getParentXPath(testContext))) .andThen(new Comparison(ComparisonType.NO_NAMESPACE_SCHEMA_LOCATION, control, getXPath(controlContext), controlAttributes.noNamespaceSchemaLocation != null ? controlAttributes.noNamespaceSchemaLocation.getValue()
@Override public ComparisonState apply() { return compare(new Comparison(ComparisonType.ATTR_VALUE_EXPLICITLY_SPECIFIED, control, getXPath(controlContext), control.getSpecified(), getParentXPath(controlContext), test, getXPath(testContext), test.getSpecified(), getParentXPath(testContext))); } };
/** * Compares properties of a processing instruction. */ private ComparisonState compareProcessingInstructions(ProcessingInstruction control, XPathContext controlContext, ProcessingInstruction test, XPathContext testContext) { return compare(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_TARGET, control, getXPath(controlContext), control.getTarget(), getParentXPath(controlContext), test, getXPath(testContext), test.getTarget(), getParentXPath(testContext))) .andThen(new Comparison(ComparisonType.PROCESSING_INSTRUCTION_DATA, control, getXPath(controlContext), control.getData(), getParentXPath(controlContext), test, getXPath(testContext), test.getData(), getParentXPath(testContext))); }
@Override public ComparisonState apply() { return compare(new Comparison(ComparisonType.XML_VERSION, control, getXPath(controlContext), control.getXmlVersion(), getParentXPath(controlContext), test, getXPath(testContext), test.getXmlVersion(), getParentXPath(testContext))) .andThen(new Comparison(ComparisonType.XML_STANDALONE, control, getXPath(controlContext), control.getXmlStandalone(), getParentXPath(controlContext), test, getXPath(testContext), test.getXmlStandalone(), getParentXPath(testContext))) .andThen(new Comparison(ComparisonType.XML_ENCODING, control, getXPath(controlContext), control.getXmlEncoding(), getParentXPath(controlContext), test, getXPath(testContext), test.getXmlEncoding(), getParentXPath(testContext))); } };
/** * Compares elements node properties, in particular the element's * name and its attributes. */ private ComparisonState compareElements(final Element control, final XPathContext controlContext, final Element test, final XPathContext testContext) { return compare(new Comparison(ComparisonType.ELEMENT_TAG_NAME, control, getXPath(controlContext), Nodes.getQName(control).getLocalPart(), getParentXPath(controlContext), test, getXPath(testContext), Nodes.getQName(test).getLocalPart(), getParentXPath(testContext))) .andThen(new DeferredComparison() { @Override public ComparisonState apply() { return compareElementAttributes(control, controlContext, test, testContext); } }); }
/** * Compares properties of the doctype declaration. */ private ComparisonState compareDocTypes(DocumentType control, XPathContext controlContext, DocumentType test, XPathContext testContext) { return compare(new Comparison(ComparisonType.DOCTYPE_NAME, control, getXPath(controlContext), control.getName(), getParentXPath(controlContext), test, getXPath(testContext), test.getName(), getParentXPath(testContext))) .andThen(new Comparison(ComparisonType.DOCTYPE_PUBLIC_ID, control, getXPath(controlContext), control.getPublicId(), getParentXPath(controlContext), test, getXPath(testContext), test.getPublicId(), getParentXPath(testContext))) .andThen(new Comparison(ComparisonType.DOCTYPE_SYSTEM_ID, control, null, control.getSystemId(), null, test, null, test.getSystemId(), null)); }