diff options
-rw-r--r-- | src/corelib/kernel/qjnihelpers.cpp | 8 | ||||
-rw-r--r-- | tests/auto/corelib/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/auto/corelib/platform/CMakeLists.txt | 3 | ||||
-rw-r--r-- | tests/auto/corelib/platform/android/CMakeLists.txt | 21 | ||||
-rw-r--r-- | tests/auto/corelib/platform/android/testdata/assets/test.txt | 1 | ||||
-rw-r--r-- | tests/auto/corelib/platform/android/tst_android.cpp | 82 | ||||
-rw-r--r-- | tests/auto/other/CMakeLists.txt | 3 | ||||
-rw-r--r-- | tests/auto/other/android/tst_android.cpp | 24 |
8 files changed, 133 insertions, 10 deletions
diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp index 078b59897e..edb07b47cf 100644 --- a/src/corelib/kernel/qjnihelpers.cpp +++ b/src/corelib/kernel/qjnihelpers.cpp @@ -72,7 +72,6 @@ static JavaVM *g_javaVM = nullptr; static jobject g_jActivity = nullptr; static jobject g_jService = nullptr; static jobject g_jClassLoader = nullptr; -static jint g_androidSdkVersion = 0; static jclass g_jNativeClass = nullptr; static jmethodID g_runPendingCppRunnablesMethodID = nullptr; Q_GLOBAL_STATIC(std::deque<QtAndroidPrivate::Runnable>, g_pendingRunnables); @@ -333,8 +332,6 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env) if (QJniEnvironment::checkAndClearExceptions(env)) return JNI_ERR; - g_androidSdkVersion = QJniObject::getStaticField<jint>("android/os/Build$VERSION", "SDK_INT"); - g_jClassLoader = env->NewGlobalRef(classLoader); env->DeleteLocalRef(classLoader); if (activity) { @@ -404,7 +401,10 @@ jobject QtAndroidPrivate::classLoader() jint QtAndroidPrivate::androidSdkVersion() { - return g_androidSdkVersion; + static jint sdkVersion = 0; + if (!sdkVersion) + sdkVersion = QJniObject::getStaticField<jint>("android/os/Build$VERSION", "SDK_INT"); + return sdkVersion; } void QtAndroidPrivate::runOnAndroidThread(const QtAndroidPrivate::Runnable &runnable, JNIEnv *env) diff --git a/tests/auto/corelib/CMakeLists.txt b/tests/auto/corelib/CMakeLists.txt index bbfc0e7f17..b9bf269745 100644 --- a/tests/auto/corelib/CMakeLists.txt +++ b/tests/auto/corelib/CMakeLists.txt @@ -14,3 +14,4 @@ if(NOT UIKIT) add_subdirectory(time) add_subdirectory(tools) endif() +add_subdirectory(platform) diff --git a/tests/auto/corelib/platform/CMakeLists.txt b/tests/auto/corelib/platform/CMakeLists.txt new file mode 100644 index 0000000000..92462e98d8 --- /dev/null +++ b/tests/auto/corelib/platform/CMakeLists.txt @@ -0,0 +1,3 @@ +if(ANDROID) + add_subdirectory(android) +endif() diff --git a/tests/auto/corelib/platform/android/CMakeLists.txt b/tests/auto/corelib/platform/android/CMakeLists.txt new file mode 100644 index 0000000000..c2749825ac --- /dev/null +++ b/tests/auto/corelib/platform/android/CMakeLists.txt @@ -0,0 +1,21 @@ +# Generated from android.pro. + +##################################################################### +## tst_android Test: +##################################################################### + +qt_internal_add_test(tst_android + SOURCES + tst_android.cpp +) + +if(ANDROID) + set_property(TARGET tst_android APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR + ${CMAKE_CURRENT_SOURCE_DIR}/testdata + ) + # QTBUG-88840 # special case + qt_android_generate_deployment_settings(tst_android) # special case +endif() + +#### Keys ignored in scope 1:.:.:android.pro:<TRUE>: +# DISTFILES = "testdata/assets/test.txt" diff --git a/tests/auto/corelib/platform/android/testdata/assets/test.txt b/tests/auto/corelib/platform/android/testdata/assets/test.txt new file mode 100644 index 0000000000..61e2c47c25 --- /dev/null +++ b/tests/auto/corelib/platform/android/testdata/assets/test.txt @@ -0,0 +1 @@ +FooBar
\ No newline at end of file diff --git a/tests/auto/corelib/platform/android/tst_android.cpp b/tests/auto/corelib/platform/android/tst_android.cpp new file mode 100644 index 0000000000..3a00d9414b --- /dev/null +++ b/tests/auto/corelib/platform/android/tst_android.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** 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 The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <jni.h> + +#include <QTest> +#include <QtCore/qnativeinterface.h> +#include <QtCore/qjniobject.h> + +class tst_Android : public QObject +{ +Q_OBJECT +private slots: + void assetsRead(); + void assetsNotWritable(); + void testAndroidSdkVersion(); + void testAndroidActivity(); +}; + +void tst_Android::assetsRead() +{ + { + QFile file(QStringLiteral("assets:/test.txt")); + QVERIFY(file.open(QIODevice::ReadOnly)); + QCOMPARE(file.readAll(), QByteArray("FooBar")); + } + + { + QFile file(QStringLiteral("assets:/test.txt")); + QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text)); + QCOMPARE(file.readAll(), QByteArray("FooBar")); + } +} + +void tst_Android::assetsNotWritable() +{ + QFile file(QStringLiteral("assets:/test.txt")); + QVERIFY(!file.open(QIODevice::WriteOnly)); + QVERIFY(!file.open(QIODevice::ReadWrite)); + QVERIFY(!file.open(QIODevice::Append)); +} + +void tst_Android::testAndroidSdkVersion() +{ + QVERIFY(QNativeInterface::QAndroidApplication::sdkVersion() > 0); +} + +void tst_Android::testAndroidActivity() +{ + QJniObject activity = QNativeInterface::QAndroidApplication::context(); + QVERIFY(activity.isValid()); + QVERIFY(activity.callMethod<jboolean>("isTaskRoot")); +} + +QTEST_MAIN(tst_Android) +#include "tst_android.moc" + diff --git a/tests/auto/other/CMakeLists.txt b/tests/auto/other/CMakeLists.txt index 6142d086b4..f0cdeec0f2 100644 --- a/tests/auto/other/CMakeLists.txt +++ b/tests/auto/other/CMakeLists.txt @@ -44,9 +44,6 @@ endif() if(embedded) add_subdirectory(qdirectpainter) endif() -if(ANDROID) - add_subdirectory(android) -endif() if(QT_FEATURE_xkbcommon AND TARGET Qt::Gui) add_subdirectory(xkbkeyboard) endif() diff --git a/tests/auto/other/android/tst_android.cpp b/tests/auto/other/android/tst_android.cpp index 6a492e9315..3a00d9414b 100644 --- a/tests/auto/other/android/tst_android.cpp +++ b/tests/auto/other/android/tst_android.cpp @@ -26,7 +26,11 @@ ** ****************************************************************************/ +#include <jni.h> + #include <QTest> +#include <QtCore/qnativeinterface.h> +#include <QtCore/qjniobject.h> class tst_Android : public QObject { @@ -34,18 +38,20 @@ Q_OBJECT private slots: void assetsRead(); void assetsNotWritable(); + void testAndroidSdkVersion(); + void testAndroidActivity(); }; void tst_Android::assetsRead() { { - QFile file("assets:/test.txt"); + QFile file(QStringLiteral("assets:/test.txt")); QVERIFY(file.open(QIODevice::ReadOnly)); QCOMPARE(file.readAll(), QByteArray("FooBar")); } { - QFile file("assets:/test.txt"); + QFile file(QStringLiteral("assets:/test.txt")); QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text)); QCOMPARE(file.readAll(), QByteArray("FooBar")); } @@ -53,12 +59,24 @@ void tst_Android::assetsRead() void tst_Android::assetsNotWritable() { - QFile file("assets:/test.txt"); + QFile file(QStringLiteral("assets:/test.txt")); QVERIFY(!file.open(QIODevice::WriteOnly)); QVERIFY(!file.open(QIODevice::ReadWrite)); QVERIFY(!file.open(QIODevice::Append)); } +void tst_Android::testAndroidSdkVersion() +{ + QVERIFY(QNativeInterface::QAndroidApplication::sdkVersion() > 0); +} + +void tst_Android::testAndroidActivity() +{ + QJniObject activity = QNativeInterface::QAndroidApplication::context(); + QVERIFY(activity.isValid()); + QVERIFY(activity.callMethod<jboolean>("isTaskRoot")); +} + QTEST_MAIN(tst_Android) #include "tst_android.moc" |