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(); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]