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