/* * 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.List; import java.util.Set; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Provides; import com.google.inject.Singleton; import com.google.inject.name.Named; import com.google.jstestdriver.hooks.ActionListProcessor; import com.google.jstestdriver.output.XmlPrinter; /** * Provides a sequence of actions from a large number of arguments. * * @author jeremiele@google.com (Jeremie Lenfant-Engelmann) * @author corysmith@google.com (Cory Smith) */ @Singleton public class DefaultActionListProvider implements ActionListProvider { private final ActionFactory actionFactory; private final FileLoader fileLoader; private final List<String> tests; private final List<String> arguments; private final boolean reset; private final List<String> dryRunFor; private final int port; private final boolean preloadFiles; private final Set<FileInfo> fileSet; private final String testOutput; private final ResponseStreamFactory responseStreamFactory; private final Provider<URLTranslator> urlTranslatorProvider; private final Provider<URLRewriter> urlRewriterProvider; private final FailureAccumulator accumulator; private final Set<ActionListProcessor> processors; private final XmlPrinter xmlPrinter; private final BrowserActionsRunner browserActionsRunner; // TODO(corysmith): Refactor this. Currently in a temporary, // make dependencies visible to aid refactoring state. @Inject public DefaultActionListProvider( ActionFactory actionFactory, FileLoader fileLoader, @Named("tests") List<String> tests, @Named("arguments") List<String> arguments, @Named("reset") boolean reset, @Named("dryRunFor") List<String> dryRunFor, @Named("preloadFiles") boolean preloadFiles, @Named("port") int port, @Named("fileSet") Set<FileInfo> fileSet, @Named("testOutput") String testOutput, ResponseStreamFactory responseStreamFactory, BrowserActionsRunner browserActionsRunner, Provider<URLTranslator> urlTranslatorProvider, Provider<URLRewriter> urlRewriterProvider, FailureAccumulator accumulator, Set<ActionListProcessor> processors, XmlPrinter xmlPrinter) { this.actionFactory = actionFactory; this.fileLoader = fileLoader; this.tests = tests; this.arguments = arguments; this.reset = reset; this.dryRunFor = dryRunFor; this.preloadFiles = preloadFiles; this.port = port; this.fileSet = fileSet; this.testOutput = testOutput; this.responseStreamFactory = responseStreamFactory; this.browserActionsRunner = browserActionsRunner; this.urlTranslatorProvider = urlTranslatorProvider; this.urlRewriterProvider = urlRewriterProvider; this.accumulator = accumulator; this.processors = processors; this.xmlPrinter = xmlPrinter; } @Provides public List<Action> get() { ActionSequenceBuilder builder = new ActionSequenceBuilder(actionFactory, fileLoader, responseStreamFactory, browserActionsRunner, urlTranslatorProvider, urlRewriterProvider, accumulator); builder.usingFiles(fileSet, preloadFiles) .addTests(tests) .addCommands(arguments) .reset(reset) .asDryRunFor(dryRunFor) .withLocalServerPort(port); if (testOutput.length() > 0) { builder.printingResultsWhenFinished(xmlPrinter); } List<Action> actions = builder.build(); for (ActionListProcessor processor : processors) { actions = processor.process(actions); } return actions; } }