/* * 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 com.google.gson.JsonArray; import com.google.jstestdriver.action.ConfigureGatewayAction; import com.google.jstestdriver.action.ConfigureGatewayAction.Factory; import com.google.jstestdriver.action.UploadAction; import com.google.jstestdriver.browser.BrowserActionExecutorAction; import com.google.jstestdriver.browser.BrowserIdStrategy; import com.google.jstestdriver.hooks.TestsPreProcessor; import com.google.jstestdriver.util.NullStopWatch; import junit.framework.TestCase; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ActionSequenceBuilderTest extends TestCase { ActionFactory actionFactory = new ActionFactory(null, Collections.<TestsPreProcessor>emptySet(), false, null, null, new NullStopWatch()); public void testAddTestsWithRemoteServerAddress() throws Exception { List<String> tests = tests(); ActionSequenceBuilder builder = new ActionSequenceBuilder(actionFactory, new BrowserActionExecutorAction(null, null, null, null, null, 0, null, null, null), new FailureCheckerAction(null, null), new UploadAction(null), new CapturedBrowsers(new BrowserIdStrategy(new MockTime(0))), null, newConfigureGatewayActionFactory(), null, null); List<Class<? extends Action>> expectedActions = new ArrayList<Class<? extends Action>>(); expectedActions.add(ConfigureGatewayAction.class); expectedActions.add(UploadAction.class); expectedActions.add(BrowserActionExecutorAction.class); List<Action> sequence = builder.addTests(tests).build(); assertSequence(expectedActions, sequence); } private Factory newConfigureGatewayActionFactory() { return new Factory() { @Override public ConfigureGatewayAction create(JsonArray gatewayConfig) { return new ConfigureGatewayAction(null, null, null, null, gatewayConfig); } }; } public void testAddTestsWithLocalServer() throws Exception { List<String> tests = tests(); ActionSequenceBuilder builder = new ActionSequenceBuilder( new ActionFactory( null, Collections.<TestsPreProcessor> emptySet(), false, null, null, new NullStopWatch()), new BrowserActionExecutorAction(null, null, null, null, null, 0, null, null, null), new FailureCheckerAction(null, null), new UploadAction(null), new CapturedBrowsers(new BrowserIdStrategy(new MockTime(0))), null, newConfigureGatewayActionFactory(), null, null); List<Class<? extends Action>> expectedActions = new ArrayList<Class<? extends Action>>(); expectedActions.add(ServerStartupAction.class); expectedActions.add(ConfigureGatewayAction.class); expectedActions.add(UploadAction.class); expectedActions.add(BrowserActionExecutorAction.class); expectedActions.add(ServerShutdownAction.class); builder.withLocalServerPort(1001); List<Action> sequence = builder.addTests(tests).build(); assertSequence(expectedActions, sequence); } public void testAddTestsAndExitOnFailureWithLocalServer() throws Exception { List<String> tests = tests(); ActionSequenceBuilder builder = new ActionSequenceBuilder( new ActionFactory( null, Collections.<TestsPreProcessor> emptySet(), false, null, null, new NullStopWatch()), new BrowserActionExecutorAction(null, null, null, null, null, 0, null, null, null), new FailureCheckerAction(null, null), new UploadAction(null), new CapturedBrowsers(new BrowserIdStrategy(new MockTime(0))), null, newConfigureGatewayActionFactory(), null, null); List<Class<? extends Action>> expectedActions = new ArrayList<Class<? extends Action>>(); expectedActions.add(ServerStartupAction.class); expectedActions.add(ConfigureGatewayAction.class); expectedActions.add(UploadAction.class); expectedActions.add(BrowserActionExecutorAction.class); expectedActions.add(ServerShutdownAction.class); expectedActions.add(FailureCheckerAction.class); builder.withLocalServerPort(1001); List<Action> sequence = builder.addTests(tests).raiseOnFailure().build(); assertSequence(expectedActions, sequence); } public void testNoBrowsers() throws Exception { List<String> tests = tests(); ActionSequenceBuilder builder = new ActionSequenceBuilder( new ActionFactory( null, Collections.<TestsPreProcessor>emptySet(), false, null, null, new NullStopWatch()), new BrowserActionExecutorAction( null, null, null, null, null, 0, null, null, null), new FailureCheckerAction(null, null), new UploadAction(null), new CapturedBrowsers(new BrowserIdStrategy(new MockTime(0))), null, newConfigureGatewayActionFactory(), null, null); List<Action> actions = builder.addTests(tests).withLocalServerPort(999).build(); List<Class<? extends Action>> expectedActions = new ArrayList<Class<? extends Action>>(); expectedActions.add(ServerStartupAction.class); expectedActions.add(ConfigureGatewayAction.class); expectedActions.add(UploadAction.class); expectedActions.add(BrowserActionExecutorAction.class); expectedActions.add(ServerShutdownAction.class); this.<Action>assertSequence(expectedActions, actions); } private List<String> tests() { List<String> tests = new ArrayList<String>(); tests.add("test.testFoo"); return tests; } private <T> void assertSequence(List<Class<? extends T>> expectedActions, List<T> actions) { List<Class<?>> actual = new ArrayList<Class<?>>(); for (T action : actions) { actual.add(action != null ? action.getClass() : null); } assertEquals(expectedActions, actual); } }