qt 6.5.1 original

This commit is contained in:
kleuter
2023-10-29 23:33:08 +01:00
parent 71d22ab6b0
commit 85d238dfda
21202 changed files with 5499099 additions and 0 deletions

View File

@ -0,0 +1,6 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(plugin1)
add_subdirectory(plugin2)
add_subdirectory(test)

View File

@ -0,0 +1,31 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## plugin1 Generic Library:
#####################################################################
qt_internal_add_cmake_library(tst_qfactoryloader_plugin1
MODULE
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qfactoryloader/bin"
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
SOURCES
plugin1.cpp plugin1.h
LIBRARIES
Qt::Core
)
if(ANDROID)
# On Android the plugins must match the following mask:
# "libplugins_{suffix}_*.so"
# and the testcase uses "bin" as a suffix
set_target_properties(tst_qfactoryloader_plugin1 PROPERTIES
OUTPUT_NAME "plugins_bin_tst_qfactoryloader_plugin1")
endif()
qt_internal_extend_target(tst_qfactoryloader_plugin1 CONDITION NOT QT_FEATURE_library
DEFINES
QT_STATICPLUGIN
)
qt_autogen_tools_initial_setup(tst_qfactoryloader_plugin1)

View File

@ -0,0 +1,9 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtCore/qstring.h>
#include "plugin1.h"
QString Plugin1::pluginName() const
{
return QLatin1String("Plugin1 ok");
}

View File

@ -0,0 +1,20 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef THEPLUGIN_H
#define THEPLUGIN_H
#include <QtCore/qobject.h>
#include <QtCore/qplugin.h>
#include "plugininterface1.h"
class Plugin1 : public QObject, public PluginInterface1
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.autotests.plugininterface1")
Q_INTERFACES(PluginInterface1)
public:
virtual QString pluginName() const override;
};
#endif // THEPLUGIN_H

View File

@ -0,0 +1,21 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PLUGININTERFACE1_H
#define PLUGININTERFACE1_H
#include <QtCore/QtGlobal>
struct PluginInterface1 {
virtual ~PluginInterface1() {}
virtual QString pluginName() const = 0;
};
QT_BEGIN_NAMESPACE
#define PluginInterface1_iid "org.qt-project.Qt.autotests.plugininterface1"
Q_DECLARE_INTERFACE(PluginInterface1, PluginInterface1_iid)
QT_END_NAMESPACE
#endif // PLUGININTERFACE1_H

View File

@ -0,0 +1,31 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## plugin2 Generic Library:
#####################################################################
qt_internal_add_cmake_library(tst_qfactoryloader_plugin2
MODULE
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qfactoryloader/bin"
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
SOURCES
plugin2.cpp plugin2.h
LIBRARIES
Qt::Core
)
if(ANDROID)
# On Android the plugins must match the following mask:
# "libplugins_{suffix}_*.so"
# and the testcase uses "bin" as a suffix
set_target_properties(tst_qfactoryloader_plugin2 PROPERTIES
OUTPUT_NAME "plugins_bin_tst_qfactoryloader_plugin2")
endif()
qt_internal_extend_target(tst_qfactoryloader_plugin2 CONDITION NOT QT_FEATURE_library
DEFINES
QT_STATICPLUGIN
)
qt_autogen_tools_initial_setup(tst_qfactoryloader_plugin2)

View File

@ -0,0 +1,9 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtCore/qstring.h>
#include "plugin2.h"
QString Plugin2::pluginName() const
{
return QLatin1String("Plugin2 ok");
}

View File

@ -0,0 +1,20 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef THEPLUGIN_H
#define THEPLUGIN_H
#include <QtCore/qobject.h>
#include <QtCore/qplugin.h>
#include "plugininterface2.h"
class Plugin2 : public QObject, public PluginInterface2
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.autotests.plugininterface2")
Q_INTERFACES(PluginInterface2)
public:
virtual QString pluginName() const override;
};
#endif // THEPLUGIN_H

View File

@ -0,0 +1,21 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PLUGININTERFACE2_H
#define PLUGININTERFACE2_H
#include <QtCore/QtGlobal>
struct PluginInterface2 {
virtual ~PluginInterface2() {}
virtual QString pluginName() const = 0;
};
QT_BEGIN_NAMESPACE
#define PluginInterface2_iid "org.qt-project.Qt.autotests.plugininterface2"
Q_DECLARE_INTERFACE(PluginInterface2, PluginInterface2_iid)
QT_END_NAMESPACE
#endif // PLUGININTERFACE2_H

View File

