From 4131d8808b71a432f93537fe0bdadb5c1e897149 Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Tue, 16 Dec 2014 08:34:46 +0100
Subject: [PATCH] Getting rid of parser wrapper, reverting to pure JUnit
 testing

---
 .../{ContentRedirect.java => SaxFilter.java}  |   2 +-
 .../StandardErrorHandler.java}                |   4 +-
 .../mi/sda1/saxhtml/v1/Driver.java            |  15 ---
 .../mi/sda1/saxhtml/v1/Memo2Html.java         |  49 --------
 .../mi/sda1/saxhtml/v1/Memo2HtmlHandler.java  |   4 +-
 .../mi/sda1/saxhtml/v1/package-info.java      |   4 -
 .../mi/sda1/saxhtml/v2/Driver.java            |  17 ---
 .../mi/sda1/saxhtml/v2/Memo2Html.java         |  51 ---------
 .../mi/sda1/saxhtml/v2/Memo2HtmlHandler.java  |   4 +-
 .../mi/sda1/saxhtml/v2/package-info.java      |   4 -
 .../v1/test/TestSimpleSaxTransform.java       |   4 +-
 .../v2/test/TestComplexSaxTransform.java      |   6 +-
 .../de/testing/dom/DomAssert.java             | 108 ++++++++----------
 ...ConversionTest.java => SaxFilterTest.java} |  35 ++++--
 14 files changed, 85 insertions(+), 222 deletions(-)
 rename Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/{ContentRedirect.java => SaxFilter.java} (81%)
 rename Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/{v1/MyErrorHandler.java => tools/StandardErrorHandler.java} (88%)
 delete mode 100644 Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Driver.java
 delete mode 100644 Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Memo2Html.java
 delete mode 100644 Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/package-info.java
 delete mode 100644 Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Driver.java
 delete mode 100644 Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Memo2Html.java
 delete mode 100644 Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/package-info.java
 rename Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/{ConversionTest.java => SaxFilterTest.java} (68%)

diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/ContentRedirect.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/SaxFilter.java
similarity index 81%
rename from Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/ContentRedirect.java
rename to Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/SaxFilter.java
index 8c27ccce0..bd105d01f 100644
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/ContentRedirect.java
+++ b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/SaxFilter.java
@@ -4,7 +4,7 @@ import java.io.PrintStream;
 
 import org.xml.sax.ContentHandler;
 
