/* * Copyright 2009 Google Inc. * * 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 com.google.jstestdriver; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.concurrent.Executors; import junit.framework.TestCase; import com.google.common.collect.Sets; import com.google.inject.internal.Lists; import com.google.jstestdriver.browser.BrowserControl; import com.google.jstestdriver.browser.BrowserControl.BrowserControlFactory; import com.google.jstestdriver.browser.BrowserRunner; import com.google.jstestdriver.model.JstdTestCase; import com.google.jstestdriver.model.RunData; import com.google.jstestdriver.util.NullStopWatch; /** * Integration test for the browser startup action. * @author corysmith@google.com (Cory Smith) */ public class BrowserStartupActionTest extends TestCase { private final class BrowserControlFactoryFake implements BrowserControlFactory { private final FakeJsTestDriverClient client; private BrowserControlFactoryFake(FakeJsTestDriverClient client) { this.client = client; } @Override public BrowserControl create(BrowserRunner runner, String serverAddress, List<JstdTestCase> testCases) { return new BrowserControl(runner, serverAddress, new NullStopWatch(), client, testCases, 1000); } } private final class FakeJsTestDriverClient implements JsTestDriverClient { private final Collection<BrowserInfo> capturedBrowsers; private final String nextId; public FakeJsTestDriverClient(Collection<BrowserInfo> capturedBrowsers, String nextId) { this.capturedBrowsers = capturedBrowsers; this.nextId = nextId; } @Override public Collection<BrowserInfo> listBrowsers() { return capturedBrowsers; } @Override public void eval(String id, ResponseStream responseStream, String cmd, JstdTestCase testCase) { } public void runAllTests(String id, ResponseStream responseStream, boolean captureConsole, JstdTestCase testCase) { } public void reset(String id, ResponseStream responseStream, JstdTestCase testCase) { } public void runTests(String id, ResponseStream responseStream, List<String> tests, boolean captureConsole, JstdTestCase testCase) { } public void dryRun(String id, ResponseStream responseStream, JstdTestCase testCase) { } public void dryRunFor(String id, ResponseStream responseStream, List<String> expressions, JstdTestCase testCase) { } public String getNextBrowserId() { return nextId; } public void uploadFiles(String browserId, JstdTestCase testCase) { } } /** * * * @author Cory Smith (corbinrsmith@gmail.com) */ private final class BrowserRunnerStub implements BrowserRunner { public String serverAddress; public void startBrowser(String serverAddress) { this.serverAddress = serverAddress; } public void stopBrowser() { // TODO Auto-generated method stub } public int getTimeout() { // TODO Auto-generated method stub return 10; } public int getNumStartupTries() { // TODO Auto-generated method stub return 1; } public long getHeartbeatTimeout() { // TODO Auto-generated method stub return 10; } public int getUploadSize() { // TODO Auto-generated method stub return 0; } } public void testRun() throws Exception { String nextId = "123"; BrowserRunnerStub browserRunner = new BrowserRunnerStub(); Set<BrowserRunner> browsers = Sets.<BrowserRunner>newHashSet(browserRunner); BrowserInfo browserInfo = new BrowserInfo(); browserInfo.setId(Long.parseLong(nextId)); browserInfo.setServerReceivedHeartbeat(true); browserInfo.setReady(true); Collection<BrowserInfo> capturedBrowsers = Lists.newArrayList(browserInfo); String serverAddress = "http://localhost"; final FakeJsTestDriverClient client = new FakeJsTestDriverClient(capturedBrowsers, nextId); BrowserStartupAction action = new BrowserStartupAction(browsers, client, serverAddress, Executors.newSingleThreadExecutor(), new BrowserControlFactoryFake(client)); action.run(new RunData(Collections.<ResponseStream>emptyList(), Collections .<JstdTestCase>emptyList(), null)); assertEquals(serverAddress + "/capture/id/123/timeout/1000/upload_size/0/", browserRunner.serverAddress); } }