File: ut_pluginloading.cpp

package info (click to toggle)
dde-qt5integration 5.7.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,528 kB
  • sloc: cpp: 12,089; xml: 154; sh: 13; makefile: 10
file content (84 lines) | stat: -rw-r--r-- 2,774 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
 * SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
 * SPDX-License-Identifier: LGPL-3.0-or-later
 */
#include <gtest/gtest.h>
#include <QPluginLoader>
#include <QJsonDocument>
#include <QJsonArray>
#include <QFile>
#include <QDir>

struct PluginInfo {
    QString path;
    QString metaFilePath;
};

class TestPluginLoading : public testing::Test, public testing::WithParamInterface<PluginInfo>
{
public:
    static void SetUpTestSuite()
    {
        // Assume build directory is in project root directory
#ifdef UT_PLATFORMPLUGIN_PATH
        pluginBaseDir = UT_PLATFORMPLUGIN_PATH;
#else
        pluginBaseDir = "../plugins";
#endif
#ifdef META_FILE_BASE_DIR
        metaFileBaseDir = META_FILE_BASE_DIR;
#else
        metaFileBaseDir = "../..";
#endif
    }

private:
    static QString pluginBaseDir;
    static QString metaFileBaseDir;
};

QString TestPluginLoading::pluginBaseDir = "";
QString TestPluginLoading::metaFileBaseDir = "";

TEST_P(TestPluginLoading, load)
{
    auto info = GetParam();
    QPluginLoader loader(info.path);
    loader.load();
    // Test if loaded successfully
    EXPECT_TRUE(loader.isLoaded());
    EXPECT_NE(nullptr, loader.instance());
    // Test if the meta data match, especially key
    QFile metaFile{QDir(metaFileBaseDir).filePath(info.metaFilePath)};
    auto success = metaFile.open(QFile::ReadOnly);
    ASSERT_TRUE(success);
    QJsonParseError err;
    auto doc = QJsonDocument::fromJson(metaFile.readAll(), &err);
    ASSERT_EQ(err.error, QJsonParseError::NoError);
    ASSERT_FALSE(doc.isNull());
    ASSERT_FALSE(doc.isEmpty());
    ASSERT_TRUE(doc.isObject());
    auto root = doc.object();
    auto meta = loader.metaData();
    // meta info must include Keys field
    auto fileKeys = root.value("Keys").toArray();
    auto metaKeys = meta.value("MetaData").toObject().value("Keys").toArray();
    ASSERT_FALSE(fileKeys.isEmpty());
    ASSERT_FALSE(metaKeys.isEmpty());
    ASSERT_EQ(fileKeys.count(), metaKeys.count());
    for (int i = 0; i < fileKeys.count(); ++i) {
        EXPECT_EQ(fileKeys.at(i).toString(), metaKeys.at(i).toString());
    }
    loader.unload();
}

INSTANTIATE_TEST_SUITE_P(Default, TestPluginLoading,
    testing::Values(
        PluginInfo{"iconengines/libdicon.so", "iconengineplugins/diconengine/diconengine.json"},
        PluginInfo{"iconengines/libdsvgicon.so", "iconengineplugins/svgiconengine/qsvgiconengine.json"},
        PluginInfo{"imageformats/libdci.so", "imageformatplugins/dci/dci.json"},
        PluginInfo{"imageformats/libdsvg.so", "imageformatplugins/svg/svg.json"},
        PluginInfo{"platformthemes/libqdeepin.so", "platformthemeplugin/deepin.json"},
        PluginInfo{"styles/libchameleon.so", "styleplugins/chameleon/chameleon.json"}
    )
);