package net.jsunit; import com.meterware.httpunit.HttpUnitOptions; import junit.framework.TestCase; import net.jsunit.configuration.Configuration; import net.jsunit.model.BrowserResultWriter; import net.jsunit.model.ResultType; import net.sourceforge.jwebunit.WebTester; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.util.List; public abstract class FunctionalTestCase extends TestCase { static { HttpUnitOptions.setScriptingEnabled(false); } protected WebTester webTester; protected JsUnitStandardServer server; protected int port; protected Configuration configuration; public void setUp() throws Exception { super.setUp(); port = new TestPortManager().newPort(); configuration = new Configuration(new FunctionalTestConfigurationSource(port)); server = new JsUnitStandardServer(configuration, new MockBrowserResultRepository(), true); if (shouldMockOutProcessStarter()) server.setProcessStarter(new MockProcessStarter()); server.start(); webTester = new WebTester(); webTester.getTestContext().setBaseUrl("http://localhost:" + webTesterPort() + "/jsunit"); } protected boolean shouldMockOutProcessStarter() { return true; } protected int webTesterPort() { return port; } public void tearDown() throws Exception { if (server != null) server.dispose(); super.tearDown(); } protected Document responseXmlDocument() throws JDOMException, IOException { String responseXml = webTester.getDialog().getResponseText(); SAXBuilder saxBuilder = new SAXBuilder("org.apache.xerces.parsers.SAXParser"); Reader stringReader = new StringReader(responseXml); return saxBuilder.build(stringReader); } protected void assertConfigXml() throws JDOMException, IOException { System.out.println(webTester.getDialog().getResponseText()); Document result = responseXmlDocument(); Element root = result.getRootElement(); assertEquals("configuration", root.getName()); } protected void assertErrorResponse(Element rootElement, String message) { assertEquals("error", rootElement.getName()); assertEquals(message, rootElement.getText()); } protected void assertSuccessfulRunResult(Document result, ResultType expectedResultType, String expectedUrl, int expectedBrowserResultCount) { Element root = result.getRootElement(); assertEquals("testRunResult", root.getName()); assertEquals(expectedBrowserResultCount, root.getChildren("browserResult").size()); assertEquals(expectedResultType.name(), root.getAttribute("type").getValue()); Element urlProperty = urlPropertyElement(root); assertEquals(expectedUrl, urlProperty.getAttribute(BrowserResultWriter.PROPERTY_VALUE).getValue()); } @SuppressWarnings("unchecked") private Element urlPropertyElement(Element root) { List<Element> children = root.getChild("browserResult").getChild(BrowserResultWriter.PROPERTIES).getChildren(BrowserResultWriter.PROPERTY); for (Element child : children) { if (child.getAttribute(BrowserResultWriter.PROPERTY_KEY).getValue().equals(BrowserResultWriter.URL)) return child; } return null; } }