This commit is contained in:
2025-08-26 22:57:23 +08:00
commit b703135335
25222 changed files with 6200887 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
/****************************************************************************
**
** 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 <QtCore/qstring.h>
#include "plugin1.h"
QString Plugin1::pluginName() const
{
return QLatin1String("Plugin1 ok");
}

View File

@@ -0,0 +1,45 @@
/****************************************************************************
**
** 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$
**
****************************************************************************/
#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;
};
#endif // THEPLUGIN_H

View File

@@ -0,0 +1,14 @@
TEMPLATE = lib
QT = core
CONFIG += plugin
HEADERS = plugin1.h
SOURCES = plugin1.cpp
TARGET = $$qtLibraryTarget(plugin1)
DESTDIR = ../bin
winrt:include(../winrt.pri)
!qtConfig(library): DEFINES += QT_STATICPLUGIN
# This is testdata for the tst_qpluginloader test.
target.path = $$[QT_INSTALL_TESTS]/tst_qfactoryloader/bin
INSTALLS += target

View File

@@ -0,0 +1,46 @@
/****************************************************************************
**
** 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$
**
****************************************************************************/
#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,34 @@
/****************************************************************************
**
** 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 <QtCore/qstring.h>
#include "plugin2.h"
QString Plugin2::pluginName() const
{
return QLatin1String("Plugin2 ok");
}

View File

@@ -0,0 +1,45 @@
/****************************************************************************
**
** 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$
**
****************************************************************************/
#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;
};
#endif // THEPLUGIN_H

View File

@@ -0,0 +1,14 @@
TEMPLATE = lib
QT = core
CONFIG += plugin
HEADERS = plugin2.h
SOURCES = plugin2.cpp
TARGET = $$qtLibraryTarget(plugin2)
DESTDIR = ../bin
winrt:include(../winrt.pri)
!qtConfig(library): DEFINES += QT_STATICPLUGIN
# This is testdata for the tst_qpluginloader test.
target.path = $$[QT_INSTALL_TESTS]/tst_qfactoryloader/bin
INSTALLS += target

View File

@@ -0,0 +1,46 @@
/****************************************************************************
**
** 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$
**
****************************************************************************/
#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,15 @@
QT = core-private
TEMPLATE = subdirs
test.depends = plugin1 plugin2
SUBDIRS = \
plugin1 \
plugin2 \
test
TARGET = tst_qpluginloader
# no special install rule for subdir
INSTALLS =

View File

@@ -0,0 +1,30 @@
CONFIG += testcase
TARGET = ../tst_qfactoryloader
QT = core-private testlib
SOURCES = \
../tst_qfactoryloader.cpp
HEADERS = \
../plugin1/plugininterface1.h \
../plugin2/plugininterface2.h
win32 {
CONFIG(debug, debug|release) {
TARGET = ../../debug/tst_qfactoryloader
} else {
TARGET = ../../release/tst_qfactoryloader
}
}
!qtConfig(library) {
LIBS += -L ../bin/ -lplugin1 -lplugin2
}
android {
libs.prefix = android_test_data
libs.base = $$OUT_PWD/..
libs.files += $$OUT_PWD/../bin
RESOURCES += libs
}

View File

@@ -0,0 +1,96 @@
/****************************************************************************
**
** 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 <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
public slots:
void initTestCase();
private slots:
void usingTwoFactoriesFromSameDir();
};
static const char binFolderC[] = "bin";
void tst_QFactoryLoader::initTestCase()
{
#ifdef Q_OS_ANDROID
directory = QEXTRACTTESTDATA("android_test_data");
QVERIFY(directory);
QVERIFY(directory->isValid());
QVERIFY2(QDir::setCurrent(directory->path()), qPrintable("Could not chdir to " + directory->path()));
#endif
const QString binFolder = QFINDTESTDATA(binFolderC);
QVERIFY2(!binFolder.isEmpty(), "Unable to locate 'bin' folder");
#if QT_CONFIG(library)
QCoreApplication::setLibraryPaths(QStringList(QFileInfo(binFolder).absolutePath()));
#endif
}
void tst_QFactoryLoader::usingTwoFactoriesFromSameDir()
{
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"));
}
QTEST_MAIN(tst_QFactoryLoader)
#include "tst_qfactoryloader.moc"

View File

@@ -0,0 +1,9 @@
# We cannot use TESTDATA as plugins have to reside physically
# inside the package directory
winrt {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/bin
} else {
DESTDIR = ../release/bin
}
}