Extracts CompilationStateTestBase from CompilationStateTest to reuse.

Patch by: jat
Review by: me

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6657 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/test/com/google/gwt/dev/javac/CompilationStateTest.java b/dev/core/test/com/google/gwt/dev/javac/CompilationStateTest.java
index dfd7071..abdcfe0 100644
--- a/dev/core/test/com/google/gwt/dev/javac/CompilationStateTest.java
+++ b/dev/core/test/com/google/gwt/dev/javac/CompilationStateTest.java
@@ -15,99 +15,21 @@
  */
 package com.google.gwt.dev.javac;
 
-import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.dev.javac.CompilationUnit.State;
-import com.google.gwt.dev.javac.StandardGeneratorContext.Generated;
 import com.google.gwt.dev.javac.impl.JavaResourceBase;
 import com.google.gwt.dev.javac.impl.MockJavaResource;
 import com.google.gwt.dev.javac.impl.MockResourceOracle;
 import com.google.gwt.dev.javac.impl.SourceFileCompilationUnit;
-import com.google.gwt.dev.resource.Resource;
-import com.google.gwt.dev.util.Util;
-import com.google.gwt.dev.util.log.AbstractTreeLogger;
-import com.google.gwt.dev.util.log.PrintWriterTreeLogger;
 
-import junit.framework.TestCase;
-
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.Map.Entry;
 
 /**
  * Tests {@link CompilationState}.
  */
-public class CompilationStateTest extends TestCase {
-
-  private static class GeneratedSourceFileCompilationUnit extends
-      SourceFileCompilationUnit implements Generated {
-
-    private final boolean modifySource;
-    private String strongHash;
-
-    public GeneratedSourceFileCompilationUnit(Resource sourceFile, boolean modifySource) {
-      super(sourceFile);
-      this.modifySource = modifySource;
-    }
-
-    public void abort() {
-    }
-
-    public void commit() {
-    }
-
-    @Override
-    public String getSource() {
-      String extraChars = "";
-      if (modifySource) {
-        extraChars = "\n";
-      }
-      return super.getSource() + extraChars;
-    }
-
-    public String getStrongHash() {
-      if (strongHash == null) {
-        strongHash = Util.computeStrongName(Util.getBytes(getSource()));
-      }
-      return strongHash;
-    }
-
-    @Override
-    public boolean isGenerated() {
-      return true;
-    }
-  }
-
-  static void assertUnitsChecked(Collection<CompilationUnit> units) {
-    for (CompilationUnit unit : units) {
-      assertSame(State.CHECKED, unit.getState());
-      assertNull(unit.getErrors());
-      assertTrue(unit.getCompiledClasses().size() > 0);
-    }
-  }
-
-  /**
-   * Tweak this if you want to see the log output.
-   */
-  private static TreeLogger createTreeLogger() {
-    boolean reallyLog = false;
-    if (reallyLog) {
-      AbstractTreeLogger logger = new PrintWriterTreeLogger();
-      logger.setMaxDetail(TreeLogger.ALL);
-      return logger;
-    }
-    return TreeLogger.NULL;
-  }
-
-  private MockResourceOracle oracle = new MockResourceOracle(
-      JavaResourceBase.getStandardResources());
-
-  private CompilationState state = new CompilationState(createTreeLogger(),
-      oracle);
+public class CompilationStateTest extends CompilationStateTestBase {
 
   public void testAddGeneratedCompilationUnit() {
     validateCompilationState();
@@ -325,31 +247,6 @@
         2);
   }
 
-  private void addGeneratedUnits(MockJavaResource... sourceFiles) {
-    Set<CompilationUnit> units = getCompilationUnits(sourceFiles);
-    state.addGeneratedCompilationUnits(createTreeLogger(), units);
-  }
-
-  private Set<CompilationUnit> getCompilationUnits(
-      MockJavaResource... sourceFiles) {
-    Set<CompilationUnit> units = new HashSet<CompilationUnit>();
-    for (MockJavaResource sourceFile : sourceFiles) {
-      // keep the same source
-      units.add(new GeneratedSourceFileCompilationUnit(sourceFile, false));
-    }
-    return units;
-  }
-
-  private Set<CompilationUnit> getModifiedCompilationUnits(
-      MockJavaResource... sourceFiles) {
-    Set<CompilationUnit> units = new HashSet<CompilationUnit>();
-    for (MockJavaResource sourceFile : sourceFiles) {
-      // modify the source
-      units.add(new GeneratedSourceFileCompilationUnit(sourceFile, true));
-    }
-    return units;
-  }
-
   private void testCaching(MockJavaResource... files) {
     Set<String> reusedTypes = new HashSet<String>();
     for (MockJavaResource file : files) {
@@ -382,7 +279,7 @@
     state.refresh(createTreeLogger());
     assertEquals(0, state.graveyardUnits.size());
 
-    // add 'updatedSet' generatedUnits over the first refresh cycle.
+    // add 'initialSet' generatedUnits over the first refresh cycle.
     testCachingOverSingleRefresh(new HashSet<CompilationUnit>(initialSet), 0,
         Collections.<String> emptySet(), 0);
 
@@ -434,41 +331,4 @@
         usefulUnits);
     assertUnitsChecked(state.getCompilationUnits());
   }
-
-  private void validateCompilationState(String... generatedTypeNames) {
-    // Save off the reflected collections.
-    Map<String, CompilationUnit> unitMap = state.getCompilationUnitMap();
-    Collection<CompilationUnit> units = state.getCompilationUnits();
-
-    // Validate that the collections are consistent with each other.
-    assertEquals(new HashSet<CompilationUnit>(unitMap.values()),
-        new HashSet<CompilationUnit>(units));
-
-    // Save off a mutable copy of the source map and generated types to compare.
-    Map<String, Resource> sourceMap = new HashMap<String, Resource>(
-        oracle.getResourceMap());
-    Set<String> generatedTypes = new HashSet<String>(
-        Arrays.asList(generatedTypeNames));
-    assertEquals(sourceMap.size() + generatedTypes.size(), units.size());
-    for (Entry<String, CompilationUnit> entry : unitMap.entrySet()) {
-      // Validate source file internally consistent.
-      String className = entry.getKey();
-      CompilationUnit unit = entry.getValue();
-      assertEquals(className, unit.getTypeName());
-
-      // Find the matching resource (and remove it).
-      if (unit.isGenerated()) {
-        assertTrue(generatedTypes.contains(className));
-        assertNotNull(generatedTypes.remove(className));
-      } else {
-        String partialPath = className.replace('.', '/') + ".java";
-        assertTrue(sourceMap.containsKey(partialPath));
-        // TODO: Validate the source file matches the resource.
-        assertNotNull(sourceMap.remove(partialPath));
-      }
-    }
-    // The mutable sets should be empty now.
-    assertEquals(0, sourceMap.size());
-    assertEquals(0, generatedTypes.size());
-  }
 }
