From 377b2fbd3e70745fa5ae0f569fc7579d8291f8d0 Mon Sep 17 00:00:00 2001
From: "Dr. Martin Goik" <goik@hdm-stuttgart.de>
Date: Sat, 9 Feb 2019 21:04:39 +0100
Subject: [PATCH] Bug fix not reading XML test instances.

---
 .../mi/unitmarking/xsd/CreateTestClass.java   | 22 +-----
 .../xsd/InstanceSetEvaluation.java            | 72 +++++++++++--------
 2 files changed, 43 insertions(+), 51 deletions(-)

diff --git a/ws/Artifacts/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/CreateTestClass.java b/ws/Artifacts/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/CreateTestClass.java
index 73ca55273..ec8c8fd62 100644
--- a/ws/Artifacts/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/CreateTestClass.java
+++ b/ws/Artifacts/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/CreateTestClass.java
@@ -40,23 +40,13 @@ class CreateTestClass {
 		Arrays.stream(new File(xmlTestFileDir).listFiles(path -> path.getPath().endsWith(".xml"))).
 				sorted(Comparator.comparing(File::toString)).
 				forEach(this::readTestHeader);
-
 	}
 
 	private void readTestHeader(final File instanceFilename) {
 
-		final SAXBuilder metainfoParser = new SAXBuilder(XMLReaders.NONVALIDATING);
-		try {
-			final Document doc = metainfoParser.build(instanceFilename);
-
-			final XPathExpression<ProcessingInstruction> searchHeader = 
-					XPathFactory.instance().compile(
-							"/processing-instruction('xmlTest')", 
-							Filters.processinginstruction());
-			final List<ProcessingInstruction> xmlTestList = 
-					searchHeader.evaluate(doc);
+		final List<ProcessingInstruction> xmlTestList = InstanceSetEvaluation.getProcessingInstructions(instanceFilename);
 
-			switch (xmlTestList.size()) {
+		switch (xmlTestList.size()) {
 			case 0:
 				log.info("No 'xmlTest PI found, possible dependency file");
 				break;
@@ -65,14 +55,6 @@ class CreateTestClass {
 				break;
 			default:
 				log.info("Found " + xmlTestList.size() + "' annotations in file '" +  instanceFilename.getPath() + "'\n");
-			}        
-
-		} catch (final JDOMException e) {
-			log.error("Document '" + instanceFilename.getPath() +
-					"' is invalid:", e);
-			log.error("Unable to parse document " + instanceFilename.getPath() + ": " + e + "\n");
-		} catch (final IOException e) {
-			log.error("Unable to read document " + instanceFilename.getPath() + ": " + e + "\n");
 		}
 	}
 
diff --git a/ws/Artifacts/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java b/ws/Artifacts/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java
index 6ab8111dc..4bdd400e5 100644
--- a/ws/Artifacts/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java
+++ b/ws/Artifacts/Unitmarking/src/main/java/de/hdm_stuttgart/mi/unitmarking/xsd/InstanceSetEvaluation.java
@@ -2,6 +2,7 @@ package de.hdm_stuttgart.mi.unitmarking.xsd;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Vector;
@@ -40,6 +41,33 @@ public class InstanceSetEvaluation {
 
 	final StringBuffer messages = new StringBuffer(), errorMessages = new StringBuffer();
 
+	/**
+	 * Read the list of all processing instructions (PIs) of a given XML file.
+	 *
+	 * @param instanceFilename The xml source to be searched for PIs.
+	 * @return The list of all PIs.
+	 *
+	 */
+	static public List<ProcessingInstruction> getProcessingInstructions(final File instanceFilename) {
+		final SAXBuilder metainfoParser = new SAXBuilder(XMLReaders.NONVALIDATING);
+		try {
+			final Document doc = metainfoParser.build(instanceFilename);
+
+			final XPathExpression<ProcessingInstruction> searchHeader =
+					XPathFactory.instance().compile(
+							"/processing-instruction('xmlTest')",
+							Filters.processinginstruction());
+			return searchHeader.evaluate(doc);
+		} catch (final JDOMException e) {
+			log.error("Document '" + instanceFilename.getPath() +
+					"' is invalid:", e);
+			warnings.append("Unable to parse document " + instanceFilename.getPath() + ": " + e + "\n");
+		} catch (final IOException e) {
+			warnings.append("Unable to read document " + instanceFilename.getPath() + ": " + e + "\n");
+		}
+		return new ArrayList<>();
+	}
+
 	/**
 	 * @return Individual failed test(s) error message(s).
 	 */
@@ -102,37 +130,19 @@ public class InstanceSetEvaluation {
 	}
 
 
-
 	void readTestHeader(final File instanceFilename, final String xsdSchemaFilename) {
 
-//		final SAXBuilder metainfoParser = new SAXBuilder(XMLReaders.NONVALIDATING);
-//		try {
-//			final Document doc = metainfoParser.build(instanceFilename);
-//
-//			final XPathExpression<ProcessingInstruction> searchHeader =
-//					XPathFactory.instance().compile(
-//							"/processing-instruction('xmlTest')",
-//							Filters.processinginstruction());
-//			final List<ProcessingInstruction> xmlTestList =
-//					searchHeader.evaluate(doc);
-//
-//			switch (xmlTestList.size()) {
-//			case 0:
-//				log.info("No 'xmlTest PI found, possible dependency file");
-//				break;
-//			case 1:
-//				tests.add(new InstanceTest(xmlTestList.get(0), xmlTestFileDir, xsdSchemaFilename, instanceFilename));
-//				break;
-//			default:
-//				warnings.append("Found " + xmlTestList.size() + "' annotations in file '" +  instanceFilename.getPath() + "'\n");
-//			}
-//
-//		} catch (final JDOMException e) {
-//			log.error("Document '" + instanceFilename.getPath() +
-//					"' is invalid:", e);
-//			warnings.append("Unable to parse document " + instanceFilename.getPath() + ": " + e + "\n");
-//		} catch (final IOException e) {
-//			warnings.append("Unable to read document " + instanceFilename.getPath() + ": " + e + "\n");
-//		}
+		final List<ProcessingInstruction> xmlTestList = getProcessingInstructions(instanceFilename);
+
+		switch (xmlTestList.size()) {
+			case 0:
+				log.info("No 'xmlTest PI found, possible dependency file");
+				break;
+			case 1:
+				tests.add(new InstanceTest(xmlTestList.get(0), xmlTestFileDir, xsdSchemaFilename, instanceFilename));
+				break;
+			default:
+				warnings.append("Found " + xmlTestList.size() + "' annotations in file '" +  instanceFilename.getPath() + "'\n");
+		}
 	}
-}
+}
\ No newline at end of file
-- 
GitLab