Skip to content

Commit

Permalink
test: [ut/fileoperator]UT for supplementary file operations
Browse files Browse the repository at this point in the history
UT for supplementary file operations

Log: UT for supplementary file operations
  • Loading branch information
liyigang1 authored and deepin-bot[bot] committed Aug 14, 2023
1 parent d7abf37 commit dae9729
Show file tree
Hide file tree
Showing 12 changed files with 622 additions and 29 deletions.
10 changes: 3 additions & 7 deletions src/dfm-base/file/local/localdiriterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,6 @@ LocalDirIteratorPrivate::LocalDirIteratorPrivate(const QUrl &url, const QStringL
dfmioDirIterator.reset(new DFMIO::DEnumerator(urlReally, nameFilters,
static_cast<DEnumerator::DirFilter>(static_cast<int32_t>(filters)),
static_cast<DEnumerator::IteratorFlag>(static_cast<uint8_t>(flags))));
if (!dfmioDirIterator) {
qWarning("Failed dfm-io use factory create enumerator");
abort();
}
}

LocalDirIteratorPrivate::~LocalDirIteratorPrivate()
Expand Down Expand Up @@ -59,11 +55,11 @@ FileInfoPointer LocalDirIteratorPrivate::fileInfo()
}

auto infoTrans = InfoFactory::transfromInfo<FileInfo>(url.scheme(), info);
infoTrans->setExtendedAttributes(ExtInfoType::kFileIsHid, isHidden);
infoTrans->setExtendedAttributes(ExtInfoType::kFileLocalDevice, isLocalDevice);
infoTrans->setExtendedAttributes(ExtInfoType::kFileCdRomDevice, isCdRomDevice);

