/*
* Copyright 2009 Niclas Hedhman.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.qi4j.test.gae;
import org.junit.Test;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public final class GaeTestServlet
extends HttpServlet
{
private UnitTests unitTests;
@Override
public void init()
throws ServletException
{
System.out.println( "Starting GAE EntityStore UnitTests" );
try
{
unitTests = new UnitTests();
unitTests.setUp();
unitTests.init();
}
catch( Exception e )
{
throw new ServletException( "Initialization Failed.", e );
}
}
@Override
public void destroy()
{
try
{
unitTests.tearDown();
}
catch( Exception e )
{
e.printStackTrace();
}
}
@Override
protected void doGet( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException
{
StringBuffer buffer = new StringBuffer();
Method[] methods = UnitTests.class.getMethods();
for( Method m : methods )
{
Test annot = m.getAnnotation( Test.class );
if( annot != null && Modifier.isPublic( m.getModifiers() ) )
{
try
{
long t0 = System.currentTimeMillis();
m.invoke( unitTests );
long time = System.currentTimeMillis() - t0;
add( buffer, m.getName() + " success. " + time + "ms.", true, null );
}
catch( InvocationTargetException e )
{
add( buffer, m.getName() + " threw an Exception.", false, e.getTargetException() );
}
catch( IllegalAccessException e )
{
e.printStackTrace(); // Can not happen?
}
}
}
PrintWriter pw = resp.getWriter();
pw.print( "<html><body><h1>Qi4j Entity Store Unit Tests</h1>" );
pw.print( buffer );
pw.print( "</body></html>" );
}
private void add( StringBuffer out, String message, boolean success, Throwable exception )
{
if( success )
{
out.append( "<p style=\"color:green;\">" );
out.append( message );
out.append( "</p>" );
}
else
{
StringWriter trace = new StringWriter();
PrintWriter pw = new PrintWriter( trace );
exception.printStackTrace( pw );
pw.flush();
pw.close();
out.append( "<p style=\"color:red;\">" );
out.append( message );
out.append( "</p><pre><code>" );
out.append( trace );
out.append( "</code></pre>" );
}
}
}