diff options
author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-06-01 18:32:05 +0300 |
---|---|---|
committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2021-06-04 10:46:57 +0300 |
commit | 965fc1148d5ae241972589fcbf772a0244656f14 (patch) | |
tree | dd7040bc45f20aaf2e2fa4f1003631299daaa378 /tests | |
parent | dc794f7622bc00f7ca50fab65d6965695d6d2972 (diff) |
JNI: Add calls to get field IDs
Task-number: QTBUG-92952
Change-Id: Ie68ede4b00a411064a29925b28b1f60a84d2d678
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Diffstat (limited to 'tests')
2 files changed, 53 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java b/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java index 8f36dcc5fd..7bf6a7455a 100644 --- a/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java +++ b/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java @@ -33,6 +33,11 @@ public class QtJniEnvironmentTestClass private static native void callbackFromJava(String message); private static native void intCallbackFromJava(int value); + public final int INT_FIELD = 123; + public static final int S_INT_FIELD = 321; + + QtJniEnvironmentTestClass() {} + public static void appendJavaToString(String message) { callbackFromJava("From Java: " + message); diff --git a/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp b/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp index 06372ebad2..079de48948 100644 --- a/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp +++ b/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp @@ -49,6 +49,8 @@ private slots: void registerNativeMethodsByJclass(); void findMethod(); void findStaticMethod(); + void findField(); + void findStaticField(); }; void tst_QJniEnvironment::jniEnv() @@ -203,6 +205,52 @@ void tst_QJniEnvironment::findStaticMethod() QVERIFY(!env.checkAndClearExceptions()); } +void tst_QJniEnvironment::findField() +{ + QJniEnvironment env; + jclass clazz = env.findClass(javaTestClass); + QVERIFY(clazz != nullptr); + + // valid field + jfieldID validId = env.findField(clazz, "INT_FIELD", "I"); + QVERIFY(validId != nullptr); + + jmethodID constructorId = env.findMethod(clazz, "<init>", "()V"); + QVERIFY(constructorId != nullptr); + jobject obj = env->NewObject(clazz, constructorId); + QVERIFY(!env.checkAndClearExceptions()); + int value = env->GetIntField(obj, validId); + QVERIFY(!env.checkAndClearExceptions()); + QVERIFY(value == 123); + + // invalid signature + jfieldID invalidId = env.findField(clazz, "unknown", "I"); + QVERIFY(invalidId == nullptr); + // check that all exceptions are already cleared + QVERIFY(!env.checkAndClearExceptions()); +} + +void tst_QJniEnvironment::findStaticField() +{ + QJniEnvironment env; + jclass clazz = env.findClass(javaTestClass); + QVERIFY(clazz != nullptr); + + // valid field + jfieldID validId = env.findStaticField(clazz, "S_INT_FIELD", "I"); + QVERIFY(validId != nullptr); + + int size = env->GetStaticIntField(clazz, validId); + QVERIFY(!env.checkAndClearExceptions()); + QVERIFY(size == 321); + + // invalid signature + jfieldID invalidId = env.findStaticField(clazz, "unknown", "I"); + QVERIFY(invalidId == nullptr); + // check that all exceptions are already cleared + QVERIFY(!env.checkAndClearExceptions()); +} + QTEST_MAIN(tst_QJniEnvironment) #include "tst_qjnienvironment.moc" |