1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2011 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker *
4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker *
8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker *
10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker */
16*795d594fSAndroid Build Coastguard Worker
17*795d594fSAndroid Build Coastguard Worker #include "reflection.h"
18*795d594fSAndroid Build Coastguard Worker
19*795d594fSAndroid Build Coastguard Worker #include <float.h>
20*795d594fSAndroid Build Coastguard Worker #include <limits.h>
21*795d594fSAndroid Build Coastguard Worker
22*795d594fSAndroid Build Coastguard Worker #include "art_method-inl.h"
23*795d594fSAndroid Build Coastguard Worker #include "base/pointer_size.h"
24*795d594fSAndroid Build Coastguard Worker #include "common_runtime_test.h"
25*795d594fSAndroid Build Coastguard Worker #include "dex/descriptors_names.h"
26*795d594fSAndroid Build Coastguard Worker #include "jni/java_vm_ext.h"
27*795d594fSAndroid Build Coastguard Worker #include "jni/jni_internal.h"
28*795d594fSAndroid Build Coastguard Worker #include "mirror/class-alloc-inl.h"
29*795d594fSAndroid Build Coastguard Worker #include "nativehelper/scoped_local_ref.h"
30*795d594fSAndroid Build Coastguard Worker #include "scoped_thread_state_change-inl.h"
31*795d594fSAndroid Build Coastguard Worker
32*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN {
33*795d594fSAndroid Build Coastguard Worker
34*795d594fSAndroid Build Coastguard Worker class ReflectionTest : public CommonRuntimeTest {
35*795d594fSAndroid Build Coastguard Worker protected:
SetUp()36*795d594fSAndroid Build Coastguard Worker void SetUp() override {
37*795d594fSAndroid Build Coastguard Worker CommonRuntimeTest::SetUp();
38*795d594fSAndroid Build Coastguard Worker
39*795d594fSAndroid Build Coastguard Worker vm_ = Runtime::Current()->GetJavaVM();
40*795d594fSAndroid Build Coastguard Worker
41*795d594fSAndroid Build Coastguard Worker // Turn on -verbose:jni for the JNI tests.
42*795d594fSAndroid Build Coastguard Worker // gLogVerbosity.jni = true;
43*795d594fSAndroid Build Coastguard Worker
44*795d594fSAndroid Build Coastguard Worker vm_->AttachCurrentThread(&env_, nullptr);
45*795d594fSAndroid Build Coastguard Worker
46*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jclass> aioobe(env_,
47*795d594fSAndroid Build Coastguard Worker env_->FindClass("java/lang/ArrayIndexOutOfBoundsException"));
48*795d594fSAndroid Build Coastguard Worker CHECK(aioobe.get() != nullptr);
49*795d594fSAndroid Build Coastguard Worker aioobe_ = reinterpret_cast<jclass>(env_->NewGlobalRef(aioobe.get()));
50*795d594fSAndroid Build Coastguard Worker
51*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jclass> ase(env_, env_->FindClass("java/lang/ArrayStoreException"));
52*795d594fSAndroid Build Coastguard Worker CHECK(ase.get() != nullptr);
53*795d594fSAndroid Build Coastguard Worker ase_ = reinterpret_cast<jclass>(env_->NewGlobalRef(ase.get()));
54*795d594fSAndroid Build Coastguard Worker
55*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jclass> sioobe(env_,
56*795d594fSAndroid Build Coastguard Worker env_->FindClass("java/lang/StringIndexOutOfBoundsException"));
57*795d594fSAndroid Build Coastguard Worker CHECK(sioobe.get() != nullptr);
58*795d594fSAndroid Build Coastguard Worker sioobe_ = reinterpret_cast<jclass>(env_->NewGlobalRef(sioobe.get()));
59*795d594fSAndroid Build Coastguard Worker }
60*795d594fSAndroid Build Coastguard Worker
CleanUpJniEnv()61*795d594fSAndroid Build Coastguard Worker void CleanUpJniEnv() {
62*795d594fSAndroid Build Coastguard Worker if (aioobe_ != nullptr) {
63*795d594fSAndroid Build Coastguard Worker env_->DeleteGlobalRef(aioobe_);
64*795d594fSAndroid Build Coastguard Worker aioobe_ = nullptr;
65*795d594fSAndroid Build Coastguard Worker }
66*795d594fSAndroid Build Coastguard Worker if (ase_ != nullptr) {
67*795d594fSAndroid Build Coastguard Worker env_->DeleteGlobalRef(ase_);
68*795d594fSAndroid Build Coastguard Worker ase_ = nullptr;
69*795d594fSAndroid Build Coastguard Worker }
70*795d594fSAndroid Build Coastguard Worker if (sioobe_ != nullptr) {
71*795d594fSAndroid Build Coastguard Worker env_->DeleteGlobalRef(sioobe_);
72*795d594fSAndroid Build Coastguard Worker sioobe_ = nullptr;
73*795d594fSAndroid Build Coastguard Worker }
74*795d594fSAndroid Build Coastguard Worker }
75*795d594fSAndroid Build Coastguard Worker
TearDown()76*795d594fSAndroid Build Coastguard Worker void TearDown() override {
77*795d594fSAndroid Build Coastguard Worker CleanUpJniEnv();
78*795d594fSAndroid Build Coastguard Worker CommonRuntimeTest::TearDown();
79*795d594fSAndroid Build Coastguard Worker }
80*795d594fSAndroid Build Coastguard Worker
GetPrimitiveClass(char descriptor)81*795d594fSAndroid Build Coastguard Worker jclass GetPrimitiveClass(char descriptor) {
82*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
83*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> c = class_linker_->FindPrimitiveClass(descriptor);
84*795d594fSAndroid Build Coastguard Worker CHECK(c != nullptr);
85*795d594fSAndroid Build Coastguard Worker return soa.AddLocalReference<jclass>(c);
86*795d594fSAndroid Build Coastguard Worker }
87*795d594fSAndroid Build Coastguard Worker
ReflectionTestMakeInterpreted(ArtMethod ** method,ObjPtr<mirror::Object> * receiver,bool is_static,const char * method_name,const char * method_signature)88*795d594fSAndroid Build Coastguard Worker void ReflectionTestMakeInterpreted(ArtMethod** method,
89*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object>* receiver,
90*795d594fSAndroid Build Coastguard Worker bool is_static,
91*795d594fSAndroid Build Coastguard Worker const char* method_name,
92*795d594fSAndroid Build Coastguard Worker const char* method_signature)
93*795d594fSAndroid Build Coastguard Worker REQUIRES_SHARED(Locks::mutator_lock_) {
94*795d594fSAndroid Build Coastguard Worker const char* class_name = is_static ? "StaticLeafMethods" : "NonStaticLeafMethods";
95*795d594fSAndroid Build Coastguard Worker jobject jclass_loader(LoadDex(class_name));
96*795d594fSAndroid Build Coastguard Worker Thread* self = Thread::Current();
97*795d594fSAndroid Build Coastguard Worker StackHandleScope<3> hs(self);
98*795d594fSAndroid Build Coastguard Worker Handle<mirror::ClassLoader> class_loader(
99*795d594fSAndroid Build Coastguard Worker hs.NewHandle(
100*795d594fSAndroid Build Coastguard Worker ScopedObjectAccessUnchecked(self).Decode<mirror::ClassLoader>(jclass_loader)));
101*795d594fSAndroid Build Coastguard Worker if (!is_static) {
102*795d594fSAndroid Build Coastguard Worker MakeInterpreted(class_linker_->FindSystemClass(self, "Ljava/lang/Class;"));
103*795d594fSAndroid Build Coastguard Worker MakeInterpreted(class_linker_->FindSystemClass(self, "Ljava/lang/Object;"));
104*795d594fSAndroid Build Coastguard Worker }
105*795d594fSAndroid Build Coastguard Worker
106*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Class> c = FindClass(DotToDescriptor(class_name).c_str(), class_loader);
107*795d594fSAndroid Build Coastguard Worker CHECK(c != nullptr);
108*795d594fSAndroid Build Coastguard Worker MakeInterpreted(c);
109*795d594fSAndroid Build Coastguard Worker
110*795d594fSAndroid Build Coastguard Worker *method = c->FindClassMethod(method_name, method_signature, kRuntimePointerSize);
111*795d594fSAndroid Build Coastguard Worker CHECK(*method != nullptr);
112*795d594fSAndroid Build Coastguard Worker CHECK_EQ(is_static, (*method)->IsStatic());
113*795d594fSAndroid Build Coastguard Worker
114*795d594fSAndroid Build Coastguard Worker if (is_static) {
115*795d594fSAndroid Build Coastguard Worker *receiver = nullptr;
116*795d594fSAndroid Build Coastguard Worker } else {
117*795d594fSAndroid Build Coastguard Worker // Ensure class is initialized before allocating object
118*795d594fSAndroid Build Coastguard Worker {
119*795d594fSAndroid Build Coastguard Worker StackHandleScope<1> hs2(self);
120*795d594fSAndroid Build Coastguard Worker HandleWrapperObjPtr<mirror::Class> h_class(hs2.NewHandleWrapper(&c));
121*795d594fSAndroid Build Coastguard Worker bool initialized = class_linker_->EnsureInitialized(self, h_class, true, true);
122*795d594fSAndroid Build Coastguard Worker CHECK(initialized);
123*795d594fSAndroid Build Coastguard Worker }
124*795d594fSAndroid Build Coastguard Worker *receiver = c->AllocObject(self);
125*795d594fSAndroid Build Coastguard Worker }
126*795d594fSAndroid Build Coastguard Worker
127*795d594fSAndroid Build Coastguard Worker // Start runtime.
128*795d594fSAndroid Build Coastguard Worker HandleWrapperObjPtr<mirror::Object> h(hs.NewHandleWrapper(receiver));
129*795d594fSAndroid Build Coastguard Worker bool started = runtime_->Start();
130*795d594fSAndroid Build Coastguard Worker CHECK(started);
131*795d594fSAndroid Build Coastguard Worker self->TransitionFromSuspendedToRunnable();
132*795d594fSAndroid Build Coastguard Worker }
133*795d594fSAndroid Build Coastguard Worker
InvokeNopMethod(bool is_static)134*795d594fSAndroid Build Coastguard Worker void InvokeNopMethod(bool is_static) {
135*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
136*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
137*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
138*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "nop", "()V");
139*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
140*795d594fSAndroid Build Coastguard Worker InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), nullptr);
141*795d594fSAndroid Build Coastguard Worker }
142*795d594fSAndroid Build Coastguard Worker
InvokeIdentityByteMethod(bool is_static)143*795d594fSAndroid Build Coastguard Worker void InvokeIdentityByteMethod(bool is_static) {
144*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
145*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
146*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
147*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "identity", "(B)B");
148*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
149*795d594fSAndroid Build Coastguard Worker jvalue args[1];
150*795d594fSAndroid Build Coastguard Worker
151*795d594fSAndroid Build Coastguard Worker args[0].b = 0;
152*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
153*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(0, result.GetB());
154*795d594fSAndroid Build Coastguard Worker
155*795d594fSAndroid Build Coastguard Worker args[0].b = -1;
156*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
157*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(-1, result.GetB());
158*795d594fSAndroid Build Coastguard Worker
159*795d594fSAndroid Build Coastguard Worker args[0].b = SCHAR_MAX;
160*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
161*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(SCHAR_MAX, result.GetB());
162*795d594fSAndroid Build Coastguard Worker
163*795d594fSAndroid Build Coastguard Worker static_assert(SCHAR_MIN == -128, "SCHAR_MIN unexpected");
164*795d594fSAndroid Build Coastguard Worker args[0].b = SCHAR_MIN;
165*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
166*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(SCHAR_MIN, result.GetB());
167*795d594fSAndroid Build Coastguard Worker }
168*795d594fSAndroid Build Coastguard Worker
InvokeIdentityIntMethod(bool is_static)169*795d594fSAndroid Build Coastguard Worker void InvokeIdentityIntMethod(bool is_static) {
170*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
171*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
172*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
173*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "identity", "(I)I");
174*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
175*795d594fSAndroid Build Coastguard Worker jvalue args[1];
176*795d594fSAndroid Build Coastguard Worker
177*795d594fSAndroid Build Coastguard Worker args[0].i = 0;
178*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
179*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(0, result.GetI());
180*795d594fSAndroid Build Coastguard Worker
181*795d594fSAndroid Build Coastguard Worker args[0].i = -1;
182*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
183*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(-1, result.GetI());
184*795d594fSAndroid Build Coastguard Worker
185*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MAX;
186*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
187*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(INT_MAX, result.GetI());
188*795d594fSAndroid Build Coastguard Worker
189*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MIN;
190*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
191*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(INT_MIN, result.GetI());
192*795d594fSAndroid Build Coastguard Worker }
193*795d594fSAndroid Build Coastguard Worker
InvokeIdentityDoubleMethod(bool is_static)194*795d594fSAndroid Build Coastguard Worker void InvokeIdentityDoubleMethod(bool is_static) {
195*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
196*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
197*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
198*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "identity", "(D)D");
199*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
200*795d594fSAndroid Build Coastguard Worker jvalue args[1];
201*795d594fSAndroid Build Coastguard Worker
202*795d594fSAndroid Build Coastguard Worker args[0].d = 0.0;
203*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
204*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(0.0, result.GetD());
205*795d594fSAndroid Build Coastguard Worker
206*795d594fSAndroid Build Coastguard Worker args[0].d = -1.0;
207*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
208*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(-1.0, result.GetD());
209*795d594fSAndroid Build Coastguard Worker
210*795d594fSAndroid Build Coastguard Worker args[0].d = DBL_MAX;
211*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
212*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(DBL_MAX, result.GetD());
213*795d594fSAndroid Build Coastguard Worker
214*795d594fSAndroid Build Coastguard Worker args[0].d = DBL_MIN;
215*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
216*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(DBL_MIN, result.GetD());
217*795d594fSAndroid Build Coastguard Worker }
218*795d594fSAndroid Build Coastguard Worker
InvokeSumIntIntMethod(bool is_static)219*795d594fSAndroid Build Coastguard Worker void InvokeSumIntIntMethod(bool is_static) {
220*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
221*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
222*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
223*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(II)I");
224*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
225*795d594fSAndroid Build Coastguard Worker jvalue args[2];
226*795d594fSAndroid Build Coastguard Worker
227*795d594fSAndroid Build Coastguard Worker args[0].i = 1;
228*795d594fSAndroid Build Coastguard Worker args[1].i = 2;
229*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
230*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(3, result.GetI());
231*795d594fSAndroid Build Coastguard Worker
232*795d594fSAndroid Build Coastguard Worker args[0].i = -2;
233*795d594fSAndroid Build Coastguard Worker args[1].i = 5;
234*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
235*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(3, result.GetI());
236*795d594fSAndroid Build Coastguard Worker
237*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MAX;
238*795d594fSAndroid Build Coastguard Worker args[1].i = INT_MIN;
239*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
240*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(-1, result.GetI());
241*795d594fSAndroid Build Coastguard Worker
242*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MAX;
243*795d594fSAndroid Build Coastguard Worker args[1].i = INT_MAX;
244*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
245*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(-2, result.GetI());
246*795d594fSAndroid Build Coastguard Worker }
247*795d594fSAndroid Build Coastguard Worker
InvokeSumIntIntIntMethod(bool is_static)248*795d594fSAndroid Build Coastguard Worker void InvokeSumIntIntIntMethod(bool is_static) {
249*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
250*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
251*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
252*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(III)I");
253*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
254*795d594fSAndroid Build Coastguard Worker jvalue args[3];
255*795d594fSAndroid Build Coastguard Worker
256*795d594fSAndroid Build Coastguard Worker args[0].i = 0;
257*795d594fSAndroid Build Coastguard Worker args[1].i = 0;
258*795d594fSAndroid Build Coastguard Worker args[2].i = 0;
259*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
260*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(0, result.GetI());
261*795d594fSAndroid Build Coastguard Worker
262*795d594fSAndroid Build Coastguard Worker args[0].i = 1;
263*795d594fSAndroid Build Coastguard Worker args[1].i = 2;
264*795d594fSAndroid Build Coastguard Worker args[2].i = 3;
265*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
266*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(6, result.GetI());
267*795d594fSAndroid Build Coastguard Worker
268*795d594fSAndroid Build Coastguard Worker args[0].i = -1;
269*795d594fSAndroid Build Coastguard Worker args[1].i = 2;
270*795d594fSAndroid Build Coastguard Worker args[2].i = -3;
271*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
272*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(-2, result.GetI());
273*795d594fSAndroid Build Coastguard Worker
274*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MAX;
275*795d594fSAndroid Build Coastguard Worker args[1].i = INT_MIN;
276*795d594fSAndroid Build Coastguard Worker args[2].i = INT_MAX;
277*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
278*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(2147483646, result.GetI());
279*795d594fSAndroid Build Coastguard Worker
280*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MAX;
281*795d594fSAndroid Build Coastguard Worker args[1].i = INT_MAX;
282*795d594fSAndroid Build Coastguard Worker args[2].i = INT_MAX;
283*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
284*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(2147483645, result.GetI());
285*795d594fSAndroid Build Coastguard Worker }
286*795d594fSAndroid Build Coastguard Worker
InvokeSumIntIntIntIntMethod(bool is_static)287*795d594fSAndroid Build Coastguard Worker void InvokeSumIntIntIntIntMethod(bool is_static) {
288*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
289*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
290*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
291*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(IIII)I");
292*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
293*795d594fSAndroid Build Coastguard Worker jvalue args[4];
294*795d594fSAndroid Build Coastguard Worker
295*795d594fSAndroid Build Coastguard Worker args[0].i = 0;
296*795d594fSAndroid Build Coastguard Worker args[1].i = 0;
297*795d594fSAndroid Build Coastguard Worker args[2].i = 0;
298*795d594fSAndroid Build Coastguard Worker args[3].i = 0;
299*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
300*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(0, result.GetI());
301*795d594fSAndroid Build Coastguard Worker
302*795d594fSAndroid Build Coastguard Worker args[0].i = 1;
303*795d594fSAndroid Build Coastguard Worker args[1].i = 2;
304*795d594fSAndroid Build Coastguard Worker args[2].i = 3;
305*795d594fSAndroid Build Coastguard Worker args[3].i = 4;
306*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
307*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(10, result.GetI());
308*795d594fSAndroid Build Coastguard Worker
309*795d594fSAndroid Build Coastguard Worker args[0].i = -1;
310*795d594fSAndroid Build Coastguard Worker args[1].i = 2;
311*795d594fSAndroid Build Coastguard Worker args[2].i = -3;
312*795d594fSAndroid Build Coastguard Worker args[3].i = 4;
313*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
314*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(2, result.GetI());
315*795d594fSAndroid Build Coastguard Worker
316*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MAX;
317*795d594fSAndroid Build Coastguard Worker args[1].i = INT_MIN;
318*795d594fSAndroid Build Coastguard Worker args[2].i = INT_MAX;
319*795d594fSAndroid Build Coastguard Worker args[3].i = INT_MIN;
320*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
321*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(-2, result.GetI());
322*795d594fSAndroid Build Coastguard Worker
323*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MAX;
324*795d594fSAndroid Build Coastguard Worker args[1].i = INT_MAX;
325*795d594fSAndroid Build Coastguard Worker args[2].i = INT_MAX;
326*795d594fSAndroid Build Coastguard Worker args[3].i = INT_MAX;
327*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
328*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(-4, result.GetI());
329*795d594fSAndroid Build Coastguard Worker }
330*795d594fSAndroid Build Coastguard Worker
InvokeSumIntIntIntIntIntMethod(bool is_static)331*795d594fSAndroid Build Coastguard Worker void InvokeSumIntIntIntIntIntMethod(bool is_static) {
332*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
333*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
334*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
335*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(IIIII)I");
336*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
337*795d594fSAndroid Build Coastguard Worker jvalue args[5];
338*795d594fSAndroid Build Coastguard Worker
339*795d594fSAndroid Build Coastguard Worker args[0].i = 0;
340*795d594fSAndroid Build Coastguard Worker args[1].i = 0;
341*795d594fSAndroid Build Coastguard Worker args[2].i = 0;
342*795d594fSAndroid Build Coastguard Worker args[3].i = 0;
343*795d594fSAndroid Build Coastguard Worker args[4].i = 0;
344*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
345*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(0, result.GetI());
346*795d594fSAndroid Build Coastguard Worker
347*795d594fSAndroid Build Coastguard Worker args[0].i = 1;
348*795d594fSAndroid Build Coastguard Worker args[1].i = 2;
349*795d594fSAndroid Build Coastguard Worker args[2].i = 3;
350*795d594fSAndroid Build Coastguard Worker args[3].i = 4;
351*795d594fSAndroid Build Coastguard Worker args[4].i = 5;
352*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
353*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(15, result.GetI());
354*795d594fSAndroid Build Coastguard Worker
355*795d594fSAndroid Build Coastguard Worker args[0].i = -1;
356*795d594fSAndroid Build Coastguard Worker args[1].i = 2;
357*795d594fSAndroid Build Coastguard Worker args[2].i = -3;
358*795d594fSAndroid Build Coastguard Worker args[3].i = 4;
359*795d594fSAndroid Build Coastguard Worker args[4].i = -5;
360*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
361*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(-3, result.GetI());
362*795d594fSAndroid Build Coastguard Worker
363*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MAX;
364*795d594fSAndroid Build Coastguard Worker args[1].i = INT_MIN;
365*795d594fSAndroid Build Coastguard Worker args[2].i = INT_MAX;
366*795d594fSAndroid Build Coastguard Worker args[3].i = INT_MIN;
367*795d594fSAndroid Build Coastguard Worker args[4].i = INT_MAX;
368*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
369*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(2147483645, result.GetI());
370*795d594fSAndroid Build Coastguard Worker
371*795d594fSAndroid Build Coastguard Worker args[0].i = INT_MAX;
372*795d594fSAndroid Build Coastguard Worker args[1].i = INT_MAX;
373*795d594fSAndroid Build Coastguard Worker args[2].i = INT_MAX;
374*795d594fSAndroid Build Coastguard Worker args[3].i = INT_MAX;
375*795d594fSAndroid Build Coastguard Worker args[4].i = INT_MAX;
376*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
377*795d594fSAndroid Build Coastguard Worker EXPECT_EQ(2147483643, result.GetI());
378*795d594fSAndroid Build Coastguard Worker }
379*795d594fSAndroid Build Coastguard Worker
InvokeSumDoubleDoubleMethod(bool is_static)380*795d594fSAndroid Build Coastguard Worker void InvokeSumDoubleDoubleMethod(bool is_static) {
381*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
382*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
383*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
384*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(DD)D");
385*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
386*795d594fSAndroid Build Coastguard Worker jvalue args[2];
387*795d594fSAndroid Build Coastguard Worker
388*795d594fSAndroid Build Coastguard Worker args[0].d = 0.0;
389*795d594fSAndroid Build Coastguard Worker args[1].d = 0.0;
390*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
391*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(0.0, result.GetD());
392*795d594fSAndroid Build Coastguard Worker
393*795d594fSAndroid Build Coastguard Worker args[0].d = 1.0;
394*795d594fSAndroid Build Coastguard Worker args[1].d = 2.0;
395*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
396*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(3.0, result.GetD());
397*795d594fSAndroid Build Coastguard Worker
398*795d594fSAndroid Build Coastguard Worker args[0].d = 1.0;
399*795d594fSAndroid Build Coastguard Worker args[1].d = -2.0;
400*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
401*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(-1.0, result.GetD());
402*795d594fSAndroid Build Coastguard Worker
403*795d594fSAndroid Build Coastguard Worker args[0].d = DBL_MAX;
404*795d594fSAndroid Build Coastguard Worker args[1].d = DBL_MIN;
405*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
406*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(1.7976931348623157e308, result.GetD());
407*795d594fSAndroid Build Coastguard Worker
408*795d594fSAndroid Build Coastguard Worker args[0].d = DBL_MAX;
409*795d594fSAndroid Build Coastguard Worker args[1].d = DBL_MAX;
410*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
411*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(INFINITY, result.GetD());
412*795d594fSAndroid Build Coastguard Worker }
413*795d594fSAndroid Build Coastguard Worker
InvokeSumDoubleDoubleDoubleMethod(bool is_static)414*795d594fSAndroid Build Coastguard Worker void InvokeSumDoubleDoubleDoubleMethod(bool is_static) {
415*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
416*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
417*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
418*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(DDD)D");
419*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
420*795d594fSAndroid Build Coastguard Worker jvalue args[3];
421*795d594fSAndroid Build Coastguard Worker
422*795d594fSAndroid Build Coastguard Worker args[0].d = 0.0;
423*795d594fSAndroid Build Coastguard Worker args[1].d = 0.0;
424*795d594fSAndroid Build Coastguard Worker args[2].d = 0.0;
425*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
426*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(0.0, result.GetD());
427*795d594fSAndroid Build Coastguard Worker
428*795d594fSAndroid Build Coastguard Worker args[0].d = 1.0;
429*795d594fSAndroid Build Coastguard Worker args[1].d = 2.0;
430*795d594fSAndroid Build Coastguard Worker args[2].d = 3.0;
431*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
432*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(6.0, result.GetD());
433*795d594fSAndroid Build Coastguard Worker
434*795d594fSAndroid Build Coastguard Worker args[0].d = 1.0;
435*795d594fSAndroid Build Coastguard Worker args[1].d = -2.0;
436*795d594fSAndroid Build Coastguard Worker args[2].d = 3.0;
437*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
438*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(2.0, result.GetD());
439*795d594fSAndroid Build Coastguard Worker }
440*795d594fSAndroid Build Coastguard Worker
InvokeSumDoubleDoubleDoubleDoubleMethod(bool is_static)441*795d594fSAndroid Build Coastguard Worker void InvokeSumDoubleDoubleDoubleDoubleMethod(bool is_static) {
442*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
443*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
444*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
445*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(DDDD)D");
446*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
447*795d594fSAndroid Build Coastguard Worker jvalue args[4];
448*795d594fSAndroid Build Coastguard Worker
449*795d594fSAndroid Build Coastguard Worker args[0].d = 0.0;
450*795d594fSAndroid Build Coastguard Worker args[1].d = 0.0;
451*795d594fSAndroid Build Coastguard Worker args[2].d = 0.0;
452*795d594fSAndroid Build Coastguard Worker args[3].d = 0.0;
453*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
454*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(0.0, result.GetD());
455*795d594fSAndroid Build Coastguard Worker
456*795d594fSAndroid Build Coastguard Worker args[0].d = 1.0;
457*795d594fSAndroid Build Coastguard Worker args[1].d = 2.0;
458*795d594fSAndroid Build Coastguard Worker args[2].d = 3.0;
459*795d594fSAndroid Build Coastguard Worker args[3].d = 4.0;
460*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
461*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(10.0, result.GetD());
462*795d594fSAndroid Build Coastguard Worker
463*795d594fSAndroid Build Coastguard Worker args[0].d = 1.0;
464*795d594fSAndroid Build Coastguard Worker args[1].d = -2.0;
465*795d594fSAndroid Build Coastguard Worker args[2].d = 3.0;
466*795d594fSAndroid Build Coastguard Worker args[3].d = -4.0;
467*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
468*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(-2.0, result.GetD());
469*795d594fSAndroid Build Coastguard Worker }
470*795d594fSAndroid Build Coastguard Worker
InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(bool is_static)471*795d594fSAndroid Build Coastguard Worker void InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(bool is_static) {
472*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env_);
473*795d594fSAndroid Build Coastguard Worker ArtMethod* method;
474*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Object> receiver;
475*795d594fSAndroid Build Coastguard Worker ReflectionTestMakeInterpreted(&method, &receiver, is_static, "sum", "(DDDDD)D");
476*795d594fSAndroid Build Coastguard Worker ScopedLocalRef<jobject> receiver_ref(soa.Env(), soa.AddLocalReference<jobject>(receiver));
477*795d594fSAndroid Build Coastguard Worker jvalue args[5];
478*795d594fSAndroid Build Coastguard Worker
479*795d594fSAndroid Build Coastguard Worker args[0].d = 0.0;
480*795d594fSAndroid Build Coastguard Worker args[1].d = 0.0;
481*795d594fSAndroid Build Coastguard Worker args[2].d = 0.0;
482*795d594fSAndroid Build Coastguard Worker args[3].d = 0.0;
483*795d594fSAndroid Build Coastguard Worker args[4].d = 0.0;
484*795d594fSAndroid Build Coastguard Worker JValue result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
485*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(0.0, result.GetD());
486*795d594fSAndroid Build Coastguard Worker
487*795d594fSAndroid Build Coastguard Worker args[0].d = 1.0;
488*795d594fSAndroid Build Coastguard Worker args[1].d = 2.0;
489*795d594fSAndroid Build Coastguard Worker args[2].d = 3.0;
490*795d594fSAndroid Build Coastguard Worker args[3].d = 4.0;
491*795d594fSAndroid Build Coastguard Worker args[4].d = 5.0;
492*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
493*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(15.0, result.GetD());
494*795d594fSAndroid Build Coastguard Worker
495*795d594fSAndroid Build Coastguard Worker args[0].d = 1.0;
496*795d594fSAndroid Build Coastguard Worker args[1].d = -2.0;
497*795d594fSAndroid Build Coastguard Worker args[2].d = 3.0;
498*795d594fSAndroid Build Coastguard Worker args[3].d = -4.0;
499*795d594fSAndroid Build Coastguard Worker args[4].d = 5.0;
500*795d594fSAndroid Build Coastguard Worker result = InvokeWithJValues(soa, receiver_ref.get(), jni::EncodeArtMethod(method), args);
501*795d594fSAndroid Build Coastguard Worker EXPECT_DOUBLE_EQ(3.0, result.GetD());
502*795d594fSAndroid Build Coastguard Worker }
503*795d594fSAndroid Build Coastguard Worker
504*795d594fSAndroid Build Coastguard Worker JavaVMExt* vm_;
505*795d594fSAndroid Build Coastguard Worker JNIEnv* env_;
506*795d594fSAndroid Build Coastguard Worker jclass aioobe_;
507*795d594fSAndroid Build Coastguard Worker jclass ase_;
508*795d594fSAndroid Build Coastguard Worker jclass sioobe_;
509*795d594fSAndroid Build Coastguard Worker };
510*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticNopMethod)511*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticNopMethod) {
512*795d594fSAndroid Build Coastguard Worker InvokeNopMethod(true);
513*795d594fSAndroid Build Coastguard Worker }
514*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticNopMethod)515*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticNopMethod) {
516*795d594fSAndroid Build Coastguard Worker InvokeNopMethod(false);
517*795d594fSAndroid Build Coastguard Worker }
518*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticIdentityByteMethod)519*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticIdentityByteMethod) {
520*795d594fSAndroid Build Coastguard Worker InvokeIdentityByteMethod(true);
521*795d594fSAndroid Build Coastguard Worker }
522*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticIdentityByteMethod)523*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticIdentityByteMethod) {
524*795d594fSAndroid Build Coastguard Worker InvokeIdentityByteMethod(false);
525*795d594fSAndroid Build Coastguard Worker }
526*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticIdentityIntMethod)527*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticIdentityIntMethod) {
528*795d594fSAndroid Build Coastguard Worker InvokeIdentityIntMethod(true);
529*795d594fSAndroid Build Coastguard Worker }
530*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticIdentityIntMethod)531*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticIdentityIntMethod) {
532*795d594fSAndroid Build Coastguard Worker InvokeIdentityIntMethod(false);
533*795d594fSAndroid Build Coastguard Worker }
534*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticIdentityDoubleMethod)535*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticIdentityDoubleMethod) {
536*795d594fSAndroid Build Coastguard Worker InvokeIdentityDoubleMethod(true);
537*795d594fSAndroid Build Coastguard Worker }
538*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticIdentityDoubleMethod)539*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticIdentityDoubleMethod) {
540*795d594fSAndroid Build Coastguard Worker InvokeIdentityDoubleMethod(false);
541*795d594fSAndroid Build Coastguard Worker }
542*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticSumIntIntMethod)543*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticSumIntIntMethod) {
544*795d594fSAndroid Build Coastguard Worker InvokeSumIntIntMethod(true);
545*795d594fSAndroid Build Coastguard Worker }
546*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticSumIntIntMethod)547*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticSumIntIntMethod) {
548*795d594fSAndroid Build Coastguard Worker InvokeSumIntIntMethod(false);
549*795d594fSAndroid Build Coastguard Worker }
550*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticSumIntIntIntMethod)551*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticSumIntIntIntMethod) {
552*795d594fSAndroid Build Coastguard Worker InvokeSumIntIntIntMethod(true);
553*795d594fSAndroid Build Coastguard Worker }
554*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticSumIntIntIntMethod)555*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticSumIntIntIntMethod) {
556*795d594fSAndroid Build Coastguard Worker InvokeSumIntIntIntMethod(false);
557*795d594fSAndroid Build Coastguard Worker }
558*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticSumIntIntIntIntMethod)559*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticSumIntIntIntIntMethod) {
560*795d594fSAndroid Build Coastguard Worker InvokeSumIntIntIntIntMethod(true);
561*795d594fSAndroid Build Coastguard Worker }
562*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticSumIntIntIntIntMethod)563*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticSumIntIntIntIntMethod) {
564*795d594fSAndroid Build Coastguard Worker InvokeSumIntIntIntIntMethod(false);
565*795d594fSAndroid Build Coastguard Worker }
566*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticSumIntIntIntIntIntMethod)567*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticSumIntIntIntIntIntMethod) {
568*795d594fSAndroid Build Coastguard Worker InvokeSumIntIntIntIntIntMethod(true);
569*795d594fSAndroid Build Coastguard Worker }
570*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticSumIntIntIntIntIntMethod)571*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticSumIntIntIntIntIntMethod) {
572*795d594fSAndroid Build Coastguard Worker InvokeSumIntIntIntIntIntMethod(false);
573*795d594fSAndroid Build Coastguard Worker }
574*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticSumDoubleDoubleMethod)575*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticSumDoubleDoubleMethod) {
576*795d594fSAndroid Build Coastguard Worker InvokeSumDoubleDoubleMethod(true);
577*795d594fSAndroid Build Coastguard Worker }
578*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticSumDoubleDoubleMethod)579*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticSumDoubleDoubleMethod) {
580*795d594fSAndroid Build Coastguard Worker InvokeSumDoubleDoubleMethod(false);
581*795d594fSAndroid Build Coastguard Worker }
582*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticSumDoubleDoubleDoubleMethod)583*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleMethod) {
584*795d594fSAndroid Build Coastguard Worker InvokeSumDoubleDoubleDoubleMethod(true);
585*795d594fSAndroid Build Coastguard Worker }
586*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticSumDoubleDoubleDoubleMethod)587*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleMethod) {
588*795d594fSAndroid Build Coastguard Worker InvokeSumDoubleDoubleDoubleMethod(false);
589*795d594fSAndroid Build Coastguard Worker }
590*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticSumDoubleDoubleDoubleDoubleMethod)591*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleDoubleMethod) {
592*795d594fSAndroid Build Coastguard Worker InvokeSumDoubleDoubleDoubleDoubleMethod(true);
593*795d594fSAndroid Build Coastguard Worker }
594*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticSumDoubleDoubleDoubleDoubleMethod)595*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleDoubleMethod) {
596*795d594fSAndroid Build Coastguard Worker InvokeSumDoubleDoubleDoubleDoubleMethod(false);
597*795d594fSAndroid Build Coastguard Worker }
598*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,StaticSumDoubleDoubleDoubleDoubleDoubleMethod)599*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, StaticSumDoubleDoubleDoubleDoubleDoubleMethod) {
600*795d594fSAndroid Build Coastguard Worker InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(true);
601*795d594fSAndroid Build Coastguard Worker }
602*795d594fSAndroid Build Coastguard Worker
TEST_F(ReflectionTest,NonStaticSumDoubleDoubleDoubleDoubleDoubleMethod)603*795d594fSAndroid Build Coastguard Worker TEST_F(ReflectionTest, NonStaticSumDoubleDoubleDoubleDoubleDoubleMethod) {
604*795d594fSAndroid Build Coastguard Worker InvokeSumDoubleDoubleDoubleDoubleDoubleMethod(false);
605*795d594fSAndroid Build Coastguard Worker }
606*795d594fSAndroid Build Coastguard Worker
607*795d594fSAndroid Build Coastguard Worker } // namespace art
608