Reinstating assertions default on in web tests, with -da to turn it off, from r5726, but this time with test fixes for IE-specific assertion trips.

Patch by: flin, except CoverageTest.java & HandlerManagerTest.java
          fabbott, for those two test files
Review by: fabbott, except CoverageTest.java and HandlerManagerTest.java
           jat, for those two test files

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5755 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/GWTShell.java b/dev/core/src/com/google/gwt/dev/GWTShell.java
index 53924db..54243ee 100644
--- a/dev/core/src/com/google/gwt/dev/GWTShell.java
+++ b/dev/core/src/com/google/gwt/dev/GWTShell.java
@@ -90,7 +90,7 @@
   /**
    * Concrete class to implement all shell options.
    */
-  static class ShellOptionsImpl extends HostedModeBaseOptionsImpl implements
+  protected static class ShellOptionsImpl extends HostedModeBaseOptionsImpl implements
       HostedModeBaseOptions, WorkDirs, LegacyCompilerOptions {
     private int localWorkers;
     private File outDir;
diff --git a/dev/core/src/com/google/gwt/dev/HostedModeBase.java b/dev/core/src/com/google/gwt/dev/HostedModeBase.java
index 9d1d7cc..1a1f59e 100644
--- a/dev/core/src/com/google/gwt/dev/HostedModeBase.java
+++ b/dev/core/src/com/google/gwt/dev/HostedModeBase.java
@@ -32,6 +32,7 @@
 import com.google.gwt.dev.shell.ShellModuleSpaceHost;
 import com.google.gwt.dev.util.Util;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableAggressiveOptimization;
+import com.google.gwt.dev.util.arg.ArgHandlerDisableAssertions;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableCastChecking;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableClassMetadata;
 import com.google.gwt.dev.util.arg.ArgHandlerDraftCompile;
@@ -321,6 +322,7 @@
       registerHandler(new ArgHandlerGenDir(options));
       registerHandler(new ArgHandlerScriptStyle(options));
       registerHandler(new ArgHandlerEnableAssertions(options));
+      registerHandler(new ArgHandlerDisableAssertions(options));
       registerHandler(new ArgHandlerDisableAggressiveOptimization(options));
       registerHandler(new ArgHandlerDisableClassMetadata(options));
       registerHandler(new ArgHandlerDisableCastChecking(options));
diff --git a/dev/core/src/com/google/gwt/dev/Precompile.java b/dev/core/src/com/google/gwt/dev/Precompile.java
index 5c28b9e..aefc3d7 100644
--- a/dev/core/src/com/google/gwt/dev/Precompile.java
+++ b/dev/core/src/com/google/gwt/dev/Precompile.java
@@ -43,6 +43,7 @@
 import com.google.gwt.dev.util.PerfLogger;
 import com.google.gwt.dev.util.Util;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableAggressiveOptimization;
+import com.google.gwt.dev.util.arg.ArgHandlerDisableAssertions;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableCastChecking;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableClassMetadata;
 import com.google.gwt.dev.util.arg.ArgHandlerDisableRunAsync;
@@ -94,6 +95,7 @@
       registerHandler(new ArgHandlerGenDir(options));
       registerHandler(new ArgHandlerScriptStyle(options));
       registerHandler(new ArgHandlerEnableAssertions(options));
+      registerHandler(new ArgHandlerDisableAssertions(options));
       registerHandler(new ArgHandlerDisableAggressiveOptimization(options));
       registerHandler(new ArgHandlerDisableClassMetadata(options));
       registerHandler(new ArgHandlerDisableCastChecking(options));
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAssertions.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAssertions.java
new file mode 100644
index 0000000..e84b661
--- /dev/null
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerDisableAssertions.java
@@ -0,0 +1,47 @@
+/*

+ * 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.gwt.dev.util.arg;

+

+import com.google.gwt.util.tools.ArgHandlerFlag;

+

+/**

+ * Handler for -da arg to disable assertions in compiled code.

+ */

+public final class ArgHandlerDisableAssertions extends ArgHandlerFlag {

+

+  private final OptionEnableAssertions option;

+

+  public ArgHandlerDisableAssertions(OptionEnableAssertions option) {

+    this.option = option;

+  }

+

+  @Override

+  public String getPurpose() {

+    return "Debugging: disables checking assertion statements in the compiled output.";

+  }

+

+  @Override

+  public String getTag() {

+    return "-da";

+  }

+

+  @Override

+  public boolean setFlag() {

+    option.setEnableAssertions(false);

+    return true;

+  }

+

+}

diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableAssertions.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableAssertions.java
index 9697b1c..b2e2f90 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableAssertions.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerEnableAssertions.java
@@ -30,7 +30,7 @@
 
   @Override
   public String getPurpose() {
-    return "Debugging: causes the compiled output to check assert statements.";
+    return "Debugging: enables checking assertion statements in the compiled output.";
   }
 
   @Override
diff --git a/dev/core/test/com/google/gwt/dev/GWTShellTest.java b/dev/core/test/com/google/gwt/dev/GWTShellTest.java
index 29ab059..1e46da0 100644
--- a/dev/core/test/com/google/gwt/dev/GWTShellTest.java
+++ b/dev/core/test/com/google/gwt/dev/GWTShellTest.java
@@ -76,6 +76,16 @@
     assertEquals("foo", options.getStartupURLs().get(1));
   }
 
