From 45056730b39837726abefec444ea918bc1572879 Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Sun, 3 Jul 2016 22:22:21 +0200 Subject: [PATCH] Reorganizing Junit based marking, merging Jdom tests --- .../src/main/resources/.gitignore | 1 + .../mi/sda1/scripts/SchemaTest.java | 3 +- .../mi/sda1/scripts/SchemaTest.java | 2 +- .../mi/sda1/exam/xsd/SchemaTest.java | 2 +- .../mi/sda1/exam/xsd/SchemaTest.java | 2 +- .../unitmarking/jdom/AssertXpathResult.java | 18 ++++ .../mi/unitmarking/jdom/DomAssert.java | 83 +++++++++++++++++++ .../mi/unitmarking/jdom/DomFilter.java | 19 +++++ .../mi/unitmarking/jdom/DomFilterTest.java | 69 +++++++++++++++ .../xsd}/InstanceSetEvaluation.java | 2 +- .../xsd}/InstanceTest.java | 2 +- ws/eclipse/ExamTesting/pom.xml | 4 +- 12 files changed, 199 insertions(+), 8 deletions(-) create mode 100644 ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/AssertXpathResult.java create mode 100644 ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomAssert.java create mode 100644 ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilter.java create mode 100644 ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilterTest.java rename ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/{sda1/exam/xsdmarking => unitmarking/xsd}/InstanceSetEvaluation.java (98%) rename ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/{sda1/exam/xsdmarking => unitmarking/xsd}/InstanceTest.java (99%) diff --git a/Exam/Sda1/JdomTable/jdomtable_solution/src/main/resources/.gitignore b/Exam/Sda1/JdomTable/jdomtable_solution/src/main/resources/.gitignore index 472b549de..084cbadd6 100644 --- a/Exam/Sda1/JdomTable/jdomtable_solution/src/main/resources/.gitignore +++ b/Exam/Sda1/JdomTable/jdomtable_solution/src/main/resources/.gitignore @@ -1,2 +1,3 @@ /memo.xml.1.html /memo.xml.2.html +/persons.xml.highlight.html diff --git a/Klausuren/Sda1/2015summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java b/Klausuren/Sda1/2015summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java index cd69c964c..3829ae476 100644 --- a/Klausuren/Sda1/2015summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java +++ b/Klausuren/Sda1/2015summer/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java @@ -3,7 +3,8 @@ package de.hdm_stuttgart.mi.sda1.scripts; import org.junit.Assert; import org.junit.Test; -import de.hdm_stuttgart.mi.sda1.exam.xsdmarking.InstanceSetEvaluation; +import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation; + /** * Unit test for an XML instance set. diff --git a/Klausuren/Sda1/2015summer/Exam_solve/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java b/Klausuren/Sda1/2015summer/Exam_solve/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java index cd69c964c..61625d8dc 100644 --- a/Klausuren/Sda1/2015summer/Exam_solve/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java +++ b/Klausuren/Sda1/2015summer/Exam_solve/src/test/java/de/hdm_stuttgart/mi/sda1/scripts/SchemaTest.java @@ -3,7 +3,7 @@ package de.hdm_stuttgart.mi.sda1.scripts; import org.junit.Assert; import org.junit.Test; -import de.hdm_stuttgart.mi.sda1.exam.xsdmarking.InstanceSetEvaluation; +import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation; /** * Unit test for an XML instance set. diff --git a/Klausuren/Sda1/2015winter/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java b/Klausuren/Sda1/2015winter/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java index 433c8861e..bd335db56 100644 --- a/Klausuren/Sda1/2015winter/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java +++ b/Klausuren/Sda1/2015winter/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java @@ -3,7 +3,7 @@ package de.hdm_stuttgart.mi.sda1.exam.xsd; import org.junit.Assert; import org.junit.Test; -import de.hdm_stuttgart.mi.sda1.exam.xsdmarking.InstanceSetEvaluation; +import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation; /** * Unit test for an XML instance set. diff --git a/Klausuren/Sda1/2015winter/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java b/Klausuren/Sda1/2015winter/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java index 433c8861e..bd335db56 100644 --- a/Klausuren/Sda1/2015winter/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java +++ b/Klausuren/Sda1/2015winter/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java @@ -3,7 +3,7 @@ package de.hdm_stuttgart.mi.sda1.exam.xsd; import org.junit.Assert; import org.junit.Test; -import de.hdm_stuttgart.mi.sda1.exam.xsdmarking.InstanceSetEvaluation; +import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation; /** * Unit test for an XML instance set. diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/AssertXpathResult.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/AssertXpathResult.java new file mode 100644 index 000000000..e3b497e64 --- /dev/null +++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/AssertXpathResult.java @@ -0,0 +1,18 @@ +package de.hdm_stuttgart.mi.unitmarking.jdom; + +/** + * @author goik + * + */ +public class AssertXpathResult extends AssertionError { + + private static final long serialVersionUID = -1369600480719379445L; + + /** + * @param msg + */ + public AssertXpathResult(String msg) { + super(msg); + } + +} diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomAssert.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomAssert.java new file mode 100644 index 000000000..20a88df97 --- /dev/null +++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomAssert.java @@ -0,0 +1,83 @@ +package de.hdm_stuttgart.mi.unitmarking.jdom; + +import java.util.List; + +import org.jdom2.Element; +import org.jdom2.xpath.XPathExpression; +import org.jdom2.xpath.XPathFactory; + +/** + * Helper methods for analyzing XML result documents + * + */ +public class DomAssert { + + final static XPathFactory xpf = XPathFactory.instance(); + + /** + * A given XPath expression is being evaluated for returning an expected number of element nodes + * + * @param msg An informative text explaining an error's cause. + * @param context XPath evaluation will start from this node + * @param xpath + * @param expectedNodeCount + */ + public static void assertNumberOfNodes(final String msg, final Element context, + final String xpath, int expectedNodeCount) { + + @SuppressWarnings({ "unchecked", "rawtypes" }) + final XPathExpression<Element> xpathExpr = (XPathExpression<Element>) (XPathExpression) xpf + .compile(xpath); + + final List<Element> matchedNodes = xpathExpr.evaluate(context); + + if (expectedNodeCount != matchedNodes.size()) { + throw new AssertXpathResult(msg + "\nExpected " + expectedNodeCount + + " node" + (expectedNodeCount == 1 ? "" : "s") + " for xpath '" + + xpath + "' but found " + matchedNodes.size()); + } + } + + /** + * A given XPath expression is being evaluated for returning exactly one element node of simple text content + * containing a given text. + * + * @param msg + * @param context + * @param xpath + * @param expectedTagName Will be evaluated unless being set to null + * @param expectedContent Will be evaluated unless being set to null + */ + public static void assertSingleNodeContent(final String msg, + final Element context, final String xpath, final String expectedTagName, + String expectedContent) { + + @SuppressWarnings({ "unchecked", "rawtypes" }) + final XPathExpression<Element> xpathExpr = (XPathExpression<Element>) (XPathExpression) xpf + .compile(xpath); + final List<Element> matchedNodes = xpathExpr.evaluate(context); + + if (1 == matchedNodes.size()) { + final Element element = matchedNodes.get(0); + + if (null != expectedTagName) { + final String actualTagName = element.getName(); + if (!expectedTagName.equals(actualTagName)) { + throw new AssertXpathResult(msg + "\nExpected <" + expectedTagName + + "> for xpath '" + xpath + "' but found <" + actualTagName + ">"); + } + } + if (null != expectedContent) { + final String actualContent = element.getValue(); + if (!expectedContent.equals(actualContent)) { + throw new AssertXpathResult(msg + "\nExpected element content '" + + expectedContent + "' for xpath '" + xpath + "' but found '" + + actualContent + "'"); + } + } + } else { + throw new AssertXpathResult("Exactly node expected for xpath '" + xpath + + "' but found " + matchedNodes.size()); + } + } +} diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilter.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilter.java new file mode 100644 index 000000000..bf1aa59d0 --- /dev/null +++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilter.java @@ -0,0 +1,19 @@ +package de.hdm_stuttgart.mi.unitmarking.jdom; + +import org.jdom2.Document; + +/** + * Transform a given Dom Tree + * + */ +public interface DomFilter { + + /** + * transform DOM input to output + * + * @param input Input DOM tree + * @return output DOM tree + */ + public Document process(final Document input); + +} diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilterTest.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilterTest.java new file mode 100644 index 000000000..e2de875a9 --- /dev/null +++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/jdom/DomFilterTest.java @@ -0,0 +1,69 @@ +package de.hdm_stuttgart.mi.unitmarking.jdom; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.PrintStream; + +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.jdom2.input.SAXBuilder; +import org.jdom2.output.Format; +import org.jdom2.output.XMLOutputter; + +public abstract class DomFilterTest { + + public static String xmlInputFileName, xmlOutputFileName; + static DomFilter domFilter; + protected static String initializationErrorString = null; + + protected static Element xmlRootElement = null; + + static protected void init (final String xmlInputFileName, + final DomFilter domFilter, + final String resultFileExtension) { + DomFilterTest.xmlInputFileName = xmlInputFileName; + DomFilterTest.xmlOutputFileName = xmlInputFileName + resultFileExtension; + DomFilterTest.domFilter = domFilter; + processAndParseResult(); + } + + static protected void processAndParseResult() { + + final SAXBuilder builder = new SAXBuilder(); + final Document input; + try { + input = builder.build(xmlInputFileName); + } catch (JDOMException | IOException e) { + initializationErrorString = "Error parsing input:" + e.getLocalizedMessage(); + return; + } + + final PrintStream out; + try { + out = new PrintStream(xmlOutputFileName); + } catch (FileNotFoundException e1) { + initializationErrorString = "Unable to open result file '" + xmlOutputFileName + + "' for writing"; + return; + } + + // Print to file + final Document result = domFilter.process(input); + xmlRootElement = result.getRootElement(); + final Format outFormat = Format.getPrettyFormat(); + final XMLOutputter printer = new XMLOutputter(outFormat); + try { + printer.output(result, out); + } catch (IOException e) { + initializationErrorString = "Error serializing result document to file '" + xmlOutputFileName + "': " + e.getLocalizedMessage(); + return; + } + // Print to standard out as well + try { + printer.output(result, System.out); + } catch (IOException e) { + initializationErrorString = "Error serializing result document to standard output: " + e.getLocalizedMessage(); + } + } +} diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceSetEvaluation.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java similarity index 98% rename from ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceSetEvaluation.java rename to ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java index d86a24fd0..eb30f8309 100644 --- a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceSetEvaluation.java +++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java @@ -1,4 +1,4 @@ -package de.hdm_stuttgart.mi.sda1.exam.xsdmarking; +package de.hdm_stuttgart.mi.unitmarking.xsd; import java.io.File; import java.io.IOException; diff --git a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceTest.java b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceTest.java similarity index 99% rename from ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceTest.java rename to ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceTest.java index 531b7ae99..ee68fe15f 100644 --- a/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/sda1/exam/xsdmarking/InstanceTest.java +++ b/ws/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceTest.java @@ -1,4 +1,4 @@ -package de.hdm_stuttgart.mi.sda1.exam.xsdmarking; +package de.hdm_stuttgart.mi.unitmarking.xsd; import java.io.File; import java.io.IOException; diff --git a/ws/eclipse/ExamTesting/pom.xml b/ws/eclipse/ExamTesting/pom.xml index 8c61e7550..0b5c7a9c9 100644 --- a/ws/eclipse/ExamTesting/pom.xml +++ b/ws/eclipse/ExamTesting/pom.xml @@ -20,7 +20,7 @@ <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> - <version>4.11</version> + <version>4.12</version> </dependency> <dependency> @@ -54,7 +54,7 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> - <version>3.1</version> + <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> -- GitLab