diff options
Diffstat (limited to 'tests/auto/other/android_deployment_settings')
3 files changed, 208 insertions, 0 deletions
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..9ef457189a --- /dev/null +++ b/tests/auto/other/android_deployment_settings/CMakeLists.txt @@ -0,0 +1,87 @@ +# 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_PACKAGE_NAME "org.qtproject.android_deployment_settings_test" + 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_PACKAGE_NAME "org.qtproject.android_deployment_settings_test" + 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..6f2ee31826 --- /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 + +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..f8428aaf43 --- /dev/null +++ b/tests/auto/other/android_deployment_settings/tst_android_deployment_settings.cpp @@ -0,0 +1,114 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#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"; + QTest::newRow("android-package-name") << "android-package-name" + << "org.qtproject.android_deployment_settings_test"; +} + +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" |