SLING-3763 - guard against reuse of the renderers

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1614898 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/junit/impl/servlet/HtmlRenderer.java b/src/main/java/org/apache/sling/junit/impl/servlet/HtmlRenderer.java
index 872ab66..8cd5bf8 100644
--- a/src/main/java/org/apache/sling/junit/impl/servlet/HtmlRenderer.java
+++ b/src/main/java/org/apache/sling/junit/impl/servlet/HtmlRenderer.java
@@ -34,7 +34,7 @@
 
 /** HTML renderer for JUnit servlet */
 @Component(immediate=false)
-@Service
+@Service(serviceFactory=true)
 public class HtmlRenderer extends RunListener implements Renderer {
 
     public static final String EXTENSION = "html";
@@ -102,6 +102,9 @@
 
     /** @inheritDoc */
     public void setup(HttpServletResponse response, String pageTitle) throws IOException, UnsupportedEncodingException {
+        if(output != null) {
+            throw new IllegalStateException("Output Writer already set");
+        }
         response.setContentType("text/html");
         response.setCharacterEncoding("UTF-8");
         output = response.getWriter();
@@ -119,6 +122,7 @@
     public void cleanup() {
         output.println("</body>");
         output.println("</html>");
+        output = null;
     }
     
     /** @inheritDoc */
diff --git a/src/main/java/org/apache/sling/junit/impl/servlet/JsonRenderer.java b/src/main/java/org/apache/sling/junit/impl/servlet/JsonRenderer.java
index fbd7a1a..a21946f 100644
--- a/src/main/java/org/apache/sling/junit/impl/servlet/JsonRenderer.java
+++ b/src/main/java/org/apache/sling/junit/impl/servlet/JsonRenderer.java
@@ -61,6 +61,9 @@
 
     /** @inheritDoc */
     public void setup(HttpServletResponse response, String pageTitle) throws IOException, UnsupportedEncodingException {
+        if(writer != null) {
+            throw new IllegalStateException("Output Writer already set");
+        }
         response.setContentType("application/json");
         response.setCharacterEncoding("UTF-8");
         writer = new JSONWriter(response.getWriter());
diff --git a/src/main/java/org/apache/sling/junit/impl/servlet/PlainTextRenderer.java b/src/main/java/org/apache/sling/junit/impl/servlet/PlainTextRenderer.java
index 383f852..40aca92 100644
--- a/src/main/java/org/apache/sling/junit/impl/servlet/PlainTextRenderer.java
+++ b/src/main/java/org/apache/sling/junit/impl/servlet/PlainTextRenderer.java
@@ -52,6 +52,9 @@
 
     /** @inheritDoc */
     public void setup(HttpServletResponse response, String pageTitle) throws IOException, UnsupportedEncodingException {
+        if(output != null) {
+            throw new IllegalStateException("Output Writer already set");
+        }
         response.setContentType("text/plain");
         response.setCharacterEncoding("UTF-8");
         output = response.getWriter();
@@ -60,6 +63,7 @@
     
     /** @inheritDoc */
     public void cleanup() {
+        output = null;
     }
 
     /** @inheritDoc */
diff --git a/src/main/java/org/apache/sling/junit/impl/servlet/XmlRenderer.java b/src/main/java/org/apache/sling/junit/impl/servlet/XmlRenderer.java
index 21d1648..c6671ed 100644
--- a/src/main/java/org/apache/sling/junit/impl/servlet/XmlRenderer.java
+++ b/src/main/java/org/apache/sling/junit/impl/servlet/XmlRenderer.java
@@ -122,6 +122,9 @@
 
     /** @inheritDoc */
 	public void setup(HttpServletResponse response, String pageTitle) throws IOException, UnsupportedEncodingException {
+        if(output != null) {
+            throw new IllegalStateException("Output Writer already set");
+        }
 		suiteStartTime = System.currentTimeMillis();
 
 		response.setContentType("text/xml");
@@ -154,10 +157,12 @@
 
     /** @inheritDoc */
 	public void cleanup() {
-		if (testSuiteCount > 1)
+		if (testSuiteCount > 1) {
 			output.println(getStringFromElement(suitesElement));
-		else
+		} else {
 			output.println(getStringFromElement(rootElement));
+		}
+		output = null;
 	}
 	
     /** @inheritDoc */