blob: f77f08aa825675c024347ea645c7cb0ca89a03d6 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <jni.h>
#include "libnativehelper_test.h"
TEST_F(LibnativehelperTest, JNI_CreateJavaVM) {
// Android only supports a single runtime, this is already running so no more can be created.
JavaVMInitArgs vm_args;
JavaVMOption options[] = {
{ .optionString = "-verbose:jni", .extraInfo = nullptr }
};
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = std::size(options);
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
JavaVM* vm = nullptr;
JNIEnv* env = nullptr;
EXPECT_EQ(JNI_ERR, JNI_CreateJavaVM(&vm, &env, &vm_args));
EXPECT_EQ(nullptr, vm);
EXPECT_EQ(nullptr, env);
}
TEST_F(LibnativehelperTest, JNI_GetDefaultJavaVMInitArgs) {
// JNI_GetDefaultJavaVMInitArgs is historically not supported by ART or Dalvik (at least as
// far back as android-r2.2.3_r2).
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 0;
EXPECT_EQ(JNI_ERR, JNI_GetDefaultJavaVMInitArgs(&vm_args));
}
TEST_F(LibnativehelperTest, JNI_GetCreatedJavaVMs) {
JavaVM* vmBuf[3];
jsize nVMs;
ASSERT_EQ(JNI_OK, JNI_GetCreatedJavaVMs(vmBuf, std::size(vmBuf), &nVMs));
ASSERT_EQ(1, nVMs);
ASSERT_NE(nullptr, vmBuf[0]);
// Check caller can get the JNIEnv.
jint versions[] = { JNI_VERSION_1_1, JNI_VERSION_1_2, JNI_VERSION_1_4, JNI_VERSION_1_6 };
JNIEnv* env = nullptr;
for (jint version : versions) {
EXPECT_EQ(JNI_OK, vmBuf[0]->GetEnv(reinterpret_cast<void**>(&env), version))
<< " for JNI version " << std::hex << version;
EXPECT_EQ(mEnv, env);
}
}