mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-05 08:45:25 +08:00
qt 6.5.1 original
This commit is contained in:
6
tests/auto/corelib/plugin/qfactoryloader/CMakeLists.txt
Normal file
6
tests/auto/corelib/plugin/qfactoryloader/CMakeLists.txt
Normal 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)
|
@ -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)
|
@ -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");
|
||||
}
|
20
tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h
Normal file
20
tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h
Normal 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
|
@ -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
|
@ -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)
|
@ -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");
|
||||
}
|
20
tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.h
Normal file
20
tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.h
Normal 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
|
@ -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
|
34
tests/auto/corelib/plugin/qfactoryloader/test/CMakeLists.txt
Normal file
34
tests/auto/corelib/plugin/qfactoryloader/test/CMakeLists.txt
Normal 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()
|
113
tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp
Normal file
113
tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp
Normal 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"
|
Reference in New Issue
Block a user