Submit untested fixes for RunStyleRemoteWeb and RunStyleSelenium to hopefully
unbreak the 2.0 build.

Patch by: jat
Review by: rjrjr (TBR)


git-svn-id: https://google-web-toolkit.googlecode.com/svn/branches/farewellSwt@6224 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/junit/RunStyleRemoteWeb.java b/user/src/com/google/gwt/junit/RunStyleRemoteWeb.java
index e4c61a9..9377c9c 100644
--- a/user/src/com/google/gwt/junit/RunStyleRemoteWeb.java
+++ b/user/src/com/google/gwt/junit/RunStyleRemoteWeb.java
@@ -131,11 +131,42 @@
 
   private static final int RESPONSE_TIMEOUT_MS = 10000;
 
-  public static RunStyle create(JUnitShell shell, String[] urls) {
+  private RemoteBrowser[] remoteBrowsers;
+
+  /**
+   * Whether one of the remote browsers was interrupted.
+   */
+  private boolean wasInterrupted;
+
+  /**
+   * A separate lock to control access to {@link #wasInterrupted}. This keeps
+   * the main thread calls into {@link #wasInterrupted()} from having to
+   * synchronized on the containing instance and potentially block on RPC calls.
+   * It is okay to take the {@link #wasInterruptedLock} while locking the
+   * containing instance; it is NOT okay to do the opposite or deadlock could
+   * occur.
+   */
+  private final Object wasInterruptedLock = new Object();
+
+  /**
+   * @param shell the containing shell
+   */
+  public RunStyleRemoteWeb(JUnitShell shell) {
+    super(shell);
+  }
+  
+  @Override
+  public boolean initialize(String args) {
+    if (args == null || args.length() == 0) {
+      throw new JUnitFatalLaunchException(
+          "RemoteWeb runstyle requires comma-separated RMI URLs");
+    }
+    String[] urls = args.split(",");
     try {
       RMISocketFactoryWithTimeouts.init();
     } catch (IOException e) {
-      throw new JUnitFatalLaunchException("Error initializing RMISocketFactory", e);
+      throw new JUnitFatalLaunchException("Error initializing RMISocketFactory",
+          e);
     }
     int numClients = urls.length;
     BrowserManager[] browserManagers = new BrowserManager[numClients];
@@ -157,36 +188,6 @@
         throw new JUnitFatalLaunchException(message, cause);
       }
     }
-    return new RunStyleRemoteWeb(shell, browserManagers, urls);
-  }
-
-  private final RemoteBrowser[] remoteBrowsers;
-
-  /**
-   * Whether one of the remote browsers was interrupted.
-   */
-  private boolean wasInterrupted;
-
-  /**
-   * A separate lock to control access to {@link #wasInterrupted}. This keeps
-   * the main thread calls into {@link #wasInterrupted()} from having to
-   * synchronized on the containing instance and potentially block on RPC calls.
-   * It is okay to take the {@link #wasInterruptedLock} while locking the
-   * containing instance; it is NOT okay to do the opposite or deadlock could
-   * occur.
-   */
-  private final Object wasInterruptedLock = new Object();
-
-  /**
-   * @param shell the containing shell
-   * @param browserManagers a populated array of RMI remote interfaces to each
-   *          remote BrowserManagerServer
-   * @param urls the URLs for each BrowserManager - used for error reporting
-   *          only
-   */
-  private RunStyleRemoteWeb(JUnitShell shell, BrowserManager[] browserManagers,
-      String[] urls) {
-    super(shell);
     synchronized (this) {
       this.remoteBrowsers = new RemoteBrowser[browserManagers.length];
       for (int i = 0; i < browserManagers.length; ++i) {
@@ -194,6 +195,7 @@
       }
     }
     Runtime.getRuntime().addShutdownHook(new ShutdownCb());
+    return true;
   }
 
   @Override
diff --git a/user/src/com/google/gwt/junit/RunStyleSelenium.java b/user/src/com/google/gwt/junit/RunStyleSelenium.java
index 13c7723..2e95beb 100644
--- a/user/src/com/google/gwt/junit/RunStyleSelenium.java
+++ b/user/src/com/google/gwt/junit/RunStyleSelenium.java
@@ -65,26 +65,6 @@
     }
   }
 
-  public static RunStyle create(JUnitShell shell, String[] targetsIn) {
-    RCSelenium targets[] = new RCSelenium[targetsIn.length];
-
-    Pattern pattern = Pattern.compile("([\\w\\.-]+):([\\d]+)/([\\w\\s\\*]+)");
-    for (int i = 0; i < targets.length; ++i) {
-      Matcher matcher = pattern.matcher(targetsIn[i]);
-      if (!matcher.matches()) {
-        throw new JUnitFatalLaunchException("Unable to parse Selenium target " + targetsIn[i]
-            + " (expected format is [host]:[port]/[browser])");
-      }
-      RCSelenium instance =
-          new RCSelenium(matcher.group(3), matcher.group(1), Integer.parseInt(matcher.group(2)));
-      targets[i] = instance;
-    }
-
-    RunStyleSelenium runStyle = new RunStyleSelenium(shell, targets);
-    runStyle.start();
-    return runStyle;
-  }
-
   private RCSelenium remotes[];
 
   /**
@@ -102,8 +82,31 @@
    */
   private final Object wasInterruptedLock = new Object();
 
-  protected RunStyleSelenium(final JUnitShell shell, RCSelenium targets[]) {
+  public RunStyleSelenium(final JUnitShell shell) {
     super(shell);
+  }
+  
+  @Override
+  public boolean initialize(String args) {
+    if (args == null || args.length() == 0) {
+      throw new JUnitFatalLaunchException(
+          "Selenium runstyle requires comma-separated Selenium-RC targets");
+    }
+    String[] targetsIn = args.split(",");
+    RCSelenium targets[] = new RCSelenium[targetsIn.length];
+
+    Pattern pattern = Pattern.compile("([\\w\\.-]+):([\\d]+)/([\\w\\s\\*]+)");
+    for (int i = 0; i < targets.length; ++i) {
+      Matcher matcher = pattern.matcher(targetsIn[i]);
+      if (!matcher.matches()) {
+        throw new JUnitFatalLaunchException("Unable to parse Selenium target "
+            + targetsIn[i] + " (expected format is [host]:[port]/[browser])");
+      }
+      RCSelenium instance = new RCSelenium(matcher.group(3), matcher.group(1),
+          Integer.parseInt(matcher.group(2)));
+      targets[i] = instance;
+    }
+
     this.remotes = targets;
 
     // Install a shutdown hook that will close all of our outstanding Selenium
@@ -116,12 +119,15 @@
             try {
               remote.getSelenium().stop();
             } catch (SeleniumException se) {
-              shell.getTopLogger().log(TreeLogger.WARN, "Error stoping selenium session", se);
+              shell.getTopLogger().log(TreeLogger.WARN,
+                  "Error stopping selenium session", se);
             }
           }
         }
       }
     });
+    start();
+    return true;
   }
 
   @Override