@ -0,0 +1,34 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfactoryloader Test:
#####################################################################
qt_internal_add_test(tst_qfactoryloader
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../plugin1/plugininterface1.h
../plugin2/plugininterface2.h
../tst_qfactoryloader.cpp
LIBRARIES
Qt::CorePrivate
)
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qfactoryloader CONDITION NOT QT_FEATURE_library
LIBRARIES
tst_qfactoryloader_plugin1
tst_qfactoryloader_plugin2
)
add_dependencies(tst_qfactoryloader tst_qfactoryloader_plugin1 tst_qfactoryloader_plugin2)
if(ANDROID)
# QT_ANDROID_EXTRA_PLUGINS requires a list of directories, not files!
set_target_properties(tst_qfactoryloader PROPERTIES
QT_ANDROID_EXTRA_PLUGINS "${CMAKE_CURRENT_BINARY_DIR}/../bin"
)
endif()

View File

@ -0,0 +1,113 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtTest/qtest.h>
#include <QtCore/qdir.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qplugin.h>
#include <private/qfactoryloader_p.h>
#include "plugin1/plugininterface1.h"
#include "plugin2/plugininterface2.h"
#if !QT_CONFIG(library)
Q_IMPORT_PLUGIN(Plugin1)
Q_IMPORT_PLUGIN(Plugin2)
#endif
class tst_QFactoryLoader : public QObject
{
Q_OBJECT
#ifdef Q_OS_ANDROID
QSharedPointer<QTemporaryDir> directory;
#endif
QString binFolder;
public slots:
void initTestCase();
private slots:
void usingTwoFactoriesFromSameDir();
void extraSearchPath();
};
static const char binFolderC[] = "bin";
void tst_QFactoryLoader::initTestCase()
{
// On Android the plugins are bundled into APK's libs subdir
#ifndef Q_OS_ANDROID
binFolder = QFINDTESTDATA(binFolderC);
QVERIFY2(!binFolder.isEmpty(), "Unable to locate 'bin' folder");
#endif
}
void tst_QFactoryLoader::usingTwoFactoriesFromSameDir()
{
#if QT_CONFIG(library) && !defined(Q_OS_ANDROID)
// set the library path to contain the directory where the 'bin' dir is located
QCoreApplication::setLibraryPaths( { QFileInfo(binFolder).absolutePath() });
#endif
const QString suffix = QLatin1Char('/') + QLatin1String(binFolderC);
QFactoryLoader loader1(PluginInterface1_iid, suffix);
PluginInterface1 *plugin1 = qobject_cast<PluginInterface1 *>(loader1.instance(0));
QVERIFY2(plugin1,
qPrintable(QString::fromLatin1("Cannot load plugin '%1'")
.arg(QLatin1String(PluginInterface1_iid))));
QFactoryLoader loader2(PluginInterface2_iid, suffix);
PluginInterface2 *plugin2 = qobject_cast<PluginInterface2 *>(loader2.instance(0));
QVERIFY2(plugin2,
qPrintable(QString::fromLatin1("Cannot load plugin '%1'")
.arg(QLatin1String(PluginInterface2_iid))));
QCOMPARE(plugin1->pluginName(), QLatin1String("Plugin1 ok"));
QCOMPARE(plugin2->pluginName(), QLatin1String("Plugin2 ok"));
}
void tst_QFactoryLoader::extraSearchPath()
{
#if defined(Q_OS_ANDROID) && !QT_CONFIG(library)
QSKIP("Test not applicable in this configuration.");
#else
#ifdef Q_OS_ANDROID
// On Android the libs are not stored in binFolder, but bundled into
// APK's libs subdir
const QStringList androidLibsPaths = QCoreApplication::libraryPaths();
QCOMPARE(androidLibsPaths.size(), 1);
#endif
QCoreApplication::setLibraryPaths(QStringList());
#ifndef Q_OS_ANDROID
QString pluginsPath = QFileInfo(binFolder).absoluteFilePath();
QFactoryLoader loader1(PluginInterface1_iid, "/nonexistent");
#else
QString pluginsPath = androidLibsPaths.first();
// On Android we still need to specify a valid suffix, because it's a part
// of a file name, not directory structure
const QString suffix = QLatin1Char('/') + QLatin1String(binFolderC);
QFactoryLoader loader1(PluginInterface1_iid, suffix);
#endif
// it shouldn't have scanned anything because we haven't given it a path yet
QVERIFY(loader1.metaData().isEmpty());
loader1.setExtraSearchPath(pluginsPath);
PluginInterface1 *plugin1 = qobject_cast<PluginInterface1 *>(loader1.instance(0));
QVERIFY2(plugin1,
qPrintable(QString::fromLatin1("Cannot load plugin '%1'")
.arg(QLatin1String(PluginInterface1_iid))));
QCOMPARE(plugin1->pluginName(), QLatin1String("Plugin1 ok"));
// check that it forgets that plugin
loader1.setExtraSearchPath(QString());
QVERIFY(loader1.metaData().isEmpty());
#endif
}
QTEST_MAIN(tst_QFactoryLoader)
#include "tst_qfactoryloader.moc"