Extra tests (and a bug fix).
I've also added a trailing " " to the CHECK/UNIMPLEMENTED macros'
output, to make it more natural for callers to add their own detail.
Change-Id: I59bc51ac54aaff93f37a6b35082301e19db91304
diff --git a/src/object_test.cc b/src/object_test.cc
index 28aecb0..e11cf07 100644
--- a/src/object_test.cc
+++ b/src/object_test.cc
@@ -65,6 +65,19 @@
EXPECT_TRUE(oa->Get(0) == oa);
EXPECT_TRUE(oa->Get(1) == oa);
+ Thread* self = Thread::Current();
+ Class* aioobe = class_linker_->FindSystemClass("Ljava/lang/ArrayIndexOutOfBoundsException;");
+
+ EXPECT_TRUE(oa->Get(-1) == NULL);
+ EXPECT_TRUE(self->IsExceptionPending());
+ EXPECT_EQ(aioobe, self->GetException()->GetClass());
+ self->ClearException();
+
+ EXPECT_TRUE(oa->Get(2) == NULL);
+ EXPECT_TRUE(self->IsExceptionPending());
+ EXPECT_EQ(aioobe, self->GetException()->GetClass());
+ self->ClearException();
+
ASSERT_TRUE(oa->GetClass() != NULL);
ASSERT_EQ(2U, oa->GetClass()->NumInterfaces());
EXPECT_EQ(class_linker_->FindSystemClass("Ljava/lang/Cloneable;"),
@@ -73,6 +86,60 @@
oa->GetClass()->GetInterface(1));
}
+template<typename ArrayT>
+void TestPrimitiveArray(ClassLinker* cl) {
+ typedef typename ArrayT::ElementType T;
+
+ ArrayT* a = ArrayT::Alloc(2);
+ EXPECT_EQ(2, a->GetLength());
+ EXPECT_EQ(0, a->Get(0));
+ EXPECT_EQ(0, a->Get(1));
+ a->Set(0, T(123));
+ EXPECT_EQ(T(123), a->Get(0));
+ EXPECT_EQ(0, a->Get(1));
+ a->Set(1, T(321));
+ EXPECT_EQ(T(123), a->Get(0));
+ EXPECT_EQ(T(321), a->Get(1));
+
+ Thread* self = Thread::Current();
+ Class* aioobe = cl->FindSystemClass("Ljava/lang/ArrayIndexOutOfBoundsException;");
+
+ EXPECT_EQ(0, a->Get(-1));
+ EXPECT_TRUE(self->IsExceptionPending());
+ EXPECT_EQ(aioobe, self->GetException()->GetClass());
+ self->ClearException();
+
+ EXPECT_EQ(0, a->Get(2));
+ EXPECT_TRUE(self->IsExceptionPending());
+ EXPECT_EQ(aioobe, self->GetException()->GetClass());
+ self->ClearException();
+}
+
+TEST_F(ObjectTest, PrimitiveArray_Boolean_Alloc) {
+ TestPrimitiveArray<BooleanArray>(class_linker_);
+}
+TEST_F(ObjectTest, PrimitiveArray_Byte_Alloc) {
+ TestPrimitiveArray<ByteArray>(class_linker_);
+}
+TEST_F(ObjectTest, PrimitiveArray_Char_Alloc) {
+ TestPrimitiveArray<CharArray>(class_linker_);
+}
+TEST_F(ObjectTest, PrimitiveArray_Double_Alloc) {
+ TestPrimitiveArray<DoubleArray>(class_linker_);
+}
+TEST_F(ObjectTest, PrimitiveArray_Float_Alloc) {
+ TestPrimitiveArray<FloatArray>(class_linker_);
+}
+TEST_F(ObjectTest, PrimitiveArray_Int_Alloc) {
+ TestPrimitiveArray<IntArray>(class_linker_);
+}
+TEST_F(ObjectTest, PrimitiveArray_Long_Alloc) {
+ TestPrimitiveArray<LongArray>(class_linker_);
+}
+TEST_F(ObjectTest, PrimitiveArray_Short_Alloc) {
+ TestPrimitiveArray<ShortArray>(class_linker_);
+}
+
TEST_F(ObjectTest, String) {
// Test the empty string.
AssertString(0, "", "", 0);