Index: base/android/jni_array_unittest.cc |
diff --git a/base/android/jni_array_unittest.cc b/base/android/jni_array_unittest.cc |
index 58b244322a6c21ed7cb74ecb6caf733ddbfe32a4..e9ae3fcc3dc2beadb0ee9bccd0859d20581a8b21 100644 |
--- a/base/android/jni_array_unittest.cc |
+++ b/base/android/jni_array_unittest.cc |
@@ -86,6 +86,17 @@ TEST(JniArray, LongConversions) { |
CheckLongConversion(env, kLongs, kLen, ToJavaLongArray(env, vec)); |
} |
+void CheckIntArrayConversion(JNIEnv* env, |
+ ScopedJavaLocalRef<jintArray> jints, |
+ std::vector<int> int_vector, |
+ const size_t len) { |
+ jint value; |
+ for (size_t i = 0; i < len; ++i) { |
+ env->GetIntArrayRegion(jints.obj(), i, 1, &value); |
+ ASSERT_EQ(int_vector[i], value); |
+ } |
+} |
+ |
TEST(JniArray, JavaIntArrayToIntVector) { |
const int kInts[] = {0, 1, -1}; |
const size_t kLen = arraysize(kInts); |
@@ -105,11 +116,7 @@ TEST(JniArray, JavaIntArrayToIntVector) { |
ASSERT_EQ(static_cast<jsize>(ints.size()), env->GetArrayLength(jints.obj())); |
- jint value; |
- for (size_t i = 0; i < kLen; ++i) { |
- env->GetIntArrayRegion(jints.obj(), i, 1, &value); |
- ASSERT_EQ(ints[i], value); |
- } |
+ CheckIntArrayConversion(env, jints, ints, kLen); |
} |
TEST(JniArray, JavaLongArrayToInt64Vector) { |
@@ -230,5 +237,49 @@ TEST(JniArray, JavaArrayOfByteArrayToStringVector) { |
} |
} |
+TEST(JniArray, JavaArrayOfIntArrayToIntVector) { |
+ const size_t kNumItems = 4; |
+ JNIEnv* env = AttachCurrentThread(); |
+ |
+ // Create an int[][] object. |
+ ScopedJavaLocalRef<jclass> int_array_clazz(env, env->FindClass("[I")); |
+ ASSERT_TRUE(int_array_clazz.obj()); |
+ |
+ ScopedJavaLocalRef<jobjectArray> array( |
+ env, env->NewObjectArray(kNumItems, int_array_clazz.obj(), nullptr)); |
+ ASSERT_TRUE(array.obj()); |
+ |
+ // Populate int[][] object. |
+ const int kInts0[] = {0, 1, -1, kint32min, kint32max}; |
+ const size_t kLen0 = arraysize(kInts0); |
+ ScopedJavaLocalRef<jintArray> int_array0 = ToJavaIntArray(env, kInts0, kLen0); |
+ env->SetObjectArrayElement(array.obj(), 0, int_array0.obj()); |
+ |
+ const int kInts1[] = {3, 4, 5}; |
+ const size_t kLen1 = arraysize(kInts1); |
+ ScopedJavaLocalRef<jintArray> int_array1 = ToJavaIntArray(env, kInts1, kLen1); |
+ env->SetObjectArrayElement(array.obj(), 1, int_array1.obj()); |
+ |
+ const int kInts2[] = {}; |
+ const size_t kLen2 = 0; |
+ ScopedJavaLocalRef<jintArray> int_array2 = ToJavaIntArray(env, kInts2, kLen2); |
+ env->SetObjectArrayElement(array.obj(), 2, int_array2.obj()); |
+ |
+ const int kInts3[] = {16}; |
+ const size_t kLen3 = arraysize(kInts3); |
+ ScopedJavaLocalRef<jintArray> int_array3 = ToJavaIntArray(env, kInts3, kLen3); |
+ env->SetObjectArrayElement(array.obj(), 3, int_array3.obj()); |
+ |
+ // Convert to std::vector<std::vector<int>>, check the content. |
+ std::vector<std::vector<int>> out; |
+ JavaArrayOfIntArrayToIntVector(env, array.obj(), &out); |
+ |
+ EXPECT_EQ(kNumItems, out.size()); |
+ CheckIntArrayConversion(env, int_array0, out[0], kLen0); |
+ CheckIntArrayConversion(env, int_array1, out[1], kLen1); |
+ CheckIntArrayConversion(env, int_array2, out[2], kLen2); |
+ CheckIntArrayConversion(env, int_array3, out[3], kLen3); |
+} |
+ |
} // namespace android |
} // namespace base |