package net.jsunit.server; import junit.framework.TestCase; import net.jsunit.InvalidBrowserSpecificationException; import net.jsunit.RemoteRunSpecification; import net.jsunit.action.InvalidRemoteMachineUrlBrowserCombination; import net.jsunit.configuration.DummyRemoteConfigurationSource; import net.jsunit.configuration.RemoteConfiguration; import net.jsunit.model.*; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; public class RemoteRunSpecificationBuilderTest extends TestCase { private RemoteRunSpecificationBuilder builder; protected void setUp() throws Exception { super.setUp(); builder = new RemoteRunSpecificationBuilder(); } public void testSingleRemoteBrowser() throws Exception { String URL = "http://www.example.com"; Browser browser = new Browser("browser.exe", 3); RemoteRunSpecification spec = builder.forSingleRemoteBrowser( new URL(URL), browser ); assertEquals("http://www.example.com", spec.getRemoteMachineBaseURL().toString()); List<Browser> remoteBrowsers = spec.getRemoteBrowsers(); assertEquals(1, remoteBrowsers.size()); assertEquals(browser, remoteBrowsers.get(0)); } public void testAllBrowsersFromRemoteConfigurations() throws Exception { List<RemoteConfiguration> remoteConfigs = someRemoteConfigs(); List<RemoteRunSpecification> specs = builder.forAllBrowsersFromRemoteConfigurations(remoteConfigs); assertEquals(3, specs.size()); RemoteRunSpecification spec0 = specs.get(0); assertEquals("http://www.example.com", spec0.getRemoteMachineBaseURL().toString()); assertTrue(spec0.isForAllBrowsers()); RemoteRunSpecification spec1 = specs.get(1); assertEquals("http://www.example.net", spec1.getRemoteMachineBaseURL().toString()); assertTrue(spec1.isForAllBrowsers()); RemoteRunSpecification spec2 = specs.get(2); assertEquals("http://www.example.org", spec2.getRemoteMachineBaseURL().toString()); assertTrue(spec2.isForAllBrowsers()); } public void testAllBrowsersFromRemoteURLs() throws Exception { List<RemoteRunSpecification> specs = builder.forAllBrowsersFromRemoteURLs( new URL("http://www.example.com"), new URL("http://www.example.net") ); assertEquals(2, specs.size()); RemoteRunSpecification spec0 = specs.get(0); assertEquals("http://www.example.com", spec0.getRemoteMachineBaseURL().toString()); assertTrue(spec0.isForAllBrowsers()); RemoteRunSpecification spec1 = specs.get(1); assertEquals("http://www.example.net", spec1.getRemoteMachineBaseURL().toString()); assertTrue(spec1.isForAllBrowsers()); } public void testIdStringPairs() throws Exception { List<RemoteRunSpecification> specs = builder.forIdStringPairs( new String[]{"0_0", "1_0", "1_2"}, new DummyRemoteServerConfigurationSource(someRemoteConfigs()) ); assertEquals(2, specs.size()); RemoteRunSpecification spec0 = specs.get(0); assertEquals("http://www.example.com", spec0.getRemoteMachineBaseURL().toString()); List<Browser> spec0RemoteBrowsers = spec0.getRemoteBrowsers(); assertEquals(1, spec0RemoteBrowsers.size()); assertEquals(new Browser("firefox.exe", 0), spec0RemoteBrowsers.get(0)); RemoteRunSpecification spec1 = specs.get(1); assertEquals("http://www.example.net", spec1.getRemoteMachineBaseURL().toString()); List<Browser> spec1RemoteBrowsers = spec1.getRemoteBrowsers(); assertEquals(2, spec1RemoteBrowsers.size()); assertEquals(new Browser("iexplore.exe", 0), spec1RemoteBrowsers.get(0)); assertEquals(new Browser("xbrowser.exe", 2), spec1RemoteBrowsers.get(1)); } public void testInvalidIdStringPairs() throws Exception { try { builder.forIdStringPairs( new String[]{"0_0", "1_0", "1_4"}, new DummyRemoteServerConfigurationSource(someRemoteConfigs()) ); fail(); } catch (InvalidBrowserSpecificationException e) { InvalidRemoteMachineUrlBrowserCombination combo = e.createInvalidRemoteRunSpecification(); assertEquals("1, 4", combo.getDisplayString()); } try { builder.forIdStringPairs( new String[]{"0_0", "3_2", "1_0"}, new DummyRemoteServerConfigurationSource(someRemoteConfigs()) ); fail(); } catch (InvalidBrowserSpecificationException e) { InvalidRemoteMachineUrlBrowserCombination combo = e.createInvalidRemoteRunSpecification(); assertEquals("3, 2", combo.getDisplayString()); } try { builder.forIdStringPairs( new String[]{"0_0", "foobar_2", "1_0"}, new DummyRemoteServerConfigurationSource(someRemoteConfigs()) ); fail(); } catch (InvalidBrowserSpecificationException e) { InvalidRemoteMachineUrlBrowserCombination combo = e.createInvalidRemoteRunSpecification(); assertEquals("foobar, 2", combo.getDisplayString()); } try { builder.forIdStringPairs( new String[]{"0_0", "5_foobar", "1_0"}, new DummyRemoteServerConfigurationSource(someRemoteConfigs()) ); fail(); } catch (InvalidBrowserSpecificationException e) { InvalidRemoteMachineUrlBrowserCombination combo = e.createInvalidRemoteRunSpecification(); assertEquals("5, foobar", combo.getDisplayString()); } } public void testMalformedStringIdPairs() throws Exception { try { builder.forIdStringPairs( new String[]{"foobar", "1_0", "1_4"}, new DummyRemoteServerConfigurationSource(someRemoteConfigs()) ); fail(); } catch (InvalidBrowserSpecificationException e) { InvalidRemoteMachineUrlBrowserCombination combo = e.createInvalidRemoteRunSpecification(); assertEquals("foobar", combo.getDisplayString()); } } public void testForBrowserSpecs() throws Exception { List<BrowserSpecification> browserSpecs = new ArrayList<BrowserSpecification>(); browserSpecs.add(new BrowserSpecification(PlatformType.LINUX, BrowserType.FIREFOX)); browserSpecs.add(new BrowserSpecification(PlatformType.WINDOWS, BrowserType.INTERNET_EXPLORER)); browserSpecs.add(new BrowserSpecification(PlatformType.WINDOWS, BrowserType.OPERA)); List<RemoteRunSpecification> result = builder.forBrowserSpecifications(browserSpecs, someRemoteConfigs()); assertEquals(2, result.size()); RemoteRunSpecification linuxSpec = result.get(0); assertEquals("http://www.example.com", linuxSpec.getRemoteMachineBaseURL().toString()); assertEquals(1, linuxSpec.getRemoteBrowsers().size()); assertEquals(new Browser("firefox.exe", 0), linuxSpec.getRemoteBrowsers().get(0)); RemoteRunSpecification windowsSpec = result.get(1); assertEquals("http://www.example.net", windowsSpec.getRemoteMachineBaseURL().toString()); assertEquals(2, windowsSpec.getRemoteBrowsers().size()); assertEquals(new Browser("iexplore.exe", 0), windowsSpec.getRemoteBrowsers().get(0)); assertEquals(new Browser("opera9.exe", 1), windowsSpec.getRemoteBrowsers().get(1)); } public void testInvalidBrowserSpecPlatformType() throws Exception { List<BrowserSpecification> browserSpecs = new ArrayList<BrowserSpecification>(); browserSpecs.add(new BrowserSpecification(PlatformType.LINUX, BrowserType.FIREFOX)); browserSpecs.add(new BrowserSpecification(PlatformType.MACINTOSH, BrowserType.NETSCAPE)); try { builder.forBrowserSpecifications(browserSpecs, someRemoteConfigs()); fail(); } catch (InvalidBrowserSpecificationException e) { } } private List<RemoteConfiguration> someRemoteConfigs() throws IOException { List<RemoteConfiguration> remoteConfigs = new ArrayList<RemoteConfiguration>(); remoteConfigs.add(new RemoteConfiguration(new URL("http://www.example.com"), new DummyRemoteConfigurationSource("http://www.example.com") { public String browserFileNames() { return "firefox.exe,mybrowser.exe"; } public String osString() { return PlatformType.LINUX.getDisplayName(); } })); remoteConfigs.add(new RemoteConfiguration(new URL("http://www.example.net"), new DummyRemoteConfigurationSource("http://www.example.com") { public String browserFileNames() { return "iexplore.exe,opera9.exe,xbrowser.exe"; } public String osString() { return PlatformType.WINDOWS.getDisplayName(); } })); remoteConfigs.add(new RemoteConfiguration(new URL("http://www.example.org"), new DummyRemoteConfigurationSource("http://www.example.com") { public String browserFileNames() { return "browser0.exe"; } public String osString() { return PlatformType.MACINTOSH.getDisplayName(); } })); return remoteConfigs; } static class DummyRemoteServerConfigurationSource implements RemoteServerConfigurationSource { private List<RemoteConfiguration> list; public DummyRemoteServerConfigurationSource(List<RemoteConfiguration> list) { this.list = list; } public RemoteConfiguration getRemoteMachineConfigurationById(int id) { return list.get(id); } public List<RemoteConfiguration> getAllRemoteMachineConfigurations() { return list; } } }