Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
mock_jni_env.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_SHELL_PLATFORM_ANDROID_JNI_MOCK_JNI_ENV_H_
6#define FLUTTER_SHELL_PLATFORM_ANDROID_JNI_MOCK_JNI_ENV_H_
7
8#include <jni.h>
9
10namespace flutter {
11
12class MockJavaVM : public JavaVM {
13 public:
15 functions = &jni_invoke_;
16
17 jni_invoke_.DestroyJavaVM = DoDestroyJavaVM;
18 jni_invoke_.AttachCurrentThread = DoAttachCurrentThread;
19 jni_invoke_.DetachCurrentThread = DoDetachCurrentThread;
20 jni_invoke_.GetEnv = DoGetEnv;
21 jni_invoke_.AttachCurrentThreadAsDaemon = DoAttachCurrentThreadAsDaemon;
22 }
23
24 void SetJNIEnv(JNIEnv* env) { env_ = env; }
25
26 private:
27 static jint DoDestroyJavaVM(JavaVM* vm) { return JNI_OK; }
28 static jint DoAttachCurrentThread(JavaVM* vm,
29 JNIEnv** p_env,
30 void* thr_args) {
31 return JNI_OK;
32 }
33 static jint DoDetachCurrentThread(JavaVM* vm) { return JNI_OK; }
34 static jint DoGetEnv(JavaVM* vm, void** env, jint version) {
35 *env = static_cast<MockJavaVM*>(vm)->env_;
36 return JNI_OK;
37 }
38 static jint DoAttachCurrentThreadAsDaemon(JavaVM* vm,
39 JNIEnv** p_env,
40 void* thr_args) {
41 return JNI_OK;
42 }
43
44 JNIEnv* env_ = nullptr;
45 JNIInvokeInterface jni_invoke_;
46};
47
48class MockableJNIEnv : public JNIEnv {
49 public:
51 // Replace the JNIEnv's function table with wrappers that invoke the
52 // mockable virtual methods in this class.
53 functions = &jni_;
54 jni_.CallObjectMethod = WrapCallObjectMethod;
55 jni_.CallObjectMethodV = WrapCallObjectMethodV;
56 jni_.DeleteGlobalRef = WrapDeleteGlobalRef;
57 jni_.DeleteLocalRef = WrapDeleteLocalRef;
58 jni_.ExceptionCheck = WrapExceptionCheck;
59 jni_.ExceptionClear = WrapExceptionClear;
60 jni_.ExceptionDescribe = WrapExceptionDescribe;
61 jni_.ExceptionOccurred = WrapExceptionOccurred;
62 jni_.FindClass = WrapFindClass;
63 jni_.GetFieldID = WrapGetFieldID;
64 jni_.GetMethodID = WrapGetMethodID;
65 jni_.GetObjectRefType = WrapGetObjectRefType;
66 jni_.GetStaticFieldID = WrapGetStaticFieldID;
67 jni_.GetStaticMethodID = WrapGetStaticMethodID;
68 jni_.NewGlobalRef = WrapNewGlobalRef;
69 jni_.NewLocalRef = WrapNewLocalRef;
70 jni_.RegisterNatives = WrapRegisterNatives;
71 jni_.GetArrayLength = WrapGetArrayLength;
72 jni_.GetIntArrayRegion = WrapGetIntArrayRegion;
73 }
74
75 virtual jobject CallObjectMethodV(jobject, jmethodID, va_list) = 0;
76 virtual void DeleteGlobalRef(jobject) = 0;
77 virtual void DeleteLocalRef(jobject) = 0;
78 virtual jboolean ExceptionCheck() = 0;
79 virtual void ExceptionClear() = 0;
80 virtual void ExceptionDescribe() = 0;
81 virtual jthrowable ExceptionOccurred() = 0;
82 virtual jclass FindClass(const char*) = 0;
83 virtual jfieldID GetFieldID(jclass, const char*, const char*) = 0;
84 virtual jmethodID GetMethodID(jclass, const char*, const char*) = 0;
85 virtual jobjectRefType GetObjectRefType(jobject) = 0;
86 virtual jfieldID GetStaticFieldID(jclass, const char*, const char*) = 0;
87 virtual jmethodID GetStaticMethodID(jclass, const char*, const char*) = 0;
88 virtual jobject NewGlobalRef(jobject) = 0;
89 virtual jobject NewLocalRef(jobject) = 0;
90 virtual jint RegisterNatives(jclass, const JNINativeMethod*, jint) = 0;
91 virtual jsize GetArrayLength(jarray) = 0;
92 virtual void GetIntArrayRegion(jintArray, jsize, jsize, jint*) = 0;
93
94 private:
95 static jobject WrapCallObjectMethod(JNIEnv* env,
96 jobject obj,
97 jmethodID methodID,
98 ...) {
99 va_list args;
100 va_start(args, methodID);
101 jobject result = WrapCallObjectMethodV(env, obj, methodID, args);
102 va_end(args);
103 return result;
104 }
105 static jobject WrapCallObjectMethodV(JNIEnv* env,
106 jobject obj,
107 jmethodID methodID,
108 va_list args) {
109 return static_cast<MockableJNIEnv*>(env)->CallObjectMethodV(obj, methodID,
110 args);
111 }
112 static void WrapDeleteGlobalRef(JNIEnv* env, jobject globalRef) {
113 static_cast<MockableJNIEnv*>(env)->DeleteGlobalRef(globalRef);
114 }
115 static void WrapDeleteLocalRef(JNIEnv* env, jobject localRef) {
116 static_cast<MockableJNIEnv*>(env)->DeleteLocalRef(localRef);
117 }
118 static jboolean WrapExceptionCheck(JNIEnv* env) {
119 return static_cast<MockableJNIEnv*>(env)->ExceptionCheck();
120 }
121 static void WrapExceptionClear(JNIEnv* env) {
122 static_cast<MockableJNIEnv*>(env)->ExceptionClear();
123 }
124 static void WrapExceptionDescribe(JNIEnv* env) {
125 static_cast<MockableJNIEnv*>(env)->ExceptionDescribe();
126 }
127 static jthrowable WrapExceptionOccurred(JNIEnv* env) {
128 return static_cast<MockableJNIEnv*>(env)->ExceptionOccurred();
129 }
130 static jclass WrapFindClass(JNIEnv* env, const char* name) {
131 return static_cast<MockableJNIEnv*>(env)->FindClass(name);
132 }
133 static jfieldID WrapGetFieldID(JNIEnv* env,
134 jclass clazz,
135 const char* name,
136 const char* sig) {
137 return static_cast<MockableJNIEnv*>(env)->GetFieldID(clazz, name, sig);
138 }
139 static jmethodID WrapGetMethodID(JNIEnv* env,
140 jclass clazz,
141 const char* name,
142 const char* sig) {
143 return static_cast<MockableJNIEnv*>(env)->GetMethodID(clazz, name, sig);
144 }
145 static jobjectRefType WrapGetObjectRefType(JNIEnv* env, jobject obj) {
146 return static_cast<MockableJNIEnv*>(env)->GetObjectRefType(obj);
147 }
148 static jfieldID WrapGetStaticFieldID(JNIEnv* env,
149 jclass clazz,
150 const char* name,
151 const char* sig) {
152 return static_cast<MockableJNIEnv*>(env)->GetStaticFieldID(clazz, name,
153 sig);
154 }
155 static jmethodID WrapGetStaticMethodID(JNIEnv* env,
156 jclass clazz,
157 const char* name,
158 const char* sig) {
159 return static_cast<MockableJNIEnv*>(env)->GetStaticMethodID(clazz, name,
160 sig);
161 }
162 static jobject WrapNewGlobalRef(JNIEnv* env, jobject ref) {
163 return static_cast<MockableJNIEnv*>(env)->NewGlobalRef(ref);
164 }
165 static jobject WrapNewLocalRef(JNIEnv* env, jobject ref) {
166 return static_cast<MockableJNIEnv*>(env)->NewLocalRef(ref);
167 }
168 static jint WrapRegisterNatives(JNIEnv* env,
169 jclass clazz,
170 const JNINativeMethod* methods,
171 jint nMethods) {
172 return static_cast<MockableJNIEnv*>(env)->RegisterNatives(clazz, methods,
173 nMethods);
174 }
175 static jsize WrapGetArrayLength(JNIEnv* env, jarray array) {
176 return static_cast<MockableJNIEnv*>(env)->GetArrayLength(array);
177 }
178 static void WrapGetIntArrayRegion(JNIEnv* env,
179 jintArray array,
180 jsize start,
181 jsize len,
182 jint* buf) {
183 static_cast<MockableJNIEnv*>(env)->GetIntArrayRegion(array, start, len,
184 buf);
185 }
186
187 JNINativeInterface jni_ = {};
188};
189
191 public:
192 MOCK_METHOD(jobject,
194 (jobject, jmethodID, va_list),
195 (override));
196 MOCK_METHOD(void, DeleteGlobalRef, (jobject), (override));
197 MOCK_METHOD(void, DeleteLocalRef, (jobject), (override));
198 MOCK_METHOD(jboolean, ExceptionCheck, (), (override));
199 MOCK_METHOD(void, ExceptionClear, (), (override));
200 MOCK_METHOD(void, ExceptionDescribe, (), (override));
201 MOCK_METHOD(jthrowable, ExceptionOccurred, (), (override));
202 MOCK_METHOD(jclass, FindClass, (const char*), (override));
203 MOCK_METHOD(jfieldID,
205 (jclass, const char*, const char*),
206 (override));
207 MOCK_METHOD(jmethodID,
209 (jclass, const char*, const char*),
210 (override));
211 MOCK_METHOD(jobjectRefType, GetObjectRefType, (jobject), (override));
212 MOCK_METHOD(jfieldID,
214 (jclass, const char*, const char*),
215 (override));
216 MOCK_METHOD(jmethodID,
218 (jclass, const char*, const char*),
219 (override));
220 MOCK_METHOD(jobject, NewGlobalRef, (jobject), (override));
221 MOCK_METHOD(jobject, NewLocalRef, (jobject), (override));
224 (jclass, const JNINativeMethod*, jint),
225 (override));
226 MOCK_METHOD(jsize, GetArrayLength, (jarray), (override));
229 (jintArray, jsize, jsize, jint*),
230 (override));
231};
232
233} // namespace flutter
234
235#endif // FLUTTER_SHELL_PLATFORM_ANDROID_JNI_MOCK_JNI_ENV_H_
MOCK_METHOD(jboolean, ExceptionCheck,(),(override))
MOCK_METHOD(jobject, CallObjectMethodV,(jobject, jmethodID, va_list),(override))
MOCK_METHOD(jclass, FindClass,(const char *),(override))
MOCK_METHOD(jobjectRefType, GetObjectRefType,(jobject),(override))
MOCK_METHOD(jfieldID, GetStaticFieldID,(jclass, const char *, const char *),(override))
MOCK_METHOD(void, ExceptionClear,(),(override))
MOCK_METHOD(jobject, NewGlobalRef,(jobject),(override))
MOCK_METHOD(jfieldID, GetFieldID,(jclass, const char *, const char *),(override))
MOCK_METHOD(jint, RegisterNatives,(jclass, const JNINativeMethod *, jint),(override))
MOCK_METHOD(jmethodID, GetStaticMethodID,(jclass, const char *, const char *),(override))
MOCK_METHOD(void, DeleteGlobalRef,(jobject),(override))
MOCK_METHOD(void, ExceptionDescribe,(),(override))
MOCK_METHOD(jmethodID, GetMethodID,(jclass, const char *, const char *),(override))
MOCK_METHOD(void, DeleteLocalRef,(jobject),(override))
MOCK_METHOD(jobject, NewLocalRef,(jobject),(override))
MOCK_METHOD(void, GetIntArrayRegion,(jintArray, jsize, jsize, jint *),(override))
MOCK_METHOD(jthrowable, ExceptionOccurred,(),(override))
MOCK_METHOD(jsize, GetArrayLength,(jarray),(override))
void SetJNIEnv(JNIEnv *env)
virtual jint RegisterNatives(jclass, const JNINativeMethod *, jint)=0
virtual jobject NewGlobalRef(jobject)=0
virtual jobject CallObjectMethodV(jobject, jmethodID, va_list)=0
virtual void DeleteLocalRef(jobject)=0
virtual jthrowable ExceptionOccurred()=0
virtual jclass FindClass(const char *)=0
virtual jsize GetArrayLength(jarray)=0
virtual jobjectRefType GetObjectRefType(jobject)=0
virtual void ExceptionDescribe()=0
virtual jfieldID GetFieldID(jclass, const char *, const char *)=0
virtual jfieldID GetStaticFieldID(jclass, const char *, const char *)=0
virtual jobject NewLocalRef(jobject)=0
virtual jmethodID GetMethodID(jclass, const char *, const char *)=0
virtual void ExceptionClear()=0
virtual jmethodID GetStaticMethodID(jclass, const char *, const char *)=0
virtual jboolean ExceptionCheck()=0
virtual void GetIntArrayRegion(jintArray, jsize, jsize, jint *)=0
virtual void DeleteGlobalRef(jobject)=0
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
DEF_SWITCHES_START aot vmservice shared library name
Definition switch_defs.h:27