/* * Copyright 2008 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.gwt.junit; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Collections; import java.util.Set; /** * An abstract class that handles the details of launching a browser. */ public abstract class RunStyle { /** * The containing shell. */ protected final JUnitShell shell; private int tries = 1; /** * Constructor for RunStyle. Any subclass must provide a constructor with the * same signature since this will be how the RunStyle is created via * reflection. * * @param shell the containing shell */ public RunStyle(JUnitShell shell) { this.shell = shell; } /** * Tests whether the test was interrupted. * * @return the interrupted hosts, or null if not interrupted */ public String[] getInterruptedHosts() { return null; } /** * Get the host name of the local system to use in URLs. This method returns * the host address instead of the host name in case the test target cannot * resolve the host name. * * @return the host name of the local system */ public String getLocalHostName() { try { return InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { throw new RuntimeException("Unable to determine my ip address", e); } } /** * Returns the platforms specific to this run style. */ public Set<Platform> getPlatforms() { return Collections.emptySet(); } /** * Returns the number of times this test should be tried to run. A test * succeeds if it succeeds even once. * * @return the number of attempts */ public int getTries() { return tries; } /** * Initialize the runstyle with any supplied arguments, and return the number * of clients this runstyle controls. * * @param args arguments passed in -runStyle option, null if none supplied * @return the number of clients, or -1 if initialization was unsuccessful */ public abstract int initialize(String args); /** * Requests initial launch of the browser. This should only be called once per * instance of RunStyle. * * @param moduleName the module to run * @throws UnableToCompleteException */ public abstract void launchModule(String moduleName) throws UnableToCompleteException; /** * Sets the number of times a test should be tried -- it succeeds if any * attempt succeeds. * * @param tries number of attempts */ public void setTries(int tries) { this.tries = tries; } /** * Setup this RunStyle for the selected mode. * * @param logger TreeLogger to use for any messages * @param developmentMode true if we are running in development mode rather * that web/production mode * @return false if we should abort processing due to an unsupported mode or * an error setting up for that mode */ public boolean setupMode(TreeLogger logger, boolean developmentMode) { return true; } /** * Whether the embedded server should ever generate resources. Development * mode needs this, but not with -noserver. * * @return true if resources should be automatically generated by the server. */ public boolean shouldAutoGenerateResources() { // TODO(spoon) does Production Mode get simpler if this is turned on? return true; } /** * Gets the shell logger. */ protected TreeLogger getLogger() { return shell.getTopLogger(); } }