-public interface ContentRedirect extends ContentHandler {
+public interface SaxFilter extends ContentHandler {
 
    /**
     * Allow output redirection.
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/MyErrorHandler.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/StandardErrorHandler.java
similarity index 88%
rename from Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/MyErrorHandler.java
rename to Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/StandardErrorHandler.java
index 1fce5e72b..cb23819bf 100644
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/MyErrorHandler.java
+++ b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/tools/StandardErrorHandler.java
@@ -1,11 +1,11 @@
-package de.hdm_stuttgart.mi.sda1.saxhtml.v1;
+package de.hdm_stuttgart.mi.sda1.saxhtml.tools;
 
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 import org.xml.sax.ErrorHandler;
 
 /** Handle parsing errors */
-public class MyErrorHandler implements ErrorHandler {
+public class StandardErrorHandler implements ErrorHandler {
   /** @see ErrorHandler#warning(SAXParseException) */
   public void warning(SAXParseException e) {
     System.err.println("[Warning]" + getLocationString(e));
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Driver.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Driver.java
deleted file mode 100644
index 1a3cd8f29..000000000
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Driver.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package de.hdm_stuttgart.mi.sda1.saxhtml.v1;
-
-/** Driver */
-public class Driver {
-  /** @param argv unused */
-  public static void main(String argv[]) {
-    try{
-    Memo2Html memo2html = new Memo2Html(new Memo2HtmlHandler());
-    memo2html.parse("src/main/resources/memo.xml");
-
-    } catch (Exception e){
-      e.printStackTrace(System.err);
-    }
-  }
-}
\ No newline at end of file
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Memo2Html.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Memo2Html.java
deleted file mode 100644
index ef3ccc554..000000000
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Memo2Html.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package de.hdm_stuttgart.mi.sda1.saxhtml.v1;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-
-/** Parser, content- and error handler assembly */
-public class Memo2Html  {
-
-	private final XMLReader xmlReader;
-	private final MyErrorHandler errorHandler = new MyErrorHandler();
-
-	/**
-	 * @param out
-	 * @throws SAXException
-	 *             Parsing may fail.
-	 * @throws ParserConfigurationException
-	 *             Unable to instantiate parser.
-	 */
-	public Memo2Html(final ContentHandler handler) throws SAXException,
-			ParserConfigurationException {
-		final SAXParserFactory saxPf = SAXParserFactory.newInstance();
-		final SAXParser saxParser = saxPf.newSAXParser();
-		xmlReader = saxParser.getXMLReader();
-
-		xmlReader.setContentHandler(handler);
-		xmlReader.setErrorHandler(errorHandler);
-	}
-
-	/**
-	 * Parse an existing memo instance and create HTML output.
-	 * 
-	 * @param uri
-	 *            The resource to be parsed
-	 * @throws IOException
-	 *             Access related problems
-	 * @throws SAXException
-	 *             Parsing may fail
-	 */
-	public void parse(final String uri) throws IOException, SAXException {
-		xmlReader.parse(uri);
-	}
-}
\ No newline at end of file
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Memo2HtmlHandler.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Memo2HtmlHandler.java
index 7e8189ad0..01d69f1f4 100644
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Memo2HtmlHandler.java
+++ b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/Memo2HtmlHandler.java
@@ -6,13 +6,13 @@ import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
-import de.hdm_stuttgart.mi.sda1.saxhtml.tools.ContentRedirect;
+import de.hdm_stuttgart.mi.sda1.saxhtml.tools.SaxFilter;
 
 /**
  * Turning &lt;memo&gt; documents to HTML
  *
  */
-public class Memo2HtmlHandler extends DefaultHandler implements ContentRedirect {
+public class Memo2HtmlHandler extends DefaultHandler implements SaxFilter {
 
 	private PrintStream out;
 
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/package-info.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/package-info.java
deleted file mode 100644
index 58d138977..000000000
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v1/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Create HTML output from XML data sources
- */
-package de.hdm_stuttgart.mi.sda1.saxhtml.v1;
\ No newline at end of file
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Driver.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Driver.java
deleted file mode 100644
index 99616e0b9..000000000
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Driver.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.hdm_stuttgart.mi.sda1.saxhtml.v2;
-
-import de.hdm_stuttgart.mi.sda1.saxhtml.v1.Memo2HtmlHandler;
-
-/** Driver */
-public class Driver {
-  /** @param argv unused */
-  public static void main(String argv[]) {
-    try{
-    Memo2Html memo2html = new Memo2Html(new Memo2HtmlHandler());
-    memo2html.parse("src/main/resources/memo.xml");
-
-    } catch (Exception e){
-      e.printStackTrace(System.err);
-    }
-  }
-}
\ No newline at end of file
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Memo2Html.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Memo2Html.java
deleted file mode 100644
index c575ecd00..000000000
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Memo2Html.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package de.hdm_stuttgart.mi.sda1.saxhtml.v2;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-
-import de.hdm_stuttgart.mi.sda1.saxhtml.v1.MyErrorHandler;
-
-/** Parser, content- and error handler assembly */
-public class Memo2Html {
-
-	private final XMLReader xmlReader;
-	private final MyErrorHandler errorHandler = new MyErrorHandler();
-
-	/**
-	 * @param out Write output to stream
-	 * @throws SAXException
-	 *             Parsing may fail.
-	 * @throws ParserConfigurationException
-	 *             Unable to instantiate parser.
-	 */
-	public Memo2Html(final ContentHandler handler) throws SAXException,
-			ParserConfigurationException {
-		final SAXParserFactory saxPf = SAXParserFactory.newInstance();
-		final SAXParser saxParser = saxPf.newSAXParser();
-		xmlReader = saxParser.getXMLReader();
-
-		xmlReader.setContentHandler(handler);
-		xmlReader.setErrorHandler(errorHandler);
-	}
-
-	/**
-	 * Parse an existing memo instance and create HTML output.
-	 * 
-	 * @param uri
-	 *            The resource to be parsed
-	 * @throws IOException
-	 *             Access related problems
-	 * @throws SAXException
-	 *             Parsing may fail
-	 */
-	public void parse(final String uri) throws IOException, SAXException {
-		xmlReader.parse(uri);
-	}
-}
\ No newline at end of file
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Memo2HtmlHandler.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Memo2HtmlHandler.java
index b898eef09..2d8422c5a 100644
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Memo2HtmlHandler.java
+++ b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/Memo2HtmlHandler.java
@@ -8,13 +8,13 @@ import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
-import de.hdm_stuttgart.mi.sda1.saxhtml.tools.ContentRedirect;
+import de.hdm_stuttgart.mi.sda1.saxhtml.tools.SaxFilter;
 
 /**
  * Turning &lt;memo&gt; documents to HTML
  *
  */
-public class Memo2HtmlHandler extends DefaultHandler implements ContentRedirect {
+public class Memo2HtmlHandler extends DefaultHandler implements SaxFilter {
 
 	private PrintStream out;
 
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/package-info.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/package-info.java
deleted file mode 100644
index f3bbf67a2..000000000
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/main/java/de/hdm_stuttgart/mi/sda1/saxhtml/v2/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Create HTML output from XML data sources
- */
-package de.hdm_stuttgart.mi.sda1.saxhtml.v2;
\ No newline at end of file
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/sda1/saxhtml/v1/test/TestSimpleSaxTransform.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/sda1/saxhtml/v1/test/TestSimpleSaxTransform.java
index f8bbf56bc..8cfbef0fd 100644
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/sda1/saxhtml/v1/test/TestSimpleSaxTransform.java
+++ b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/sda1/saxhtml/v1/test/TestSimpleSaxTransform.java
@@ -3,7 +3,7 @@ package de.hdm_stuttgart.de.sda1.saxhtml.v1.test;
 import org.junit.Assert;
 import org.junit.Test;
 
-import de.hdm_stuttgart.de.testing.dom.ConversionTest;
+import de.hdm_stuttgart.de.testing.dom.SaxFilterTest;
 import de.hdm_stuttgart.de.testing.dom.DomAssert;
 import de.hdm_stuttgart.mi.sda1.saxhtml.v1.Memo2HtmlHandler;
 
@@ -11,7 +11,7 @@ import de.hdm_stuttgart.mi.sda1.saxhtml.v1.Memo2HtmlHandler;
  * Unit testing XML to HTML output
  */
 @SuppressWarnings("javadoc")
-public class TestSimpleSaxTransform extends ConversionTest {
+public class TestSimpleSaxTransform extends SaxFilterTest {
    
    public TestSimpleSaxTransform() {
       super("src/main/resources/memo.xml", new Memo2HtmlHandler(), ".1.html");
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/sda1/saxhtml/v2/test/TestComplexSaxTransform.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/sda1/saxhtml/v2/test/TestComplexSaxTransform.java
index 9f981640c..8fb9da9e6 100644
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/sda1/saxhtml/v2/test/TestComplexSaxTransform.java
+++ b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/sda1/saxhtml/v2/test/TestComplexSaxTransform.java
@@ -2,7 +2,7 @@ package de.hdm_stuttgart.de.sda1.saxhtml.v2.test;
 
 import org.junit.Test;
 
-import de.hdm_stuttgart.de.testing.dom.ConversionTest;
+import de.hdm_stuttgart.de.testing.dom.SaxFilterTest;
 import de.hdm_stuttgart.de.testing.dom.DomAssert;
 import de.hdm_stuttgart.mi.sda1.saxhtml.v2.Memo2HtmlHandler;
 
@@ -11,14 +11,14 @@ import de.hdm_stuttgart.mi.sda1.saxhtml.v2.Memo2HtmlHandler;
 
  */
 @SuppressWarnings("javadoc")
-public class TestComplexSaxTransform extends ConversionTest {
+public class TestComplexSaxTransform extends SaxFilterTest {
    
    public TestComplexSaxTransform() {
       super("src/main/resources/memo.xml", new Memo2HtmlHandler(), ".2.html");
    }
 
 	@Test public void testSenderInHeader() {
-		DomAssert.assertSingleNodeContent("<title>Memo from M. Goik</title> must be child of <head>", htmlRootElement, "head/title", "Memo from M. Goik");
+		DomAssert.assertSingleNodeContent("<title>Memo from M. Goik</title> must be child of <head>", htmlRootElement, "head/title", "title", "Memo from M. Goik");
 	}
 	@Test public void testNumberfRecipients() {
 		DomAssert.assertNumberOfNodes("There should be two <li> elements matching two recipients", htmlRootElement, "body/dl/dd/ul/li", 2);
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/DomAssert.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/DomAssert.java
index 02f9ba854..6d5cc5271 100644
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/DomAssert.java
+++ b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/DomAssert.java
@@ -7,85 +7,77 @@ import org.jdom2.xpath.XPathExpression;
 import org.jdom2.xpath.XPathFactory;
 
 /**
- * @author goik
+ * Helper methods for analyzing XML result documents
  *
  */
 public class DomAssert {
-   
-   
+
    final static XPathFactory xpf = XPathFactory.instance();
 
    /**
- * @param msg
- * @param context
- * @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);
+    * 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) {
 
-      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());
-      }
-   } 
-   
-   /**
- * @param msg
- * @param context
- * @param xpath
- * @param expectedContent
- */
-public static void assertSingleNodeContent(final String msg, final Element context, final String xpath, String expectedContent) {
-      
       @SuppressWarnings({ "unchecked", "rawtypes" })
-      final XPathExpression<Element> xpathExpr = (XPathExpression<Element>) (XPathExpression) xpf.compile(xpath);
+      final XPathExpression<Element> xpathExpr = (XPathExpression<Element>) (XPathExpression) xpf
+            .compile(xpath);
 
       final List<Element> matchedNodes = xpathExpr.evaluate(context);
-      if (1 == matchedNodes.size()) {
-         final String content = matchedNodes.get(0).getValue();
-         if (!content.equals(expectedContent)) {
-            throw new AssertXpathResult(msg + "\nExpected content '" + expectedContent + "' for xpath '" + xpath + "' but found '" + content + "'");
-         }
-      } else {
-         throw new AssertXpathResult("\nExactly one node expected for xpath '" + xpath + "' but found " + matchedNodes.size());
+
+      if (expectedNodeCount != matchedNodes.size()) {
+         throw new AssertXpathResult(msg + "\nExpected " + expectedNodeCount
+               + " node" + (expectedNodeCount == 1 ? "" : "s") + " for xpath '"
+               + xpath + "' but found " + matchedNodes.size());
       }
    }
 
    /**
- * @param msg
- * @param context
- * @param xpath
- * @param expectedTagName
- * @param expectedContent
- */
-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);
+    * 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);
-         
-         final String elementTagName = element.getName();
-         if (!expectedTagName.equals(elementTagName)) {
-            throw new AssertXpathResult(msg + "\nExpected <" + expectedTagName  + "> for xpath '" + xpath + "' but found <" +
-                  elementTagName + ">");
+
+         if (null != expectedTagName) {
+            final String actualTagName = element.getName();
+            if (!expectedTagName.equals(actualTagName)) {
+               throw new AssertXpathResult(msg + "\nExpected <" + expectedTagName
+                     + "> for xpath '" + xpath + "' but found <" + actualTagName + ">");
+            }
          }
-         final String content = element.getValue();
-         if (!expectedContent.equals(content)) {
-            throw new AssertXpathResult(msg + "\nExpected element content '" + expectedContent  + "' for xpath '" + xpath + "' but found '" +
-                                       content + "'");
+         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());
+         throw new AssertXpathResult("Exactly node expected for xpath '" + xpath
+               + "' but found " + matchedNodes.size());
       }
    }
 }
diff --git a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/ConversionTest.java b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/SaxFilterTest.java
similarity index 68%
rename from Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/ConversionTest.java
rename to Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/SaxFilterTest.java
index bd5c87eb0..ffd28114d 100644
--- a/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/ConversionTest.java
+++ b/Sda1/Etest/SaxMemo2Html/SaxMemo2Hhtml_solution/src/test/java/de/hdm_stuttgart/de/testing/dom/SaxFilterTest.java
@@ -7,32 +7,36 @@ import java.io.IOException;
 import java.io.PrintStream;
 
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
 
 import org.jdom2.Element;
 import org.jdom2.JDOMException;
 import org.jdom2.input.SAXBuilder;
 import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
 
-import de.hdm_stuttgart.mi.sda1.saxhtml.tools.ContentRedirect;
-import de.hdm_stuttgart.mi.sda1.saxhtml.v1.Memo2Html;
+import de.hdm_stuttgart.mi.sda1.saxhtml.tools.SaxFilter;
+import de.hdm_stuttgart.mi.sda1.saxhtml.tools.StandardErrorHandler;
 
 /**
  * Turning &lt;memo&gt; documents to HTML as being shown in sample document
  * memo.xml.2.sample.html
  */
 @SuppressWarnings("javadoc")
-public abstract class ConversionTest {
+public abstract class SaxFilterTest {
 
 	public final String xmlInputFileName, htmlOutputFileName;
-	final ContentRedirect saxHandler;
+	final SaxFilter saxHandler;
 	protected static String errorInitString = null;
 
 	protected static Element htmlRootElement = null;
 
-	protected ConversionTest(final String xmlInputFileName,
-			final ContentRedirect saxHandler, final String outputExtension) {
+	public SaxFilterTest(final String xmlInputFileName,
+						final SaxFilter saxHandler, 
+						final String resultFileExtension) {
 		this.xmlInputFileName = xmlInputFileName;
-		htmlOutputFileName = xmlInputFileName + outputExtension;
+		htmlOutputFileName = xmlInputFileName + resultFileExtension;
 		this.saxHandler = saxHandler;
 
 		if (null == htmlRootElement) {
@@ -47,15 +51,22 @@ public abstract class ConversionTest {
 				return;
 			}
 			saxHandler.setOutputStream(out);
-			final Memo2Html memo2html;
+
+			final XMLReader xmlReader;
 			try {
-				memo2html = new Memo2Html(saxHandler);
-			} catch (SAXException | ParserConfigurationException e2) {
-				e2.printStackTrace();
+				final SAXParserFactory saxPf = SAXParserFactory.newInstance();
+				final SAXParser saxParser = saxPf.newSAXParser();
+				xmlReader = saxParser.getXMLReader();
+
+				xmlReader.setContentHandler(saxHandler);
+				xmlReader.setErrorHandler(new StandardErrorHandler());
+
+			} catch (SAXException | ParserConfigurationException e) {
+				errorInitString = "Unable to create XMLparser instance: " + e.getLocalizedMessage();
 				return;
 			}
 			try {
-				memo2html.parse(xmlInputFileName);
+				xmlReader.parse(xmlInputFileName);
 			} catch (SAXException | IOException e) {
 				errorInitString = "Unable parse file '" + xmlInputFileName
 						+ "': " + e.getLocalizedMessage();
-- 
GitLab