/*
* Copyright 2010 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.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.FileInfo;
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.model.BasePaths;
import com.google.jstestdriver.runner.RunnerMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.PrintStream;
import java.util.Collections;
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 static final Logger logger = LoggerFactory.getLogger(Initializer.class);
private final PluginLoader pluginLoader;
private final PathResolver pathResolver;
private final FlagsParser flagsParser;
private final Set<PluginInitializer> initializers;
private final PrintStream outputStream;
private final BasePaths basePaths;
@Inject
public Initializer(PluginLoader pluginLoader,
PathResolver pathResolver,
FlagsParser flagsParser,
Set<PluginInitializer> initializers,
@Named("outputStream") PrintStream outputStream,
BasePaths basePaths,
RunnerMode runnerMode) {
this.pluginLoader = pluginLoader;
this.pathResolver = pathResolver;
this.flagsParser = flagsParser;
this.initializers = initializers;
this.outputStream = outputStream;
this.basePaths = basePaths;
}
public List<Module> initialize(List<Module> pluginModules,
Configuration configuration,
RunnerMode runnerMode,
String[] args) {
// 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, flags);
modules.addAll(pluginModules);
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()));
String serverAddress = resolvedConfiguration.getServer(
flags.getServer(),
flags.getPort(),
flags.getServerHandlerPrefix());
String captureAddress = resolvedConfiguration.getCaptureAddress(
serverAddress,
flags.getCaptureAddress(),
flags.getServerHandlerPrefix());
modules.add(
new JsTestDriverModule(flags,
resolvedConfiguration.getFilesList(),
serverAddress,
captureAddress,
outputStream,
basePaths,
resolvedConfiguration.getTestSuiteTimeout(),
resolvedConfiguration.getTests(),
// TODO(corysmith): pull js plugins from the configuration.
Collections.<FileInfo>emptyList(),
resolvedConfiguration.getGatewayConfiguration()));
return modules;
}
}