+  public void testAssertionsArgs() {
+    // Assertion is enabled by default in web mode, i.e. -ea flag.
+    assertProcessSuccess(argProcessor, "-ea");
+    assertTrue(options.isEnableAssertions());
+    assertProcessSuccess(argProcessor, "-da");
+    assertFalse(options.isEnableAssertions());   
+    assertProcessSuccess(argProcessor, "-ea");
+    assertTrue(options.isEnableAssertions());
+  }
+
   public void testDefaultArgs() {
     assertProcessSuccess(argProcessor);
 
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index 2a11a2b..3f69af0 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -1,12 +1,12 @@
 /*
  * 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
@@ -52,26 +52,26 @@
 /**
  * This class is responsible for hosting JUnit test case execution. There are
  * three main pieces to the JUnit system.
- * 
+ *
  * <ul>
  * <li>Test environment</li>
  * <li>Client classes</li>
  * <li>Server classes</li>
  * </ul>
- * 
+ *
  * <p>
  * The test environment consists of this class and the non-translatable version
  * of {@link com.google.gwt.junit.client.GWTTestCase}. These two classes
  * integrate directly into the real JUnit test process.
  * </p>
- * 
+ *
  * <p>
  * The client classes consist of the translatable version of {@link
  * com.google.gwt.junit.client.GWTTestCase}, translatable JUnit classes, and the
  * user's own {@link com.google.gwt.junit.client.GWTTestCase}-derived class.
  * The client communicates to the server via RPC.
  * </p>
- * 
+ *
  * <p>
  * The server consists of {@link com.google.gwt.junit.server.JUnitHostImpl}, an
  * RPC servlet which communicates back to the test environment through a
@@ -330,15 +330,15 @@
 
   /**
    * The amount of time to wait for all clients to have contacted the server and
-   * begin running the test.  "Contacted" does not necessarily mean "the test
-   * has begun," e.g. for linker errors stopping the test initialization.
+   * begin running the test. "Contacted" does not necessarily mean "the test has
+   * begun," e.g. for linker errors stopping the test initialization.
    */
   private static final int TEST_BEGIN_TIMEOUT_MILLIS = 60000;
 
   /**
    * The amount of time to wait for all clients to complete a single test
-   * method, in milliseconds, measured from when the <i>last</i> client 
-   * connects (and thus starts the test).  5 minutes.
+   * method, in milliseconds, measured from when the <i>last</i> client
+   * connects (and thus starts the test). 5 minutes.
    */
   private static final long TEST_METHOD_TIMEOUT_MILLIS = 300000;
 
@@ -351,7 +351,7 @@
   /**
    * Called by {@link com.google.gwt.junit.server.JUnitHostImpl} to get an
    * interface into the test process.
-   * 
+   *
    * @return The {@link JUnitMessageQueue} interface that belongs to the
    *         singleton {@link JUnitShell}, or <code>null</code> if no such
    *         singleton exists.
@@ -503,9 +503,9 @@
   private long testBeginTimeout;
 
   /**
-   * Timeout for individual test method.  If System.currentTimeMillis() is later
-   * than this timestamp, then we need to pack up and go home.  Zero for "not
-   * yet set" (at the start of a test).  This interval begins when the
+   * Timeout for individual test method. If System.currentTimeMillis() is later
+   * than this timestamp, then we need to pack up and go home. Zero for "not yet
+   * set" (at the start of a test). This interval begins when the
    * testBeginTimeout interval is done.
    */
   private long testMethodTimeout;
@@ -522,6 +522,9 @@
     if (System.getProperty(PROP_JUNIT_HYBRID_MODE) != null) {
       runStyle = new RunStyleLocalWeb(this);
     }
+    // If no explicit disable argument presented,
+    // Enables assertions by default in all tests
+    options.setEnableAssertions(true);
   }
 
   @Override
