[jboss-svn-commits] JBL Code SVN: r26250 - labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Apr 24 16:53:01 EDT 2009
Author: ben.cotton at yahoo.com
Date: 2009-04-24 16:53:00 -0400 (Fri, 24 Apr 2009)
New Revision: 26250
Added:
labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/_TestRunnerServlet.java
labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/_TestRunnerXMLServlet.java
Log:
XTS 1.1 test set-up
Copied: labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/_TestRunnerServlet.java (from rev 26189, labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/TestRunnerServlet.java)
===================================================================
--- labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/_TestRunnerServlet.java (rev 0)
+++ labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/_TestRunnerServlet.java 2009-04-24 20:53:00 UTC (rev 26250)
@@ -0,0 +1,628 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a full listing
+ * of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+/*
+ * Copyright (c) 2002, 2003, Arjuna Technologies Limited.
+ *
+ * TestRunnerServlet.java
+ */
+
+package com.arjuna.qa.junit;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.Test;
+import junit.framework.TestListener;
+import junit.framework.TestResult;
+import junit.framework.TestSuite;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.CharArrayWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+public class _TestRunnerServlet extends HttpServlet
+{
+ public void init(ServletConfig config) throws ServletException
+ {
+ super.init(config);
+
+ _testSuiteClassName = config.getInitParameter("TestSuiteClassName");
+ }
+
+ protected String getContentType()
+ {
+ return "text/html";
+ }
+
+ public void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ try
+ {
+ PrintWriter writer = response.getWriter();
+
+ response.setContentType(getContentType());
+ response.setHeader("Cache-Control", "no-cache");
+
+ if (request.getParameter("failednumber") != null)
+ doStatusFailed(writer, request, response);
+ else if (request.getParameter("errornumber") != null)
+ doStatusError(writer, request, response);
+ else
+ doStatus(writer, request, response);
+ }
+ catch (Exception exception)
+ {
+ log("Test Runner: doGet failed", exception);
+
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, exception.toString());
+ }
+ catch (Error error)
+ {
+ log("Test Runner: doGet failed", error);
+
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, error.toString());
+ }
+ }
+
+ public void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException
+ {
+ try
+ {
+ PrintWriter writer = response.getWriter();
+
+ response.setContentType(getContentType());
+ response.setHeader("Cache-Control", "no-cache");
+
+ if ((_runnerThread == null) || (! _runnerThread.isAlive()))
+ {
+ _runnerThread = new RunnerThread();
+ _runnerThread.start();
+ }
+
+ if (request.getParameter("failednumber") != null)
+ doStatusFailed(writer, request, response);
+ else if (request.getParameter("errornumber") != null)
+ doStatusError(writer, request, response);
+ else
+ doStatus(writer, request, response);
+ }
+ catch (Exception exception)
+ {
+ log("Test Runner: doPost failed", exception);
+
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, exception.toString());
+ }
+ catch (Error error)
+ {
+ log("Test Runner: doPost failed", error);
+
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, error.toString());
+ }
+ }
+
+ public void doStatus(PrintWriter writer, HttpServletRequest request, HttpServletResponse response)
+ throws ServletException {
+ writer.println("<HTML>");
+ writer.println("<HEAD>");
+ writer.println("<TITLE>Test Runner</TITLE>");
+ writer.println("</HEAD>");
+ writer.println("<BODY bgcolor=\"white\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.println("<DIV style=\"font-family: Arial, Helvetica, sans-serif; font-size: large\"> <BR>Test Runner: Status<BR> </DIV>");
+
+ writer.println("<TABLE width=\"100%\">");
+
+ writer.println("<TR><TD colspan=\"3\" align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Status</TD></TR>");
+ writer.println("<TR>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Test suite class:</TD>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif\">" + _testSuiteClassName + "</TD>");
+ writer.println("</TR>");
+
+ if ((_runnerThread == null) || (! _runnerThread.isAlive()))
+ {
+ writer.println("<TR>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Action:</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.print("<FORM method=\"POST\" action=\"" + request.getRequestURL() + "\">");
+ writer.print("<INPUT type=\"button\" value=\"run\" onclick=\"this.form.submit()\">");
+ writer.print("</FORM>");
+ writer.println("</TD>");
+ writer.println("</TR>");
+ }
+ else
+ {
+ writer.println("<TR>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Action:</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.print("<FORM method=\"GET\" action=\"" + request.getRequestURL() + "\">");
+ writer.print("<INPUT type=\"button\" value=\"reload\" onclick=\"this.form.submit()\">");
+ writer.print("</FORM>");
+ writer.println("</TD>");
+ writer.println("</TR>");
+
+ if (_currentTest != null)
+ {
+ writer.println("<TR>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Current test:</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ encode(writer, _currentTest.toString());
+ writer.println("</TD>");
+ writer.println("</TR>");
+ }
+ }
+ writer.println("</TR>");
+ writer.println("<TR>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Passed count:</TD>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif\">" + _passedTests.size() + "</TD>");
+ writer.println("</TR>");
+ writer.println("<TR>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Failed count:</TD>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif\">" + _failedTests.size() + "</TD>");
+ writer.println("</TR>");
+ writer.println("<TR>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Error count:</TD>");
+ writer.println("<TD style=\"font-family: Arial, Helvetica, sans-serif\">" + _errorTests.size() + "</TD>");
+ writer.println("</TR>");
+
+ writer.println("</TABLE>");
+
+ if (! _passedTests.isEmpty())
+ {
+ writer.println("<BR>");
+
+ writer.println("<TABLE width=\"100%\">");
+
+ writer.println("<TR><TD colspan=\"3\" align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Passes</TD></TR>");
+
+ writer.println("<TR>");
+ writer.println("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Test</TD>");
+ writer.println("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Duration</TD>");
+ writer.println("</TR>");
+
+ Iterator passedTestsIterator = _passedTests.iterator();
+ while (passedTestsIterator.hasNext())
+ {
+ PassedTest passedTest = (PassedTest) passedTestsIterator.next();
+ writer.println("<TR>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ encode(writer, passedTest.test.toString());
+ writer.println("</TD>");
+ writer.print("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif\">" + passedTest.duration + " ms</TD>");
+ writer.println("</TR>");
+ }
+
+ writer.println("</TABLE>");
+ }
+
+ if (! _failedTests.isEmpty())
+ {
+ writer.println("<BR>");
+
+ writer.println("<TABLE width=\"100%\">");
+
+ writer.println("<TR><TD colspan=\"3\" align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Failures</TD></TR>");
+ writer.println("<TR>");
+ writer.println("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Test</TD>");
+ writer.println("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Duration</TD>");
+ writer.println("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Message</TD>");
+ writer.println("</TR>");
+
+ int failedNumber = 0;
+ Iterator failedTestsIterator = _failedTests.iterator();
+ while (failedTestsIterator.hasNext())
+ {
+ FailedTest failedTest = (FailedTest) failedTestsIterator.next();
+ writer.println("<TR>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.print("<A href=\"" + request.getRequestURL() + "?failednumber=" + failedNumber + "\">");
+ encode(writer, failedTest.test.toString());
+ writer.print("</A>");
+ writer.println("</TD>");
+ writer.print("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif\">" + failedTest.duration + " ms</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ encode(writer, failedTest.assertionFailedError.getMessage());
+ writer.println("</TD>");
+ writer.println("</TR>");
+ failedNumber++;
+ }
+
+ writer.println("</TABLE>");
+
+ writer.println("<BR>");
+ }
+
+ if (! _errorTests.isEmpty())
+ {
+ writer.println("<TABLE width=\"100%\">");
+ writer.println("<TR>");
+ writer.println("<TR><TD colspan=\"3\" align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Errors</TD></TR>");
+ writer.println("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Test</TD>");
+ writer.println("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Duration</TD>");
+ writer.println("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Exception/Error</TD>");
+ writer.println("</TR>");
+
+ int errorNumber = 0;
+ Iterator errorTestsIterator = _errorTests.iterator();
+ while (errorTestsIterator.hasNext())
+ {
+ ErrorTest errorTest = (ErrorTest) errorTestsIterator.next();
+ writer.println("<TR>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.print("<A href=\"" + request.getRequestURL() + "?errornumber=" + errorNumber + "\">");
+ encode(writer, errorTest.test.toString());
+ writer.print("</A>");
+ writer.println("</TD>");
+ writer.print("<TD align=\"center\" style=\"font-family: Arial, Helvetica, sans-serif\">" + errorTest.duration + " ms</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ encode(writer, errorTest.throwable.toString());
+ writer.println("</TD>");
+ writer.println("</TR>");
+ errorNumber++;
+ }
+
+ writer.println("</TABLE>");
+ }
+
+ writer.println("</BODY>");
+ writer.println("</HTML>");
+ }
+
+ public void doStatusFailed(PrintWriter writer, HttpServletRequest request, HttpServletResponse response)
+ throws ServletException
+ {
+ int failedIndex = 0;
+ FailedTest failedTest = null;
+
+ try
+ {
+ String failedIndexString = (String) request.getParameter("failednumber");
+
+ failedIndex = Integer.parseInt(failedIndexString);
+ failedTest = (FailedTest) _failedTests.get(failedIndex);
+ }
+ catch (Exception exception)
+ {
+ failedTest = null;
+ }
+
+ if (failedTest != null)
+ {
+ writer.println("<HTML>");
+ writer.println("<HEAD>");
+ writer.println("<TITLE>Test Runner</TITLE>");
+ writer.println("</HEAD>");
+ writer.println("<BODY bgcolor=\"white\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.println("<DIV style=\"font-family: Arial, Helvetica, sans-serif; font-size: large\"> <BR>Test Runner: Failed Status<BR> </DIV>");
+
+ writer.println("<TABLE>");
+
+ writer.print("<TR>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Test:</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ encode(writer, failedTest.test.toString());
+ writer.println("</TD>");
+ writer.println("</TR>");
+
+ writer.println("<TR>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Duration:</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">" + failedTest.duration + " ms</TD>");
+ writer.println("</TR>");
+
+ writer.println("<TR>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Message:</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ encode(writer, failedTest.assertionFailedError.getMessage());
+ writer.println("</TD>");
+ writer.println("</TR>");
+
+ writer.print("<TR>");
+ writer.print("<TD colspan=\"2\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Stack trace:</TD>");
+ writer.println("</TR>");
+ writer.println("<TR>");
+ writer.println("<TD colspan=\"2\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.println("<PRE>");
+ CharArrayWriter charArrayWriter = new CharArrayWriter();
+ PrintWriter printWriter = new PrintWriter(charArrayWriter, true);
+ failedTest.assertionFailedError.printStackTrace(printWriter);
+ printWriter.close();
+ charArrayWriter.close();
+ encode(writer, charArrayWriter.toString());
+ writer.println("</PRE>");
+ writer.println("</TD>");
+ writer.println("</TR>");
+
+ writer.println("</TABLE>");
+
+ writer.println("<TABLE width=\"100%\">");
+ writer.println("<TR>");
+ writer.println("<TD align=\"left\" width=\"33%\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ if (failedIndex > 0)
+ writer.println("<A href=\"" + request.getRequestURL() + "?failednumber=" + (failedIndex - 1)+ "\">previous</A>");
+ else
+ writer.print(" ");
+ writer.println("</TD>");
+ writer.println("<TD align=\"center\" width=\"33%\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.println("<A href=\"" + request.getRequestURL() + "\">all</A>");
+ writer.println("</TD>");
+ writer.println("<TD align=\"right\" width=\"33%\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ if (failedIndex < (_failedTests.size() - 1))
+ writer.println("<A href=\"" + request.getRequestURL() + "?failednumber=" + (failedIndex + 1)+ "\">next</A>");
+ else
+ writer.print(" ");
+ writer.println("</TD>");
+ writer.println("</TR>");
+ writer.println("</TABLE>");
+
+ writer.println("</BODY>");
+ writer.println("</HTML>");
+ }
+ else
+ doStatus(writer, request, response);
+ }
+
+ public void doStatusError(PrintWriter writer, HttpServletRequest request, HttpServletResponse response)
+ throws ServletException
+ {
+ int errorIndex = 0;
+ ErrorTest errorTest = null;
+
+ try
+ {
+ String errorIndexString = (String) request.getParameter("errornumber");
+
+ errorIndex = Integer.parseInt(errorIndexString);
+ errorTest = (ErrorTest) _errorTests.get(errorIndex);
+ }
+ catch (Exception exception)
+ {
+ errorTest = null;
+ }
+
+ if (errorTest != null)
+ {
+ writer.println("<HTML>");
+ writer.println("<HEAD>");
+ writer.println("<TITLE>Test Runner</TITLE>");
+ writer.println("</HEAD>");
+ writer.println("<BODY bgcolor=\"white\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.println("<DIV style=\"font-family: Arial, Helvetica, sans-serif; font-size: large\"> <BR>Test Runner: Error Status<BR> </DIV>");
+
+ writer.println("<TABLE>");
+
+ writer.print("<TR>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Test:</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ encode(writer, errorTest.test.toString());
+ writer.println("</TD>");
+ writer.println("</TR>");
+
+ writer.println("<TR>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Duration:</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">" + errorTest.duration + " ms</TD>");
+ writer.println("</TR>");
+
+ writer.println("<TR>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Exception/error:</TD>");
+ writer.print("<TD style=\"font-family: Arial, Helvetica, sans-serif\">");
+ encode(writer, errorTest.throwable.toString());
+ writer.println("</TD>");
+ writer.println("</TR>");
+
+ writer.print("<TR>");
+ writer.print("<TD colspan=\"2\" style=\"font-family: Arial, Helvetica, sans-serif; font-weight: bold\">Stack trace:</TD>");
+ writer.println("</TR>");
+ writer.println("<TR>");
+ writer.println("<TD colspan=\"2\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.println("<PRE>");
+ CharArrayWriter charArrayWriter = new CharArrayWriter();
+ PrintWriter printWriter = new PrintWriter(charArrayWriter, true);
+ errorTest.throwable.printStackTrace(printWriter);
+ printWriter.close();
+ charArrayWriter.close();
+ encode(writer, charArrayWriter.toString());
+ writer.println("</PRE>");
+ writer.println("</TD>");
+ writer.println("</TR>");
+
+ writer.println("</TABLE>");
+
+ writer.println("<TABLE width=\"100%\">");
+ writer.println("<TR>");
+ writer.println("<TD align=\"left\" width=\"33%\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ if (errorIndex > 0)
+ writer.println("<A href=\"" + request.getRequestURL() + "?errornumber=" + (errorIndex - 1)+ "\">previous</A>");
+ else
+ writer.print(" ");
+ writer.println("</TD>");
+ writer.println("<TD align=\"center\" width=\"33%\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ writer.println("<A href=\"" + request.getRequestURL() + "\">all</A>");
+ writer.println("</TD>");
+ writer.println("<TD align=\"right\" width=\"33%\" style=\"font-family: Arial, Helvetica, sans-serif\">");
+ if (errorIndex < (_errorTests.size() - 1))
+ writer.println("<A href=\"" + request.getRequestURL() + "?errornumber=" + (errorIndex + 1)+ "\">next</A>");
+ else
+ writer.print(" ");
+ writer.println("</TD>");
+ writer.println("</TR>");
+ writer.println("</TABLE>");
+
+ writer.println("</BODY>");
+ writer.println("</HTML>");
+ }
+ else
+ doStatus(writer, request, response);
+ }
+
+ protected class PassedTest
+ {
+ public Test test;
+ public long duration;
+ }
+
+ protected class FailedTest
+ {
+ public Test test;
+ public long duration;
+ public AssertionFailedError assertionFailedError;
+ }
+
+ protected class ErrorTest
+ {
+ public Test test;
+ public long duration;
+ public Throwable throwable;
+ }
+
+ protected class RunnerThread extends Thread
+ {
+ RunnerThread()
+ {
+ super("JUnit Runner Thread") ;
+ }
+
+ public void run()
+ {
+ try
+ {
+ _passedTests.clear();
+ _failedTests.clear();
+ _errorTests.clear();
+
+ Class testSuiteClass = Class.forName(_testSuiteClassName);
+ TestListener testListener = new BasicTestListener();
+
+ _testResult = new TestResult();
+ _testSuite = (TestSuite) testSuiteClass.newInstance();
+
+ _testResult.addListener(testListener);
+ _testSuite.run(_testResult);
+ _testResult.removeListener(testListener);
+ }
+ catch (Exception exception)
+ {
+ log("Runner Thread: run failed", exception);
+ }
+ catch (Error error)
+ {
+ log("Runner Thread: run failed", error);
+ }
+ }
+ }
+
+ private class BasicTestListener implements TestListener
+ {
+ public void startTest(Test test)
+ {
+ _startTime = System.currentTimeMillis();
+ _failed = false;
+ _error = false;
+ _assertionFailedError = null;
+ _throwable = null;
+ _currentTest = test;
+ }
+
+ public void addError(Test test, Throwable throwable)
+ {
+ _error = true;
+ _throwable = throwable;
+ throwable.printStackTrace(System.out);
+ }
+
+ public void addFailure(Test test, AssertionFailedError assertionFailedError)
+ {
+ _failed = true;
+ _assertionFailedError = assertionFailedError;
+ assertionFailedError.printStackTrace(System.out);
+ }
+
+ public void endTest(Test test)
+ {
+ if (_failed)
+ {
+ FailedTest failedTest = new FailedTest();
+ failedTest.test = test;
+ failedTest.duration = System.currentTimeMillis() - _startTime;
+ failedTest.assertionFailedError = _assertionFailedError;
+ _failedTests.add(failedTest);
+ }
+ else if (_error)
+ {
+ ErrorTest errorTest = new ErrorTest();
+ errorTest.test = test;
+ errorTest.duration = System.currentTimeMillis() - _startTime;
+ errorTest.throwable = _throwable;
+ _errorTests.add(errorTest);
+ }
+ else
+ {
+ PassedTest passedTest = new PassedTest();
+ passedTest.test = test;
+ passedTest.duration = System.currentTimeMillis() - _startTime;
+ _passedTests.add(passedTest);
+ }
+
+ _currentTest = null;
+ }
+
+ private long _startTime = 0;
+ private boolean _failed = false;
+ private boolean _error = false;
+ private AssertionFailedError _assertionFailedError = null;
+ private Throwable _throwable = null;
+ }
+
+ protected static void encode(PrintWriter writer, String string)
+ {
+ if (string != null)
+ {
+ char[] chars = string.toCharArray();
+
+ for (int index = 0; index < chars.length; index++)
+ if (chars[index] == '<')
+ writer.print("<");
+ else if (chars[index] == '>')
+ writer.print(">");
+ else if (chars[index] == '&')
+ writer.print("&");
+ else
+ writer.print(chars[index]);
+ }
+ else
+ writer.print("null");
+ }
+
+ protected List _passedTests = new LinkedList();
+ protected List _failedTests = new LinkedList();
+ protected List _errorTests = new LinkedList();
+ protected Test _currentTest = null;
+ protected String _testSuiteClassName = null;
+ protected RunnerThread _runnerThread = null;
+ protected TestResult _testResult = null;
+ protected TestSuite _testSuite = null;
+
+}
Copied: labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/_TestRunnerXMLServlet.java (from rev 26189, labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/TestRunnerXMLServlet.java)
===================================================================
--- labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/_TestRunnerXMLServlet.java (rev 0)
+++ labs/jbosstm/workspace/bencotton/JBOSSTS_4_6_1_GA/XTS/WS-C/tests/src/com/arjuna/qa/junit/_TestRunnerXMLServlet.java 2009-04-24 20:53:00 UTC (rev 26250)
@@ -0,0 +1,209 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a full listing
+ * of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006,
+ * @author JBoss Inc.
+ */
+package com.arjuna.qa.junit;
+
+import org.dom4j.dom.DOMDocument;
+import org.dom4j.dom.DOMElement;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.CharArrayWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Date;
+import java.util.Iterator;
+
+/**
+ * @author <a href="mailto:istudens at redhat.com">Ivo Studensky</a>
+ * @version $Revision$
+ */
+public class _TestRunnerXMLServlet extends TestRunnerServlet
+{
+
+ @Override
+ protected String getContentType()
+ {
+ return "text/xml";
+ }
+
+ @Override
+ public void doStatus(PrintWriter writer, HttpServletRequest request, HttpServletResponse response)
+ throws ServletException
+ {
+
+ DOMDocument report = new DOMDocument();
+ DOMElement testsuite = new DOMElement("testsuite");
+ report.setRootElement(testsuite);
+ testsuite.addAttribute("name", _testSuiteClassName);
+ testsuite.addAttribute("errors", Integer.toString(_errorTests.size()));
+ testsuite.addAttribute("failures", Integer.toString(_failedTests.size()));
+ testsuite.addAttribute("hostname", request.getServerName());
+ testsuite.addAttribute("tests", Integer.toString((_testResult != null) ? _testResult.runCount() : 0));
+ testsuite.addAttribute("timestamp", new Date().toString());
+
+ DOMElement properties = new DOMElement("properties");
+ testsuite.add(properties);
+ DOMElement status = newPropertyDOMElement("status");
+ properties.add(status);
+ if ((_runnerThread == null) || (! _runnerThread.isAlive()))
+ {
+ if (_passedTests.isEmpty() && _failedTests.isEmpty() && _errorTests.isEmpty())
+ {
+ status.addAttribute("value", "stopped");
+ }
+ else
+ {
+ status.addAttribute("value", "finished");
+ }
+ }
+ else if (_currentTest != null)
+ {
+ status.addAttribute("value", "running");
+ properties.add(newPropertyDOMElement("current-test", _currentTest.toString()));
+ }
+
+ long totalDuration = 0;
+
+ if (! _passedTests.isEmpty())
+ {
+ Iterator passedTestsIterator = _passedTests.iterator();
+ while (passedTestsIterator.hasNext())
+ {
+ PassedTest passedTest = (PassedTest) passedTestsIterator.next();
+ totalDuration += passedTest.duration;
+
+ testsuite.add(newTestcase(
+ passedTest.test.getClass().getName(), passedTest.test.toString(), passedTest.duration));
+ }
+ }
+
+ if (! _failedTests.isEmpty())
+ {
+ Iterator failedTestsIterator = _failedTests.iterator();
+ while (failedTestsIterator.hasNext())
+ {
+ FailedTest failedTest = (FailedTest) failedTestsIterator.next();
+ totalDuration += failedTest.duration;
+
+ CharArrayWriter charArrayWriter = new CharArrayWriter();
+ PrintWriter printWriter = new PrintWriter(charArrayWriter, true);
+ failedTest.assertionFailedError.printStackTrace(printWriter);
+ printWriter.close();
+ charArrayWriter.close();
+
+ testsuite.add(newFailedTestcase(
+ failedTest.test.getClass().getName(), failedTest.test.toString(), failedTest.duration,
+ failedTest.assertionFailedError.getMessage(), charArrayWriter.toString()));
+ }
+ }
+
+ if (! _errorTests.isEmpty())
+ {
+ Iterator errorTestsIterator = _errorTests.iterator();
+ while (errorTestsIterator.hasNext())
+ {
+ ErrorTest errorTest = (ErrorTest) errorTestsIterator.next();
+ totalDuration += errorTest.duration;
+
+ CharArrayWriter charArrayWriter = new CharArrayWriter();
+ PrintWriter printWriter = new PrintWriter(charArrayWriter, true);
+ errorTest.throwable.printStackTrace(printWriter);
+ printWriter.close();
+ charArrayWriter.close();
+
+ System.out.println("charArrayWriter.toString()=" + charArrayWriter.toString());
+ testsuite.add(newErrorTestcase(
+ errorTest.test.getClass().getName(), errorTest.test.toString(), errorTest.duration,
+ errorTest.throwable.getMessage(), charArrayWriter.toString()));
+ }
+ }
+ testsuite.add(new DOMElement("system-out").addCDATA(""));
+ testsuite.add(new DOMElement("system-err").addCDATA(""));
+ // total time of all tests
+ testsuite.addAttribute("time", Float.toString(totalDuration / 1000f));
+
+ XMLWriter outputter = new XMLWriter(writer, OutputFormat.createPrettyPrint());
+ try {
+ outputter.write(testsuite);
+ outputter.close();
+ } catch (IOException e) {
+ throw new ServletException(e);
+ }
+ }
+
+ private DOMElement newPropertyDOMElement(String name)
+ {
+ return newPropertyDOMElement(name, null);
+ }
+
+ private DOMElement newPropertyDOMElement(String name, String value)
+ {
+ DOMElement property = new DOMElement("property");
+ property.addAttribute("name", name);
+ if (value != null)
+ {
+ property.addAttribute("value", value);
+ }
+ return property;
+ }
+
+ private DOMElement newTestcase(String classname, String name, long duration)
+ {
+ return newTestcase(classname, name, duration, null, null, null);
+ }
+
+ private DOMElement newFailedTestcase(String classname, String name, long duration, String failureMessage, String failureDetail)
+ {
+ return newTestcase(classname, name, duration, "junit.framework.AssertionFailedError", failureMessage, failureDetail);
+ }
+
+ private DOMElement newErrorTestcase(String classname, String name, long duration, String failureMessage, String failureDetail)
+ {
+ return newTestcase(classname, name, duration, "junit.framework.throwable", failureMessage, failureDetail);
+ }
+
+ private DOMElement newTestcase(String classname, String name, long duration, String failureMessage, String failureType, String failureDetail)
+ {
+ DOMElement testcase = new DOMElement("testcase");
+ testcase.addAttribute("classname", classname);
+ testcase.addAttribute("name", name);
+ testcase.addAttribute("time", Float.toString(duration / 1000f)); // converts from miliseconds to seconds
+ if (failureMessage != null)
+ {
+ DOMElement failure = new DOMElement("failure");
+ testcase.add(failure);
+ failure.addAttribute("message", failureMessage);
+ if (failureType != null)
+ {
+ failure.addAttribute("type", failureType);
+ }
+ if (failureDetail != null)
+ {
+ failure.addCDATA(failureDetail);
+ }
+ }
+ return testcase;
+ }
+
+}
More information about the jboss-svn-commits
mailing list