public int differenceFound(Difference diff) { String nodeName = diff.getTestNodeDetail().getNode().getNodeName(); if( sequenceDoesNotMatter.contains(nodeName) && diff.getId() == DifferenceConstants.CHILD_NODELIST_SEQUENCE_ID ) { return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } logger.info( "! {}", diff.getTestNodeDetail().getNode().getNodeName()); return RETURN_ACCEPT_DIFFERENCE; }
public int differenceFound(Difference diff) { String nodeName = diff.getTestNodeDetail().getNode().getNodeName(); if (nodeName.equals("conditionExpression") || nodeName.equals("language")) { logger.info(diff.toString()); return RETURN_ACCEPT_DIFFERENCE; } return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; }
public int differenceFound(Difference difference) { Node controlNode = difference.getControlNodeDetail().getNode(); Node testNode = difference.getTestNodeDetail().getNode(); if (controlNode.getNodeType() == Node.TEXT_NODE && testNode.getNodeType() == Node.TEXT_NODE) { String controlText = controlNode.getNodeValue().trim(); String testText = testNode.getNodeValue().trim(); if (controlText.equals("") && testText.equals("")) { return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } } return RETURN_ACCEPT_DIFFERENCE; }
public int differenceFound(Difference difference) { if (DifferenceConstants.TEXT_VALUE_ID == difference.getId() && !"script".equalsIgnoreCase(difference.getTestNodeDetail().getNode().getLocalName())) { return RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR; } return RETURN_ACCEPT_DIFFERENCE; }
protected boolean ignoreDifference(final Difference d) { if ("text value".equals(d.getDescription())) { final String controlValue = d.getControlNodeDetail().getValue(); final String testValue = d.getTestNodeDetail().getValue(); return (controlValue == null || controlValue.trim().isEmpty()) && (testValue == null || testValue.trim().isEmpty()); } return false; }
protected int textualDifference(Difference d) { String control = d.getControlNodeDetail().getValue(); if (control != null) { control = control.toLowerCase(Locale.US); if (d.getTestNodeDetail().getValue() != null && control.equals(d.getTestNodeDetail().getValue() .toLowerCase(Locale.US))) { return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } } // some string is null, delegate return super.textualDifference(d); } }
protected int textualDifference(Difference d) { String control = d.getControlNodeDetail().getValue(); if (control != null) { control = control.toLowerCase(Locale.US); if (d.getTestNodeDetail().getValue() != null && control.equals(d.getTestNodeDetail().getValue() .toLowerCase(Locale.US))) { return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } } // some string is null, delegate return super.textualDifference(d); } }
@Override public int differenceFound(Difference difference) { if (difference.getControlNodeDetail() == null || difference.getControlNodeDetail().getNode() == null || difference.getTestNodeDetail() == null || difference.getTestNodeDetail().getNode() == null) { return RETURN_ACCEPT_DIFFERENCE; } if (ignoreAttributes.contains(difference.getTestNodeDetail().getNode() .getNodeName()) || ignoreAttributes.contains(difference.getControlNodeDetail() .getNode().getNodeName())) { return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } return RETURN_ACCEPT_DIFFERENCE; } });
protected int textualDifference(Difference d) { String control = d.getControlNodeDetail().getValue(); String test = d.getTestNodeDetail().getValue(); if (control != null && test != null) { try { double controlVal = Double.parseDouble(control); double testVal = Double.parseDouble(test); return Math.abs(controlVal - testVal) <= tolerance ? DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL : DifferenceListener.RETURN_ACCEPT_DIFFERENCE; } catch (NumberFormatException nfe) { // ignore, delegate to nested DifferenceListener } } // no numbers or null, delegate return super.textualDifference(d); } }
XMLUnit.setIgnoreWhitespace(true); XMLUnit.setIgnoreComments(true); XMLUnit.setIgnoreAttributeOrder(true); Diff xmlDiff = new Diff(expected, test); xmlDiff.overrideDifferenceListener(new DifferenceListener() { @Override public int differenceFound(Difference diff) { System.err.println("called: " + diff); int diffResult = RETURN_ACCEPT_DIFFERENCE; //ignore a node difference if(diff.getControlNodeDetail().getNode().getParentNode().getNodeName().contains("myNodeName")){ skippedComparison(diff.getControlNodeDetail().getNode().getParentNode(), diff.getTestNodeDetail().getNode().getParentNode()); diffResult = RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } return diffResult; } @Override public void skippedComparison(Node arg0, Node arg1) {} }); assertTrue(xmlDiff.similar());
protected int textualDifference(Difference d) { String control = d.getControlNodeDetail().getValue(); String test = d.getTestNodeDetail().getValue(); if (control != null && test != null) { try { double controlVal = Double.parseDouble(control); double testVal = Double.parseDouble(test); return Math.abs(controlVal - testVal) < tolerance ? DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL : DifferenceListener.RETURN_ACCEPT_DIFFERENCE; } catch (NumberFormatException nfe) { // ignore, delegate to nested DifferenceListener } } // no numbers or null, delegate return super.textualDifference(d); } }
public int differenceFound(Difference diff) { String nodeName = diff.getTestNodeDetail().getNode().getNodeName(); if( sequenceDoesNotMatter.contains(nodeName) && diff.getId() == DifferenceConstants.CHILD_NODELIST_SEQUENCE_ID ) { return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } logger.info( "! {}", diff.getTestNodeDetail().getNode().getNodeName()); return RETURN_ACCEPT_DIFFERENCE; }
public int differenceFound(Difference diff) { String nodeName = diff.getTestNodeDetail().getNode().getNodeName(); if (nodeName.equals("conditionExpression") || nodeName.equals("language")) { logger.info(diff.toString()); return RETURN_ACCEPT_DIFFERENCE; } return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; }
boolean isDifferenceOnlyInAttributeValuePrefix(Difference difference) { Node testNode = difference.getTestNodeDetail().getNode(); if (testNode==null) { return false; } String testNodeValue = testNode.getNodeValue(); Node controlNode = difference.getControlNodeDetail().getNode(); String controlNodeValue = controlNode.getNodeValue(); if (isAttr(testNode) && isAttr(controlNode) && (hasNsPrefix(testNodeValue) || hasNsPrefix(controlNodeValue))) { String testValueNsResolved = resolveNamespaces(testNode, testNodeValue); String controlValueNsResolved = resolveNamespaces(controlNode, controlNodeValue); return testValueNsResolved.equals(controlValueNsResolved); } return false; }
/** * Returns true iff difference is only in attribute value namespace prefix but the corresponding namespace is same. * @param difference * @return */ protected final boolean isDifferenceOnlyInAttributeValuePrefix(Difference difference) { Node testNode = difference.getTestNodeDetail().getNode(); if (testNode==null) { return false; } String testNodeValue = testNode.getNodeValue(); Node controlNode = difference.getControlNodeDetail().getNode(); String controlNodeValue = controlNode.getNodeValue(); if (isAttr(testNode) && isAttr(controlNode) && (hasNsPrefix(testNodeValue) || hasNsPrefix(controlNodeValue))) { String testValueNsResolved = resolveNamespaces(testNode, testNodeValue); String controlValueNsResolved = resolveNamespaces(controlNode, controlNodeValue); return testValueNsResolved.equals(controlValueNsResolved); } return false; }
@Test public void testParseAndFormat() throws Exception { File inputFile = new File(getClass().getResource("/test-formatted-input.xml").getFile()); File outputFile = File.createTempFile("export-test-", ".xml"); OutputStream outputStream = new FileOutputStream(outputFile); XMLReader reader = saxParserFactory.newSAXParser().getXMLReader(); DataTransporter.readFormatted(reader, inputFile, outputStream); IOUtils.closeQuietly(outputStream); Reader expectedReader = new InputStreamReader(getClass().getResourceAsStream("/test-formatted-expected.xml")); Reader actualReader = new FileReader(outputFile); DetailedDiff xmlDiff = new DetailedDiff(new Diff(expectedReader, actualReader)); IOUtils.closeQuietly(expectedReader); IOUtils.closeQuietly(actualReader); outputFile.delete(); final StringBuilder diffLog = new StringBuilder(); for (Iterator iter = xmlDiff.getAllDifferences().iterator(); iter.hasNext(); ) { Difference difference = (Difference) iter.next(); diffLog.append("expected> ").append(difference.getControlNodeDetail().getValue()).append("\n"); diffLog.append("actual > ").append(difference.getTestNodeDetail().getValue()).append("\n"); } assertTrue("Document is not formatted as expected:\n" + diffLog.toString(), xmlDiff.identical()); }
/** * Ignores differences that are only due to missing xsi:type. */ private int attributeDifferenceFound(Difference difference) { NamedNodeMap controlAttributes = difference.getControlNodeDetail().getNode().getAttributes(); NamedNodeMap testAttributes = difference.getTestNodeDetail().getNode().getAttributes(); Map<QName, Node> controlAttributesMap = createAttributesMapExcludingXsiType(controlAttributes); Map<QName, Node> testAttributesMap = createAttributesMapExcludingXsiType(testAttributes); if (controlAttributesMap.size() != testAttributesMap.size()) { return DifferenceListener.RETURN_ACCEPT_DIFFERENCE; } return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR; }
@Override public int differenceFound(Difference diff) { if (diff.getId() == DifferenceConstants.SCHEMA_LOCATION_ID || diff.getId() == DifferenceConstants.NAMESPACE_PREFIX_ID) { return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } if (diff.getId() == DifferenceConstants.TEXT_VALUE_ID) { for (NodeDetail detail : ImmutableSet.of(diff.getControlNodeDetail(), diff.getTestNodeDetail())) { if (detail.getNode().getParentNode().getChildNodes().getLength() < 2 || !detail.getValue().trim().isEmpty()) { return RETURN_ACCEPT_DIFFERENCE; } } return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } return RETURN_ACCEPT_DIFFERENCE; }
/** * Checks for logical equivalence of the qualified node names. */ private int namespaceDifferenceFound(Difference difference) { Node controlNode = difference.getControlNodeDetail().getNode(); Node testNode = difference.getTestNodeDetail().getNode(); String controlNs = getNamespaceURI(controlNode); String testNs = getNamespaceURI(testNode); if (Objects.equal(controlNs, testNs)) { if (Objects.equal(controlNode.getLocalName(), testNode.getLocalName())) { return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR; } } return DifferenceListener.RETURN_ACCEPT_DIFFERENCE; }
@Override public int differenceFound(Difference diff) { if (diff.getId() == DifferenceConstants.SCHEMA_LOCATION_ID || diff.getId() == DifferenceConstants.NAMESPACE_PREFIX_ID) { return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } if (diff.getId() == DifferenceConstants.TEXT_VALUE_ID) { for (NodeDetail detail : ImmutableSet.of(diff.getControlNodeDetail(), diff.getTestNodeDetail())) { if (detail.getNode().getParentNode().getChildNodes().getLength() < 2 || !detail.getValue().trim().isEmpty()) { return RETURN_ACCEPT_DIFFERENCE; } } return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL; } return RETURN_ACCEPT_DIFFERENCE; }