Skip to content

Instantly share code, notes, and snippets.

@php-coder
Created December 11, 2017 17:28
Show Gist options
  • Save php-coder/652c99b799cf7b14a72ba4a272408187 to your computer and use it in GitHub Desktop.
Save php-coder/652c99b799cf7b14a72ba4a272408187 to your computer and use it in GitHub Desktop.
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.w3c.dom.Node;
import org.xmlunit.builder.DiffBuilder;
import org.xmlunit.builder.Input;
import org.xmlunit.diff.Diff;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class XmlUnitTest {
@Test
public void testForDifferences() {
String control = "<Parent>\n" +
" <Costum>\n" +
" <Work>\n" +
" <Person>\n" +
" <FirstName>John</FirstName>\n" +
" <LastName>Doe</LastName>\n" +
" <Email>johndoe@email.com</Email>\n" +
" </Person>\n" +
" <Person>\n" +
" <FirstName>Mickey</FirstName>\n" +
" <LastName>Mouse</LastName>\n" +
" <Email>mm@email.com</Email>\n" +
" </Person>\n" +
" <Person>\n" +
" <FirstName>HO</FirstName>\n" +
" <LastName>FRT</LastName>\n" +
" <Email>mm@email.com</Email>\n" +
" </Person>\n" +
" </Work>\n" +
" </Costum>\n" +
"</Parent>";
String test = "<Parent>\n" +
" <Costum>\n" +
" <Work>\n" +
" <Person>\n" +
" <FirstName>John</FirstName>\n" +
" <LastName>Doe</LastName>\n" +
" <Email>johndoe@email.com</Email>\n" +
" </Person>\n" +
" <Person>\n" +
" <FirstName>HO</FirstName>\n" +
" <LastName>FRT</LastName>\n" +
" <Email>mm@email.com</Email>\n" +
" </Person>\n" +
" <Person>\n" +
" <FirstName>Mickey</FirstName>\n" +
" <LastName>Mouse</LastName>\n" +
" <Email>mm@email.com</Email>\n" +
" </Person>\n" +
" </Work>\n" +
" </Costum>\n" +
"</Parent>";
Diff myDiff = DiffBuilder.compare(Input.fromString(control))
.withTest(Input.fromString(test))
.ignoreWhitespace()
.checkForSimilar()
.build();
List<String> controlElements = StreamSupport
.stream(myDiff.getDifferences().spliterator(), false /* parallel */)
.map(diff -> diff.getComparison().getControlDetails().getTarget())
.map(node -> describeElement(node))
.sorted()
.collect(Collectors.toList());
List<String> testElements = StreamSupport
.stream(myDiff.getDifferences().spliterator(), false /* parallel */)
.map(diff -> diff.getComparison().getTestDetails().getTarget())
.map(node -> describeElement(node))
.sorted()
.collect(Collectors.toList());
assertEquals("В документе есть различия", controlElements, testElements);
}
private static String describeElement(Node node) {
String value = node.getNodeValue();
String name = node.getParentNode().getLocalName();
String parentName = node.getParentNode().getParentNode().getLocalName();
return new StringBuilder()
.append(parentName)
.append('/')
.append(name)
.append('/')
.append(value)
.toString();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment