Make the RuntimeTest use Runtime instances instead of its constituents.
Change-Id: I1005f279259917ff07d24e3bcd3643992ec8e3bd
diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index 2025b71..41fa5b1 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -11,11 +11,11 @@
class ClassLinkerTest : public RuntimeTest {
protected:
void AssertNonExistantClass(const StringPiece& descriptor) {
- EXPECT_TRUE(class_linker_.get()->FindSystemClass(descriptor) == NULL);
+ EXPECT_TRUE(class_linker_->FindSystemClass(descriptor) == NULL);
}
void AssertPrimitiveClass(const StringPiece& descriptor) {
- Class* primitive = class_linker_.get()->FindSystemClass(descriptor);
+ Class* primitive = class_linker_->FindSystemClass(descriptor);
ASSERT_TRUE(primitive != NULL);
ASSERT_TRUE(primitive->GetClass() != NULL);
ASSERT_EQ(primitive->GetClass(), primitive->GetClass()->GetClass());
@@ -44,14 +44,14 @@
void AssertArrayClass(const StringPiece& array_descriptor,
int32_t array_rank,
const StringPiece& component_type) {
- Class* array = class_linker_.get()->FindSystemClass(array_descriptor);
+ Class* array = class_linker_->FindSystemClass(array_descriptor);
ASSERT_TRUE(array != NULL);
ASSERT_TRUE(array->GetClass() != NULL);
ASSERT_EQ(array->GetClass(), array->GetClass()->GetClass());
EXPECT_TRUE(array->GetClass()->GetSuperClass() != NULL);
ASSERT_EQ(array_descriptor, array->GetDescriptor());
EXPECT_TRUE(array->GetSuperClass() != NULL);
- EXPECT_EQ(class_linker_.get()->FindSystemClass("Ljava/lang/Object;"), array->GetSuperClass());
+ EXPECT_EQ(class_linker_->FindSystemClass("Ljava/lang/Object;"), array->GetSuperClass());
EXPECT_TRUE(array->HasSuperClass());
ASSERT_TRUE(array->GetComponentType() != NULL);
ASSERT_TRUE(array->GetComponentType()->GetDescriptor() != NULL);
@@ -75,29 +75,29 @@
};
TEST_F(ClassLinkerTest, FindClassNonexistent) {
- Class* result1 = class_linker_.get()->FindSystemClass("NoSuchClass;");
+ Class* result1 = class_linker_->FindSystemClass("NoSuchClass;");
EXPECT_TRUE(result1 == NULL);
- Class* result2 = class_linker_.get()->FindSystemClass("LNoSuchClass;");
+ Class* result2 = class_linker_->FindSystemClass("LNoSuchClass;");
EXPECT_TRUE(result2 == NULL);
}
TEST_F(ClassLinkerTest, FindClassNested) {
scoped_ptr<DexFile> nested_dex(OpenDexFileBase64(kNestedDex));
- class_linker_.get()->RegisterDexFile(nested_dex.get());
+ class_linker_->RegisterDexFile(nested_dex.get());
- Class* outer = class_linker_.get()->FindClass("LNested;", NULL, nested_dex.get());
+ Class* outer = class_linker_->FindClass("LNested;", NULL, nested_dex.get());
ASSERT_TRUE(outer != NULL);
EXPECT_EQ(0U, outer->NumVirtualMethods());
EXPECT_EQ(1U, outer->NumDirectMethods());
- Class* inner = class_linker_.get()->FindClass("LNested$Inner;", NULL, nested_dex.get());
+ Class* inner = class_linker_->FindClass("LNested$Inner;", NULL, nested_dex.get());
ASSERT_TRUE(inner != NULL);
EXPECT_EQ(0U, inner->NumVirtualMethods());
EXPECT_EQ(1U, inner->NumDirectMethods());
}
TEST_F(ClassLinkerTest, FindClass) {
- ClassLinker* linker = class_linker_.get();
+ ClassLinker* linker = class_linker_;
StringPiece expected = "BCDFIJSZV";
for (int ch = 0; ch < 255; ch++) {
@@ -176,7 +176,7 @@
}
TEST_F(ClassLinkerTest, ProtoCompare) {
- ClassLinker* linker = class_linker_.get();
+ ClassLinker* linker = class_linker_;
scoped_ptr<DexFile> proto_dex_file(OpenDexFileBase64(kProtoCompareDex));
linker->RegisterDexFile(proto_dex_file.get());
@@ -230,7 +230,7 @@
}
TEST_F(ClassLinkerTest, ProtoCompare2) {
- ClassLinker* linker = class_linker_.get();
+ ClassLinker* linker = class_linker_;
scoped_ptr<DexFile> proto1_dex_file(OpenDexFileBase64(kProtoCompareDex));
linker->RegisterDexFile(proto1_dex_file.get());
diff --git a/src/common_test.h b/src/common_test.h
index e7b4f30..237939b 100644
--- a/src/common_test.h
+++ b/src/common_test.h
@@ -173,25 +173,19 @@
class RuntimeTest : public testing::Test {
protected:
virtual void SetUp() {
- ASSERT_TRUE(Thread::Init());
- ASSERT_TRUE(Thread::Attach() != NULL);
- ASSERT_TRUE(Heap::Init());
-
java_lang_dex_file_.reset(OpenDexFileBase64(kJavaLangDex));
std::vector<DexFile*> boot_class_path;
boot_class_path.push_back(java_lang_dex_file_.get());
- class_linker_.reset(ClassLinker::Create(boot_class_path));
- CHECK(class_linker_ != NULL);
- }
-
- virtual void TearDown() {
- Heap::Destroy();
+ runtime_.reset(Runtime::Create(boot_class_path));
+ ASSERT_TRUE(runtime_ != NULL);
+ class_linker_ = runtime_->GetClassLinker();
}
scoped_ptr<DexFile> java_lang_dex_file_;
- scoped_ptr<ClassLinker> class_linker_;
+ scoped_ptr<Runtime> runtime_;
+ ClassLinker* class_linker_;
};
} // namespace art
diff --git a/src/jni_compiler_test.cc b/src/jni_compiler_test.cc
index 4d5e7da..225ca5c 100644
--- a/src/jni_compiler_test.cc
+++ b/src/jni_compiler_test.cc
@@ -18,11 +18,6 @@
protected:
virtual void SetUp() {
RuntimeTest::SetUp();
- // Create runtime and attach thread
- std::vector<DexFile*> boot_class_path;
- boot_class_path.push_back(java_lang_dex_file_.get());
- runtime_ = Runtime::Create(boot_class_path);
- CHECK(runtime_->AttachCurrentThread());
// Create thunk code that performs the native to managed transition
thunk_code_size_ = 4096;
thunk_ = mmap(NULL, thunk_code_size_, PROT_READ | PROT_WRITE | PROT_EXEC,
@@ -97,7 +92,6 @@
return result;
}
- Runtime* runtime_;
void* thunk_;
size_t thunk_code_size_;
jint (*thunk_entry1_)(const void*, Method*, jobject, jint, jint, jint);
@@ -185,8 +179,8 @@
TEST_F(JniCompilerTest, CompileAndRunNoArgMethod) {
scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
- class_linker_.get()->RegisterDexFile(dex.get());
- Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+ class_linker_->RegisterDexFile(dex.get());
+ Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
Method* method = klass->FindVirtualMethod("foo");
Assembler jni_asm;
@@ -210,8 +204,8 @@
TEST_F(JniCompilerTest, CompileAndRunIntMethod) {
scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
- class_linker_.get()->RegisterDexFile(dex.get());
- Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+ class_linker_->RegisterDexFile(dex.get());
+ Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
Method* method = klass->FindVirtualMethod("fooI");
Assembler jni_asm;
@@ -237,8 +231,8 @@
TEST_F(JniCompilerTest, CompileAndRunIntIntMethod) {
scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
- class_linker_.get()->RegisterDexFile(dex.get());
- Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+ class_linker_->RegisterDexFile(dex.get());
+ Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
Method* method = klass->FindVirtualMethod("fooII");
Assembler jni_asm;
@@ -267,8 +261,8 @@
TEST_F(JniCompilerTest, CompileAndRunDoubleDoubleMethod) {
scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
- class_linker_.get()->RegisterDexFile(dex.get());
- Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+ class_linker_->RegisterDexFile(dex.get());
+ Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
Method* method = klass->FindVirtualMethod("fooDD");
Assembler jni_asm;
@@ -296,8 +290,8 @@
TEST_F(JniCompilerTest, CompileAndRunIntObjectObjectMethod) {
scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
- class_linker_.get()->RegisterDexFile(dex.get());
- Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+ class_linker_->RegisterDexFile(dex.get());
+ Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
Method* method = klass->FindVirtualMethod("fooIOO");
Assembler jni_asm;
@@ -351,8 +345,8 @@
TEST_F(JniCompilerTest, CompileAndRunStaticIntObjectObjectMethod) {
scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
- class_linker_.get()->RegisterDexFile(dex.get());
- Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+ class_linker_->RegisterDexFile(dex.get());
+ Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
Method* method = klass->FindDirectMethod("fooSIOO");
Assembler jni_asm;
@@ -403,8 +397,8 @@
TEST_F(JniCompilerTest, CompileAndRunStaticSynchronizedIntObjectObjectMethod) {
scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
- class_linker_.get()->RegisterDexFile(dex.get());
- Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+ class_linker_->RegisterDexFile(dex.get());
+ Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
Method* method = klass->FindDirectMethod("fooSSIOO");
Assembler jni_asm;
@@ -461,8 +455,8 @@
}
TEST_F(JniCompilerTest, SuspendCountAcknolewdgement) {
scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
- class_linker_.get()->RegisterDexFile(dex.get());
- Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+ class_linker_->RegisterDexFile(dex.get());
+ Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
Method* method = klass->FindVirtualMethod("fooI");
Assembler jni_asm;
@@ -502,8 +496,8 @@
}
TEST_F(JniCompilerTest, ExceptionHandling) {
scoped_ptr<DexFile> dex(OpenDexFileBase64(kMyClassNativesDex));
- class_linker_.get()->RegisterDexFile(dex.get());
- Class* klass = class_linker_.get()->FindClass("LMyClass;", NULL, dex.get());
+ class_linker_->RegisterDexFile(dex.get());
+ Class* klass = class_linker_->FindClass("LMyClass;", NULL, dex.get());
Method* method = klass->FindVirtualMethod("foo");
Assembler jni_asm;
diff --git a/src/runtime.h b/src/runtime.h
index da773a3..b57f1cf 100644
--- a/src/runtime.h
+++ b/src/runtime.h
@@ -39,6 +39,10 @@
~Runtime();
+ ClassLinker* GetClassLinker() {
+ return class_linker_;
+ }
+
private:
static void PlatformAbort(const char*, int);
diff --git a/src/thread.cc b/src/thread.cc
index 56eeb7f..c2483c0 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -156,7 +156,10 @@
// Make sure that all threads have exited and unregistered when we
// reach this point. This means that all daemon threads had been
// shutdown cleanly.
- CHECK_EQ(list_.size(), 0U);
+ CHECK_EQ(list_.size(), 1U);
+ // TODO: wait for all other threads to unregister
+ CHECK_EQ(list_.front(), Thread::Current());
+ // TODO: detach the current thread
delete lock_;
lock_ = NULL;
}