if (infoTrans) {
infoTrans->setExtendedAttributes(ExtInfoType::kFileIsHid, isHidden);
infoTrans->setExtendedAttributes(ExtInfoType::kFileLocalDevice, isLocalDevice);
infoTrans->setExtendedAttributes(ExtInfoType::kFileCdRomDevice, isCdRomDevice);
emit InfoCacheController::instance().removeCacheFileInfo({url});
emit InfoCacheController::instance().cacheFileInfo(url, infoTrans);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -553,7 +553,6 @@ bool FileOperateBaseWorker::doCheckNewFile(const FileInfoPointer &fromInfo, cons
if (action != AbstractJobHandler::SupportAction::kEnforceAction) {
setSkipValue(skip, action);
if (skip && *skip)

workData->skipWriteSize += isCountSize && (fromInfo->isAttributes(OptInfoType::kIsSymLink) || fromInfo->size() <= 0) ? workData->dirSize : fromInfo->size();
return false;
}
Expand Down Expand Up @@ -684,7 +683,7 @@ bool FileOperateBaseWorker::checkAndCopyDir(const FileInfoPointer &fromInfo, con
const QUrl &url = iterator->next();
const FileInfoPointer &info = InfoFactory::create<FileInfo>(url, Global::CreateFileInfoType::kCreateFileInfoSync);
bool ok = doCopyFile(info, toInfo, skip);
if (!ok && !skip) {
if (!ok && (!skip || !*skip)) {
return false;
}
}
Expand Down
191 changes: 191 additions & 0 deletions tests/dfm-base/file/local/ut_desktopfileinfo.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#ifndef UT_DESKTOPFILEINFO
#define UT_DESKTOPFILEINFO

#include <stubext.h>
#include <dfm-base/file/local/desktopfileinfo.h>
#include <dfm-base/dfm_global_defines.h>
#include <dfm-base/file/local/syncfileinfo.h>
#include <dfm-base/base/schemefactory.h>
#include <dfm-base/utils/desktopfile.h>
#include <dfm-base/utils/fileutils.h>

#include <QDir>

#include <gtest/gtest.h>
#include <unistd.h>
#include <pwd.h>

DFMBASE_USE_NAMESPACE

class UT_DesktopFileInfo : public testing::Test
{
public:
virtual void SetUp() override
{
// 注册路由
UrlRoute::regScheme(dfmbase::Global::Scheme::kFile, "/", QIcon(), false, QObject::tr("System Disk"));
}

virtual void TearDown() override
{
}

~UT_DesktopFileInfo() override {}
};


TEST_F(UT_DesktopFileInfo, testDesktopFileInfo)
{
QUrl url = QUrl::fromLocalFile(QDir::currentPath());
InfoFactory::instance().constructList.clear();
DesktopFileInfo info(url);
QSharedPointer<dfmio::DFileInfo> dfileinfo (new dfmio::DFileInfo(url));
EXPECT_TRUE(info.proxy.isNull());

InfoFactory::regClass<SyncFileInfo>(Global::Scheme::kFile);
DesktopFileInfo info1(url);
EXPECT_FALSE(info1.proxy.isNull());
}

TEST_F(UT_DesktopFileInfo, testDesktopName)
{
InfoFactory::regClass<SyncFileInfo>(Global::Scheme::kFile);
QUrl url = QUrl::fromLocalFile(QDir::currentPath());
stub_ext::StubExt stub;
stub.set_lamda(&DesktopFile::desktopDeepinVendor, []{ __DBG_STUB_INVOKE__ return QString("deepin");});
stub.set_lamda(&DesktopFile::desktopDisplayName, []{ __DBG_STUB_INVOKE__ return QString("deepin");});
DesktopFileInfo info(url);
QSharedPointer<dfmio::DFileInfo> dfileinfo (new dfmio::DFileInfo(url));
stub.set_lamda(VADDR(ProxyFileInfo, refresh), []{ __DBG_STUB_INVOKE__ });
EXPECT_EQ(QString("deepin"), info.desktopName());

stub.set_lamda(&DesktopFile::desktopDisplayName, []{ __DBG_STUB_INVOKE__ return QString("");});
stub.set_lamda(&DesktopFile::desktopLocalName, []{ __DBG_STUB_INVOKE__ return QString("deepin");});
info.refresh();
EXPECT_EQ(QString("deepin"), info.desktopName());

EXPECT_TRUE(info.desktopExec().isEmpty());
EXPECT_TRUE(info.desktopIconName().isEmpty());
EXPECT_FALSE(info.desktopType().isEmpty());
EXPECT_TRUE(info.desktopCategories().isEmpty());

stub.set_lamda(&DesktopFile::desktopIcon, []{ __DBG_STUB_INVOKE__ return QString("user-trash");});
stub.set_lamda(&FileUtils::trashIsEmpty, []{ __DBG_STUB_INVOKE__ return false;});
info.refresh();
EXPECT_EQ(QString("user-trash-full"), info.desktopIconName());
}

TEST_F(UT_DesktopFileInfo, testDesktopFileInfoNameOf)
{
InfoFactory::regClass<SyncFileInfo>(Global::Scheme::kFile);
QUrl url = QUrl::fromLocalFile(QDir::currentPath());
stub_ext::StubExt stub;
DesktopFileInfo info(url);
stub.set_lamda(&DesktopFileInfo::desktopName, []{ __DBG_STUB_INVOKE__ return QString("eee");});
EXPECT_EQ(QString("eee"), info.displayOf(DisPlayInfoType::kFileDisplayName));

stub.set_lamda(&DesktopFileInfo::desktopName, []{ __DBG_STUB_INVOKE__ return QString("");});
stub.set_lamda(VADDR(ProxyFileInfo, displayOf), []{ __DBG_STUB_INVOKE__ return QString("eeee");});
EXPECT_EQ(QString("eeee"), info.displayOf(DisPlayInfoType::kFileDisplayName));

stub.set_lamda(VADDR(DesktopFileInfo, displayOf), []{ __DBG_STUB_INVOKE__ return QString("display");});
EXPECT_EQ(QString("display"), info.nameOf(NameInfoType::kFileNameOfRename));
EXPECT_EQ(QString("display"), info.nameOf(NameInfoType::kBaseNameOfRename));
EXPECT_TRUE(info.nameOf(NameInfoType::kSuffixOfRename).isEmpty());

stub.set_lamda(VADDR(ProxyFileInfo, nameOf), []{ __DBG_STUB_INVOKE__ return QString("nameOf");});

EXPECT_EQ(QString("nameOf"), info.nameOf(NameInfoType::kFileCopyName));
EXPECT_TRUE(info.nameOf(NameInfoType::kIconName).isEmpty());
EXPECT_EQ(QString("application-default-icon"), info.nameOf(NameInfoType::kGenericIconName));
EXPECT_EQ(QString("nameOf"), info.nameOf(NameInfoType::kMimeTypeName));
}

TEST_F(UT_DesktopFileInfo, testDesktopFileInfoSupportedOfAttributes)
{
InfoFactory::regClass<SyncFileInfo>(Global::Scheme::kFile);
QUrl url = QUrl::fromLocalFile(QDir::currentPath());
stub_ext::StubExt stub;
stub.set_lamda(&DesktopFile::desktopDeepinId, []{ __DBG_STUB_INVOKE__ return QString("dde-computer");});
DesktopFileInfo info(url);

EXPECT_FALSE(info.canTag());

EXPECT_EQ(Qt::IgnoreAction, info.supportedOfAttributes(SupportedType::kDrag));
stub.set_lamda(VADDR(ProxyFileInfo, supportedOfAttributes), []{ __DBG_STUB_INVOKE__ return Qt::MoveAction;});

EXPECT_EQ(Qt::MoveAction, info.supportedOfAttributes(SupportedType::kDrop));

stub.set_lamda(&DesktopFile::desktopDeepinId, []{ __DBG_STUB_INVOKE__ return QString("dde-file-manager");});
stub.set_lamda(VADDR(ProxyFileInfo, refresh), []{ __DBG_STUB_INVOKE__ });
stub.set_lamda(&DesktopFile::desktopExec, []{ __DBG_STUB_INVOKE__ return QString("dd -O dd");});
info.refresh();
EXPECT_FALSE(info.canTag());

stub.set_lamda(&DesktopFile::desktopExec, []{ __DBG_STUB_INVOKE__ return QString("dd");});
info.refresh();
EXPECT_TRUE(info.canTag());
}

TEST_F(UT_DesktopFileInfo, testDesktopFileInfoCanAttributes)
{
InfoFactory::regClass<SyncFileInfo>(Global::Scheme::kFile);
QUrl url = QUrl::fromLocalFile(QDir::currentPath());
stub_ext::StubExt stub;
stub.set_lamda(&DesktopFile::desktopDeepinId, []{ __DBG_STUB_INVOKE__ return QString("dde-computer");});
DesktopFileInfo info(url);

EXPECT_FALSE(info.canAttributes(CanableInfoType::kCanMoveOrCopy));
EXPECT_FALSE(info.canAttributes(CanableInfoType::kCanDrop));

stub.set_lamda(&DesktopFile::desktopDeepinId, []{ __DBG_STUB_INVOKE__ return QString("dde-file-manager");});
stub.set_lamda(VADDR(ProxyFileInfo, refresh), []{ __DBG_STUB_INVOKE__ });
stub.set_lamda(&DesktopFile::desktopExec, []{ __DBG_STUB_INVOKE__ return QString("dd -O dd");});
info.refresh();
EXPECT_FALSE(info.canAttributes(CanableInfoType::kCanMoveOrCopy));

stub.set_lamda(&DesktopFile::desktopExec, []{ __DBG_STUB_INVOKE__ return QString("dd");});
info.refresh();
EXPECT_TRUE(info.canAttributes(CanableInfoType::kCanMoveOrCopy));

stub.set_lamda(VADDR(ProxyFileInfo, canAttributes), []{ __DBG_STUB_INVOKE__ return true;});
EXPECT_TRUE(info.canAttributes(CanableInfoType::kCanDrop));
EXPECT_TRUE(info.canAttributes(CanableInfoType::kCanDragCompress));
}

TEST_F(UT_DesktopFileInfo, testDesktopFileInfoFileIcon)
{
InfoFactory::regClass<SyncFileInfo>(Global::Scheme::kFile);
QUrl url = QUrl::fromLocalFile(QDir::currentPath());
stub_ext::StubExt stub;
DesktopFileInfo info(url);

stub.set_lamda(&QIcon::isNull, []{ __DBG_STUB_INVOKE__ return false;});
stub.set_lamda(&QIcon::availableSizes, []{ __DBG_STUB_INVOKE__ QList<QSize> list; list.append(QSize()); return list;});
EXPECT_TRUE(info.fileIcon().name().isEmpty());

stub.reset(&QIcon::availableSizes);
EXPECT_TRUE(info.fileIcon().name().isEmpty());

stub.clear();
stub.set_lamda(VADDR(DesktopFileInfo, nameOf), []{ __DBG_STUB_INVOKE__ return "data:image/ooooooo;jjj";});
typedef int (QString::*IndexOfFunc)(const QString &, int from, Qt::CaseSensitivity) const;
stub.set_lamda(static_cast<IndexOfFunc>(&QString::indexOf), []{ __DBG_STUB_INVOKE__ return 12;});
typedef bool(QPixmap::*LoadFromData)(const QByteArray &, const char *, Qt::ImageConversionFlags);
stub.set_lamda(static_cast<LoadFromData>(&QPixmap::loadFromData), []{ __DBG_STUB_INVOKE__ return true;});
stub.set_lamda(VADDR(ProxyFileInfo, fileIcon), []{ __DBG_STUB_INVOKE__ return QIcon();});
EXPECT_TRUE(info.fileIcon().name().isEmpty());

stub.set_lamda(static_cast<LoadFromData>(&QPixmap::loadFromData), []{ __DBG_STUB_INVOKE__ return false;});
EXPECT_FALSE(info.fileIcon().name().isEmpty());

stub.set_lamda(VADDR(DesktopFileInfo, nameOf), []{ __DBG_STUB_INVOKE__ return "~";});
stub.set_lamda(VADDR(DesktopFileInfo, pathOf), []{ __DBG_STUB_INVOKE__ return QDir::currentPath();});
EXPECT_FALSE(info.fileIcon().name().isEmpty());
}

#endif
43 changes: 41 additions & 2 deletions tests/dfm-base/file/local/ut_localfilediriterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,17 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later

#ifndef UT_ABSTRACTFILEWATCHER
#define UT_ABSTRACTFILEWATCHER
#ifndef UT_LOCALFILEWATCHER
#define UT_LOCALFILEWATCHER

#include <stubext.h>
#include <dfm-base/file/local/localdiriterator.h>
#include <dfm-base/utils/fileutils.h>
#include <dfm-base/base/schemefactory.h>
#include <dfm-base/file/local/asyncfileinfo.h>
#include <dfm-base/file/local/private/localdiriterator_p.h>

#include <dfm-io/dfileinfo.h>

#include <QDir>

Expand Down Expand Up @@ -44,6 +51,14 @@ TEST_F(UT_LocalFileDirIterator, testLocalFileIterator)
auto fileUrl = QUrl::fromLocalFile(url.path() + QDir::separator() + "testAsyncFileInfo.txt");
EXPECT_EQ(fileUrl, iterator->next());
EXPECT_TRUE(!iterator->fileInfo().isNull());
stub_ext::StubExt stub;
stub.set_lamda(&dfmio::DFileInfo::attribute, []{ __DBG_STUB_INVOKE__ return ".testOOOOOO.txt";});
stub.set_lamda(&FileUtils::isLocalDevice, []{ __DBG_STUB_INVOKE__ return false;});
typedef FileInfoPointer (*TransfromInfo)(const QString &, FileInfoPointer);
stub.set_lamda(static_cast<TransfromInfo>(&dfmbase::InfoFactory::transfromInfo), []{ __DBG_STUB_INVOKE__ return nullptr;});
stub.set_lamda(&AsyncFileInfo::cacheAsyncAttributes, []{ __DBG_STUB_INVOKE__ });
EXPECT_TRUE(iterator->fileInfo().isNull());

EXPECT_EQ(fileUrl, iterator->fileUrl());
EXPECT_EQ("testAsyncFileInfo.txt", iterator->fileName());
EXPECT_EQ(url, iterator->url());
Expand Down Expand Up @@ -74,4 +89,28 @@ TEST_F(UT_LocalFileDirIterator, testLocalFileIterator)
QProcess::execute("fm -rf ./testAsyncFileInfo");
}

TEST_F(UT_LocalFileDirIterator, testLocalFileIteratorOther)
{
LocalDirIterator iterator(QUrl("recent:///ddd.txt"));

EXPECT_FALSE(iterator.initIterator());

iterator.d->dfmioDirIterator = nullptr;
EXPECT_FALSE(iterator.hasNext());
EXPECT_FALSE(iterator.url().isValid());
QVariantMap args;
iterator.setArguments(args);
EXPECT_TRUE(iterator.sortFileInfoList().isEmpty());
EXPECT_TRUE(iterator.oneByOne());
EXPECT_FALSE(iterator.initIterator());
EXPECT_TRUE(iterator.asyncIterator() == nullptr);
stub_ext::StubExt stub;
stub.set_lamda(VADDR(LocalDirIterator, fileUrl), []{ __DBG_STUB_INVOKE__ return QUrl();});
EXPECT_TRUE(iterator.fileName().isEmpty());
stub.set_lamda(VADDR(LocalDirIterator, fileUrl), []{ __DBG_STUB_INVOKE__ return QUrl("file:////");});
EXPECT_TRUE(iterator.fileName().isEmpty());
stub.set_lamda(VADDR(LocalDirIterator, fileUrl), []{ __DBG_STUB_INVOKE__ return QUrl("file:///tttt/");});
EXPECT_TRUE(iterator.fileName() == QString("tttt"));
}

#endif
48 changes: 48 additions & 0 deletions tests/dfm-base/file/local/ut_localfileiconprivder.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#ifndef UT_LOCALILEICONPRIVDER
#define UT_LOCALILEICONPRIVDER

#include <stubext.h>
#include <dfm-base/file/local/localfileiconprovider.h>

#include <dfm-io/dwatcher.h>

#include <QDir>

#include <gtest/gtest.h>

DFMBASE_USE_NAMESPACE

class UT_LocalFileIconProvider : public testing::Test
{
public:
virtual void SetUp() override
{
}

virtual void TearDown() override
{
}

~UT_LocalFileIconProvider() override;
};

UT_LocalFileIconProvider::~UT_LocalFileIconProvider() {

}

TEST_F(UT_LocalFileIconProvider, testLocalFileIconProvider)
{
QUrl url = QUrl::fromLocalFile(QDir::currentPath());
LocalFileIconProvider *privder = LocalFileIconProvider::globalProvider();
QFileInfo info(url.path());
EXPECT_TRUE(privder->icon(info).name().isEmpty());

QString iconName("test");
EXPECT_TRUE(privder->icon(iconName).isNull());
}

#endif
16 changes: 14 additions & 2 deletions tests/dfm-base/file/local/ut_localfilewatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@
//
// SPDX-License-Identifier: GPL-3.0-or-later

#ifndef UT_ABSTRACTFILEWATCHER
#define UT_ABSTRACTFILEWATCHER
#ifndef UT_LOCALFILEWATCHER
#define UT_LOCALFILEWATCHER

#include <stubext.h>
#include <dfm-base/file/local/localfilewatcher.h>
#include <dfm-base/file/local/private/localfilewatcher_p.h>

#include <dfm-io/dwatcher.h>

#include <QDir>

Expand Down Expand Up @@ -52,6 +56,14 @@ TEST_F(UT_LocalFileWatcher, testLocalFileWatcher)
EXPECT_TRUE(watcher->stopWatcher());
EXPECT_FALSE(watcher->stopWatcher());

LocalFileWatcherPrivate * watherDptr = static_cast<LocalFileWatcherPrivate *>(watcher->d.data());
stub_ext::StubExt stub;
stub.set_lamda(&dfmio::DWatcher::start, []{ __DBG_STUB_INVOKE__ return false;});
EXPECT_FALSE(watherDptr->start());
watherDptr->watcher = nullptr;

EXPECT_FALSE(watherDptr->start());
EXPECT_FALSE(watherDptr->stop());
}

#endif
Loading

0 comments on commit dae9729

Please sign in to comment.