Chromium Code Reviews| 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..b1bc99869fcb34c14df5a21dd76b2c9108c68445 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,43 @@ TEST(JniArray, JavaArrayOfByteArrayToStringVector) { |
| } |
| } |
| +TEST(JniArray, JavaArrayOfIntArrayToIntVector) { |
| + const size_t kNumItems = 3; |
| + 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(), NULL)); |
|
David Trainor- moved to gerrit
2015/10/15 21:04:56
nullptr
Theresa
2015/10/24 00:06:44
Done.
|
| + 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[] = {16}; |
| + const size_t kLen2 = arraysize(kInts2); |
| + ScopedJavaLocalRef<jintArray> int_array2 = ToJavaIntArray(env, kInts2, kLen2); |
| + env->SetObjectArrayElement(array.obj(), 2, int_array2.obj()); |
| + |
| + // Convert to std::vector<std::vector<int>>, check the content. |
|
David Trainor- moved to gerrit
2015/10/15 21:04:56
Odd question, do we want to handle empty/null arra
Theresa
2015/10/24 00:06:44
If we have an animation that displays the same ima
|
| + 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); |
| +} |
| + |
| } // namespace android |
| } // namespace base |