dde-application-manager/tests/ut_desktopentry.cpp
ComixHe 06ee5e5899 refact: DesktopFile's method and structure
Signed-off-by: ComixHe <heyuming@deepin.org>
2023-08-22 11:42:13 +08:00

85 lines
2.4 KiB
C++

// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later
#include "desktopentry.h"
#include <gtest/gtest.h>
#include <QTextStream>
#include <QSharedPointer>
#include <QLocale>
#include <QDir>
#include <QFile>
class TestDesktopEntry : public testing::Test
{
public:
static void SetUpTestCase()
{
env = qgetenv("XDG_DATA_DIRS");
auto curDir = QDir::current();
QByteArray fakeXDG = (curDir.absolutePath() + QDir::separator() + "data").toLocal8Bit();
qputenv("XDG_DATA_DIRS", fakeXDG);
DesktopErrorCode err;
auto file = DesktopFile::searchDesktopFileById("deepin-editor", err);
if (!file.has_value()) {
qWarning() << "search failed:" << err;
return;
}
m_file.reset(new DesktopFile{std::move(file).value()});
}
static void TearDownTestCase() { qputenv("XDG_DATA_DIRS", env); }
QSharedPointer<DesktopFile> file() { return m_file; }
private:
static inline QSharedPointer<DesktopFile> m_file;
static inline QByteArray env;
};
TEST_F(TestDesktopEntry, desktopFile)
{
const auto &fileptr = file();
ASSERT_FALSE(fileptr.isNull());
const auto &exampleFile = file();
auto curDir = QDir::current();
QString path{curDir.absolutePath() + QDir::separator() + "data" + QDir::separator() + "applications" + QDir::separator() +
"deepin-editor.desktop"};
EXPECT_EQ(exampleFile->sourcePath(), path);
EXPECT_EQ(exampleFile->desktopId().toStdString(), "deepin-editor");
}
TEST_F(TestDesktopEntry, prase)
{
const auto &exampleFile = file();
ASSERT_FALSE(exampleFile.isNull());
DesktopEntry entry;
QFile in{exampleFile->sourcePath()};
ASSERT_TRUE(in.open(QFile::ExistingOnly | QFile::ReadOnly | QFile::Text));
QTextStream fs{&in};
auto err = entry.parse(fs);
ASSERT_EQ(err, DesktopErrorCode::NoError);
auto group = entry.group("Desktop Entry");
ASSERT_TRUE(group);
auto name = group->constFind("Name");
ASSERT_NE(name, group->cend());
bool ok;
name->toBoolean(ok);
EXPECT_FALSE(ok);
name->toNumeric(ok);
EXPECT_FALSE(ok);
auto defaultName = name->toString(ok);
ASSERT_TRUE(ok);
EXPECT_TRUE(defaultName == "Text Editor");
auto localeString = name->toLocaleString(QLocale{"zh_CN"}, ok);
ASSERT_TRUE(ok);
EXPECT_TRUE(localeString == "文本编辑器");
}