@@ -586,11 +589,12 @@
       } else if (testMethodTimeout < currentTimeMillis) {
         double elapsed = (currentTimeMillis - testBeginTime) / 1000.0;
         throw new TimeoutException(
-            "The browser did not complete the test method " 
+            "The browser did not complete the test method "
                 + messageQueue.getCurrentTestName() + " in "
-                + TEST_METHOD_TIMEOUT_MILLIS + "ms.\n  We have no results from: "
-                + messageQueue.getWorkingClients()
-                + "\n Actual time elapsed: " + elapsed + " seconds.\n");
+                + TEST_METHOD_TIMEOUT_MILLIS
+                + "ms.\n  We have no results from: "
+                + messageQueue.getWorkingClients() + "\n Actual time elapsed: "
+                + elapsed + " seconds.\n");
       }
     } else if (testBeginTimeout < currentTimeMillis) {
       double elapsed = (currentTimeMillis - testBeginTime) / 1000.0;
@@ -668,9 +672,8 @@
       currentModule.clearEntryPoints();
       currentModule.addEntryPointTypeName(GWTRunner.class.getName());
       // Squirrel away the name of the active module for GWTRunnerGenerator
-      ConfigurationProperty moduleNameProp
-          = currentModule.getProperties().createConfiguration(
-              "junit.moduleName", false);
+      ConfigurationProperty moduleNameProp = currentModule.getProperties().createConfiguration(
+          "junit.moduleName", false);
       moduleNameProp.setValue(moduleName);
       runStyle.maybeCompileModule(syntheticModuleName);
     }
@@ -701,7 +704,7 @@
       // contacted; something probably went wrong (the module failed to load?)
       testBeginTime = System.currentTimeMillis();
       testBeginTimeout = testBeginTime + TEST_BEGIN_TIMEOUT_MILLIS;
-      testMethodTimeout = 0;  // wait until test execution begins
+      testMethodTimeout = 0; // wait until test execution begins
       pumpEventLoop();
     } catch (TimeoutException e) {
       lastLaunchFailed = true;
diff --git a/user/test/com/google/gwt/dev/jjs/test/CoverageTest.java b/user/test/com/google/gwt/dev/jjs/test/CoverageTest.java
index 1f71d9b..dbce651 100644
--- a/user/test/com/google/gwt/dev/jjs/test/CoverageTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/CoverageTest.java
@@ -22,9 +22,10 @@
  * possible in the Java to JavaScript compiler. This test is not at all intended
  * to execute correctly.
  */
-@SuppressWarnings("hiding")
 public class CoverageTest extends CoverageBase {
 
+  private static final double EPSILON = 0.000001;
+
   /**
    * TODO: document me.
    */
@@ -196,7 +197,8 @@
         assert i == 3 : 1.2f;
         fail();
       } catch (AssertionError e) {
-        assertEquals("1.2", e.getMessage());
+        double val = Double.parseDouble(e.getMessage());
+        assertTrue(Math.abs(1.2f - val) < EPSILON);
       }
 
       try {
@@ -514,6 +516,7 @@
       o = new CoverageTest().new Inner();
     }
 
+    @SuppressWarnings("static-access")
     private void testQualifiedNameReference() {
       // QualifiedNameReference
       CoverageTest m = new CoverageTest();
@@ -533,6 +536,7 @@
       assertEquals("D", 4, new CoverageTest().getNext().y);
     }
 
+    @SuppressWarnings("static-access")
     private void testReferenceCalls() {
       // MessageSend, QualifiedSuperReference, QualifiedThisReference,
       // SuperReference, ThisReference
@@ -557,6 +561,7 @@
       CoverageTest.super.sfoo();
     }
 
+    @SuppressWarnings("static-access")
     private Inner testReferences() {
       // FieldReference, QualifiedSuperReference, QualifiedThisReference,
       // SuperReference, ThisReference
@@ -598,6 +603,7 @@
       fail();
     }
 
+    @SuppressWarnings("static-access")
     private void testSynchronizedStatement() {
       // SynchronizedStatement
       synchronized (inner) {
diff --git a/user/test/com/google/gwt/event/shared/HandlerManagerTest.java b/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
index 9d9dbaf..acd4865 100644
--- a/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
+++ b/user/test/com/google/gwt/event/shared/HandlerManagerTest.java
@@ -202,24 +202,22 @@
     };

     manager.addHandler(MouseDownEvent.getType(), one);

 

-    if (!GWT.isScript()) {

+    if (HandlerManagerTest.class.desiredAssertionStatus()) {

       try {

         manager.fireEvent(new MouseDownEvent() {

         });

         fail("Should have thrown on remove");

       } catch (AssertionError e) { /* pass */

       }

-      return;

+    } else {

+      manager.fireEvent(new MouseDownEvent() {

+      });

+      assertFired(one);

+      reset();

+      manager.fireEvent(new MouseDownEvent() {

+      });

+      assertFired(one, mouse1);

     }

-

-    // Web mode, no asserts, so remove will quietly succeed.

-    manager.fireEvent(new MouseDownEvent() {

-    });

-    assertFired(one);

-    reset();

-    manager.fireEvent(new MouseDownEvent() {

-    });

-    assertFired(one, mouse1);

   }

 

   public void testMultiFiring() {