// Copyright 2010 Google Inc. All Rights Reserved.
package com.google.jstestdriver.config;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import com.google.inject.Module;
import com.google.inject.name.Named;
import com.google.jstestdriver.Flags;
import com.google.jstestdriver.FlagsParser;
import com.google.jstestdriver.JsTestDriverModule;
import com.google.jstestdriver.PathResolver;
import com.google.jstestdriver.PluginLoader;
import com.google.jstestdriver.guice.DebugModule;
import com.google.jstestdriver.hooks.PluginInitializer;
import com.google.jstestdriver.html.HtmlDocModule;
import com.google.jstestdriver.runner.RunnerMode;
import org.kohsuke.args4j.CmdLineException;
import java.io.File;
import java.io.PrintStream;
import java.util.List;
import java.util.Set;
/**
* Handles the creation the list of modules necessary to create an ActionRunner.
* @author corbinrsmith@gmail.com
*
*/
public class Initializer {
private final PluginLoader pluginLoader;
private final PathResolver pathResolver;
private final FlagsParser flagsParser;
private final Set<PluginInitializer> initializers;
private final PrintStream outputStream;
private final File basePath;
@Inject
public Initializer(PluginLoader pluginLoader,
PathResolver pathResolver,
FlagsParser flagsParser,
Set<PluginInitializer> initializers,
@Named("outputStream") PrintStream outputStream,
@Named("basePath") File basePath) {
this.pluginLoader = pluginLoader;
this.pathResolver = pathResolver;
this.flagsParser = flagsParser;
this.initializers = initializers;
this.outputStream = outputStream;
this.basePath = basePath;
}
public List<Module> initialize(List<Module> pluginModules,
Configuration configuration,
RunnerMode runnerMode,
String[] args) throws CmdLineException {
// TODO(corysmith): Figure out how to allow custom plugin flags
// Might delegate to the flag parser to remove them, before creating Flags
// Then, flags can have a method to retrieve them.
Flags flags = flagsParser.parseArgument(args);
final List<Module> modules = Lists.newLinkedList();
Configuration resolvedConfiguration = configuration.resolvePaths(pathResolver);
modules.addAll(pluginLoader.load(resolvedConfiguration.getPlugins()));
for (PluginInitializer initializer : initializers) {
final Module module = initializer.initializeModule(flags, resolvedConfiguration);
modules.add(module);
}
modules.add(new HtmlDocModule()); // by default the html plugin is installed.
modules.add(new DebugModule(runnerMode.isDebug()));
modules.add(
new JsTestDriverModule(flags,
resolvedConfiguration.getFilesList(),
resolvedConfiguration.createServerAddress(flags.getServer(),
flags.getPort()),
outputStream,
basePath, resolvedConfiguration.getTestSuiteTimeout()));
return modules;
}
}