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 }
72
73 virtual jobject CallObjectMethodV(jobject, jmethodID, va_list) = 0;
74 virtual void DeleteGlobalRef(jobject) = 0;
75 virtual void DeleteLocalRef(jobject) = 0;
76 virtual jboolean ExceptionCheck() = 0;
77 virtual void ExceptionClear() = 0;
78 virtual void ExceptionDescribe() = 0;
79 virtual jthrowable ExceptionOccurred() = 0;
80 virtual jclass FindClass(const char*) = 0;
81 virtual jfieldID GetFieldID(jclass, const char*, const char*) = 0;
82 virtual jmethodID GetMethodID(jclass, const char*, const char*) = 0;
83 virtual jobjectRefType GetObjectRefType(jobject) = 0;
84 virtual jfieldID GetStaticFieldID(jclass, const char*, const char*) = 0;
85 virtual jmethodID GetStaticMethodID(jclass, const char*, const char*) = 0;
86 virtual jobject NewGlobalRef(jobject) = 0;
87 virtual jobject NewLocalRef(jobject) = 0;
88 virtual jint RegisterNatives(jclass, const JNINativeMethod*, jint) = 0;
89
90 private:
91 static jobject WrapCallObjectMethod(JNIEnv* env,
92 jobject obj,
93 jmethodID methodID,
94 ...) {
95 va_list args;
96 va_start(args, methodID);
97 jobject result = WrapCallObjectMethodV(env, obj, methodID, args);
98 va_end(args);
99 return result;
100 }
101 static jobject WrapCallObjectMethodV(JNIEnv* env,
102 jobject obj,
103 jmethodID methodID,
104 va_list args) {
105 return static_cast<MockableJNIEnv*>(env)->CallObjectMethodV(obj, methodID,
106 args);
107 }
108 static void WrapDeleteGlobalRef(JNIEnv* env, jobject globalRef) {
109 static_cast<MockableJNIEnv*>(env)->DeleteGlobalRef(globalRef);
110 }
111 static void WrapDeleteLocalRef(JNIEnv* env, jobject localRef) {
112 static_cast<MockableJNIEnv*>(env)->DeleteLocalRef(localRef);
113 }
114 static jboolean WrapExceptionCheck(JNIEnv* env) {
115 return static_cast<MockableJNIEnv*>(env)->ExceptionCheck();
116 }
117 static void WrapExceptionClear(JNIEnv* env) {
118 static_cast<MockableJNIEnv*>(env)->ExceptionClear();
119 }
120 static void WrapExceptionDescribe(JNIEnv* env) {
121 static_cast<MockableJNIEnv*>(env)->ExceptionDescribe();
122 }
123 static jthrowable WrapExceptionOccurred(JNIEnv* env) {
124 return static_cast<MockableJNIEnv*>(env)->ExceptionOccurred();
125 }
126 static jclass WrapFindClass(JNIEnv* env, const char* name) {
127 return static_cast<MockableJNIEnv*>(env)->FindClass(name);
128 }
129 static jfieldID WrapGetFieldID(JNIEnv* env,
130 jclass clazz,
131 const char* name,
132 const char* sig) {
133 return static_cast<MockableJNIEnv*>(env)->GetFieldID(clazz, name, sig);
134 }
135 static jmethodID WrapGetMethodID(JNIEnv* env,
136 jclass clazz,
137 const char* name,
138 const char* sig) {
139 return static_cast<MockableJNIEnv*>(env)->GetMethodID(clazz, name, sig);
140 }
141 static jobjectRefType WrapGetObjectRefType(JNIEnv* env, jobject obj) {
142 return static_cast<MockableJNIEnv*>(env)->GetObjectRefType(obj);
143 }
144 static jfieldID WrapGetStaticFieldID(JNIEnv* env,
145 jclass clazz,
146 const char* name,
147 const char* sig) {
148 return static_cast<MockableJNIEnv*>(env)->GetStaticFieldID(clazz, name,
149 sig);
150 }
151 static jmethodID WrapGetStaticMethodID(JNIEnv* env,
152 jclass clazz,
153 const char* name,
154 const char* sig) {
155 return static_cast<MockableJNIEnv*>(env)->GetStaticMethodID(clazz, name,
156 sig);
157 }
158 static jobject WrapNewGlobalRef(JNIEnv* env, jobject ref) {
159 return static_cast<MockableJNIEnv*>(env)->NewGlobalRef(ref);
160 }
161 static jobject WrapNewLocalRef(JNIEnv* env, jobject ref) {
162 return static_cast<MockableJNIEnv*>(env)->NewLocalRef(ref);
163 }
164 static jint WrapRegisterNatives(JNIEnv* env,
165 jclass clazz,
166 const JNINativeMethod* methods,
167 jint nMethods) {
168 return static_cast<MockableJNIEnv*>(env)->RegisterNatives(clazz, methods,
169 nMethods);
170 }
171
172 JNINativeInterface jni_ = {};
173};
174
176 public:
177 MOCK_METHOD(jobject,
179 (jobject, jmethodID, va_list),
180 (override));
181 MOCK_METHOD(void, DeleteGlobalRef, (jobject), (override));
182 MOCK_METHOD(void, DeleteLocalRef, (jobject), (override));
183 MOCK_METHOD(jboolean, ExceptionCheck, (), (override));
184 MOCK_METHOD(void, ExceptionClear, (), (override));
185 MOCK_METHOD(void, ExceptionDescribe, (), (override));
186 MOCK_METHOD(jthrowable, ExceptionOccurred, (), (override));
187 MOCK_METHOD(jclass, FindClass, (const char*), (override));
188 MOCK_METHOD(jfieldID,
190 (jclass, const char*, const char*),
191 (override));
192 MOCK_METHOD(jmethodID,
194 (jclass, const char*, const char*),
195 (override));
196 MOCK_METHOD(jobjectRefType, GetObjectRefType, (jobject), (override));
197 MOCK_METHOD(jfieldID,
199 (jclass, const char*, const char*),
200 (override));
201 MOCK_METHOD(jmethodID,
203 (jclass, const char*, const char*),
204 (override));
205 MOCK_METHOD(jobject, NewGlobalRef, (jobject), (override));
206 MOCK_METHOD(jobject, NewLocalRef, (jobject), (override));
209 (jclass, const JNINativeMethod*, jint),
210 (override));
211};
212
213} // namespace flutter
214
215#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(jthrowable, ExceptionOccurred,(),(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 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 DeleteGlobalRef(jobject)=0
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
DEF_SWITCHES_START aot vmservice shared library name
Definition switch_defs.h:27