/* * 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.idea; import java.util.Collections; import java.util.LinkedList; import java.util.List; import com.google.common.collect.Lists; import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; import com.google.jstestdriver.ActionRunner; import com.google.jstestdriver.FileInfo; import com.google.jstestdriver.FlagsImpl; import com.google.jstestdriver.JsTestDriverModule; import com.google.jstestdriver.config.Configuration; import com.google.jstestdriver.guice.DebugModule; import com.google.jstestdriver.html.HtmlDocModule; /** * A builder for IDE's to use. Minimizes the surface area of the API which needs * to be maintained on the IDE plugin side. TODO(jeremiele) We should rename * this for other API uses. Refactor the crap out of this. * * @author alexeagle@google.com (Alex Eagle) */ public class IDEPluginActionBuilder { private final Configuration myResolvedConfiguration; private final FlagsImpl myFlags; private final LinkedList<Module> modules = new LinkedList<Module>(); public IDEPluginActionBuilder(Configuration resolvedConfiguration, FlagsImpl flags) { myResolvedConfiguration = resolvedConfiguration; myFlags = flags; } public IDEPluginActionBuilder addAllTests() { return addTests(Collections.singletonList("all")); } public IDEPluginActionBuilder addTests(List<String> testCases) { myFlags.setTests(concatLists(myFlags.getTests(), testCases)); return this; } public IDEPluginActionBuilder dryRunFor(List<String> dryRunFor) { myFlags.setDryRunFor(concatLists(myFlags.getDryRunFor(), dryRunFor)); return this; } public IDEPluginActionBuilder resetBrowsers() { myFlags.setReset(true); return this; } public IDEPluginActionBuilder install(Module module) { modules.add(module); return this; } public ActionRunner build() { install(new HtmlDocModule()); install(new DebugModule(true)); String serverAddress = myResolvedConfiguration.getServer( myFlags.getServer(), myFlags.getPort(), myFlags.getServerHandlerPrefix() ); String captureAddress = myResolvedConfiguration.getCaptureAddress( serverAddress, myFlags.getCaptureAddress(), myFlags.getServerHandlerPrefix() ); Injector injector = Guice.createInjector( new CompositeModule(modules), new JsTestDriverModule( myFlags, myResolvedConfiguration.getFilesList(), serverAddress, captureAddress, System.out, myResolvedConfiguration.getBasePath(), myResolvedConfiguration.getTestSuiteTimeout(), myResolvedConfiguration.getTests(), Collections.<FileInfo>emptyList(), myResolvedConfiguration.getGatewayConfiguration() ) ); return injector.getInstance(ActionRunner.class); } private static <E> List<E> concatLists(List<E> list1, List<E> list2) { List<E> res = Lists.newArrayList(list1); res.addAll(list2); return res; } private static class CompositeModule implements Module { private final List<Module> myModules; public CompositeModule(List<Module> modules) { myModules = modules; } @Override public void configure(Binder binder) { for (Module module : myModules) { binder.install(module); } } } }