[Yanel-commits] rev 25495 - in
public/yanel/trunk/src/resources/testing-control:
src/java/org/wyona/yanel/impl/resources xslt
michi at wyona.com
michi at wyona.com
Tue Jun 26 16:25:01 CEST 2007
Author: michi
Date: 2007-06-26 16:25:01 +0200 (Tue, 26 Jun 2007)
New Revision: 25495
Modified:
public/yanel/trunk/src/resources/testing-control/src/java/org/wyona/yanel/impl/resources/TestingControlResource.java
public/yanel/trunk/src/resources/testing-control/xslt/result2html.xsl
Log:
AJAX added
Modified: public/yanel/trunk/src/resources/testing-control/src/java/org/wyona/yanel/impl/resources/TestingControlResource.java
===================================================================
--- public/yanel/trunk/src/resources/testing-control/src/java/org/wyona/yanel/impl/resources/TestingControlResource.java 2007-06-26 14:16:23 UTC (rev 25494)
+++ public/yanel/trunk/src/resources/testing-control/src/java/org/wyona/yanel/impl/resources/TestingControlResource.java 2007-06-26 14:25:01 UTC (rev 25495)
@@ -22,17 +22,24 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;
+import java.util.Enumeration;
+
import javax.servlet.http.HttpServletRequest;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.dom.DOMSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
import org.w3c.dom.Document;
import org.apache.commons.io.FileUtils;
@@ -44,178 +51,285 @@
import org.apache.tools.ant.types.ZipFileSet;
import org.apache.tools.ant.taskdefs.optional.junit.JUnitTask;
import org.apache.tools.ant.taskdefs.optional.junit.BatchTest;
+import org.apache.xml.resolver.tools.CatalogResolver;
+import org.apache.xml.serializer.Serializer;
import org.wyona.yanel.core.Path;
import org.wyona.yanel.core.Resource;
import org.wyona.yanel.core.ResourceConfiguration;
-import org.wyona.yanel.core.api.attributes.ViewableV1;
+import org.wyona.yanel.core.api.attributes.ViewableV2;
import org.wyona.yanel.core.attributes.viewable.View;
import org.wyona.yanel.core.attributes.viewable.ViewDescriptor;
import org.wyona.yarep.core.NoSuchNodeException;
import org.wyona.yarep.core.Repository;
import org.wyona.yarep.core.RepositoryFactory;
+import org.wyona.yanel.core.serialization.SerializerFactory;
+import org.wyona.yanel.core.source.ResourceResolver;
+import org.wyona.yanel.core.transformation.I18nTransformer2;
+import org.wyona.yanel.core.transformation.XIncludeTransformer;
import org.wyona.yanel.core.util.PathUtil;
import org.wyona.yarep.util.RepoPath;
import org.wyona.yarep.util.YarepUtil;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
/**
*
*/
-public class TestingControlResource extends Resource implements ViewableV1 {
+public class TestingControlResource extends Resource implements ViewableV2 {
private static final String JUNIT_JAR = "yanel-JunitTests.jar";
private static final String HTMLUNIT_JAR = "yanel-HtmlUnitTests.jar";
private static Category log = Category.getInstance(TestingControlResource.class);
-
+ private boolean ajaxBrowser = false;
private File JunitJarLocation;
private File HtmlunitJarLocation;
private File tmpResultDir;
- private String errorMessage;
public TestingControlResource() {
}
- public ViewDescriptor[] getViewDescriptors() {
- ViewDescriptor[] vd = new ViewDescriptor[1];
- vd[0] = new ViewDescriptor("default");
- // NOTE: depends on XSLT ...
- vd[0].setMimeType(null);
- return vd;
+ /**
+ *
+ */
+ public boolean exists() {
+ return true;
}
- public View getView(Path path, String viewId) {
- View defaultView = new View();
- defaultView.setMimeType("application/xml");
- StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
- defaultView.setInputStream(new java.io.StringBufferInputStream(sb.toString()));
- return defaultView;
+ /**
+ *
+ */
+ public long getSize() {
+ return -1;
}
- public View getView(HttpServletRequest request, String viewId) throws Exception {
- Path path = new Path(request.getServletPath());
+ /**
+ *
+ */
+ public String getMimeType(String viewId) {
+ if (viewId != null && viewId.equals("source"))
+ return "application/xml";
+ return "application/xhtml+xml";
+ }
- // the junit and htmlunit jars
- String WEBINFPath = request.getSession().getServletContext().getRealPath("WEB-INF");
- HtmlunitJarLocation = new File(WEBINFPath + File.separator + "lib" + File.separator
- + HTMLUNIT_JAR);
- JunitJarLocation = new File(WEBINFPath + File.separator + "lib" + File.separator
- + JUNIT_JAR);
-
- if (!HtmlunitJarLocation.exists()) {
- errorMessage = errorMessage + "\n HtmlUnit-Tests not found.";
+ /**
+ *
+ */
+ public View getView(String viewId) {
+ if (request.getHeader("User-Agent").indexOf("rv:1.7") < 0) {
+ ajaxBrowser = true;
}
- if (!JunitJarLocation.exists()) {
- errorMessage = errorMessage + "\n JUnit-Tests not found.";
+ try {
+ setLocations();
+ } catch (Exception e) {
+ // sb.append("<p>Could not get the Locations: " + e + "</p>");
+ log.error(e.getMessage(), e);
}
+ View view = new View();
+ String mimeType = getMimeType(viewId);
+ view.setMimeType(mimeType);
- // create tmp-directory to write the tests
- if (!new File(request.getSession().getServletContext().getRealPath("tmp")).exists()) {
- if (!new File(request.getSession().getServletContext().getRealPath("tmp")).mkdir()) {
- errorMessage = errorMessage + "\n Creation of tmp directory faild.";
+ try {
+ org.wyona.yarep.core.Repository repo = getRealm().getRepository();
+
+ if (viewId != null && viewId.equals("source")) {
+ view.setInputStream(new java.io.StringBufferInputStream(getScreen()));
+ view.setMimeType("application/xml");
+ return view;
}
+
+ String[] xsltPath = getXSLTPath(getPath());
+ if (xsltPath != null) {
+
+ // create reader:
+ XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+ CatalogResolver catalogResolver = new CatalogResolver();
+ xmlReader.setEntityResolver(catalogResolver);
+
+ // create xslt transformer:
+ SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance();
+
+ TransformerHandler[] xsltHandlers = new TransformerHandler[xsltPath.length];
+ for (int i = 0; i < xsltPath.length; i++) {
+ xsltHandlers[i] = tf.newTransformerHandler(new StreamSource(repo.getNode(xsltPath[i])
+ .getInputStream()));
+ xsltHandlers[i].getTransformer().setParameter("yanel.path.name",
+ PathUtil.getName(getPath()));
+ xsltHandlers[i].getTransformer().setParameter("yanel.path", getPath());
+ xsltHandlers[i].getTransformer().setParameter("yanel.back2context",
+ PathUtil.backToContext(realm, getPath()));
+ xsltHandlers[i].getTransformer().setParameter("yarep.back2realm",
+ PathUtil.backToRealm(getPath()));
+
+ xsltHandlers[i].getTransformer().setParameter("language",
+ getRequestedLanguage());
+ }
+
+ // create i18n transformer:
+ I18nTransformer2 i18nTransformer = new I18nTransformer2("global",
+ getRequestedLanguage(),
+ getRealm().getDefaultLanguage());
+ i18nTransformer.setEntityResolver(catalogResolver);
+
+ // create xinclude transformer:
+ XIncludeTransformer xIncludeTransformer = new XIncludeTransformer();
+ ResourceResolver resolver = new ResourceResolver(this);
+ xIncludeTransformer.setResolver(resolver);
+
+ // create serializer:
+ Serializer serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ // chain everything together (create a pipeline):
+ xmlReader.setContentHandler(xsltHandlers[0]);
+ for (int i = 0; i < xsltHandlers.length - 1; i++) {
+ xsltHandlers[i].setResult(new SAXResult(xsltHandlers[i + 1]));
+ }
+ xsltHandlers[xsltHandlers.length - 1].setResult(new SAXResult(xIncludeTransformer));
+ xIncludeTransformer.setResult(new SAXResult(i18nTransformer));
+ i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
+ serializer.setOutputStream(baos);
+
+ // execute pipeline:
+ xmlReader.parse(new InputSource(new java.io.StringBufferInputStream(getScreen())));
+
+ // write result into view:
+ view.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
+ return view;
+ } else {
+ log.debug("Mime-Type: " + mimeType);
+ view.setInputStream(new java.io.StringBufferInputStream(getScreen()));
+ return view;
+ }
+ } catch (Exception e) {
+ log.error(e + " (" + getPath() + ", " + getRealm() + ")", e);
}
+ view.setInputStream(new java.io.StringBufferInputStream(getScreen()));
+ return view;
+ }
- String submit = request.getParameter("submit");
- String type = request.getParameter("type");
- String archivedResults = request.getParameter("archived-results");
- String[] testnames = request.getParameterValues("testnames");
+ /**
+ *
+ */
+ public ViewDescriptor[] getViewDescriptors() {
+ ViewDescriptor[] vd = new ViewDescriptor[2];
+ vd[0] = new ViewDescriptor("default");
+ vd[0].setMimeType(getMimeType(null));
+ vd[1] = new ViewDescriptor("source");
+ vd[1].setMimeType(getMimeType("source"));
+ return vd;
+ }
- View defaultView = new View();
- if (errorMessage != null) {
- return error();
- }
- if(request.getSession().getAttribute("tmpResultDir") != null){
- return showProgress(path, defaultView);
- }
- if (archivedResults != null) {
- return showArchive(path, defaultView, archivedResults);
- }
- if (submit != null) {
- if (testnames != null) {
- return executeTests(path, defaultView, testnames);
+ /**
+ * Flow
+ */
+ private String getScreen() {
+ StringBuffer sbContent = new StringBuffer();
+ Enumeration parameters = request.getParameterNames();
+ if (request.getSession().getAttribute("tmpResultDir") != null) {
+ if (request.getParameterValues("ajaxshowprogress") != null) {
+ return showProgress().toString();
+ } else {
+ sbContent.append(showProgress());
}
- return plainRequest(path, defaultView);
+ } else if (!parameters.hasMoreElements()) {
+ sbContent.append(getPlainRequest());
} else {
-
- return plainRequest(path, defaultView);
+ if (request.getParameterValues("testnames") != null) {
+ if (request.getParameterValues("ajaxexecutetest") != null) {
+ return executeTests().toString();
+ }else {
+ sbContent.append(executeTests());
+ }
+ } else {
+ log.info("Fallback ...");
+ sbContent.append(getPlainRequest());
+ }
}
- }
- private View plainRequest(Path path, View defaultView) throws Exception,
- TransformerConfigurationException, TransformerFactoryConfigurationError,
- NoSuchNodeException, TransformerException {
- Repository contentRepo;
- RepoPath rp = contentRepo(path);
- contentRepo = rp.getRepo();
-
StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
- sb.append("<head>");
- sb.append("<title>Testing Control</title>");
+ sb.append("<head><title>Testing Control</title>");
+ if (request.getSession().getAttribute("tmpResultDir") != null && !ajaxBrowser) {
+ sb.append("<meta http-equiv=\"refresh\" content=\"5; URL=\"/>");
+ }
+ sb.append("<link rel=\"stylesheet\" type=\"text/css\" href=\""
+ + PathUtil.getGlobalHtdocsPath(this) + "yanel-css/progressBar.css\"/>");
+ sb.append("<script src=\"" + PathUtil.getGlobalHtdocsPath(this)
+ + "yanel-js/prototype.js\" type=\"text/javascript\"></script>");
+ sb.append("<script src=\"" + PathUtil.getGlobalHtdocsPath(this)
+ + "yanel-js/progressBar.js\" type=\"text/javascript\"></script>");
+ sb.append("<script src=\"" + PathUtil.getResourcesHtdocsPath(this)
+ + "js/ajaxexecutetests.js\" type=\"text/javascript\"></script>");
+ sb.append("<link rel=\"stylesheet\" type=\"text/css\" href=\""
+ + PathUtil.getResourcesHtdocsPath(this) + "css/testingcontroler.css\"/>");
sb.append("</head>");
sb.append("<body>");
+ sb.append("<span id=\"yanelprogressbarph\"/>");
+ sb.append("<div id=\"ajaxreplace\">");
+ sb.append(sbContent);
+ sb.append("</div>");
+ sb.append("</body>");
+ sb.append("</html>");
+ return sb.toString();
+ }
+
+ private StringBuffer getPlainRequest() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("<form method=\"post\">");
+ sb.append("<h3>HtmlUnit Tests</h3>");
sb.append("<ul id=\"htmlunit\">");
String[] allHtmlUnitTestNames = getAllTestNames("htmlunit");
-
for (int i = 0; i < allHtmlUnitTestNames.length; i++) {
- sb.append("<li title=\""
- + allHtmlUnitTestNames[i].substring(allHtmlUnitTestNames[i].lastIndexOf("/") + 1)
- + "\">" + allHtmlUnitTestNames[i] + "</li>");
+ String title = allHtmlUnitTestNames[i].substring(allHtmlUnitTestNames[i].lastIndexOf("/") + 1)
+ .replaceAll(".class", "");
+ sb.append("<li title=\"" + "\">");
+ sb.append(title);
+ sb.append("<input type=\"checkbox\" name=\"testnames\" value=\""
+ + allHtmlUnitTestNames[i] + "\"/>");
+ sb.append("</li>");
}
-
sb.append("</ul>");
+ sb.append("<hr/>");
+ sb.append("<h3>JUnit Tests</h3>");
sb.append("<ul id=\"junit\">");
String[] allJUnitTestNames = getAllTestNames("junit");
for (int i = 0; i < allJUnitTestNames.length; i++) {
- sb.append("<li title=\""
- + allJUnitTestNames[i].substring(allJUnitTestNames[i].lastIndexOf("/") + 1)
- + "\">" + allJUnitTestNames[i] + "</li>");
+ String title = allJUnitTestNames[i].substring(allJUnitTestNames[i].lastIndexOf("/") + 1)
+ .replaceAll(".class", "");
+ sb.append("<li title=\"" + title + "\">");
+ sb.append(title);
+ sb.append("<input type=\"checkbox\" name=\"testnames\" value=\"" + allJUnitTestNames[i]
+ + "\"/>");
+ sb.append("</li>");
}
sb.append("</ul>");
- sb.append("</body>");
- sb.append("</html>");
-
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- File result2htmlXsltFile = org.wyona.commons.io.FileUtil.file(rtd.getConfigFile()
- .getParentFile()
- .getAbsolutePath(), "xslt" + File.separator + "chooseTest.xsl");
- Transformer transResult2html = TransformerFactory.newInstance()
- .newTransformer(new StreamSource(result2htmlXsltFile));
- transResult2html.transform(new StreamSource(new java.io.StringBufferInputStream(sb.toString())),
- new StreamResult(byteArrayOutputStream));
-
- Transformer transformer = globalTransformer(path, contentRepo);
- // TODO: Is this the best way to generate an InputStream from an
- // OutputStream?
- java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
- transformer.transform(new StreamSource(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())),
- new StreamResult(baos));
-
- defaultView.setMimeType("application/xhtml+xml");
- defaultView.setInputStream(new java.io.ByteArrayInputStream(baos.toByteArray()));
- return defaultView;
+ if (ajaxBrowser) {
+ sb.append("<input type=\"hidden\" name=\"yanel.resource.viewid\" value=\"source\"/>");
+ sb.append("<input type=\"hidden\" name=\"ajaxexecutetest\" value=\"true\"/>");
+ sb.append("<input type=\"button\" name=\"submit\" value=\"Test\" onclick=\"ajaxexecutetests();\" />");
+ } else {
+ sb.append("<input type=\"submit\" name=\"submit\" value=\"Test\"/>");
+ }
+ sb.append("</form>");
+ return sb;
}
- private View executeTests(Path path, View defaultView, String[] testnames) throws Exception,
- TransformerConfigurationException, TransformerFactoryConfigurationError,
- NoSuchNodeException, TransformerException {
- Repository contentRepo;
- RepoPath rp = contentRepo(path);
- contentRepo = rp.getRepo();
-
+ private StringBuffer executeTests() {
+ StringBuffer sb = new StringBuffer();
+ String[] testnames = request.getParameterValues("testnames");
// prepare tmpResultDir
if (request.getSession().getAttribute("tmpResultDir") == null) {
- String uuid = new java.rmi.server.UID().toString().replaceAll(":","");
+ String uuid = new java.rmi.server.UID().toString().replaceAll(":", "");
tmpResultDir = new File(request.getSession().getServletContext().getRealPath("tmp"
+ File.separator + "test-results-" + uuid));
request.getSession().setAttribute("tmpResultDir", tmpResultDir);
} else {
tmpResultDir = (File) request.getSession().getAttribute("tmpResultDir");
- }
-
+ }
request.getSession().setAttribute("exectime", getTime());
- request.getSession().setAttribute("numberOfTests", ""+testnames.length);
-
+ request.getSession().setAttribute("numberOfTests", "" + testnames.length);
// delete the resultdir before making new tests
tmpResultDir.mkdir();
Runnable runtest = new ExecuteTests(testnames,
@@ -223,35 +337,27 @@
HtmlunitJarLocation,
tmpResultDir);
new Thread(runtest).start();
- return showProgress(path, defaultView);
+ sb.append(showProgress());
+ return sb;
}
- private View showProgress(Path path, View defaultView) throws Exception,
- TransformerConfigurationException, TransformerFactoryConfigurationError,
- NoSuchNodeException, TransformerException{
- Repository contentRepo;
- RepoPath rp = contentRepo(path);
- contentRepo = rp.getRepo();
-
- //get tmpResultDir from session
+ private StringBuffer showProgress() {
+ StringBuffer sb = new StringBuffer();
+ // get tmpResultDir from session
tmpResultDir = (File) request.getSession().getAttribute("tmpResultDir");
-
- //number of executed tests
- int numberOfTests = Integer.parseInt((String) request.getSession().getAttribute("numberOfTests"));
-
+ // number of executed tests
+ int numberOfTests = Integer.parseInt((String) request.getSession()
+ .getAttribute("numberOfTests"));
String resultName = request.getSession().getAttribute("exectime") + "-tests.xml";
-
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-
if (tmpResultDir.list().length < numberOfTests) {
// geting the test results
- DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Document result = builder.newDocument();
-
- Project project = new Project();
-
// aggregate all tests in the tmp dir
try {
+ DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document result = builder.newDocument();
+ Project project = new Project();
+
ResultAggregator junitreport = new ResultAggregator();
junitreport.setTaskName("JUnitReport");
junitreport.setProject(project);
@@ -267,31 +373,32 @@
junitreport.init();
// get the result to show for this request
result = junitreport.getDocument();
+
+ File result2htmlXsltFile = org.wyona.commons.io.FileUtil.file(rtd.getConfigFile()
+ .getParentFile()
+ .getAbsolutePath(), "xslt" + File.separator + "result2html.xsl");
+ Transformer transResult2html = TransformerFactory.newInstance()
+ .newTransformer(new StreamSource(result2htmlXsltFile));
+ transResult2html.setParameter("testing.result.title", "stillTesting");
+ transResult2html.setParameter("testing.number.requested.tests", "" + numberOfTests);
+ transResult2html.transform(new DOMSource(result),
+ new StreamResult(byteArrayOutputStream));
} catch (Exception e) {
- log.error(e);
+ sb.append("<p>Could not create folder. Exception: " + e + "</p>");
+ log.error(e.getMessage(), e);
}
- File result2htmlXsltFile = org.wyona.commons.io.FileUtil.file(rtd.getConfigFile()
- .getParentFile()
- .getAbsolutePath(), "xslt" + File.separator + "result2html.xsl");
- Transformer transResult2html = TransformerFactory.newInstance()
- .newTransformer(new StreamSource(result2htmlXsltFile));
- transResult2html.setParameter("testing.result.title", "stillTesting");
- transResult2html.setParameter("testing.number.requested.tests", ""+numberOfTests);
- transResult2html.transform(new DOMSource(result),
- new StreamResult(byteArrayOutputStream));
-
} else {
request.getSession().removeAttribute("tmpResultDir");
request.getSession().removeAttribute("exectime");
request.getSession().removeAttribute("numberOfTests");
-
- // geting the test results
- DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Document result = builder.newDocument();
- Project aggregatorproject = new Project();
- // aggregate all tests in the tmp dir
+
try {
+ // geting the test results
+ DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document result = builder.newDocument();
+ Project aggregatorproject = new Project();
+ // aggregate all tests in the tmp dir
ResultAggregator junitreport = new ResultAggregator();
junitreport.setTaskName("JUnitReport");
junitreport.setProject(aggregatorproject);
@@ -307,120 +414,65 @@
junitreport.init();
// get the result to show for this request
result = junitreport.getDocument();
- } catch (Exception e) {
- log.error(e);
- }
- // write test result to repo
- OutputStream out = contentRepo.getOutputStream(new Path("/test-results-archive/"
- + resultName));
- javax.xml.transform.TransformerFactory.newInstance()
- .newTransformer()
- .transform(new javax.xml.transform.dom.DOMSource(result),
- new javax.xml.transform.stream.StreamResult(out));
- out.close();
-
- //delete the test dir
- FileUtils.deleteDirectory(tmpResultDir);
-
- File result2htmlXsltFile = org.wyona.commons.io.FileUtil.file(rtd.getConfigFile()
- .getParentFile()
- .getAbsolutePath(), "xslt" + File.separator + "result2html.xsl");
- Transformer transResult2html = TransformerFactory.newInstance()
- .newTransformer(new StreamSource(result2htmlXsltFile));
- transResult2html.setParameter("testing.result.title", "testDone");
- transResult2html.transform(new DOMSource(result),
- new StreamResult(byteArrayOutputStream));
- }
+ // write test result to repo
+ org.wyona.yarep.core.Repository Repo = this.getRealm().getRepository();
+ org.wyona.commons.io.Path newPath = new org.wyona.commons.io.Path("/test-results-archive/"
+ + resultName);
+ log.error("DEBUG: " + newPath);
+ org.wyona.yanel.core.util.YarepUtil.addNodes(Repo,
+ newPath.toString(),
+ org.wyona.yarep.core.NodeType.RESOURCE);
- Transformer transformer = globalTransformer(path, contentRepo);
- // TODO: Is this the best way to generate an InputStream from an
- // OutputStream?
- java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
- transformer.transform(new StreamSource(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())),
- new StreamResult(baos));
- defaultView.setMimeType("application/xhtml+xml");
- defaultView.setInputStream(new java.io.ByteArrayInputStream(baos.toByteArray()));
- return defaultView;
- }
+ OutputStream out = Repo.getNode(newPath.toString()).getOutputStream();
+ javax.xml.transform.TransformerFactory.newInstance()
+ .newTransformer()
+ .transform(new javax.xml.transform.dom.DOMSource(result),
+ new javax.xml.transform.stream.StreamResult(out));
+ out.close();
- private View showArchive(Path path, View defaultView, String archivedResults) throws Exception,
- TransformerConfigurationException, TransformerFactoryConfigurationError,
- NoSuchNodeException, TransformerException {
- Repository contentRepo;
- RepoPath rp = contentRepo(path);
- contentRepo = rp.getRepo();
+ // delete the test dir
+ FileUtils.deleteDirectory(tmpResultDir);
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- File result2htmlXsltFile = org.wyona.commons.io.FileUtil.file(rtd.getConfigFile()
- .getParentFile()
- .getAbsolutePath(), "xslt" + File.separator + "result2html.xsl");
- Transformer transResult2html = TransformerFactory.newInstance()
- .newTransformer(new StreamSource(result2htmlXsltFile));
- transResult2html.setParameter("testing.result.title",
- archivedResults.substring(archivedResults.lastIndexOf("/") + 1,
- archivedResults.length()));
-
- InputStream inputStream = rp.getRepo()
- .getInputStream(new org.wyona.yarep.core.Path(archivedResults));
- transResult2html.transform(new StreamSource(inputStream),
- new StreamResult(byteArrayOutputStream));
-
- Transformer transformer = globalTransformer(path, contentRepo);
- // TODO: Is this the best way to generate an InputStream from an
- // OutputStream?
- java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
- transformer.transform(new StreamSource(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())),
- new StreamResult(baos));
- defaultView.setMimeType("application/xhtml+xml");
- defaultView.setInputStream(new java.io.ByteArrayInputStream(baos.toByteArray()));
- return defaultView;
+ File result2htmlXsltFile = org.wyona.commons.io.FileUtil.file(rtd.getConfigFile()
+ .getParentFile()
+ .getAbsolutePath(), "xslt" + File.separator + "result2html.xsl");
+ Transformer transResult2html = TransformerFactory.newInstance()
+ .newTransformer(new StreamSource(result2htmlXsltFile));
+ transResult2html.setParameter("testing.result.title", "testDone");
+ transResult2html.transform(new DOMSource(result),
+ new StreamResult(byteArrayOutputStream));
+ } catch (Exception e) {
+ sb.append("<p>Could not create folder. Exception: " + e + "</p>");
+ log.error(e.getMessage(), e);
+ }
+ }
+ sb.append(byteArrayOutputStream);
+ return sb;
}
- private RepoPath contentRepo(Path path) throws Exception {
- return new YarepUtil().getRepositoryPath(new org.wyona.yarep.core.Path(path.toString()),
- getRepositoryFactory());
- }
+ private void setLocations() throws Exception {
+ String WEBINFPath = request.getSession().getServletContext().getRealPath("WEB-INF");
+ HtmlunitJarLocation = new File(WEBINFPath + File.separator + "lib" + File.separator
+ + HTMLUNIT_JAR);
+ JunitJarLocation = new File(WEBINFPath + File.separator + "lib" + File.separator
+ + JUNIT_JAR);
- private Transformer globalTransformer(Path path, Repository repo) throws Exception,
- TransformerConfigurationException {
- RepoPath rp = contentRepo(path);
- if (getXSLTPath(path) != null) {
- Transformer transformer = TransformerFactory.newInstance()
- .newTransformer(new StreamSource(repo.getInputStream(getXSLTPath(path))));
- transformer.setParameter("yanel.path.name", path.getName());
- transformer.setParameter("yanel.path", path.toString());
- transformer.setParameter("yanel.back2context", PathUtil.backToContext(realm, getPath()));
- transformer.setParameter("yarep.back2realm", PathUtil.backToRealm(getPath()));
- return transformer;
- } else {
- Transformer transformer = TransformerFactory.newInstance().newTransformer();
- return transformer;
+ if (!HtmlunitJarLocation.exists()) {
+ throw new Exception("HtmlUnit-Tests not found");
}
- }
+ if (!JunitJarLocation.exists()) {
+ throw new Exception("JUnit-Tests not found");
+ }
- /**
- * Get XSLTPath returns the path to the configured xslt or null
- * @param path
- * @return Path
- */
- private Path getXSLTPath(Path path) {
- try {
- return new Path(getResourceConfigProperty("xslt"));
- } catch (Exception e) {
- log.info("No XSLT Path within: " + path);
- return null;
- }
+ // create tmp-directory to write the tests
+ if (!new File(request.getSession().getServletContext().getRealPath("tmp")).exists()) {
+ if (!new File(request.getSession().getServletContext().getRealPath("tmp")).mkdir()) {
+ throw new Exception("Creation of tmp directory faild.");
+ }
+ }
}
-
- protected RepositoryFactory getRepositoryFactory() {
- return yanel.getRepositoryFactory("DefaultRepositoryFactory");
- }
- protected RepositoryFactory getRTIRepositoryFactory() {
- return yanel.getRepositoryFactory("RTIRepositoryFactory");
- }
-
/**
* get Tests.
* @param htmlOrJunit type of tests should be selected. can be htmlunit or junit.
@@ -466,26 +518,13 @@
}
/**
- * get an error screen
- * @return a view with an error screen
+ * Get XSLT path
*/
- private View error() {
- View defaultView = new View();
- StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
- sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
- sb.append("<head>");
- sb.append("<title>Testing Control</title>");
- sb.append("</head>");
- sb.append("<body>");
- sb.append("<div id=\"contenBody\">");
- sb.append("<h1>Testing Control, something is wrong:</h1>");
- sb.append(errorMessage);
- sb.append("</div>");
- sb.append("</body>");
- sb.append("</html>");
-
- defaultView.setMimeType("application/xhtml+xml");
- defaultView.setInputStream(new java.io.StringBufferInputStream(sb.toString()));
- return defaultView;
+ private String[] getXSLTPath(String path) throws Exception {
+ String[] xsltPath = getResourceConfigProperties("xslt");
+ if (xsltPath != null)
+ return xsltPath;
+ log.info("No XSLT Path within: " + path);
+ return null;
}
}
Modified: public/yanel/trunk/src/resources/testing-control/xslt/result2html.xsl
===================================================================
--- public/yanel/trunk/src/resources/testing-control/xslt/result2html.xsl 2007-06-26 14:16:23 UTC (rev 25494)
+++ public/yanel/trunk/src/resources/testing-control/xslt/result2html.xsl 2007-06-26 14:25:01 UTC (rev 25495)
@@ -13,16 +13,8 @@
<xsl:variable name="testcase.failure.list" select="$testcase.list/failure"/>
<xsl:template match="/">
- <html>
- <head>
- <xsl:if test="$testing.result.title = 'stillTesting'">
- <meta http-equiv="refresh" content="5; URL="/>
- </xsl:if>
- <title>Testing Results</title>
- </head>
- <body>
<div id="contenBody">
- <h1>
+ <h1 id="{$testing.result.title}">
<xsl:choose>
<xsl:when test="$testing.result.title = 'stillTesting'">
Tests are running...
@@ -45,9 +37,7 @@
Errors: <xsl:value-of select="count($testcase.error.list)"/></p>
<hr/>
<xsl:apply-templates select="//testsuite"/>
- </div>
- </body>
- </html>
+ </div>
</xsl:template>
<xsl:template match="testsuite">
More information about the Yanel-commits
mailing list