blob: a9da38fe5ad6c73a022a79502ffd4b844d068f05 [file] [log] [blame]
jeffhaoba5ebb92011-08-25 17:24:37 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#include "class_linker.h"
4#include "common_test.h"
jeffhaoba5ebb92011-08-25 17:24:37 -07005#include "dex_file.h"
6#include "dex_verifier.h"
7#include "scoped_ptr.h"
8
9#include <stdio.h>
jeffhaoba5ebb92011-08-25 17:24:37 -070010
11namespace art {
12
13class DexVerifierTest : public CommonTest {
14 protected:
15 void VerifyClass(ClassLoader* class_loader, const StringPiece& descriptor) {
16 ASSERT_TRUE(descriptor != NULL);
17 Class* klass = class_linker_->FindSystemClass(descriptor);
18
19 // Verify the class
20 ASSERT_TRUE(DexVerify::VerifyClass(klass));
21 }
22
23 void VerifyDexFile(const DexFile* dex, ClassLoader* class_loader) {
24 ASSERT_TRUE(dex != NULL);
25
26 // Verify all the classes defined in this file
27 for (size_t i = 0; i < dex->NumClassDefs(); i++) {
28 const DexFile::ClassDef& class_def = dex->GetClassDef(i);
29 const char* descriptor = dex->GetClassDescriptor(class_def);
30 VerifyClass(class_loader, descriptor);
31 }
32 }
33
34};
35
36TEST_F(DexVerifierTest, LibCore) {
37 VerifyDexFile(java_lang_dex_file_.get(), NULL);
38}
39
40TEST_F(DexVerifierTest, IntMath) {
Brian Carlstrom9f30b382011-08-28 22:41:38 -070041 scoped_ptr<const DexFile> dex(OpenTestDexFile("IntMath"));
42 PathClassLoader* class_loader = AllocPathClassLoader(dex.get());
jeffhaoba5ebb92011-08-25 17:24:37 -070043 Class* klass = class_linker_->FindClass("LIntMath;", class_loader);
44 ASSERT_TRUE(DexVerify::VerifyClass(klass));
45}
46
47} // namespace art