OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/android/jni_array.h" | 5 #include "base/android/jni_array.h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "base/android/scoped_java_ref.h" | 8 #include "base/android/scoped_java_ref.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
79 const int64 kLongs[] = { 0, 1, -1, kint64min, kint64max}; | 79 const int64 kLongs[] = { 0, 1, -1, kint64min, kint64max}; |
80 const size_t kLen = arraysize(kLongs); | 80 const size_t kLen = arraysize(kLongs); |
81 | 81 |
82 JNIEnv* env = AttachCurrentThread(); | 82 JNIEnv* env = AttachCurrentThread(); |
83 CheckLongConversion(env, kLongs, kLen, ToJavaLongArray(env, kLongs, kLen)); | 83 CheckLongConversion(env, kLongs, kLen, ToJavaLongArray(env, kLongs, kLen)); |
84 | 84 |
85 const std::vector<int64> vec(kLongs, kLongs + kLen); | 85 const std::vector<int64> vec(kLongs, kLongs + kLen); |
86 CheckLongConversion(env, kLongs, kLen, ToJavaLongArray(env, vec)); | 86 CheckLongConversion(env, kLongs, kLen, ToJavaLongArray(env, vec)); |
87 } | 87 } |
88 | 88 |
89 void CheckIntArrayConversion(JNIEnv* env, | |
90 ScopedJavaLocalRef<jintArray> jints, | |
91 std::vector<int> int_vector, | |
92 const size_t len) { | |
93 jint value; | |
94 for (size_t i = 0; i < len; ++i) { | |
95 env->GetIntArrayRegion(jints.obj(), i, 1, &value); | |
96 ASSERT_EQ(int_vector[i], value); | |
97 } | |
98 } | |
99 | |
89 TEST(JniArray, JavaIntArrayToIntVector) { | 100 TEST(JniArray, JavaIntArrayToIntVector) { |
90 const int kInts[] = {0, 1, -1}; | 101 const int kInts[] = {0, 1, -1}; |
91 const size_t kLen = arraysize(kInts); | 102 const size_t kLen = arraysize(kInts); |
92 | 103 |
93 JNIEnv* env = AttachCurrentThread(); | 104 JNIEnv* env = AttachCurrentThread(); |
94 ScopedJavaLocalRef<jintArray> jints(env, env->NewIntArray(kLen)); | 105 ScopedJavaLocalRef<jintArray> jints(env, env->NewIntArray(kLen)); |
95 ASSERT_TRUE(jints.obj()); | 106 ASSERT_TRUE(jints.obj()); |
96 | 107 |
97 for (size_t i = 0; i < kLen; ++i) { | 108 for (size_t i = 0; i < kLen; ++i) { |
98 jint j = static_cast<jint>(kInts[i]); | 109 jint j = static_cast<jint>(kInts[i]); |
99 env->SetIntArrayRegion(jints.obj(), i, 1, &j); | 110 env->SetIntArrayRegion(jints.obj(), i, 1, &j); |
100 ASSERT_FALSE(HasException(env)); | 111 ASSERT_FALSE(HasException(env)); |
101 } | 112 } |
102 | 113 |
103 std::vector<int> ints; | 114 std::vector<int> ints; |
104 JavaIntArrayToIntVector(env, jints.obj(), &ints); | 115 JavaIntArrayToIntVector(env, jints.obj(), &ints); |
105 | 116 |
106 ASSERT_EQ(static_cast<jsize>(ints.size()), env->GetArrayLength(jints.obj())); | 117 ASSERT_EQ(static_cast<jsize>(ints.size()), env->GetArrayLength(jints.obj())); |
107 | 118 |
108 jint value; | 119 CheckIntArrayConversion(env, jints, ints, kLen); |
109 for (size_t i = 0; i < kLen; ++i) { | |
110 env->GetIntArrayRegion(jints.obj(), i, 1, &value); | |
111 ASSERT_EQ(ints[i], value); | |
112 } | |
113 } | 120 } |
114 | 121 |
115 TEST(JniArray, JavaLongArrayToInt64Vector) { | 122 TEST(JniArray, JavaLongArrayToInt64Vector) { |
116 const int64 kInt64s[] = {0LL, 1LL, -1LL}; | 123 const int64 kInt64s[] = {0LL, 1LL, -1LL}; |
117 const size_t kLen = arraysize(kInt64s); | 124 const size_t kLen = arraysize(kInt64s); |
118 | 125 |
119 JNIEnv* env = AttachCurrentThread(); | 126 JNIEnv* env = AttachCurrentThread(); |
120 ScopedJavaLocalRef<jlongArray> jlongs(env, env->NewLongArray(kLen)); | 127 ScopedJavaLocalRef<jlongArray> jlongs(env, env->NewLongArray(kLen)); |
121 ASSERT_TRUE(jlongs.obj()); | 128 ASSERT_TRUE(jlongs.obj()); |
122 | 129 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
223 std::vector<std::string> vec; | 230 std::vector<std::string> vec; |
224 JavaArrayOfByteArrayToStringVector(env, array.obj(), &vec); | 231 JavaArrayOfByteArrayToStringVector(env, array.obj(), &vec); |
225 | 232 |
226 EXPECT_EQ(static_cast<size_t>(kMaxItems), vec.size()); | 233 EXPECT_EQ(static_cast<size_t>(kMaxItems), vec.size()); |
227 for (int i = 0; i < kMaxItems; ++i) { | 234 for (int i = 0; i < kMaxItems; ++i) { |
228 snprintf(text, sizeof text, "%d", i); | 235 snprintf(text, sizeof text, "%d", i); |
229 EXPECT_STREQ(text, vec[i].c_str()); | 236 EXPECT_STREQ(text, vec[i].c_str()); |
230 } | 237 } |
231 } | 238 } |
232 | 239 |
240 TEST(JniArray, JavaArrayOfIntArrayToIntVector) { | |
241 const size_t kNumItems = 3; | |
242 JNIEnv* env = AttachCurrentThread(); | |
243 | |
244 // Create an int[][] object. | |
245 ScopedJavaLocalRef<jclass> int_array_clazz(env, env->FindClass("[I")); | |
246 ASSERT_TRUE(int_array_clazz.obj()); | |
247 | |
248 ScopedJavaLocalRef<jobjectArray> array( | |
249 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.
| |
250 ASSERT_TRUE(array.obj()); | |
251 | |
252 // Populate int[][] object. | |
253 const int kInts0[] = {0, 1, -1, kint32min, kint32max}; | |
254 const size_t kLen0 = arraysize(kInts0); | |
255 ScopedJavaLocalRef<jintArray> int_array0 = ToJavaIntArray(env, kInts0, kLen0); | |
256 env->SetObjectArrayElement(array.obj(), 0, int_array0.obj()); | |
257 | |
258 const int kInts1[] = {3, 4, 5}; | |
259 const size_t kLen1 = arraysize(kInts1); | |
260 ScopedJavaLocalRef<jintArray> int_array1 = ToJavaIntArray(env, kInts1, kLen1); | |
261 env->SetObjectArrayElement(array.obj(), 1, int_array1.obj()); | |
262 | |
263 const int kInts2[] = {16}; | |
264 const size_t kLen2 = arraysize(kInts2); | |
265 ScopedJavaLocalRef<jintArray> int_array2 = ToJavaIntArray(env, kInts2, kLen2); | |
266 env->SetObjectArrayElement(array.obj(), 2, int_array2.obj()); | |
267 | |
268 // 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
| |
269 std::vector<std::vector<int>> out; | |
270 JavaArrayOfIntArrayToIntVector(env, array.obj(), &out); | |
271 | |
272 EXPECT_EQ(kNumItems, out.size()); | |
273 CheckIntArrayConversion(env, int_array0, out[0], kLen0); | |
274 CheckIntArrayConversion(env, int_array1, out[1], kLen1); | |
275 CheckIntArrayConversion(env, int_array2, out[2], kLen2); | |
276 } | |
277 | |
233 } // namespace android | 278 } // namespace android |
234 } // namespace base | 279 } // namespace base |
OLD | NEW |