From 5a97a919ff5faf562878a47a269de096ed77645a Mon Sep 17 00:00:00 2001 From: Maxime Sinclair Date: Wed, 23 Feb 2011 15:51:38 +0100 Subject: [PATCH] A TestSuite and new test cases --- .../plantuml/servlet/AllTests.java | 17 ++++ .../plantuml/servlet/TestForm.java | 78 ++++++++++++------- .../plantuml/servlet/TestImage.java | 35 +++++++++ .../plantuml/servlet/TestUtils.java | 40 ++++++++++ 4 files changed, 142 insertions(+), 28 deletions(-) create mode 100644 test/src/net/sourceforge/plantuml/servlet/AllTests.java create mode 100644 test/src/net/sourceforge/plantuml/servlet/TestImage.java create mode 100644 test/src/net/sourceforge/plantuml/servlet/TestUtils.java diff --git a/test/src/net/sourceforge/plantuml/servlet/AllTests.java b/test/src/net/sourceforge/plantuml/servlet/AllTests.java new file mode 100644 index 0000000..ad6f081 --- /dev/null +++ b/test/src/net/sourceforge/plantuml/servlet/AllTests.java @@ -0,0 +1,17 @@ +package net.sourceforge.plantuml.servlet; + +import junit.framework.Test; +import junit.framework.TestSuite; + +public class AllTests extends TestSuite { + + public static Test suite() { + TestSuite suite = new TestSuite(AllTests.class.getName()); + //$JUnit-BEGIN$ + suite.addTestSuite(TestForm.class); + suite.addTestSuite(TestImage.class); + //$JUnit-END$ + return suite; + } + +} diff --git a/test/src/net/sourceforge/plantuml/servlet/TestForm.java b/test/src/net/sourceforge/plantuml/servlet/TestForm.java index f6c222d..5953eb6 100644 --- a/test/src/net/sourceforge/plantuml/servlet/TestForm.java +++ b/test/src/net/sourceforge/plantuml/servlet/TestForm.java @@ -1,6 +1,6 @@ package net.sourceforge.plantuml.servlet; -import junit.framework.*; +import junit.framework.TestCase; import com.meterware.httpunit.*; public class TestForm extends TestCase { @@ -10,33 +10,52 @@ public class TestForm extends TestCase { * with the Bob --> Alice sample */ public void testWelcomePage() throws Exception { - WebConversation conversation = new WebConversation(); - WebRequest request = new GetMethodWebRequest( "http://localhost/plantuml/" ); - WebResponse response = tryGetResponse(conversation, request ); - + WebConversation conversation = new WebConversation(); + WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()); + WebResponse response = TestUtils.tryGetResponse(conversation, request ); + // Analyze response WebForm forms[] = response.getForms(); assertEquals( 2, forms.length ); assertEquals( "url", forms[1].getParameterNames()[0] ); - FormControl urlInput = forms[1].getParameter("url").getControl(); - assertEquals( "http://localhost:80/plantuml/img/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000", - forms[1].getParameterValue("url")); - assertEquals( "INPUT", urlInput.getTagName()); + assertTrue( forms[1].getParameterValue("url").endsWith("/img/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000")); // Ensure the generated image is present assertEquals( 1, response.getImages().length); } + /** + * Verifies that the version image is generated + */ + public void testVersion() throws Exception { + WebConversation conversation = new WebConversation(); + // Fill the form and submit it + WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()); + WebResponse response = TestUtils.tryGetResponse(conversation, request ); + WebForm formUMLText = response.getForms()[0]; + formUMLText.setParameter("text", "version"); + response = formUMLText.submit(); + // Analyze response + WebForm forms[] = response.getForms(); + assertEquals( 2, forms.length ); + // Ensure the Text field is correct + assertEquals( "version", forms[0].getParameterValue("text")); + // Ensure the URL field is correct + assertTrue( forms[1].getParameterValue("url").endsWith("/img/AqijAixCpmC0")); + // Ensure the image is present + assertEquals( 1, response.getImages().length); + } + /** * Verifies that when the UML text is empty, no image is generated */ public void testEmptyText() throws Exception { - WebConversation conversation = new WebConversation(); + WebConversation conversation = new WebConversation(); // Fill the form and submit it - WebRequest request = new GetMethodWebRequest( "http://localhost/plantuml/form" ); - WebResponse response = tryGetResponse(conversation, request ); + WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()); + WebResponse response = TestUtils.tryGetResponse(conversation, request ); WebForm formUMLText = response.getForms()[0]; formUMLText.setParameter("text", ""); - response = tryGetResponse( conversation, formUMLText.getRequest()); + response = formUMLText.submit(); // Analyze response WebForm forms[] = response.getForms(); assertEquals( 2, forms.length ); @@ -49,22 +68,25 @@ public class TestForm extends TestCase { } /** - * try getting a response for the given Conversation and Request - * show an error message if a 404 error appears - * @param conversation - the conversation to use - * @param request - * @return the response - * @throws an Exception if getting the response fails + * Verifies that when the encoded URL is empty, the default image is generated */ - public WebResponse tryGetResponse(WebConversation conversation, WebRequest request) throws Exception { - WebResponse response=null; - try { - response = conversation.getResponse( request ); - } catch (HttpNotFoundException nfe) { - System.err.println("The URL '"+request.getURL()+"' is not active any more"); - throw nfe; - } - return response; + public void testEmptyUrl() throws Exception { + WebConversation conversation = new WebConversation(); + // Fill the form and submit it + WebRequest request = new GetMethodWebRequest( "http://localhost/plantuml/" ); + WebResponse response = TestUtils.tryGetResponse(conversation, request ); + WebForm formUrl = response.getForms()[1]; + formUrl.setParameter("url", ""); + response = formUrl.submit(); + // Analyze response + WebForm forms[] = response.getForms(); + assertEquals( 2, forms.length ); + // Ensure the Text field is empty + assertTrue( forms[0].getParameterValue("text").startsWith("Bob")); + // Ensure the URL field is correct + assertTrue( forms[1].getParameterValue("url").endsWith("/img/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000")); + // Ensure the image is present + assertEquals( 1, response.getImages().length); } } diff --git a/test/src/net/sourceforge/plantuml/servlet/TestImage.java b/test/src/net/sourceforge/plantuml/servlet/TestImage.java new file mode 100644 index 0000000..746df00 --- /dev/null +++ b/test/src/net/sourceforge/plantuml/servlet/TestImage.java @@ -0,0 +1,35 @@ +package net.sourceforge.plantuml.servlet; + +import junit.framework.TestCase; +import com.meterware.httpunit.*; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +public class TestImage extends TestCase { + /** + * Verifies the generation of the version image from an encoded URL + */ + public void testVersionImage() throws Exception { + WebConversation conversation = new WebConversation(); + WebRequest request = new GetMethodWebRequest( TestUtils.getServerUrl()+"img/AqijAixCpmC0"); + WebResponse response = conversation.getResource( request); + // Analyze response + // Verifies the Content-Type header + assertEquals( "image/png", response.getContentType()); + // Get the image and verify its size + InputStream responseStream = response.getInputStream(); + ByteArrayOutputStream imageStream = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int n = 0; + while( ( n = responseStream.read( buf)) != -1) { + imageStream.write( buf, 0, n); + } + imageStream.close(); + responseStream.close(); + byte[] inMemoryImage = imageStream.toByteArray(); + int diagramLen = inMemoryImage.length; + assertTrue( diagramLen > 10000); + assertTrue( diagramLen < 20000); + } +} diff --git a/test/src/net/sourceforge/plantuml/servlet/TestUtils.java b/test/src/net/sourceforge/plantuml/servlet/TestUtils.java new file mode 100644 index 0000000..63fb937 --- /dev/null +++ b/test/src/net/sourceforge/plantuml/servlet/TestUtils.java @@ -0,0 +1,40 @@ +package net.sourceforge.plantuml.servlet; + +import com.meterware.httpunit.*; + +/** + * Utility class for HttpUnit conversations + */ +public class TestUtils { + + /** + * Return the URL of the PlantUMLServlet, deployed on the testing web server + * in the following form http://server/contextroot/ + * Note the trailing slash (/) + * @return the URL + */ + public static String getServerUrl() { + return "http://localhost/plantuml/"; + } + + /** + * Try getting a response for the given Conversation and Request + * show an error message if a 404 error appears + * @param conversation - the conversation to use + * @param request + * @return the response + * @throws an Exception if getting the response fails + */ + public static WebResponse tryGetResponse(WebConversation conversation, WebRequest request) throws Exception { + WebResponse response=null; + try { + response = conversation.getResponse( request ); + } catch (HttpNotFoundException nfe) { + System.err.println("The URL '"+request.getURL()+"' is not active any more"); + throw nfe; + } + return response; + } + +} +