Added first pass of verifier and supporting changes.

The verifier still needs to make a second pass through the code where it
checks the code flow. A TODO marks where it will be added.

Change-Id: I0abea5bad563776186df342d8132fb1ca8869652
diff --git a/src/dex_verifier_test.cc b/src/dex_verifier_test.cc
new file mode 100644
index 0000000..f1d99e6
--- /dev/null
+++ b/src/dex_verifier_test.cc
@@ -0,0 +1,49 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+#include "class_linker.h"
+#include "common_test.h"
+#include "compiler_test.h"
+#include "dex_file.h"
+#include "dex_verifier.h"
+#include "scoped_ptr.h"
+
+#include <stdio.h>
+#include "gtest/gtest.h"
+
+namespace art {
+
+class DexVerifierTest : public CommonTest {
+ protected:
+  void VerifyClass(ClassLoader* class_loader, const StringPiece& descriptor) {
+    ASSERT_TRUE(descriptor != NULL);
+    Class* klass = class_linker_->FindSystemClass(descriptor);
+
+    // Verify the class
+    ASSERT_TRUE(DexVerify::VerifyClass(klass));
+  }
+
+  void VerifyDexFile(const DexFile* dex, ClassLoader* class_loader) {
+    ASSERT_TRUE(dex != NULL);
+
+    // Verify all the classes defined in this file
+    for (size_t i = 0; i < dex->NumClassDefs(); i++) {
+      const DexFile::ClassDef& class_def = dex->GetClassDef(i);
+      const char* descriptor = dex->GetClassDescriptor(class_def);
+      VerifyClass(class_loader, descriptor);
+    }
+  }
+
+};
+
+TEST_F(DexVerifierTest, LibCore) {
+  VerifyDexFile(java_lang_dex_file_.get(), NULL);
+}
+
+TEST_F(DexVerifierTest, IntMath) {
+  const DexFile* dex = OpenDexFileBase64(kIntMathDex, "kIntMathDex");
+  PathClassLoader* class_loader = AllocPathClassLoader(dex);
+  Class* klass = class_linker_->FindClass("LIntMath;", class_loader);
+  ASSERT_TRUE(DexVerify::VerifyClass(klass));
+}
+
+}  // namespace art