Implement jfieldID and jmethodID properly.
Change-Id: I048107fbca4e21cf34e8fda6defdbc0b97421cf0
diff --git a/src/object_test.cc b/src/object_test.cc
index 3f5333b..549544c 100644
--- a/src/object_test.cc
+++ b/src/object_test.cc
@@ -333,4 +333,62 @@
EXPECT_TRUE(O->IsAssignableFrom(IA));
}
+TEST_F(ObjectTest, FindInstanceField) {
+ String* s = String::AllocFromModifiedUtf8("ABC");
+ ASSERT_TRUE(s != NULL);
+ Class* c = s->GetClass();
+ ASSERT_TRUE(c != NULL);
+
+ // Wrong type.
+ EXPECT_TRUE(c->FindDeclaredInstanceField("count", "J") == NULL);
+ EXPECT_TRUE(c->FindInstanceField("count", "J") == NULL);
+
+ // Wrong name.
+ EXPECT_TRUE(c->FindDeclaredInstanceField("Count", "I") == NULL);
+ EXPECT_TRUE(c->FindInstanceField("Count", "I") == NULL);
+
+ // Right name and type.
+ Field* f1 = c->FindDeclaredInstanceField("count", "I");
+ Field* f2 = c->FindInstanceField("count", "I");
+ EXPECT_TRUE(f1 != NULL);
+ EXPECT_TRUE(f2 != NULL);
+ EXPECT_EQ(f1, f2);
+
+ // TODO: check that s.count == 3.
+
+ // Ensure that we handle superclass fields correctly...
+ c = class_linker_->FindSystemClass("Ljava/lang/StringBuilder;");
+ ASSERT_TRUE(c != NULL);
+ // No StringBuilder.count...
+ EXPECT_TRUE(c->FindDeclaredInstanceField("count", "I") == NULL);
+ // ...but there is an AbstractStringBuilder.count.
+ EXPECT_TRUE(c->FindInstanceField("count", "I") != NULL);
+}
+
+TEST_F(ObjectTest, FindStaticField) {
+ String* s = String::AllocFromModifiedUtf8("ABC");
+ ASSERT_TRUE(s != NULL);
+ Class* c = s->GetClass();
+ ASSERT_TRUE(c != NULL);
+
+ // Wrong type.
+ EXPECT_TRUE(c->FindDeclaredStaticField("CASE_INSENSITIVE_ORDER", "I") == NULL);
+ EXPECT_TRUE(c->FindStaticField("CASE_INSENSITIVE_ORDER", "I") == NULL);
+
+ // Wrong name.
+ EXPECT_TRUE(c->FindDeclaredStaticField("cASE_INSENSITIVE_ORDER", "Ljava/util/Comparator;") == NULL);
+ EXPECT_TRUE(c->FindStaticField("cASE_INSENSITIVE_ORDER", "Ljava/util/Comparator;") == NULL);
+
+ // Right name and type.
+ Field* f1 = c->FindDeclaredStaticField("CASE_INSENSITIVE_ORDER", "Ljava/util/Comparator;");
+ Field* f2 = c->FindStaticField("CASE_INSENSITIVE_ORDER", "Ljava/util/Comparator;");
+ EXPECT_TRUE(f1 != NULL);
+ EXPECT_TRUE(f2 != NULL);
+ EXPECT_EQ(f1, f2);
+
+ // TODO: test static fields via superclasses.
+ // TODO: test static fields via interfaces.
+ // TODO: test that interfaces trump superclasses.
+}
+
} // namespace art