blob: f1d99e689b12c15879ecf2d6411251b032e1a5ce [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"
5#include "compiler_test.h"
6#include "dex_file.h"
7#include "dex_verifier.h"
8#include "scoped_ptr.h"
9
10#include <stdio.h>
11#include "gtest/gtest.h"
12
13namespace art {
14
15class DexVerifierTest : public CommonTest {
16 protected:
17 void VerifyClass(ClassLoader* class_loader, const StringPiece& descriptor) {
18 ASSERT_TRUE(descriptor != NULL);
19 Class* klass = class_linker_->FindSystemClass(descriptor);
20
21 // Verify the class
22 ASSERT_TRUE(DexVerify::VerifyClass(klass));
23 }
24
25 void VerifyDexFile(const DexFile* dex, ClassLoader* class_loader) {
26 ASSERT_TRUE(dex != NULL);
27
28 // Verify all the classes defined in this file
29 for (size_t i = 0; i < dex->NumClassDefs(); i++) {
30 const DexFile::ClassDef& class_def = dex->GetClassDef(i);
31 const char* descriptor = dex->GetClassDescriptor(class_def);
32 VerifyClass(class_loader, descriptor);
33 }
34 }
35
36};
37
38TEST_F(DexVerifierTest, LibCore) {
39 VerifyDexFile(java_lang_dex_file_.get(), NULL);
40}
41
42TEST_F(DexVerifierTest, IntMath) {
43 const DexFile* dex = OpenDexFileBase64(kIntMathDex, "kIntMathDex");
44 PathClassLoader* class_loader = AllocPathClassLoader(dex);
45 Class* klass = class_linker_->FindClass("LIntMath;", class_loader);
46 ASSERT_TRUE(DexVerify::VerifyClass(klass));
47}
48
49} // namespace art