From ca82c060451d38f266fc17305855c57e7c8c0f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Tue, 8 Oct 2013 17:42:41 +0200 Subject: Rename QJNIXxx classes to QAndroidJniXxx. The old classes where not following the usual convention for acronyms in class names. Change-Id: I2fad72483c51ca95a2703d914d6a678c5f7cde98 Reviewed-by: Jake Petroules Reviewed-by: Yoann Lopes --- tests/auto/auto.pro | 4 +- tests/auto/cmake/CMakeLists.txt | 2 +- .../qandroidjnienvironment.pro | 4 + .../tst_qandroidjnienvironment.cpp | 111 ++++ tests/auto/qandroidjniobject/qandroidjniobject.pro | 4 + .../qandroidjniobject/tst_qandroidjniobject.cpp | 730 +++++++++++++++++++++ tests/auto/qjnienvironment/qjnienvironment.pro | 4 - tests/auto/qjnienvironment/tst_qjnienvironment.cpp | 111 ---- tests/auto/qjniobject/qjniobject.pro | 4 - tests/auto/qjniobject/tst_qjniobject.cpp | 730 --------------------- 10 files changed, 852 insertions(+), 852 deletions(-) create mode 100644 tests/auto/qandroidjnienvironment/qandroidjnienvironment.pro create mode 100644 tests/auto/qandroidjnienvironment/tst_qandroidjnienvironment.cpp create mode 100644 tests/auto/qandroidjniobject/qandroidjniobject.pro create mode 100644 tests/auto/qandroidjniobject/tst_qandroidjniobject.cpp delete mode 100644 tests/auto/qjnienvironment/qjnienvironment.pro delete mode 100644 tests/auto/qjnienvironment/tst_qjnienvironment.cpp delete mode 100644 tests/auto/qjniobject/qjniobject.pro delete mode 100644 tests/auto/qjniobject/tst_qjniobject.cpp (limited to 'tests/auto') diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index edcc5f0..94b6dd8 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -1,5 +1,5 @@ TEMPLATE = subdirs SUBDIRS += \ cmake \ - qjnienvironment \ - qjniobject + qandroidjnienvironment \ + qandroidjniobject diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt index 7a81196..a786745 100644 --- a/tests/auto/cmake/CMakeLists.txt +++ b/tests/auto/cmake/CMakeLists.txt @@ -10,5 +10,5 @@ find_package(Qt5Core REQUIRED) include("${_Qt5CTestMacros}") test_module_includes( - AndroidExtras QJNIObject + AndroidExtras QAndroidJniObject ) diff --git a/tests/auto/qandroidjnienvironment/qandroidjnienvironment.pro b/tests/auto/qandroidjnienvironment/qandroidjnienvironment.pro new file mode 100644 index 0000000..3c4fcf7 --- /dev/null +++ b/tests/auto/qandroidjnienvironment/qandroidjnienvironment.pro @@ -0,0 +1,4 @@ +CONFIG += testcase +TARGET = tst_qandroidjnienvironment +QT += testlib androidextras +SOURCES += tst_qandroidjnienvironment.cpp diff --git a/tests/auto/qandroidjnienvironment/tst_qandroidjnienvironment.cpp b/tests/auto/qandroidjnienvironment/tst_qandroidjnienvironment.cpp new file mode 100644 index 0000000..307e6b7 --- /dev/null +++ b/tests/auto/qandroidjnienvironment/tst_qandroidjnienvironment.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +class tst_QAndroidJniEnvironment : public QObject +{ + Q_OBJECT + +private slots: + void jniEnv(); + void javaVM(); + +public: + static JavaVM *m_javaVM; +}; + +JavaVM *tst_QAndroidJniEnvironment::m_javaVM = 0; + +void tst_QAndroidJniEnvironment::jniEnv() +{ + QVERIFY(m_javaVM); + + { + QAndroidJniEnvironment env; + + // JNI environment should now be attached to the current thread + JNIEnv *jni = 0; + QCOMPARE(m_javaVM->GetEnv((void**)&jni, JNI_VERSION_1_6), JNI_OK); + + JNIEnv *e = env; + QVERIFY(e); + + QCOMPARE(env->GetVersion(), JNI_VERSION_1_6); + + // try to find an existing class + QVERIFY(env->FindClass("java/lang/Object")); + QVERIFY(!env->ExceptionCheck()); + + // try to find a nonexistent class + QVERIFY(!env->FindClass("this/doesnt/Exist")); + QVERIFY(env->ExceptionCheck()); + env->ExceptionClear(); + } + + // The environment should automatically be detached when QAndroidJniEnvironment goes out of scope + JNIEnv *jni = 0; + QCOMPARE(m_javaVM->GetEnv((void**)&jni, JNI_VERSION_1_6), JNI_EDETACHED); +} + +void tst_QAndroidJniEnvironment::javaVM() +{ + QVERIFY(m_javaVM); + + QAndroidJniEnvironment env; + QCOMPARE(env.javaVM(), m_javaVM); + + JavaVM *vm = 0; + QCOMPARE(env->GetJavaVM(&vm), JNI_OK); + QCOMPARE(env.javaVM(), vm); +} + +Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) +{ + Q_UNUSED(reserved) + tst_QAndroidJniEnvironment::m_javaVM = vm; + return JNI_VERSION_1_6; +} + +QTEST_APPLESS_MAIN(tst_QAndroidJniEnvironment) + +#include "tst_qandroidjnienvironment.moc" diff --git a/tests/auto/qandroidjniobject/qandroidjniobject.pro b/tests/auto/qandroidjniobject/qandroidjniobject.pro new file mode 100644 index 0000000..83e658a --- /dev/null +++ b/tests/auto/qandroidjniobject/qandroidjniobject.pro @@ -0,0 +1,4 @@ +CONFIG += testcase +TARGET = tst_qandroidjniobject +QT += testlib androidextras +SOURCES += tst_qandroidjniobject.cpp diff --git a/tests/auto/qandroidjniobject/tst_qandroidjniobject.cpp b/tests/auto/qandroidjniobject/tst_qandroidjniobject.cpp new file mode 100644 index 0000000..4b8f1d5 --- /dev/null +++ b/tests/auto/qandroidjniobject/tst_qandroidjniobject.cpp @@ -0,0 +1,730 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +class tst_QAndroidJniObject : public QObject +{ + Q_OBJECT + +public: + tst_QAndroidJniObject(); + +private slots: + void initTestCase(); + + void ctor(); + void callMethodTest(); + void callObjectMethodTest(); + void stringConvertionTest(); + void compareOperatorTests(); + void callStaticObjectMethodClassName(); + void callStaticObjectMethod(); + void callStaticBooleanMethodClassName(); + void callStaticBooleanMethod(); + void callStaticCharMethodClassName(); + void callStaticCharMethod(); + void callStaticIntMethodClassName(); + void callStaticIntMethod(); + void callStaticByteMethodClassName(); + void callStaticByteMethod(); + void callStaticDoubleMethodClassName(); + void callStaticDoubleMethod(); + void callStaticFloatMethodClassName(); + void callStaticFloatMethod(); + void callStaticLongMethodClassName(); + void callStaticLongMethod(); + void callStaticShortMethodClassName(); + void callStaticShortMethod(); + void getStaticObjectFieldClassName(); + void getStaticObjectField(); + void getStaticIntFieldClassName(); + void getStaticIntField(); + void getStaticByteFieldClassName(); + void getStaticByteField(); + void getStaticLongFieldClassName(); + void getStaticLongField(); + void getStaticDoubleFieldClassName(); + void getStaticDoubleField(); + void getStaticFloatFieldClassName(); + void getStaticFloatField(); + void getStaticShortFieldClassName(); + void getStaticShortField(); + void getStaticCharFieldClassName(); + void getStaticCharField(); + void getBooleanField(); + void getIntField(); + + void cleanupTestCase(); + +public: + static jclass m_activityDelegateClass; +}; + +jclass tst_QAndroidJniObject::m_activityDelegateClass = 0; + +tst_QAndroidJniObject::tst_QAndroidJniObject() +{ +} + +void tst_QAndroidJniObject::initTestCase() +{ +} + +void tst_QAndroidJniObject::cleanupTestCase() +{ +} + +void tst_QAndroidJniObject::ctor() +{ + { + QAndroidJniObject object; + QVERIFY(!object.isValid()); + } + + { + QAndroidJniObject object("java/lang/String"); + QVERIFY(object.isValid()); + } + + { + QAndroidJniObject string = QAndroidJniObject::fromString(QLatin1String("Hello, Java")); + QAndroidJniObject object("java/lang/String", "(Ljava/lang/String;)V", string.object()); + QVERIFY(object.isValid()); + QCOMPARE(string.toString(), object.toString()); + } + + { + QAndroidJniEnvironment env; + jclass javaStringClass = env->FindClass("java/lang/String"); + QAndroidJniObject string(javaStringClass); + QVERIFY(string.isValid()); + } + + { + QAndroidJniEnvironment env; + const QString qString = QLatin1String("Hello, Java"); + jclass javaStringClass = env->FindClass("java/lang/String"); + QAndroidJniObject string = QAndroidJniObject::fromString(qString); + QAndroidJniObject stringCpy(javaStringClass, "(Ljava/lang/String;)V", string.object()); + QVERIFY(stringCpy.isValid()); + QCOMPARE(qString, stringCpy.toString()); + } +} + +void tst_QAndroidJniObject::callMethodTest() +{ + { + QAndroidJniObject jString1 = QAndroidJniObject::fromString(QLatin1String("Hello, Java")); + QAndroidJniObject jString2 = QAndroidJniObject::fromString(QLatin1String("hELLO, jAVA")); + QVERIFY(jString1 != jString2); + + const jboolean isEmpty = jString1.callMethod("isEmpty"); + QVERIFY(!isEmpty); + + const jint ret = jString1.callMethod("compareToIgnoreCase", + "(Ljava/lang/String;)I", + jString2.object()); + QVERIFY(0 == ret); + } + + { + jlong jLong = 100; + QAndroidJniObject longObject("java/lang/Long", "(J)V", jLong); + jlong ret = longObject.callMethod("longValue"); + QCOMPARE(ret, jLong); + } +} + +void tst_QAndroidJniObject::callObjectMethodTest() +{ + const QString qString = QLatin1String("Hello, Java"); + QAndroidJniObject jString = QAndroidJniObject::fromString(qString); + const QString qStringRet = jString.callObjectMethod("toUpperCase").toString(); + QCOMPARE(qString.toUpper(), qStringRet); + + QAndroidJniObject subString = jString.callObjectMethod("substring", + "(II)Ljava/lang/String;", + 0, 4); + QCOMPARE(subString.toString(), qString.mid(0, 4)); +} + +void tst_QAndroidJniObject::stringConvertionTest() +{ + const QString qString(QLatin1String("Hello, Java")); + QAndroidJniObject jString = QAndroidJniObject::fromString(qString); + QVERIFY(jString.isValid()); + QString qStringRet = jString.toString(); + QCOMPARE(qString, qStringRet); +} + +void tst_QAndroidJniObject::compareOperatorTests() +{ + QString str("hello!"); + QAndroidJniObject stringObject = QAndroidJniObject::fromString(str); + + jobject jobj = stringObject.object(); + jstring jsobj = stringObject.object(); + + QVERIFY(jobj == stringObject); + QVERIFY(stringObject == jobj); + QVERIFY(jsobj == stringObject); + QVERIFY(stringObject == jsobj); + + QAndroidJniObject stringObject3 = stringObject.object(); + QVERIFY(stringObject3 == stringObject); + + QAndroidJniObject stringObject2 = QAndroidJniObject::fromString(str); + QVERIFY(stringObject != stringObject2); + + jstring jstrobj = 0; + QAndroidJniObject invalidStringObject; + QVERIFY(invalidStringObject == jstrobj); + + QVERIFY(jstrobj != stringObject); + QVERIFY(stringObject != jstrobj); + QVERIFY(!invalidStringObject.isValid()); +} + +void tst_QAndroidJniObject::callStaticObjectMethodClassName() +{ + QAndroidJniObject formatString = QAndroidJniObject::fromString(QLatin1String("test format")); + QVERIFY(formatString.isValid()); + + QVERIFY(QAndroidJniObject::isClassAvailable("java/lang/String")); + QAndroidJniObject returnValue = QAndroidJniObject::callStaticObjectMethod("java/lang/String", + "format", + "(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;", + formatString.object(), + jobjectArray(0)); + QVERIFY(returnValue.isValid()); + + QString returnedString = returnValue.toString(); + + QCOMPARE(returnedString, QString::fromLatin1("test format")); +} + +void tst_QAndroidJniObject::callStaticObjectMethod() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/String"); + QVERIFY(cls != 0); + + QAndroidJniObject formatString = QAndroidJniObject::fromString(QLatin1String("test format")); + QVERIFY(formatString.isValid()); + + QAndroidJniObject returnValue = QAndroidJniObject::callStaticObjectMethod(cls, + "format", + "(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;", + formatString.object(), + jobjectArray(0)); + QVERIFY(returnValue.isValid()); + + QString returnedString = returnValue.toString(); + + QCOMPARE(returnedString, QString::fromLatin1("test format")); +} + +void tst_QAndroidJniObject::callStaticBooleanMethod() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Boolean"); + QVERIFY(cls != 0); + + { + QAndroidJniObject parameter = QAndroidJniObject::fromString("true"); + QVERIFY(parameter.isValid()); + + jboolean b = QAndroidJniObject::callStaticMethod(cls, + "parseBoolean", + "(Ljava/lang/String;)Z", + parameter.object()); + QVERIFY(b); + } + + { + QAndroidJniObject parameter = QAndroidJniObject::fromString("false"); + QVERIFY(parameter.isValid()); + + jboolean b = QAndroidJniObject::callStaticMethod(cls, + "parseBoolean", + "(Ljava/lang/String;)Z", + parameter.object()); + QVERIFY(!b); + } +} + +void tst_QAndroidJniObject::callStaticBooleanMethodClassName() +{ + { + QAndroidJniObject parameter = QAndroidJniObject::fromString("true"); + QVERIFY(parameter.isValid()); + + jboolean b = QAndroidJniObject::callStaticMethod("java/lang/Boolean", + "parseBoolean", + "(Ljava/lang/String;)Z", + parameter.object()); + QVERIFY(b); + } + + { + QAndroidJniObject parameter = QAndroidJniObject::fromString("false"); + QVERIFY(parameter.isValid()); + + jboolean b = QAndroidJniObject::callStaticMethod("java/lang/Boolean", + "parseBoolean", + "(Ljava/lang/String;)Z", + parameter.object()); + QVERIFY(!b); + } +} + +void tst_QAndroidJniObject::callStaticByteMethodClassName() +{ + QString number = QString::number(123); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jbyte returnValue = QAndroidJniObject::callStaticMethod("java/lang/Byte", + "parseByte", + "(Ljava/lang/String;)B", + parameter.object()); + QCOMPARE(returnValue, jbyte(number.toInt())); +} + +void tst_QAndroidJniObject::callStaticByteMethod() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Byte"); + QVERIFY(cls != 0); + + QString number = QString::number(123); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jbyte returnValue = QAndroidJniObject::callStaticMethod(cls, + "parseByte", + "(Ljava/lang/String;)B", + parameter.object()); + QCOMPARE(returnValue, jbyte(number.toInt())); +} + +void tst_QAndroidJniObject::callStaticIntMethodClassName() +{ + QString number = QString::number(123); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jint returnValue = QAndroidJniObject::callStaticMethod("java/lang/Integer", + "parseInt", + "(Ljava/lang/String;)I", + parameter.object()); + QCOMPARE(returnValue, number.toInt()); +} + + +void tst_QAndroidJniObject::callStaticIntMethod() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Integer"); + QVERIFY(cls != 0); + + QString number = QString::number(123); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jint returnValue = QAndroidJniObject::callStaticMethod(cls, + "parseInt", + "(Ljava/lang/String;)I", + parameter.object()); + QCOMPARE(returnValue, number.toInt()); +} + +void tst_QAndroidJniObject::callStaticCharMethodClassName() +{ + jchar returnValue = QAndroidJniObject::callStaticMethod("java/lang/Character", + "toUpperCase", + "(C)C", + jchar('a')); + QCOMPARE(returnValue, jchar('A')); +} + + +void tst_QAndroidJniObject::callStaticCharMethod() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Character"); + QVERIFY(cls != 0); + + jchar returnValue = QAndroidJniObject::callStaticMethod(cls, + "toUpperCase", + "(C)C", + jchar('a')); + QCOMPARE(returnValue, jchar('A')); +} + +void tst_QAndroidJniObject::callStaticDoubleMethodClassName () +{ + QString number = QString::number(123.45); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jdouble returnValue = QAndroidJniObject::callStaticMethod("java/lang/Double", + "parseDouble", + "(Ljava/lang/String;)D", + parameter.object()); + QCOMPARE(returnValue, number.toDouble()); +} + + +void tst_QAndroidJniObject::callStaticDoubleMethod() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Double"); + QVERIFY(cls != 0); + + QString number = QString::number(123.45); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jdouble returnValue = QAndroidJniObject::callStaticMethod(cls, + "parseDouble", + "(Ljava/lang/String;)D", + parameter.object()); + QCOMPARE(returnValue, number.toDouble()); +} + +void tst_QAndroidJniObject::callStaticFloatMethodClassName() +{ + QString number = QString::number(123.45); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jfloat returnValue = QAndroidJniObject::callStaticMethod("java/lang/Float", + "parseFloat", + "(Ljava/lang/String;)F", + parameter.object()); + QCOMPARE(returnValue, number.toFloat()); +} + + +void tst_QAndroidJniObject::callStaticFloatMethod() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Float"); + QVERIFY(cls != 0); + + QString number = QString::number(123.45); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jfloat returnValue = QAndroidJniObject::callStaticMethod(cls, + "parseFloat", + "(Ljava/lang/String;)F", + parameter.object()); + QCOMPARE(returnValue, number.toFloat()); +} + +void tst_QAndroidJniObject::callStaticShortMethodClassName() +{ + QString number = QString::number(123); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jshort returnValue = QAndroidJniObject::callStaticMethod("java/lang/Short", + "parseShort", + "(Ljava/lang/String;)S", + parameter.object()); + QCOMPARE(returnValue, number.toShort()); +} + + +void tst_QAndroidJniObject::callStaticShortMethod() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Short"); + QVERIFY(cls != 0); + + QString number = QString::number(123); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jshort returnValue = QAndroidJniObject::callStaticMethod(cls, + "parseShort", + "(Ljava/lang/String;)S", + parameter.object()); + QCOMPARE(returnValue, number.toShort()); +} + +void tst_QAndroidJniObject::callStaticLongMethodClassName() +{ + QString number = QString::number(123); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jlong returnValue = QAndroidJniObject::callStaticMethod("java/lang/Long", + "parseLong", + "(Ljava/lang/String;)J", + parameter.object()); + QCOMPARE(returnValue, jlong(number.toLong())); +} + +void tst_QAndroidJniObject::callStaticLongMethod() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Long"); + QVERIFY(cls != 0); + + QString number = QString::number(123); + QAndroidJniObject parameter = QAndroidJniObject::fromString(number); + + jlong returnValue = QAndroidJniObject::callStaticMethod(cls, + "parseLong", + "(Ljava/lang/String;)J", + parameter.object()); + QCOMPARE(returnValue, jlong(number.toLong())); +} + +void tst_QAndroidJniObject::getStaticObjectFieldClassName() +{ + { + QAndroidJniObject boolObject = QAndroidJniObject::getStaticObjectField("java/lang/Boolean", + "FALSE", + "Ljava/lang/Boolean;"); + QVERIFY(boolObject.isValid()); + + jboolean booleanValue = boolObject.callMethod("booleanValue"); + QVERIFY(!booleanValue); + } + + { + QAndroidJniObject boolObject = QAndroidJniObject::getStaticObjectField("java/lang/Boolean", + "TRUE", + "Ljava/lang/Boolean;"); + QVERIFY(boolObject.isValid()); + + jboolean booleanValue = boolObject.callMethod("booleanValue"); + QVERIFY(booleanValue); + } +} + +void tst_QAndroidJniObject::getStaticObjectField() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Boolean"); + QVERIFY(cls != 0); + + { + QAndroidJniObject boolObject = QAndroidJniObject::getStaticObjectField(cls, + "FALSE", + "Ljava/lang/Boolean;"); + QVERIFY(boolObject.isValid()); + + jboolean booleanValue = boolObject.callMethod("booleanValue"); + QVERIFY(!booleanValue); + } + + { + QAndroidJniObject boolObject = QAndroidJniObject::getStaticObjectField(cls, + "TRUE", + "Ljava/lang/Boolean;"); + QVERIFY(boolObject.isValid()); + + jboolean booleanValue = boolObject.callMethod("booleanValue"); + QVERIFY(booleanValue); + } +} + +void tst_QAndroidJniObject::getStaticIntFieldClassName() +{ + jint i = QAndroidJniObject::getStaticField("java/lang/Double", "SIZE"); + QCOMPARE(i, 64); +} + +void tst_QAndroidJniObject::getStaticIntField() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Double"); + QVERIFY(cls != 0); + + jint i = QAndroidJniObject::getStaticField(cls, "SIZE"); + QCOMPARE(i, 64); +} + +void tst_QAndroidJniObject::getStaticByteFieldClassName() +{ + jbyte i = QAndroidJniObject::getStaticField("java/lang/Byte", "MAX_VALUE"); + QCOMPARE(i, jbyte(127)); +} + +void tst_QAndroidJniObject::getStaticByteField() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Byte"); + QVERIFY(cls != 0); + + jbyte i = QAndroidJniObject::getStaticField(cls, "MAX_VALUE"); + QCOMPARE(i, jbyte(127)); +} + +void tst_QAndroidJniObject::getStaticLongFieldClassName() +{ + jlong i = QAndroidJniObject::getStaticField("java/lang/Long", "MAX_VALUE"); + QCOMPARE(i, jlong(9223372036854775807L)); +} + +void tst_QAndroidJniObject::getStaticLongField() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Long"); + QVERIFY(cls != 0); + + jlong i = QAndroidJniObject::getStaticField(cls, "MAX_VALUE"); + QCOMPARE(i, jlong(9223372036854775807L)); +} + +void tst_QAndroidJniObject::getStaticDoubleFieldClassName() +{ + jdouble i = QAndroidJniObject::getStaticField("java/lang/Double", "NaN"); + jlong *k = reinterpret_cast(&i); + QCOMPARE(*k, jlong(0x7ff8000000000000L)); +} + +void tst_QAndroidJniObject::getStaticDoubleField() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Double"); + QVERIFY(cls != 0); + + jdouble i = QAndroidJniObject::getStaticField(cls, "NaN"); + jlong *k = reinterpret_cast(&i); + QCOMPARE(*k, jlong(0x7ff8000000000000L)); +} + +void tst_QAndroidJniObject::getStaticFloatFieldClassName() +{ + jfloat i = QAndroidJniObject::getStaticField("java/lang/Float", "NaN"); + unsigned *k = reinterpret_cast(&i); + QCOMPARE(*k, unsigned(0x7fc00000)); +} + +void tst_QAndroidJniObject::getStaticFloatField() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Float"); + QVERIFY(cls != 0); + + jfloat i = QAndroidJniObject::getStaticField(cls, "NaN"); + unsigned *k = reinterpret_cast(&i); + QCOMPARE(*k, unsigned(0x7fc00000)); +} + +void tst_QAndroidJniObject::getStaticShortFieldClassName() +{ + jshort i = QAndroidJniObject::getStaticField("java/lang/Short", "MAX_VALUE"); + QCOMPARE(i, jshort(32767)); +} + +void tst_QAndroidJniObject::getStaticShortField() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Short"); + QVERIFY(cls != 0); + + jshort i = QAndroidJniObject::getStaticField(cls, "MAX_VALUE"); + QCOMPARE(i, jshort(32767)); +} + +void tst_QAndroidJniObject::getStaticCharFieldClassName() +{ + jchar i = QAndroidJniObject::getStaticField("java/lang/Character", "MAX_VALUE"); + QCOMPARE(i, jchar(0xffff)); +} + +void tst_QAndroidJniObject::getStaticCharField() +{ + QAndroidJniEnvironment env; + jclass cls = env->FindClass("java/lang/Character"); + QVERIFY(cls != 0); + + jchar i = QAndroidJniObject::getStaticField(cls, "MAX_VALUE"); + QCOMPARE(i, jchar(0xffff)); +} + + +void tst_QAndroidJniObject::getBooleanField() +{ + QVERIFY(m_activityDelegateClass); + + QAndroidJniObject obj(m_activityDelegateClass); + + QVERIFY(obj.isValid()); + QVERIFY(!obj.getField("m_fullScreen")); +} + +void tst_QAndroidJniObject::getIntField() +{ + QVERIFY(m_activityDelegateClass); + + QAndroidJniObject obj(m_activityDelegateClass); + + QVERIFY(obj.isValid()); + jint res = obj.getField("m_currentRotation"); + + QCOMPARE(res, -1); +} + +Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) +{ + typedef union { + JNIEnv *nenv; + void *venv; + } _JNIEnv; + + _JNIEnv uenv; + uenv.venv = Q_NULLPTR; + + if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_6) != JNI_OK) + return JNI_ERR; + + JNIEnv *env = uenv.nenv; + + jclass clazz = env->FindClass("org/qtproject/qt5/android/QtActivityDelegate"); + tst_QAndroidJniObject::m_activityDelegateClass = (jclass)env->NewGlobalRef(clazz); + + return JNI_VERSION_1_6; +} + +QTEST_APPLESS_MAIN(tst_QAndroidJniObject) + +#include "tst_qandroidjniobject.moc" diff --git a/tests/auto/qjnienvironment/qjnienvironment.pro b/tests/auto/qjnienvironment/qjnienvironment.pro deleted file mode 100644 index e4b7b09..0000000 --- a/tests/auto/qjnienvironment/qjnienvironment.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -TARGET = tst_qjnienvironment -QT += testlib androidextras -SOURCES += tst_qjnienvironment.cpp diff --git a/tests/auto/qjnienvironment/tst_qjnienvironment.cpp b/tests/auto/qjnienvironment/tst_qjnienvironment.cpp deleted file mode 100644 index 7d5de58..0000000 --- a/tests/auto/qjnienvironment/tst_qjnienvironment.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include - -class tst_QJNIEnvironment : public QObject -{ - Q_OBJECT - -private slots: - void jniEnv(); - void javaVM(); - -public: - static JavaVM *m_javaVM; -}; - -JavaVM *tst_QJNIEnvironment::m_javaVM = 0; - -void tst_QJNIEnvironment::jniEnv() -{ - QVERIFY(m_javaVM); - - { - QJNIEnvironment env; - - // JNI environment should now be attached to the current thread - JNIEnv *jni = 0; - QCOMPARE(m_javaVM->GetEnv((void**)&jni, JNI_VERSION_1_6), JNI_OK); - - JNIEnv *e = env; - QVERIFY(e); - - QCOMPARE(env->GetVersion(), JNI_VERSION_1_6); - - // try to find an existing class - QVERIFY(env->FindClass("java/lang/Object")); - QVERIFY(!env->ExceptionCheck()); - - // try to find a nonexistent class - QVERIFY(!env->FindClass("this/doesnt/Exist")); - QVERIFY(env->ExceptionCheck()); - env->ExceptionClear(); - } - - // The environment should automatically be detached when QJNIEnvironment goes out of scope - JNIEnv *jni = 0; - QCOMPARE(m_javaVM->GetEnv((void**)&jni, JNI_VERSION_1_6), JNI_EDETACHED); -} - -void tst_QJNIEnvironment::javaVM() -{ - QVERIFY(m_javaVM); - - QJNIEnvironment env; - QCOMPARE(env.javaVM(), m_javaVM); - - JavaVM *vm = 0; - QCOMPARE(env->GetJavaVM(&vm), JNI_OK); - QCOMPARE(env.javaVM(), vm); -} - -Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) -{ - Q_UNUSED(reserved) - tst_QJNIEnvironment::m_javaVM = vm; - return JNI_VERSION_1_6; -} - -QTEST_APPLESS_MAIN(tst_QJNIEnvironment) - -#include "tst_qjnienvironment.moc" diff --git a/tests/auto/qjniobject/qjniobject.pro b/tests/auto/qjniobject/qjniobject.pro deleted file mode 100644 index 30a0a0d..0000000 --- a/tests/auto/qjniobject/qjniobject.pro +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG += testcase -TARGET = tst_qjniobject -QT += testlib androidextras -SOURCES += tst_qjniobject.cpp diff --git a/tests/auto/qjniobject/tst_qjniobject.cpp b/tests/auto/qjniobject/tst_qjniobject.cpp deleted file mode 100644 index cc0f286..0000000 --- a/tests/auto/qjniobject/tst_qjniobject.cpp +++ /dev/null @@ -1,730 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include - -class tst_QJNIObject : public QObject -{ - Q_OBJECT - -public: - tst_QJNIObject(); - -private slots: - void initTestCase(); - - void ctor(); - void callMethodTest(); - void callObjectMethodTest(); - void stringConvertionTest(); - void compareOperatorTests(); - void callStaticObjectMethodClassName(); - void callStaticObjectMethod(); - void callStaticBooleanMethodClassName(); - void callStaticBooleanMethod(); - void callStaticCharMethodClassName(); - void callStaticCharMethod(); - void callStaticIntMethodClassName(); - void callStaticIntMethod(); - void callStaticByteMethodClassName(); - void callStaticByteMethod(); - void callStaticDoubleMethodClassName(); - void callStaticDoubleMethod(); - void callStaticFloatMethodClassName(); - void callStaticFloatMethod(); - void callStaticLongMethodClassName(); - void callStaticLongMethod(); - void callStaticShortMethodClassName(); - void callStaticShortMethod(); - void getStaticObjectFieldClassName(); - void getStaticObjectField(); - void getStaticIntFieldClassName(); - void getStaticIntField(); - void getStaticByteFieldClassName(); - void getStaticByteField(); - void getStaticLongFieldClassName(); - void getStaticLongField(); - void getStaticDoubleFieldClassName(); - void getStaticDoubleField(); - void getStaticFloatFieldClassName(); - void getStaticFloatField(); - void getStaticShortFieldClassName(); - void getStaticShortField(); - void getStaticCharFieldClassName(); - void getStaticCharField(); - void getBooleanField(); - void getIntField(); - - void cleanupTestCase(); - -public: - static jclass m_activityDelegateClass; -}; - -jclass tst_QJNIObject::m_activityDelegateClass = 0; - -tst_QJNIObject::tst_QJNIObject() -{ -} - -void tst_QJNIObject::initTestCase() -{ -} - -void tst_QJNIObject::cleanupTestCase() -{ -} - -void tst_QJNIObject::ctor() -{ - { - QJNIObject object; - QVERIFY(!object.isValid()); - } - - { - QJNIObject object("java/lang/String"); - QVERIFY(object.isValid()); - } - - { - QJNIObject string = QJNIObject::fromString(QLatin1String("Hello, Java")); - QJNIObject object("java/lang/String", "(Ljava/lang/String;)V", string.object()); - QVERIFY(object.isValid()); - QCOMPARE(string.toString(), object.toString()); - } - - { - QJNIEnvironment env; - jclass javaStringClass = env->FindClass("java/lang/String"); - QJNIObject string(javaStringClass); - QVERIFY(string.isValid()); - } - - { - QJNIEnvironment env; - const QString qString = QLatin1String("Hello, Java"); - jclass javaStringClass = env->FindClass("java/lang/String"); - QJNIObject string = QJNIObject::fromString(qString); - QJNIObject stringCpy(javaStringClass, "(Ljava/lang/String;)V", string.object()); - QVERIFY(stringCpy.isValid()); - QCOMPARE(qString, stringCpy.toString()); - } -} - -void tst_QJNIObject::callMethodTest() -{ - { - QJNIObject jString1 = QJNIObject::fromString(QLatin1String("Hello, Java")); - QJNIObject jString2 = QJNIObject::fromString(QLatin1String("hELLO, jAVA")); - QVERIFY(jString1 != jString2); - - const jboolean isEmpty = jString1.callMethod("isEmpty"); - QVERIFY(!isEmpty); - - const jint ret = jString1.callMethod("compareToIgnoreCase", - "(Ljava/lang/String;)I", - jString2.object()); - QVERIFY(0 == ret); - } - - { - jlong jLong = 100; - QJNIObject longObject("java/lang/Long", "(J)V", jLong); - jlong ret = longObject.callMethod("longValue"); - QCOMPARE(ret, jLong); - } -} - -void tst_QJNIObject::callObjectMethodTest() -{ - const QString qString = QLatin1String("Hello, Java"); - QJNIObject jString = QJNIObject::fromString(qString); - const QString qStringRet = jString.callObjectMethod("toUpperCase").toString(); - QCOMPARE(qString.toUpper(), qStringRet); - - QJNIObject subString = jString.callObjectMethod("substring", - "(II)Ljava/lang/String;", - 0, 4); - QCOMPARE(subString.toString(), qString.mid(0, 4)); -} - -void tst_QJNIObject::stringConvertionTest() -{ - const QString qString(QLatin1String("Hello, Java")); - QJNIObject jString = QJNIObject::fromString(qString); - QVERIFY(jString.isValid()); - QString qStringRet = jString.toString(); - QCOMPARE(qString, qStringRet); -} - -void tst_QJNIObject::compareOperatorTests() -{ - QString str("hello!"); - QJNIObject stringObject = QJNIObject::fromString(str); - - jobject jobj = stringObject.object(); - jstring jsobj = stringObject.object(); - - QVERIFY(jobj == stringObject); - QVERIFY(stringObject == jobj); - QVERIFY(jsobj == stringObject); - QVERIFY(stringObject == jsobj); - - QJNIObject stringObject3 = stringObject.object(); - QVERIFY(stringObject3 == stringObject); - - QJNIObject stringObject2 = QJNIObject::fromString(str); - QVERIFY(stringObject != stringObject2); - - jstring jstrobj = 0; - QJNIObject invalidStringObject; - QVERIFY(invalidStringObject == jstrobj); - - QVERIFY(jstrobj != stringObject); - QVERIFY(stringObject != jstrobj); - QVERIFY(!invalidStringObject.isValid()); -} - -void tst_QJNIObject::callStaticObjectMethodClassName() -{ - QJNIObject formatString = QJNIObject::fromString(QLatin1String("test format")); - QVERIFY(formatString.isValid()); - - QVERIFY(QJNIObject::isClassAvailable("java/lang/String")); - QJNIObject returnValue = QJNIObject::callStaticObjectMethod("java/lang/String", - "format", - "(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;", - formatString.object(), - jobjectArray(0)); - QVERIFY(returnValue.isValid()); - - QString returnedString = returnValue.toString(); - - QCOMPARE(returnedString, QString::fromLatin1("test format")); -} - -void tst_QJNIObject::callStaticObjectMethod() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/String"); - QVERIFY(cls != 0); - - QJNIObject formatString = QJNIObject::fromString(QLatin1String("test format")); - QVERIFY(formatString.isValid()); - - QJNIObject returnValue = QJNIObject::callStaticObjectMethod(cls, - "format", - "(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;", - formatString.object(), - jobjectArray(0)); - QVERIFY(returnValue.isValid()); - - QString returnedString = returnValue.toString(); - - QCOMPARE(returnedString, QString::fromLatin1("test format")); -} - -void tst_QJNIObject::callStaticBooleanMethod() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Boolean"); - QVERIFY(cls != 0); - - { - QJNIObject parameter = QJNIObject::fromString("true"); - QVERIFY(parameter.isValid()); - - jboolean b = QJNIObject::callStaticMethod(cls, - "parseBoolean", - "(Ljava/lang/String;)Z", - parameter.object()); - QVERIFY(b); - } - - { - QJNIObject parameter = QJNIObject::fromString("false"); - QVERIFY(parameter.isValid()); - - jboolean b = QJNIObject::callStaticMethod(cls, - "parseBoolean", - "(Ljava/lang/String;)Z", - parameter.object()); - QVERIFY(!b); - } -} - -void tst_QJNIObject::callStaticBooleanMethodClassName() -{ - { - QJNIObject parameter = QJNIObject::fromString("true"); - QVERIFY(parameter.isValid()); - - jboolean b = QJNIObject::callStaticMethod("java/lang/Boolean", - "parseBoolean", - "(Ljava/lang/String;)Z", - parameter.object()); - QVERIFY(b); - } - - { - QJNIObject parameter = QJNIObject::fromString("false"); - QVERIFY(parameter.isValid()); - - jboolean b = QJNIObject::callStaticMethod("java/lang/Boolean", - "parseBoolean", - "(Ljava/lang/String;)Z", - parameter.object()); - QVERIFY(!b); - } -} - -void tst_QJNIObject::callStaticByteMethodClassName() -{ - QString number = QString::number(123); - QJNIObject parameter = QJNIObject::fromString(number); - - jbyte returnValue = QJNIObject::callStaticMethod("java/lang/Byte", - "parseByte", - "(Ljava/lang/String;)B", - parameter.object()); - QCOMPARE(returnValue, jbyte(number.toInt())); -} - -void tst_QJNIObject::callStaticByteMethod() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Byte"); - QVERIFY(cls != 0); - - QString number = QString::number(123); - QJNIObject parameter = QJNIObject::fromString(number); - - jbyte returnValue = QJNIObject::callStaticMethod(cls, - "parseByte", - "(Ljava/lang/String;)B", - parameter.object()); - QCOMPARE(returnValue, jbyte(number.toInt())); -} - -void tst_QJNIObject::callStaticIntMethodClassName() -{ - QString number = QString::number(123); - QJNIObject parameter = QJNIObject::fromString(number); - - jint returnValue = QJNIObject::callStaticMethod("java/lang/Integer", - "parseInt", - "(Ljava/lang/String;)I", - parameter.object()); - QCOMPARE(returnValue, number.toInt()); -} - - -void tst_QJNIObject::callStaticIntMethod() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Integer"); - QVERIFY(cls != 0); - - QString number = QString::number(123); - QJNIObject parameter = QJNIObject::fromString(number); - - jint returnValue = QJNIObject::callStaticMethod(cls, - "parseInt", - "(Ljava/lang/String;)I", - parameter.object()); - QCOMPARE(returnValue, number.toInt()); -} - -void tst_QJNIObject::callStaticCharMethodClassName() -{ - jchar returnValue = QJNIObject::callStaticMethod("java/lang/Character", - "toUpperCase", - "(C)C", - jchar('a')); - QCOMPARE(returnValue, jchar('A')); -} - - -void tst_QJNIObject::callStaticCharMethod() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Character"); - QVERIFY(cls != 0); - - jchar returnValue = QJNIObject::callStaticMethod(cls, - "toUpperCase", - "(C)C", - jchar('a')); - QCOMPARE(returnValue, jchar('A')); -} - -void tst_QJNIObject::callStaticDoubleMethodClassName () -{ - QString number = QString::number(123.45); - QJNIObject parameter = QJNIObject::fromString(number); - - jdouble returnValue = QJNIObject::callStaticMethod("java/lang/Double", - "parseDouble", - "(Ljava/lang/String;)D", - parameter.object()); - QCOMPARE(returnValue, number.toDouble()); -} - - -void tst_QJNIObject::callStaticDoubleMethod() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Double"); - QVERIFY(cls != 0); - - QString number = QString::number(123.45); - QJNIObject parameter = QJNIObject::fromString(number); - - jdouble returnValue = QJNIObject::callStaticMethod(cls, - "parseDouble", - "(Ljava/lang/String;)D", - parameter.object()); - QCOMPARE(returnValue, number.toDouble()); -} - -void tst_QJNIObject::callStaticFloatMethodClassName() -{ - QString number = QString::number(123.45); - QJNIObject parameter = QJNIObject::fromString(number); - - jfloat returnValue = QJNIObject::callStaticMethod("java/lang/Float", - "parseFloat", - "(Ljava/lang/String;)F", - parameter.object()); - QCOMPARE(returnValue, number.toFloat()); -} - - -void tst_QJNIObject::callStaticFloatMethod() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Float"); - QVERIFY(cls != 0); - - QString number = QString::number(123.45); - QJNIObject parameter = QJNIObject::fromString(number); - - jfloat returnValue = QJNIObject::callStaticMethod(cls, - "parseFloat", - "(Ljava/lang/String;)F", - parameter.object()); - QCOMPARE(returnValue, number.toFloat()); -} - -void tst_QJNIObject::callStaticShortMethodClassName() -{ - QString number = QString::number(123); - QJNIObject parameter = QJNIObject::fromString(number); - - jshort returnValue = QJNIObject::callStaticMethod("java/lang/Short", - "parseShort", - "(Ljava/lang/String;)S", - parameter.object()); - QCOMPARE(returnValue, number.toShort()); -} - - -void tst_QJNIObject::callStaticShortMethod() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Short"); - QVERIFY(cls != 0); - - QString number = QString::number(123); - QJNIObject parameter = QJNIObject::fromString(number); - - jshort returnValue = QJNIObject::callStaticMethod(cls, - "parseShort", - "(Ljava/lang/String;)S", - parameter.object()); - QCOMPARE(returnValue, number.toShort()); -} - -void tst_QJNIObject::callStaticLongMethodClassName() -{ - QString number = QString::number(123); - QJNIObject parameter = QJNIObject::fromString(number); - - jlong returnValue = QJNIObject::callStaticMethod("java/lang/Long", - "parseLong", - "(Ljava/lang/String;)J", - parameter.object()); - QCOMPARE(returnValue, jlong(number.toLong())); -} - -void tst_QJNIObject::callStaticLongMethod() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Long"); - QVERIFY(cls != 0); - - QString number = QString::number(123); - QJNIObject parameter = QJNIObject::fromString(number); - - jlong returnValue = QJNIObject::callStaticMethod(cls, - "parseLong", - "(Ljava/lang/String;)J", - parameter.object()); - QCOMPARE(returnValue, jlong(number.toLong())); -} - -void tst_QJNIObject::getStaticObjectFieldClassName() -{ - { - QJNIObject boolObject = QJNIObject::getStaticObjectField("java/lang/Boolean", - "FALSE", - "Ljava/lang/Boolean;"); - QVERIFY(boolObject.isValid()); - - jboolean booleanValue = boolObject.callMethod("booleanValue"); - QVERIFY(!booleanValue); - } - - { - QJNIObject boolObject = QJNIObject::getStaticObjectField("java/lang/Boolean", - "TRUE", - "Ljava/lang/Boolean;"); - QVERIFY(boolObject.isValid()); - - jboolean booleanValue = boolObject.callMethod("booleanValue"); - QVERIFY(booleanValue); - } -} - -void tst_QJNIObject::getStaticObjectField() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Boolean"); - QVERIFY(cls != 0); - - { - QJNIObject boolObject = QJNIObject::getStaticObjectField(cls, - "FALSE", - "Ljava/lang/Boolean;"); - QVERIFY(boolObject.isValid()); - - jboolean booleanValue = boolObject.callMethod("booleanValue"); - QVERIFY(!booleanValue); - } - - { - QJNIObject boolObject = QJNIObject::getStaticObjectField(cls, - "TRUE", - "Ljava/lang/Boolean;"); - QVERIFY(boolObject.isValid()); - - jboolean booleanValue = boolObject.callMethod("booleanValue"); - QVERIFY(booleanValue); - } -} - -void tst_QJNIObject::getStaticIntFieldClassName() -{ - jint i = QJNIObject::getStaticField("java/lang/Double", "SIZE"); - QCOMPARE(i, 64); -} - -void tst_QJNIObject::getStaticIntField() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Double"); - QVERIFY(cls != 0); - - jint i = QJNIObject::getStaticField(cls, "SIZE"); - QCOMPARE(i, 64); -} - -void tst_QJNIObject::getStaticByteFieldClassName() -{ - jbyte i = QJNIObject::getStaticField("java/lang/Byte", "MAX_VALUE"); - QCOMPARE(i, jbyte(127)); -} - -void tst_QJNIObject::getStaticByteField() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Byte"); - QVERIFY(cls != 0); - - jbyte i = QJNIObject::getStaticField(cls, "MAX_VALUE"); - QCOMPARE(i, jbyte(127)); -} - -void tst_QJNIObject::getStaticLongFieldClassName() -{ - jlong i = QJNIObject::getStaticField("java/lang/Long", "MAX_VALUE"); - QCOMPARE(i, jlong(9223372036854775807L)); -} - -void tst_QJNIObject::getStaticLongField() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Long"); - QVERIFY(cls != 0); - - jlong i = QJNIObject::getStaticField(cls, "MAX_VALUE"); - QCOMPARE(i, jlong(9223372036854775807L)); -} - -void tst_QJNIObject::getStaticDoubleFieldClassName() -{ - jdouble i = QJNIObject::getStaticField("java/lang/Double", "NaN"); - jlong *k = reinterpret_cast(&i); - QCOMPARE(*k, jlong(0x7ff8000000000000L)); -} - -void tst_QJNIObject::getStaticDoubleField() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Double"); - QVERIFY(cls != 0); - - jdouble i = QJNIObject::getStaticField(cls, "NaN"); - jlong *k = reinterpret_cast(&i); - QCOMPARE(*k, jlong(0x7ff8000000000000L)); -} - -void tst_QJNIObject::getStaticFloatFieldClassName() -{ - jfloat i = QJNIObject::getStaticField("java/lang/Float", "NaN"); - unsigned *k = reinterpret_cast(&i); - QCOMPARE(*k, unsigned(0x7fc00000)); -} - -void tst_QJNIObject::getStaticFloatField() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Float"); - QVERIFY(cls != 0); - - jfloat i = QJNIObject::getStaticField(cls, "NaN"); - unsigned *k = reinterpret_cast(&i); - QCOMPARE(*k, unsigned(0x7fc00000)); -} - -void tst_QJNIObject::getStaticShortFieldClassName() -{ - jshort i = QJNIObject::getStaticField("java/lang/Short", "MAX_VALUE"); - QCOMPARE(i, jshort(32767)); -} - -void tst_QJNIObject::getStaticShortField() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Short"); - QVERIFY(cls != 0); - - jshort i = QJNIObject::getStaticField(cls, "MAX_VALUE"); - QCOMPARE(i, jshort(32767)); -} - -void tst_QJNIObject::getStaticCharFieldClassName() -{ - jchar i = QJNIObject::getStaticField("java/lang/Character", "MAX_VALUE"); - QCOMPARE(i, jchar(0xffff)); -} - -void tst_QJNIObject::getStaticCharField() -{ - QJNIEnvironment env; - jclass cls = env->FindClass("java/lang/Character"); - QVERIFY(cls != 0); - - jchar i = QJNIObject::getStaticField(cls, "MAX_VALUE"); - QCOMPARE(i, jchar(0xffff)); -} - - -void tst_QJNIObject::getBooleanField() -{ - QVERIFY(m_activityDelegateClass); - - QJNIObject obj(m_activityDelegateClass); - - QVERIFY(obj.isValid()); - QVERIFY(!obj.getField("m_fullScreen")); -} - -void tst_QJNIObject::getIntField() -{ - QVERIFY(m_activityDelegateClass); - - QJNIObject obj(m_activityDelegateClass); - - QVERIFY(obj.isValid()); - jint res = obj.getField("m_currentRotation"); - - QCOMPARE(res, -1); -} - -Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) -{ - typedef union { - JNIEnv *nenv; - void *venv; - } _JNIEnv; - - _JNIEnv uenv; - uenv.venv = Q_NULLPTR; - - if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_6) != JNI_OK) - return JNI_ERR; - - JNIEnv *env = uenv.nenv; - - jclass clazz = env->FindClass("org/qtproject/qt5/android/QtActivityDelegate"); - tst_QJNIObject::m_activityDelegateClass = (jclass)env->NewGlobalRef(clazz); - - return JNI_VERSION_1_6; -} - -QTEST_APPLESS_MAIN(tst_QJNIObject) - -#include "tst_qjniobject.moc" -- cgit v1.2.3