diff --git a/dev/core/test/com/google/gwt/dev/javac/CompilationStateTestBase.java b/dev/core/test/com/google/gwt/dev/javac/CompilationStateTestBase.java
new file mode 100644
index 0000000..4de3599
--- /dev/null
+++ b/dev/core/test/com/google/gwt/dev/javac/CompilationStateTestBase.java
@@ -0,0 +1,173 @@
+/*

+ * 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.dev.javac;

+

+import com.google.gwt.core.ext.TreeLogger;

+import com.google.gwt.dev.javac.CompilationUnit.State;

+import com.google.gwt.dev.javac.StandardGeneratorContext.Generated;

+import com.google.gwt.dev.javac.impl.JavaResourceBase;

+import com.google.gwt.dev.javac.impl.MockJavaResource;

+import com.google.gwt.dev.javac.impl.MockResourceOracle;

+import com.google.gwt.dev.javac.impl.SourceFileCompilationUnit;

+import com.google.gwt.dev.resource.Resource;

+import com.google.gwt.dev.util.Util;

+import com.google.gwt.dev.util.log.AbstractTreeLogger;

+import com.google.gwt.dev.util.log.PrintWriterTreeLogger;

+

+import junit.framework.TestCase;

+

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.HashMap;

+import java.util.HashSet;

+import java.util.Map;

+import java.util.Set;

+import java.util.Map.Entry;

+

+/**

+ * Base class for tests that need a mock type compilation state and everything

+ * that goes with it (compilation units, type oracle, resources, ...).

+ */

