package net.jsunit; import net.jsunit.configuration.AggregateConfiguration; import net.jsunit.configuration.ServerConfiguration; import net.jsunit.configuration.StubConfigurationSource; import net.jsunit.interceptor.RemoteServerHitterInterceptor; public abstract class AggregateServerFunctionalTestCase extends FunctionalTestCase { protected static JsUnitAggregateServer server; private MockRemoteServerHitter mockHitter; protected JsUnitAggregateServer createServer() { final int port = new TestPortManager().newPort(); AggregateConfiguration configuration = new AggregateConfiguration(new FunctionalTestConfigurationSource(port)); JsUnitAggregateServer result = new JsUnitAggregateServer(configuration, mockHitter); Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { if (server != null) server.dispose(); } }); return result; } protected MockRemoteServerHitter createMockHitter() { MockRemoteServerHitter mockHitter = new MockRemoteServerHitter(); mockHitter.urlToDocument.put( FunctionalTestConfigurationSource.REMOTE_SERVER_URL_1 + "/config", remoteServer1Configuration().asXmlDocument() ); mockHitter.urlToDocument.put( FunctionalTestConfigurationSource.REMOTE_SERVER_URL_2 + "/config", remoteServer2Configuration().asXmlDocument() ); return mockHitter; } protected ServerConfiguration remoteServer1Configuration() { return new AggregateConfiguration(new StubConfigurationSource() { public String osString() { return "Windows XP"; } public String browserFileNames() { return "iexplore.exe,opera.exe"; } }); } protected ServerConfiguration remoteServer2Configuration() { return new AggregateConfiguration(new StubConfigurationSource() { public String osString() { return "Mac OS X"; } public String browserFileNames() { return "safari.sh"; } }); } protected int port() { return server.getConfiguration().getPort(); } public void setUp() throws Exception { super.setUp(); mockHitter = createMockHitter(); if (server == null) { server = createServer(); server.start(); } else { JsUnitAggregateServer.registerInstance(server); server.setHitter(createMockHitter()); } RemoteServerHitterInterceptor.factory = new RemoteServerHitterInterceptor.RemoteServerHitterFactory() { public RemoteServerHitter create() { return mockHitter; } }; createWebTester(); } protected String baseURL() { return "http://localhost:" + port() + "/jsunit"; } }