Adds a simple JJS test to verify that enums compile.

TODO: improve this test.

http://gwt-code-reviews.appspot.com/640803/show
Review by: spoon


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8290 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/test/com/google/gwt/dev/jjs/JavaAstConstructor.java b/dev/core/test/com/google/gwt/dev/jjs/JavaAstConstructor.java
index 6c1035c..544dc2d 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/JavaAstConstructor.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/JavaAstConstructor.java
@@ -93,6 +93,22 @@
       return code;
     }
   };
+  public static final MockJavaResource ENUM = new MockJavaResource(
+      "java.lang.Enum") {
+    @Override
+    protected CharSequence getContent() {
+      StringBuffer code = new StringBuffer();
+      code.append("package java.lang;\n");
+      code.append("import java.io.Serializable;\n");
+      code.append("import com.google.gwt.core.client.JavaScriptObject;\n");
+      code.append("public abstract class Enum<E extends Enum<E>> implements Serializable {\n");
+      code.append("  protected Enum(String name, int ordinal) {}\n");
+      code.append("  protected static <T extends Enum<T>> JavaScriptObject createValueOfMap(T[] enumConstants) { return null; }\n");
+      code.append("  protected static <T extends Enum<T>> T valueOf(JavaScriptObject map, String name) { return null; }\n");
+      code.append("}\n");
+      return code;
+    }
+  };
   public static final MockJavaResource GWT = new MockJavaResource(
       "com.google.gwt.core.client.GWT") {
     @Override
@@ -209,9 +225,10 @@
   public static MockJavaResource[] getCompilerTypes() {
     List<MockJavaResource> result = new ArrayList<MockJavaResource>();
     Collections.addAll(result, JavaResourceBase.getStandardResources());
-    // Replace the basic Class with a compiler-specific one.
+    // Replace the basic Class and Enum with a compiler-specific one.
     result.remove(JavaResourceBase.CLASS);
-    Collections.addAll(result, ARRAY, CLASS, CLASSLITERALHOLDER, GWT,
+    result.remove(JavaResourceBase.ENUM);
+    Collections.addAll(result, ARRAY, CLASS, CLASSLITERALHOLDER, ENUM, GWT,
         RUNASYNCCALLBACK);
     return result.toArray(new MockJavaResource[result.size()]);
   }
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/JEnumTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/JEnumTest.java
new file mode 100644
index 0000000..a8904f5
--- /dev/null
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/JEnumTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2010 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.jjs.impl;
+
+import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.dev.javac.impl.MockJavaResource;
+import com.google.gwt.dev.jjs.ast.JDeclaredType;
+import com.google.gwt.dev.jjs.ast.JEnumField;
+import com.google.gwt.dev.jjs.ast.JField;
+import com.google.gwt.dev.jjs.ast.JProgram;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Tests AST setup of Enums.
+ */
+public class JEnumTest extends JJSTestBase {
+
+  public void setUp() {
+    sourceOracle.addOrReplace(new MockJavaResource("test.Simple") {
+      @Override
+      protected CharSequence getContent() {
+        StringBuffer code = new StringBuffer();
+        code.append("package test;\n");
+        code.append("public enum Simple {\n");
+        code.append("  FOO, BAR, BAZ;\n");
+        code.append("}\n");
+        return code;
+      }
+    });
+  }
+
+  public void testBasic() throws UnableToCompleteException {
+    JProgram program = compileSnippet("void", "test.Simple.FOO.toString();");
+
+    JDeclaredType simple = findType(program, "test.Simple");
+    Set<JEnumField> enumFields = new HashSet<JEnumField>();
+    for (JField field : simple.getFields()) {
+      if (field instanceof JEnumField) {
+        enumFields.add((JEnumField) field);
+      }
+    }
+    assertEquals(3, enumFields.size());
+  }
+}