From 1e14ac7028af0fbd86e2fd5b937cde15b123b0d6 Mon Sep 17 00:00:00 2001 From: egimaben Date: Fri, 22 Jul 2016 22:14:48 +0300 Subject: [PATCH 1/2] added xmlunit 2.x tutorial project --- xmlunit2-tutorial/README.md | 0 xmlunit2-tutorial/pom.xml | 46 +++ .../IgnoreAttributeDifferenceEvaluator.java | 31 ++ .../com/baeldung/xmlunit/XMLUnitTest.java | 290 ++++++++++++++++++ .../src/test/resources/control.xml | 4 + .../src/test/resources/students.xml | 11 + .../src/test/resources/students.xsd | 18 ++ .../test/resources/students_with_error.xml | 12 + .../src/test/resources/teachers.xml | 10 + xmlunit2-tutorial/src/test/resources/test.xml | 4 + 10 files changed, 426 insertions(+) create mode 100644 xmlunit2-tutorial/README.md create mode 100644 xmlunit2-tutorial/pom.xml create mode 100644 xmlunit2-tutorial/src/main/java/com/baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java create mode 100644 xmlunit2-tutorial/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java create mode 100644 xmlunit2-tutorial/src/test/resources/control.xml create mode 100644 xmlunit2-tutorial/src/test/resources/students.xml create mode 100644 xmlunit2-tutorial/src/test/resources/students.xsd create mode 100644 xmlunit2-tutorial/src/test/resources/students_with_error.xml create mode 100644 xmlunit2-tutorial/src/test/resources/teachers.xml create mode 100644 xmlunit2-tutorial/src/test/resources/test.xml diff --git a/xmlunit2-tutorial/README.md b/xmlunit2-tutorial/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/xmlunit2-tutorial/pom.xml b/xmlunit2-tutorial/pom.xml new file mode 100644 index 0000000000..b4cb684f65 --- /dev/null +++ b/xmlunit2-tutorial/pom.xml @@ -0,0 +1,46 @@ + + 4.0.0 + com.baeldung + xmlunit2-tutorial + 1.0 + XMLUnit-2 + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 7 + 7 + + + + + + + junit + junit + 4.3 + test + + + org.hamcrest + hamcrest-all + 1.3 + + + org.xmlunit + xmlunit-matchers + 2.2.1 + + + + org.xmlunit + xmlunit-core + 2.2.1 + + + + diff --git a/xmlunit2-tutorial/src/main/java/com/baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java b/xmlunit2-tutorial/src/main/java/com/baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java new file mode 100644 index 0000000000..2f644e0114 --- /dev/null +++ b/xmlunit2-tutorial/src/main/java/com/baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java @@ -0,0 +1,31 @@ +package com.baeldung.xmlunit; + +import org.w3c.dom.Attr; +import org.w3c.dom.Node; +import org.xmlunit.diff.Comparison; +import org.xmlunit.diff.ComparisonResult; +import org.xmlunit.diff.DifferenceEvaluator; + +public class IgnoreAttributeDifferenceEvaluator implements DifferenceEvaluator { + + private String attributeName; + + public IgnoreAttributeDifferenceEvaluator(String attributeName) { + this.attributeName = attributeName; + } + + @Override + public ComparisonResult evaluate(Comparison comparison, + ComparisonResult outcome) { + if (outcome == ComparisonResult.EQUAL) + return outcome; + final Node controlNode = comparison.getControlDetails().getTarget(); + if (controlNode instanceof Attr) { + Attr attr = (Attr) controlNode; + if (attr.getName().equals(attributeName)) { + return ComparisonResult.SIMILAR; + } + } + return outcome; + } +} diff --git a/xmlunit2-tutorial/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java b/xmlunit2-tutorial/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java new file mode 100644 index 0000000000..d0e099e591 --- /dev/null +++ b/xmlunit2-tutorial/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java @@ -0,0 +1,290 @@ +package com.baeldung.xmlunit; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.core.IsNot.not; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.xmlunit.matchers.CompareMatcher.isIdenticalTo; +import static org.xmlunit.matchers.CompareMatcher.isSimilarTo; +import static org.xmlunit.matchers.HasXPathMatcher.hasXPath; + +import java.io.File; +import java.util.Iterator; + +import org.junit.Test; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.xmlunit.builder.DiffBuilder; +import org.xmlunit.builder.Input; +import org.xmlunit.diff.ComparisonControllers; +import org.xmlunit.diff.DefaultNodeMatcher; +import org.xmlunit.diff.Diff; +import org.xmlunit.diff.Difference; +import org.xmlunit.diff.ElementSelectors; +import org.xmlunit.validation.Languages; +import org.xmlunit.validation.ValidationProblem; +import org.xmlunit.validation.ValidationResult; +import org.xmlunit.validation.Validator; +import org.xmlunit.xpath.JAXPXPathEngine; + +public class XMLUnitTest { + @Test + public void givenWrongXml_whenValidateFailsAgainstXsd_thenCorrect() { + Validator v = Validator.forLanguage(Languages.W3C_XML_SCHEMA_NS_URI); + v.setSchemaSource(Input.fromStream( + new XMLUnitTest().getClass().getResourceAsStream( + "/students.xsd")).build()); + ValidationResult r = v.validateInstance(Input.fromStream( + new XMLUnitTest().getClass().getResourceAsStream( + "/students_with_error.xml")).build()); + assertFalse(r.isValid()); + } + + @Test + public void givenXmlWithErrors_whenReturnsValidationProblems_thenCorrect() { + Validator v = Validator.forLanguage(Languages.W3C_XML_SCHEMA_NS_URI); + v.setSchemaSource(Input.fromStream( + new XMLUnitTest().getClass().getResourceAsStream( + "/students.xsd")).build()); + ValidationResult r = v.validateInstance(Input.fromStream( + new XMLUnitTest().getClass().getResourceAsStream( + "/students_with_error.xml")).build()); + Iterator probs = r.getProblems().iterator(); + int count = 0; + while (probs.hasNext()) { + count++; + probs.next().toString(); + } + assertTrue(count > 0); + } + + @Test + public void givenXml_whenValidatesAgainstXsd_thenCorrect() { + Validator v = Validator.forLanguage(Languages.W3C_XML_SCHEMA_NS_URI); + v.setSchemaSource(Input.fromStream( + new XMLUnitTest().getClass().getResourceAsStream( + "/students.xsd")).build()); + ValidationResult r = v.validateInstance(Input.fromStream( + new XMLUnitTest().getClass().getResourceAsStream( + "/students.xml")).build()); + Iterator probs = r.getProblems().iterator(); + while (probs.hasNext()) { + System.out.println(probs.next().toString()); + } + assertTrue(r.isValid()); + } + + @Test + public void givenXPath_whenAbleToRetrieveNodes_thenCorrect() { + ClassLoader classLoader = getClass().getClassLoader(); + + Iterable i = new JAXPXPathEngine().selectNodes( + "//teacher", + Input.fromFile( + new File(classLoader.getResource("teachers.xml") + .getFile())).build()); + assertNotNull(i); + int count = 0; + for (Iterator it = i.iterator(); it.hasNext();) { + count++; + Node node = it.next(); + assertEquals("teacher", node.getNodeName()); + NamedNodeMap map = node.getAttributes(); + assertEquals("department", map.item(0).getNodeName()); + assertEquals("id", map.item(1).getNodeName()); + assertEquals("teacher", node.getNodeName()); + } + assertEquals(2, count); + } + + @Test + public void givenXmlSource_whenAbleToValidateExistingXPath_thenCorrect() { + ClassLoader classLoader = getClass().getClassLoader(); + assertThat(Input.fromFile(new File(classLoader.getResource( + "teachers.xml").getFile())), hasXPath("//teachers")); + assertThat(Input.fromFile(new File(classLoader.getResource( + "teachers.xml").getFile())), hasXPath("//teacher")); + assertThat(Input.fromFile(new File(classLoader.getResource( + "teachers.xml").getFile())), hasXPath("//subject")); + assertThat(Input.fromFile(new File(classLoader.getResource( + "teachers.xml").getFile())), hasXPath("//@department")); + } + + @Test + public void givenXmlSource_whenFailsToValidateInExistentXPath_thenCorrect() { + ClassLoader classLoader = getClass().getClassLoader(); + + assertThat(Input.fromFile(new File(classLoader.getResource( + "teachers.xml").getFile())), not(hasXPath("//sujet"))); + } + + @Test + public void given2XMLs_whenSimilarWithDiff_thenCorrect() throws Exception { + String myControlXML = "3false"; + String myTestXML = "false3"; + + Diff myDiffSimilar = DiffBuilder + .compare(myControlXML) + .withTest(myTestXML) + .withNodeMatcher( + new DefaultNodeMatcher(ElementSelectors.byName)) + .checkForSimilar().build(); + assertFalse("XML similar " + myDiffSimilar.toString(), + myDiffSimilar.hasDifferences()); + + } + + @Test + public void given2XMLsWithDifferences_whenTestsSimilarWithDifferenceEvaluator_thenCorrect() { + final String control = ""; + final String test = ""; + Diff myDiff = DiffBuilder + .compare(control) + .withTest(test) + .withDifferenceEvaluator( + new IgnoreAttributeDifferenceEvaluator("attr")) + .checkForSimilar().build(); + + assertFalse(myDiff.toString(), myDiff.hasDifferences()); + } + + @Test + public void given2XMLsWithDifferences_whenTestsDifferentWithoutDifferenceEvaluator_thenCorrect() { + final String control = ""; + final String test = ""; + + Diff myDiff = DiffBuilder.compare(control).withTest(test) + .checkForSimilar().build(); + + assertTrue(myDiff.toString(), myDiff.hasDifferences()); + } + + @Test + public void given2XMLS_whenSimilarWithCustomElementSelector_thenCorrect() { + String controlXml = "3false"; + String testXml = "false3"; + assertThat( + testXml, + isSimilarTo(controlXml).withNodeMatcher( + new DefaultNodeMatcher(ElementSelectors.byName))); + + } + + @Test + public void givenFileSourceAsObject_whenAbleToInput_thenCorrect() { + ClassLoader classLoader = getClass().getClassLoader(); + assertThat(Input.from(new File(classLoader.getResource("test.xml") + .getFile())), isSimilarTo(Input.from(new File(classLoader + .getResource("control.xml").getFile())))); + + } + + @Test + public void givenStreamAsSource_whenAbleToInput_thenCorrect() { + assertThat(Input.fromStream(new XMLUnitTest().getClass() + .getResourceAsStream("/test.xml")), + isSimilarTo(Input.fromStream(new XMLUnitTest().getClass() + .getResourceAsStream("/control.xml")))); + + } + + @Test + public void givenStreamAsObject_whenAbleToInput_thenCorrect() { + assertThat(Input.from(new XMLUnitTest().getClass().getResourceAsStream( + "/test.xml")), isSimilarTo(Input.from(new XMLUnitTest() + .getClass().getResourceAsStream("/control.xml")))); + + } + + @Test + public void givenStringSourceAsObject_whenAbleToInput_thenCorrect() { + assertThat( + Input.from("3false"), + isSimilarTo(Input + .from("3false"))); + + } + + @Test + public void givenFileSource_whenAbleToInput_thenCorrect() { + ClassLoader classLoader = getClass().getClassLoader(); + String testPath = classLoader.getResource("test.xml").getPath(); + String controlPath = classLoader.getResource("control.xml").getPath(); + assertThat(Input.fromFile(testPath), + isSimilarTo(Input.fromFile(controlPath))); + + } + + @Test + public void givenStringSource_whenAbleToInput_thenCorrect() { + String controlXml = "3false"; + String testXml = "3false"; + assertThat(Input.fromString(testXml), + isSimilarTo(Input.fromString(controlXml))); + + } + + @Test + public void givenSource_whenAbleToInput_thenCorrect() { + String controlXml = "3false"; + String testXml = "3false"; + assertThat(Input.fromString(testXml), + isSimilarTo(Input.fromString(controlXml))); + + } + + @Test + public void given2XMLS_whenIdentical_thenCorrect() { + String controlXml = "3false"; + String testXml = "3false"; + assertThat(testXml, isIdenticalTo(controlXml)); + + } + + @Test + public void given2XMLSWithSimilarNodesButDifferentSequence_whenNotIdentical_thenCorrect() { + String controlXml = "3false"; + String testXml = "false3"; + assertThat(testXml, not(isIdenticalTo(controlXml))); + + } + + @Test + public void given2XMLS_whenGeneratesDifferences_thenCorrect() + throws Exception { + String controlXml = "3false"; + String testXml = "false3"; + Diff myDiff = DiffBuilder.compare(controlXml).withTest(testXml).build(); + Iterator iter = myDiff.getDifferences().iterator(); + int size = 0; + while (iter.hasNext()) { + iter.next().toString(); + size++; + } + assertThat(size, greaterThan(1)); + } + + @Test + public void given2XMLS_whenGeneratesOneDifference_thenCorrect() + throws Exception { + String myControlXML = "3false"; + String myTestXML = "false3"; + Diff myDiff = DiffBuilder + .compare(myControlXML) + .withTest(myTestXML) + .withComparisonController( + ComparisonControllers.StopWhenDifferent).build(); + Iterator iter = myDiff.getDifferences().iterator(); + int size = 0; + while (iter.hasNext()) { + iter.next().toString(); + size++; + } + assertThat(size, equalTo(1)); + } + +} diff --git a/xmlunit2-tutorial/src/test/resources/control.xml b/xmlunit2-tutorial/src/test/resources/control.xml new file mode 100644 index 0000000000..afc0f53f91 --- /dev/null +++ b/xmlunit2-tutorial/src/test/resources/control.xml @@ -0,0 +1,4 @@ + + 3 + false + \ No newline at end of file diff --git a/xmlunit2-tutorial/src/test/resources/students.xml b/xmlunit2-tutorial/src/test/resources/students.xml new file mode 100644 index 0000000000..413e73fd07 --- /dev/null +++ b/xmlunit2-tutorial/src/test/resources/students.xml @@ -0,0 +1,11 @@ + + + + Rajiv + 18 + + + Candie + 19 + + \ No newline at end of file diff --git a/xmlunit2-tutorial/src/test/resources/students.xsd b/xmlunit2-tutorial/src/test/resources/students.xsd new file mode 100644 index 0000000000..15b10279f9 --- /dev/null +++ b/xmlunit2-tutorial/src/test/resources/students.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xmlunit2-tutorial/src/test/resources/students_with_error.xml b/xmlunit2-tutorial/src/test/resources/students_with_error.xml new file mode 100644 index 0000000000..e9ce77faf0 --- /dev/null +++ b/xmlunit2-tutorial/src/test/resources/students_with_error.xml @@ -0,0 +1,12 @@ + + + + Rajiv + 18 + + + + Candie + 19 + + \ No newline at end of file diff --git a/xmlunit2-tutorial/src/test/resources/teachers.xml b/xmlunit2-tutorial/src/test/resources/teachers.xml new file mode 100644 index 0000000000..9c073d5a38 --- /dev/null +++ b/xmlunit2-tutorial/src/test/resources/teachers.xml @@ -0,0 +1,10 @@ + + + math + physics + + + political education + english + + \ No newline at end of file diff --git a/xmlunit2-tutorial/src/test/resources/test.xml b/xmlunit2-tutorial/src/test/resources/test.xml new file mode 100644 index 0000000000..afc0f53f91 --- /dev/null +++ b/xmlunit2-tutorial/src/test/resources/test.xml @@ -0,0 +1,4 @@ + + 3 + false + \ No newline at end of file From 1fa1b166cae1a747d26a02e4f6364d772c98088b Mon Sep 17 00:00:00 2001 From: Alex Theedom Date: Sun, 24 Jul 2016 10:18:56 +0100 Subject: [PATCH 2/2] Change test method name to conform to required format --- .../src/test/java/com/baeldung/restassured/RestAssuredTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredTest.java b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredTest.java index e971efe3cb..06f54aae24 100644 --- a/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredTest.java +++ b/rest-assured-tutorial/src/test/java/com/baeldung/restassured/RestAssuredTest.java @@ -45,7 +45,7 @@ public class RestAssuredTest { } @Test - public void givenUrl_whenSuccessOnGetsResponse_andJsonHasRequiredKV_thenCorrect() { + public void givenUrl_whenSuccessOnGetsResponseAndJsonHasRequiredKV_thenCorrect() { get("/events?id=390").then().statusCode(200).assertThat() .body("id", equalTo("390"));