diff options
Diffstat (limited to 'platform/android/src/test/render_test_runner.cpp')
-rw-r--r-- | platform/android/src/test/render_test_runner.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/platform/android/src/test/render_test_runner.cpp b/platform/android/src/test/render_test_runner.cpp new file mode 100644 index 0000000000..c1ffbc81bf --- /dev/null +++ b/platform/android/src/test/render_test_runner.cpp @@ -0,0 +1,104 @@ + +#include "jni.hpp" +#include "logger.hpp" +#include <mbgl/render_test.hpp> +#include <android_native_app_glue.h> + +#include <string> +#include <vector> + +#include <mbgl/util/logging.hpp> + +#include <android/log.h> + + +// Find a class, attempting to load the class if it's not found. +jclass LoadClass(JNIEnv* env, jobject activity_object, const char* class_name) { + jclass class_object = env->FindClass(class_name); + if (env->ExceptionCheck()) { + env->ExceptionClear(); + // If the class isn't found it's possible NativeActivity is being used by + // the application which means the class path is set to only load system + // classes. The following falls back to loading the class using the + // Activity before retrieving a reference to it. +// jclass activity_class = env->FindClass("android/app/NativeActivity"); + jclass activity_class = env->GetObjectClass(activity_object); + jmethodID activity_get_class_loader = env->GetMethodID( + activity_class, "getClassLoader", "()Ljava/lang/ClassLoader;"); + + jobject class_loader_object = + env->CallObjectMethod(activity_object, activity_get_class_loader); + + jclass class_loader_class = env->FindClass("java/lang/ClassLoader"); + jmethodID class_loader_load_class = + env->GetMethodID(class_loader_class, "loadClass", + "(Ljava/lang/String;)Ljava/lang/Class;"); + jstring class_name_object = env->NewStringUTF(class_name); + + class_object = static_cast<jclass>(env->CallObjectMethod( + class_loader_object, class_loader_load_class, class_name_object)); + + if (env->ExceptionCheck()) { + env->ExceptionClear(); + class_object = nullptr; + } + env->DeleteLocalRef(class_name_object); + env->DeleteLocalRef(class_loader_object); + } +// return class_object; +} + + + + +namespace mbgl { + + namespace { + + int severityToPriority(EventSeverity severity) { + switch(severity) { + case EventSeverity::Debug: + return ANDROID_LOG_DEBUG; + + case EventSeverity::Info: + return ANDROID_LOG_INFO; + + case EventSeverity::Warning: + return ANDROID_LOG_WARN; + + case EventSeverity::Error: + return ANDROID_LOG_ERROR; + + default: + return ANDROID_LOG_VERBOSE; + } + } + + } // namespace + + void Log::platformRecord(EventSeverity severity, const std::string &msg) { + __android_log_print(severityToPriority(severity), "mbgl", "%s", msg.c_str()); + + } + +} + + +void android_main(struct android_app* app) { + using FindClassFN = jclass (*)(JNIEnv*, const char*); + mbgl::android::theJVM= app->activity->vm; + JNIEnv* env; + app->activity->vm->AttachCurrentThread(&env, NULL); + // Logger + +// LoadClass(env, app->activity->clazz, mbgl::android::Logger::Name()); +// mbgl::android::Logger::registerNative(*env); + std::vector<std::string> arguments = {"runner","-p", "/sdcard/render-test"}; + std::vector<char*> argv; + for (const auto& arg : arguments) { + argv.push_back((char*) arg.data()); + } + argv.push_back(nullptr); + mbgl::runRenderTests(argv.size() - 1, argv.data()); + app->activity->vm->DetachCurrentThread(); +}
\ No newline at end of file |