diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ExceptionTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ExceptionTest.java
new file mode 100644
index 0000000..b737106
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ExceptionTest.java
@@ -0,0 +1,50 @@
+// Copyright 2015 Google Inc. All rights reserved.
+//
+// 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.devtools.build.lib.syntax;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.devtools.build.lib.events.Location;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * A test class for exceptions.
+ */
+@RunWith(JUnit4.class)
+public class ExceptionTest {
+
+  @Test
+  public void testEmptyMessage() throws Exception {
+    EvalExceptionWithStackTrace ex =
+        new EvalExceptionWithStackTrace(new NullPointerException(), Location.BUILTIN);
+    assertThat(ex).hasMessage("Null Pointer");
+  }
+
+  @Test
+  public void testExceptionCause() throws Exception {
+    IllegalArgumentException iae = new IllegalArgumentException("foo");
+    EvalException ee = new EvalException(Location.BUILTIN, iae);
+
+    runExceptionTest(iae, iae);
+    runExceptionTest(ee, iae);
+  }
+
+  private void runExceptionTest(Exception toThrow, Exception expectedCause) {
+    EvalExceptionWithStackTrace ex = new EvalExceptionWithStackTrace(toThrow, Location.BUILTIN);
+    assertThat(ex.getCause()).isEqualTo(expectedCause);
+  }
+}