+public abstract class CompilationStateTestBase extends TestCase {

+

+  protected static class GeneratedSourceFileCompilationUnit extends

+      SourceFileCompilationUnit implements Generated {

+

+    private final boolean modifySource;

+    private String strongHash;

+

+    public GeneratedSourceFileCompilationUnit(Resource sourceFile, boolean modifySource) {

+      super(sourceFile);

+      this.modifySource = modifySource;

+    }

+

+    public void abort() {

+    }

+

+    public void commit() {

+    }

+

+    @Override

+    public String getSource() {

+      String extraChars = "";

+      if (modifySource) {

+        extraChars = "\n";

+      }

+      return super.getSource() + extraChars;

+    }

+

+    public String getStrongHash() {

+      if (strongHash == null) {

+        strongHash = Util.computeStrongName(Util.getBytes(getSource()));

+      }

+      return strongHash;

+    }

+

+    @Override

+    public boolean isGenerated() {

+      return true;

+    }

+  }

+

+  static void assertUnitsChecked(Collection<CompilationUnit> units) {

+    for (CompilationUnit unit : units) {

+      assertSame(State.CHECKED, unit.getState());

+      assertNull(unit.getErrors());

+      assertTrue(unit.getCompiledClasses().size() > 0);

+    }

+  }

+

+  /**

+   * Tweak this if you want to see the log output.

+   */

+  protected static TreeLogger createTreeLogger() {

+    boolean reallyLog = false;

+    if (reallyLog) {

+      AbstractTreeLogger logger = new PrintWriterTreeLogger();

+      logger.setMaxDetail(TreeLogger.ALL);

+      return logger;

+    }

+    return TreeLogger.NULL;

+  }

+

+  protected MockResourceOracle oracle = new MockResourceOracle(

+      JavaResourceBase.getStandardResources());

+

+  protected CompilationState state = new CompilationState(createTreeLogger(),

+      oracle);

+

+  protected void addGeneratedUnits(MockJavaResource... sourceFiles) {

+    Set<CompilationUnit> units = getCompilationUnits(sourceFiles);

+    state.addGeneratedCompilationUnits(createTreeLogger(), units);

+  }

+

+  protected Set<CompilationUnit> getCompilationUnits(

+      MockJavaResource... sourceFiles) {

+    Set<CompilationUnit> units = new HashSet<CompilationUnit>();

+    for (MockJavaResource sourceFile : sourceFiles) {

+      // keep the same source

+      units.add(new GeneratedSourceFileCompilationUnit(sourceFile, false));

+    }

+    return units;

+  }

+

+  protected Set<CompilationUnit> getModifiedCompilationUnits(

+      MockJavaResource... sourceFiles) {

+    Set<CompilationUnit> units = new HashSet<CompilationUnit>();

+    for (MockJavaResource sourceFile : sourceFiles) {

+      // modify the source

+      units.add(new GeneratedSourceFileCompilationUnit(sourceFile, true));

+    }

+    return units;

+  }

+

+  protected void validateCompilationState(String... generatedTypeNames) {

+    // Save off the reflected collections.

+    Map<String, CompilationUnit> unitMap = state.getCompilationUnitMap();

+    Collection<CompilationUnit> units = state.getCompilationUnits();

+

+    // Validate that the collections are consistent with each other.

+    assertEquals(new HashSet<CompilationUnit>(unitMap.values()),

+        new HashSet<CompilationUnit>(units));

+

+    // Save off a mutable copy of the source map and generated types to compare.

+    Map<String, Resource> sourceMap = new HashMap<String, Resource>(

+        oracle.getResourceMap());

+    Set<String> generatedTypes = new HashSet<String>(

+        Arrays.asList(generatedTypeNames));

+    assertEquals(sourceMap.size() + generatedTypes.size(), units.size());

+    for (Entry<String, CompilationUnit> entry : unitMap.entrySet()) {

+      // Validate source file internally consistent.

+      String className = entry.getKey();

+      CompilationUnit unit = entry.getValue();

+      assertEquals(className, unit.getTypeName());

+

+      // Find the matching resource (and remove it).

+      if (unit.isGenerated()) {

+        assertTrue(generatedTypes.contains(className));

+        assertNotNull(generatedTypes.remove(className));

+      } else {

+        String partialPath = className.replace('.', '/') + ".java";

+        assertTrue(sourceMap.containsKey(partialPath));

+        // TODO: Validate the source file matches the resource.

+        assertNotNull(sourceMap.remove(partialPath));

+      }

+    }

+    // The mutable sets should be empty now.

+    assertEquals(0, sourceMap.size());

+    assertEquals(0, generatedTypes.size());

+  }

+}