diff options
author | Alexey Edelev <alexey.edelev@qt.io> | 2023-08-18 10:25:05 +0200 |
---|---|---|
committer | Alexey Edelev <alexey.edelev@qt.io> | 2023-08-23 16:21:57 +0200 |
commit | 2e340cea88b6721cf09f24a190aa6a81af81852e (patch) | |
tree | 89f83984eb2f3521ba038300ed88fa18c24ded6f /tests/auto/other | |
parent | aff0915352dda0cfaa11a249b665fbe47be21d69 (diff) |
Add test for the qt6_android_generate_deployment_settings CMake command
qt6_android_generate_deployment_settings is implicitly used by
qt6_add_executable in user projects. This test makes sure that the
function behaves as expected for user projects specificly, since in Qt
tests it behaves differently because of Qt-specific conditions inside.
Task-number: QTBUG-116037
Pick-to: 6.6
Change-Id: Iea10eca7a780ebaff0c05b91ebe47b821b9ec956
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'tests/auto/other')
4 files changed, 208 insertions, 0 deletions
diff --git a/tests/auto/other/CMakeLists.txt b/tests/auto/other/CMakeLists.txt index 0964cce7aa..5e2be543b5 100644 --- a/tests/auto/other/CMakeLists.txt +++ b/tests/auto/other/CMakeLists.txt @@ -46,3 +46,7 @@ endif() if(QT_FEATURE_xkbcommon AND TARGET Qt::Gui) add_subdirectory(xkbkeyboard) endif() + +if(ANDROID) + add_subdirectory(android_deployment_settings) +endif() diff --git a/tests/auto/other/android_deployment_settings/CMakeLists.txt b/tests/auto/other/android_deployment_settings/CMakeLists.txt new file mode 100644 index 0000000000..f2ba135328 --- /dev/null +++ b/tests/auto/other/android_deployment_settings/CMakeLists.txt @@ -0,0 +1,85 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_android_deployment_settings LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +function(tst_generate_android_deployment_setting target) + # Qt build always use new property format that supports generator expressions. In this test we + # want to test user scenario so disable all Qt specific options to make sure that + # qt6_android_generate_deployment_settings behave like in user projects. + set(QT_BUILD_STANDALONE_TESTS FALSE) + set(QT_BUILDING_QT FALSE) + set(QT_INTERNAL_IS_STANDALONE_TEST FALSE) + + qt6_android_generate_deployment_settings(${target}) +endfunction() + +qt6_policy(SET QTP0002 NEW) + +set(target tst_android_deployment_settings_new) +qt6_add_executable(${target} MANUAL_FINALIZATION EXCLUDE_FROM_ALL noop.cpp) +set_target_properties(${target} PROPERTIES + my_package_source_dir "path/to/source/dir" + my_libs_property "some/path/to/lib2.so;some/path/to/lib3.so" + my_plugins_property "some/path/to/plugin2.so;some/path/to/plugin3.so" + + QT_ANDROID_SDK_BUILD_TOOLS_REVISION "23.0.2" + QT_ANDROID_MIN_SDK_VERSION "1" + QT_ANDROID_TARGET_SDK_VERSION "2" + QT_ANDROID_DEPLOYMENT_DEPENDENCIES "dep1.so;dep2.so;dep3.so" + QT_ANDROID_DEPLOYMENT_SETTINGS_FILE "attempt_to_rewrite.json" + QT_ANDROID_EXTRA_LIBS + "some/path/to/lib1.so;$<TARGET_PROPERTY:${target},my_libs_property>;some/path/to/lib4.so" + QT_ANDROID_EXTRA_PLUGINS + "some/path/to/plugin1.so;$<TARGET_PROPERTY:${target},my_plugins_property>" + QT_ANDROID_PACKAGE_SOURCE_DIR "$<TARGET_PROPERTY:${target},my_package_source_dir>" + QT_ANDROID_SYSTEM_LIBS_PREFIX "myLibPrefix" + + # Make sure that this property is overwritten by + # qt6_android_generate_deployment_settings + QT_ANDROID_DEPLOYMENT_SETTINGS_FILE "custom_deployment_settings.json" +) +tst_generate_android_deployment_setting(${target}) + +qt6_policy(SET QTP0002 OLD) + +set(target tst_android_deployment_settings_old) +qt6_add_executable(${target} MANUAL_FINALIZATION EXCLUDE_FROM_ALL noop.cpp) +set_target_properties(${target} PROPERTIES + QT_ANDROID_SDK_BUILD_TOOLS_REVISION "23.0.2" + QT_ANDROID_MIN_SDK_VERSION "1" + QT_ANDROID_TARGET_SDK_VERSION "2" + QT_ANDROID_DEPLOYMENT_DEPENDENCIES "dep1.so;dep2.so;dep3.so" + QT_ANDROID_EXTRA_LIBS + "some/path/to/lib1.so;some/path\\to/lib2.so;some\\path\\to\\lib3.so;some/path/to/lib4.so" + QT_ANDROID_EXTRA_PLUGINS + "some\\path\\to\\plugin1.so;some/path\\to/plugin2.so;some/path/to/plugin3.so" + QT_ANDROID_PACKAGE_SOURCE_DIR "path\\to/source\\dir" + QT_ANDROID_SYSTEM_LIBS_PREFIX "myLibPrefix" +) +tst_generate_android_deployment_setting(${target}) + +get_target_property(new_settings + tst_android_deployment_settings_new QT_ANDROID_DEPLOYMENT_SETTINGS_FILE) +get_target_property(old_settings + tst_android_deployment_settings_old QT_ANDROID_DEPLOYMENT_SETTINGS_FILE) +set_source_files_properties("${new_settings}" PROPERTIES QT_RESOURCE_ALIAS "new_settings.json") +set_source_files_properties("${old_settings}" PROPERTIES QT_RESOURCE_ALIAS "old_settings.json") +qt_internal_add_test(tst_android_deployment_settings + SOURCES + tst_android_deployment_settings.cpp + DEFINES + DEFAULT_ABI="${CMAKE_ANDROID_ARCH_ABI}" +) +qt6_add_resources(tst_android_deployment_settings + "deployment_settings_res" + PREFIX + "/" + FILES + "${new_settings}" + "${old_settings}" +) diff --git a/tests/auto/other/android_deployment_settings/noop.cpp b/tests/auto/other/android_deployment_settings/noop.cpp new file mode 100644 index 0000000000..9de6f56e70 --- /dev/null +++ b/tests/auto/other/android_deployment_settings/noop.cpp @@ -0,0 +1,7 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +int main(int, char *[]) +{ + return 0; +} diff --git a/tests/auto/other/android_deployment_settings/tst_android_deployment_settings.cpp b/tests/auto/other/android_deployment_settings/tst_android_deployment_settings.cpp new file mode 100644 index 0000000000..e6b87b42ea --- /dev/null +++ b/tests/auto/other/android_deployment_settings/tst_android_deployment_settings.cpp @@ -0,0 +1,112 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include <QJsonDocument> +#include <QJsonObject> +#include <QFile> +#include <QTest> +#include <QLibraryInfo> +#include <QDir> + +class tst_android_deployment_settings : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase_data(); + void init(); + + void DeploymentSettings_data(); + void DeploymentSettings(); + + void QtPaths_data(); + void QtPaths(); + +private: + static QString makePath(QLibraryInfo::LibraryLocation loc); + QJsonDocument jsonDoc; +}; + +QString tst_android_deployment_settings::makePath(QLibraryInfo::LibraryLocation loc) +{ + const auto prefix = QLibraryInfo::path(QLibraryInfo::PrefixPath); + auto path = QLibraryInfo::path(loc); + path.remove(0, prefix.size() + 1); + if (path.isEmpty()) // Assume that if path is empty it's '.' + path = "."; + return path; +} + +void tst_android_deployment_settings::initTestCase_data() +{ + QTest::addColumn<QString>("file"); + QTest::newRow("old") << ":/old_settings.json"; + QTest::newRow("new") << ":/new_settings.json"; +} + +void tst_android_deployment_settings::init() +{ + QFETCH_GLOBAL(QString, file); + QFile settings(file); + QVERIFY(settings.open(QIODeviceBase::ReadOnly)); + jsonDoc = QJsonDocument::fromJson(settings.readAll()); + QVERIFY(!jsonDoc.isNull()); +} + +void tst_android_deployment_settings::DeploymentSettings_data() +{ + QTest::addColumn<QString>("key"); + QTest::addColumn<QString>("value"); + + QTest::newRow("sdkBuildToolsRevision") << "sdkBuildToolsRevision" + << "23.0.2"; + QTest::newRow("deployment-dependencies") << "deployment-dependencies" + << "dep1.so,dep2.so,dep3.so"; + QTest::newRow("android-extra-plugins") + << "android-extra-plugins" + << "some/path/to/plugin1.so,some/path/to/plugin2.so,some/path/to/plugin3.so"; + QTest::newRow("android-extra-libs") << "android-extra-libs" + << "some/path/to/lib1.so,some/path/to/lib2.so,some/path/to/" + "lib3.so,some/path/to/lib4.so"; + QTest::newRow("android-system-libs-prefix") << "android-system-libs-prefix" + << "myLibPrefix"; + QTest::newRow("android-package-source-directory") << "android-package-source-directory" + << "path/to/source/dir"; + QTest::newRow("android-min-sdk-version") << "android-min-sdk-version" + << "1"; + QTest::newRow("android-target-sdk-version") << "android-target-sdk-version" + << "2"; +} + +void tst_android_deployment_settings::DeploymentSettings() +{ + QFETCH(QString, key); + QFETCH(QString, value); + QCOMPARE(jsonDoc[key].toString(), value); +} + +void tst_android_deployment_settings::QtPaths_data() +{ + QTest::addColumn<QString>("key"); + QTest::addColumn<QString>("value"); + + QTest::newRow("qtDataDirectory") << "qtDataDirectory" << makePath(QLibraryInfo::DataPath); + QTest::newRow("qtLibExecsDirectory") + << "qtLibExecsDirectory" << makePath(QLibraryInfo::LibraryExecutablesPath); + QTest::newRow("qtLibsDirectory") << "qtLibsDirectory" << makePath(QLibraryInfo::LibrariesPath); + QTest::newRow("qtPluginsDirectory") + << "qtPluginsDirectory" << makePath(QLibraryInfo::PluginsPath); + QTest::newRow("qtQmlDirectory") << "qtQmlDirectory" << makePath(QLibraryInfo::QmlImportsPath); +} + +void tst_android_deployment_settings::QtPaths() +{ + QFETCH(QString, key); + QFETCH(QString, value); + QCOMPARE(QDir::cleanPath(jsonDoc[key].toObject()[DEFAULT_ABI].toString()), + QDir::cleanPath(value)); +} + +QTEST_MAIN(tst_android_deployment_settings) + +#include "tst_android_deployment_settings.moc" |