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());
+  }
+}
