You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/01/20 21:14:28 UTC
cvs commit: jakarta-tomcat/src/admin/WEB-INF/classes/tadm AntServletLogger.java GTestTEI.java GTestTag.java
costin 01/01/20 12:14:28
Modified: src/admin/WEB-INF admin.tld
Added: src/admin/WEB-INF/classes/tadm AntServletLogger.java
GTestTEI.java GTestTag.java
Log:
Added a new admin tag that runs a GTest test ( using ant as a driver -
not easy since ant has now a lot of private methods that makes embedding it
a bit hard, we may need a special driver - but what's important is to
follow the "ant patterns" for introspection)
Work in progress.
Revision Changes Path
1.3 +25 -0 jakarta-tomcat/src/admin/WEB-INF/admin.tld
Index: admin.tld
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/admin.tld,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- admin.tld 2000/12/27 21:41:26 1.2
+++ admin.tld 2001/01/20 20:14:27 1.3
@@ -76,4 +76,29 @@
</tag>
+
+
+ <tag>
+ <name>gtest</name>
+ <tagclass>tadm.GTestTag</tagclass>
+ <teiclass>tadm.GTestTEI</teiclass>
+ <info>
+ Run a GTest-based test suite.
+ </info>
+ <attribute>
+ <name>testFile</name>
+ <required>true</required>
+ </attribute>
+ <attribute>
+ <name>testApp</name>
+ <required>false</required>
+ </attribute>
+ <attribute>
+ <name>target</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+
</taglib>
1.1 jakarta-tomcat/src/admin/WEB-INF/classes/tadm/AntServletLogger.java
Index: AntServletLogger.java
===================================================================
package tadm;
import org.apache.tools.ant.*;
import java.io.*;
import javax.servlet.http.*;
public class AntServletLogger implements BuildLogger {
protected java.io.Writer out;
protected java.io.PrintWriter err;
protected int msgOutputLevel;
private long startTime;
protected static String lSep = System.getProperty("line.separator");
protected boolean emacsMode = false;
public AntServletLogger() {
}
public void setMessageOutputLevel(int level) {
this.msgOutputLevel = level;
}
public void setWriter(java.io.Writer output) {
this.out = output;
this.err = new java.io.PrintWriter(output);
}
public void setEmacsMode(boolean emacsMode) {
this.emacsMode = emacsMode;
}
public void setOutputPrintStream(PrintStream output) {
System.out.println("What the heck ");
}
public void setErrorPrintStream(PrintStream err) {
System.out.println("What the heck ");
}
public void buildStarted(BuildEvent event) {
startTime = System.currentTimeMillis();
}
public void buildFinished(BuildEvent event) {
try {
Throwable error = event.getException();
if (error == null) {
out.write(lSep + "BUILD SUCCESSFUL");
}
else {
err.write(lSep + "BUILD FAILED" + lSep);
if (error instanceof BuildException) {
err.write(error.toString());
Throwable nested = ((BuildException)error).getException();
if (nested != null) {
nested.printStackTrace(err);
}
}
else {
error.printStackTrace(err);
}
}
out.write(lSep + "Total time: " +
(System.currentTimeMillis() - startTime));
out.flush();
} catch( IOException ex ) {
ex.printStackTrace();
}
}
public void targetStarted(BuildEvent event) {
try {
out.write("<h3>"+ event.getTarget().getName() + "</h3>");
out.flush();
} catch(IOException ex ) {
ex.printStackTrace();
}
}
public void targetFinished(BuildEvent event) {
try {
out.write("<hr>");
out.flush();
} catch(IOException ex ) {
ex.printStackTrace();
}
}
public void taskStarted(BuildEvent event) {
}
public void taskFinished(BuildEvent event) {
}
public void messageLogged(BuildEvent event) {
try {
if( event.getPriority() > 2 )
return;
out.write("\n<br>");
// Print the message
String msg=event.getMessage();
if( msg.startsWith( "ERROR" )) {
out.write("<font color='red'>");
}
if( msg.startsWith("GOT" )) {
out.write("<pre>");
}
if( msg.startsWith("FAIL" )) {
out.write("</pre>");
}
out.write(event.getMessage());
if( msg.startsWith( "ERROR" )) {
out.write("</font>");
}
out.flush();
} catch(IOException ex ) {
ex.printStackTrace();
}
}
}
1.1 jakarta-tomcat/src/admin/WEB-INF/classes/tadm/GTestTEI.java
Index: GTestTEI.java
===================================================================
package tadm;
import java.util.Vector;
import java.util.Enumeration;
import java.io.File;
import java.net.URL;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import org.apache.tomcat.core.Request;
import org.apache.tomcat.core.Context;
import org.apache.tomcat.core.ContextManager;
import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.TagExtraInfo;
import javax.servlet.jsp.tagext.VariableInfo;
public class GTestTEI extends TagExtraInfo {
public VariableInfo[] getVariableInfo(TagData data) {
return (new VariableInfo[] {
new VariableInfo("gtestSuccessCount",
"java.lang.Integer",
true, VariableInfo.AT_BEGIN),
new VariableInfo("gtestErrorCount",
"java.lang.Integer",
true, VariableInfo.AT_BEGIN),
new VariableInfo("gtestErrors",
"java.util.Vector",
true, VariableInfo.AT_BEGIN)
});
}
}
1.1 jakarta-tomcat/src/admin/WEB-INF/classes/tadm/GTestTag.java
Index: GTestTag.java
===================================================================
package tadm;
import java.util.Vector;
import java.util.Enumeration;
import java.io.*;
import java.net.URL;
import javax.servlet.http.*;
import javax.servlet.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import org.apache.tools.ant.*;
/**
* This tag will run a GTest-based test suite.
*
*/
public class GTestTag extends TagSupport {
PageContext pageContext;
public GTestTag() {}
public int doStartTag() throws JspException {
try {
HttpServletRequest req=(HttpServletRequest)pageContext.
getRequest();
ServletContext thisCtx=pageContext.getServletConfig().
getServletContext();
// the admin can get other contexts, we are trusted
ServletContext targetCtx=(testApp==null) ? thisCtx:
thisCtx.getContext( testApp );
String base=targetCtx.getRealPath("/");
runTest( base );
//pageContext.setAttribute("cm", cm);
} catch (Exception ex ) {
ex.printStackTrace();
}
return EVAL_BODY_INCLUDE;
}
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
public void setPageContext(PageContext pctx ) {
this.pageContext=pctx;
}
public void setParent( Tag parent ) {
super.setParent( parent);
}
public void release() {
}
//-------------------- Properties --------------------
String testFileName;
String target;
String testApp;
/** Set the name of the test.xml, relative to the base dir.
* For example, /WEB-INF/test-tomcat.xml
*/
public void setTestFile( String s ) {
testFileName=s;
}
/** Set the target - a subset of tests to be run
*/
public void setTarget( String s ) {
target=s;
}
/** The application containing the test file
* ( if not set assume the test file is local to /admin app.
*/
public void setTestApp( String s ) {
testApp=s;
}
// -------------------- Implementation methods --------------------
private void runTest( String base) {
try {
File testFile=new File( base + testFileName);
Project project=new Project();
AntServletLogger log=new AntServletLogger();
log.setWriter( pageContext.getResponse().getWriter());
project.addBuildListener( log );
project.init();
project.setUserProperty( "ant.file", testFile.toString());
// XXX
project.setUserProperty( "gdir", base + "/Golden");
ProjectHelper.configureProject( project, testFile );
Vector targets=new Vector();
if( target==null ) target="client";
targets.addElement( target );
project.executeTargets( targets );
} catch( Exception ex ) {
ex.printStackTrace();
}
}
}