mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-23 18:32:49 +00:00
337 lines
12 KiB
C++
337 lines
12 KiB
C++
/* This file is part of the KDE project
|
|
Copyright (C) 2006 David Faure <faure@kde.org>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "kfileitemtest.h"
|
|
#include <kfileitemlistproperties.h>
|
|
#include <qtest_kde.h>
|
|
#include "moc_kfileitemtest.cpp"
|
|
#include <kfileitem.h>
|
|
|
|
#include <ktempdir.h>
|
|
#include <ktemporaryfile.h>
|
|
#include <kuser.h>
|
|
|
|
QTEST_KDEMAIN( KFileItemTest, NoGUI )
|
|
|
|
void KFileItemTest::initTestCase()
|
|
{
|
|
}
|
|
|
|
void KFileItemTest::testPermissionsString()
|
|
{
|
|
// Directory
|
|
KTempDir tempDir;
|
|
KFileItem dirItem(KUrl(tempDir.name()));
|
|
QCOMPARE((uint)dirItem.permissions(), (uint)0700);
|
|
QCOMPARE(dirItem.permissionsString(), QString("drwx------"));
|
|
QVERIFY(dirItem.isReadable());
|
|
|
|
// File
|
|
QFile file(tempDir.name() + "afile");
|
|
QVERIFY(file.open(QIODevice::WriteOnly));
|
|
file.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ReadOther); // 0604
|
|
KFileItem fileItem(KUrl(file.fileName()));
|
|
QCOMPARE((uint)fileItem.permissions(), (uint)0604);
|
|
QCOMPARE(fileItem.permissionsString(), QString("-rw----r--"));
|
|
QVERIFY(fileItem.isReadable());
|
|
|
|
// Symlink to file
|
|
QString symlink = tempDir.name() + "asymlink";
|
|
QVERIFY( file.link( symlink ) );
|
|
KUrl symlinkUrl(symlink);
|
|
KFileItem symlinkItem(symlinkUrl);
|
|
QCOMPARE((uint)symlinkItem.permissions(), (uint)0604);
|
|
// This is a bit different from "ls -l": we get the 'l' but we see the permissions of the target.
|
|
// This is actually useful though; the user sees it's a link, and can check if he can read the [target] file.
|
|
QCOMPARE(symlinkItem.permissionsString(), QString("lrw----r--"));
|
|
QVERIFY(symlinkItem.isReadable());
|
|
|
|
// Symlink to directory (#162544)
|
|
QVERIFY(QFile::remove(symlink));
|
|
QVERIFY(QFile(tempDir.name()).link(symlink));
|
|
KFileItem symlinkToDirItem(symlinkUrl);
|
|
QCOMPARE((uint)symlinkToDirItem.permissions(), (uint)0700);
|
|
QCOMPARE(symlinkToDirItem.permissionsString(), QString("lrwx------"));
|
|
}
|
|
|
|
void KFileItemTest::testNull()
|
|
{
|
|
KFileItem null;
|
|
QVERIFY(null.isNull());
|
|
KFileItem fileItem(KUrl("/"));
|
|
QVERIFY(!fileItem.isNull());
|
|
null = fileItem; // ok, now 'null' isn't so null anymore
|
|
QVERIFY(!null.isNull());
|
|
QVERIFY(null.isReadable());
|
|
QVERIFY(!null.isHidden());
|
|
}
|
|
|
|
void KFileItemTest::testDoesNotExist()
|
|
{
|
|
KFileItem fileItem(KUrl("/doesnotexist"));
|
|
QVERIFY(!fileItem.isNull());
|
|
QVERIFY(!fileItem.isReadable());
|
|
QVERIFY(fileItem.user().isEmpty());
|
|
QVERIFY(fileItem.group().isEmpty());
|
|
}
|
|
|
|
void KFileItemTest::testBasic()
|
|
{
|
|
KTemporaryFile file;
|
|
QVERIFY(file.open());
|
|
QFile fileObj(file.fileName());
|
|
QVERIFY(fileObj.open(QIODevice::WriteOnly));
|
|
fileObj.write(QByteArray("Hello"));
|
|
fileObj.close();
|
|
|
|
KUrl url(file.fileName());
|
|
KFileItem fileItem(url);
|
|
QCOMPARE(fileItem.text(), url.fileName());
|
|
QVERIFY(fileItem.isLocalFile());
|
|
QCOMPARE(fileItem.localPath(), url.path());
|
|
QCOMPARE(fileItem.size(), KIO::filesize_t(5));
|
|
QVERIFY(fileItem.linkDest().isEmpty());
|
|
QVERIFY(!fileItem.isHidden());
|
|
QVERIFY(fileItem.isReadable());
|
|
QVERIFY(fileItem.isWritable());
|
|
QVERIFY(fileItem.isFile());
|
|
QVERIFY(!fileItem.isDir());
|
|
QVERIFY(!fileItem.isDesktopFile());
|
|
QCOMPARE(fileItem.user(), KUser().loginName());
|
|
}
|
|
|
|
void KFileItemTest::testRootDirectory()
|
|
{
|
|
const QString rootPath = QDir::rootPath();
|
|
KUrl url(rootPath);
|
|
KIO::UDSEntry entry;
|
|
entry.insert(KIO::UDSEntry::UDS_NAME, ".");
|
|
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
|
|
KFileItem fileItem(entry, rootPath);
|
|
QCOMPARE(fileItem.text(), QString("."));
|
|
QVERIFY(fileItem.isLocalFile());
|
|
QCOMPARE(fileItem.localPath(), url.path());
|
|
QVERIFY(fileItem.linkDest().isEmpty());
|
|
QVERIFY(!fileItem.isHidden());
|
|
QVERIFY(!fileItem.isFile());
|
|
QVERIFY(fileItem.isDir());
|
|
QVERIFY(!fileItem.isDesktopFile());
|
|
}
|
|
|
|
void KFileItemTest::testHiddenFile()
|
|
{
|
|
KTempDir tempDir;
|
|
QFile file(tempDir.name() + ".hiddenfile");
|
|
QVERIFY(file.open(QIODevice::WriteOnly));
|
|
KFileItem fileItem(KUrl(file.fileName()));
|
|
QCOMPARE(fileItem.text(), QString(".hiddenfile"));
|
|
QVERIFY(fileItem.isLocalFile());
|
|
QVERIFY(fileItem.isHidden());
|
|
}
|
|
|
|
void KFileItemTest::testMimeTypeOnDemand()
|
|
{
|
|
KTemporaryFile file;
|
|
QVERIFY(file.open());
|
|
|
|
{
|
|
KFileItem fileItem(KUrl(file.fileName()));
|
|
//kDebug() << fileItem.mimeTypePtr()->name();
|
|
QCOMPARE(fileItem.mimeTypePtr()->name(), QString("application/x-zerosize"));
|
|
QCOMPARE(fileItem.mimetype(), QString("application/x-zerosize"));
|
|
}
|
|
|
|
{
|
|
// Calling mimeType directly also does mimetype determination
|
|
KFileItem fileItem(KUrl(file.fileName()));
|
|
QCOMPARE(fileItem.mimetype(), QString("application/x-zerosize"));
|
|
}
|
|
|
|
{
|
|
// Calling overlays should NOT do mimetype determination (#237668)
|
|
KFileItem fileItem(KUrl(file.fileName()));
|
|
fileItem.overlays();
|
|
}
|
|
|
|
{
|
|
KTemporaryFile file;
|
|
QVERIFY(file.open());
|
|
// Check whether mime-magic is used.
|
|
file.write(QByteArray("%PDF-"));
|
|
QString fileName = file.fileName();
|
|
QVERIFY(!fileName.isEmpty());
|
|
file.close();
|
|
KFileItem fileItem = KFileItem(KUrl(fileName));
|
|
QCOMPARE(fileItem.mimeTypePtr()->name(), QString("application/pdf"));
|
|
QCOMPARE(fileItem.mimetype(), QString("application/pdf"));
|
|
}
|
|
|
|
{
|
|
KTemporaryFile file;
|
|
file.setSuffix(".txt");
|
|
QVERIFY(file.open());
|
|
// Check whether mime-magic is used.
|
|
// Known extension, so it should NOT be used.
|
|
file.write(QByteArray("<smil"));
|
|
QString fileName = file.fileName();
|
|
QVERIFY(!fileName.isEmpty());
|
|
file.close();
|
|
KFileItem fileItem = KFileItem(KUrl(fileName));
|
|
QCOMPARE(fileItem.mimeTypePtr()->name(), QString("text/plain"));
|
|
QCOMPARE(fileItem.mimetype(), QString("text/plain"));
|
|
}
|
|
}
|
|
|
|
void KFileItemTest::testCmp()
|
|
{
|
|
KTemporaryFile file;
|
|
QVERIFY(file.open());
|
|
|
|
KFileItem fileItem(KUrl(file.fileName()));
|
|
KFileItem fileItem2(KUrl(file.fileName()));
|
|
QVERIFY(fileItem == fileItem2); // created independently, but still 'equal'
|
|
QVERIFY(fileItem.d != fileItem2.d);
|
|
QVERIFY(!(fileItem != fileItem2));
|
|
QVERIFY(fileItem.cmp(fileItem2));
|
|
}
|
|
|
|
void KFileItemTest::testRename()
|
|
{
|
|
KIO::UDSEntry entry;
|
|
const QString origName = QString::fromLatin1("foo");
|
|
entry.insert(KIO::UDSEntry::UDS_NAME, origName);
|
|
entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
|
|
KFileItem fileItem(entry, KUrl("/dir/foo"));
|
|
QCOMPARE(fileItem.name(), origName);
|
|
QCOMPARE(fileItem.text(), origName);
|
|
const QString newName = QString::fromLatin1("FiNeX_rocks");
|
|
fileItem.setName(newName);
|
|
QCOMPARE(fileItem.name(), newName);
|
|
QCOMPARE(fileItem.text(), newName);
|
|
QCOMPARE(fileItem.entry().stringValue(KIO::UDSEntry::UDS_NAME), newName); // #195385
|
|
}
|
|
|
|
void KFileItemTest::testDecodeFileName_data()
|
|
{
|
|
QTest::addColumn<QString>("filename");
|
|
QTest::addColumn<QString>("expectedText");
|
|
|
|
QTest::newRow("simple") << "filename" << "filename";
|
|
QTest::newRow("/ at end") << QString(QString("foo") + QChar(0x2044)) << QString(QString("foo") + QChar(0x2044));
|
|
QTest::newRow("/ at begin") << QString(QChar(0x2044)) << QString(QChar(0x2044));
|
|
}
|
|
|
|
|
|
void KFileItemTest::testDecodeFileName()
|
|
{
|
|
QFETCH(QString, filename);
|
|
QFETCH(QString, expectedText);
|
|
QCOMPARE(KIO::decodeFileName(filename), expectedText);
|
|
}
|
|
|
|
void KFileItemTest::testEncodeFileName_data()
|
|
{
|
|
QTest::addColumn<QString>("text");
|
|
QTest::addColumn<QString>("expectedFileName");
|
|
|
|
QTest::newRow("simple") << "filename" << "filename";
|
|
QTest::newRow("/ at end") << "foo/" << QString(QString("foo") + QChar(0x2044));
|
|
QTest::newRow("/ at begin") << "/" << QString(QChar(0x2044));
|
|
}
|
|
|
|
void KFileItemTest::testEncodeFileName()
|
|
{
|
|
QFETCH(QString, text);
|
|
QFETCH(QString, expectedFileName);
|
|
QCOMPARE(KIO::encodeFileName(text), expectedFileName);
|
|
}
|
|
|
|
void KFileItemTest::testListProperties_data()
|
|
{
|
|
QTest::addColumn<QString>("itemDescriptions");
|
|
QTest::addColumn<bool>("expectedReading");
|
|
QTest::addColumn<bool>("expectedDeleting");
|
|
QTest::addColumn<bool>("expectedIsLocal");
|
|
QTest::addColumn<bool>("expectedIsDirectory");
|
|
QTest::addColumn<QString>("expectedMimeType");
|
|
QTest::addColumn<QString>("expectedMimeGroup");
|
|
|
|
QTest::newRow("one file") << "f" << true << true << true << false << "text/plain" << "text";
|
|
QTest::newRow("one dir") << "d" << true << true << true << true << "inode/directory" << "inode";
|
|
QTest::newRow("root dir") << "/" << true << false << true << true << "inode/directory" << "inode";
|
|
QTest::newRow("file+dir") << "fd" << true << true << true << false << "" << "";
|
|
QTest::newRow("two dirs") << "dd" << true << true << true << true << "inode/directory" << "inode";
|
|
QTest::newRow("dir+root dir") << "d/" << true << false << true << true << "inode/directory" << "inode";
|
|
QTest::newRow("two (text+html) files") << "ff" << true << true << true << false << "" << "text";
|
|
QTest::newRow("three (text+html+empty) files") << "fff" << true << true << true << false << "" << "";
|
|
QTest::newRow("http url") << "h" << true << false /*says kio_http...*/
|
|
<< false << false << "application/octet-stream" << "application";
|
|
QTest::newRow("2 http urls") << "hh" << true << false /*says kio_http...*/
|
|
<< false << false << "application/octet-stream" << "application";
|
|
}
|
|
|
|
void KFileItemTest::testListProperties()
|
|
{
|
|
QFETCH(QString, itemDescriptions);
|
|
QFETCH(bool, expectedReading);
|
|
QFETCH(bool, expectedDeleting);
|
|
QFETCH(bool, expectedIsLocal);
|
|
QFETCH(bool, expectedIsDirectory);
|
|
QFETCH(QString, expectedMimeType);
|
|
QFETCH(QString, expectedMimeGroup);
|
|
|
|
KTempDir tempDir;
|
|
QDir baseDir(tempDir.name());
|
|
KFileItemList items;
|
|
for (int i = 0; i < itemDescriptions.size(); ++i) {
|
|
QString fileName = tempDir.name() + "file" + QString::number(i);
|
|
switch(itemDescriptions[i].toLatin1()) {
|
|
case 'f':
|
|
{
|
|
if (i==1) // 2nd file is html
|
|
fileName += ".html";
|
|
QFile file(fileName);
|
|
QVERIFY(file.open(QIODevice::WriteOnly));
|
|
if (i!=2) // 3rd file is empty
|
|
file.write("Hello");
|
|
items << KFileItem(KUrl(fileName));
|
|
}
|
|
break;
|
|
case 'd':
|
|
QVERIFY(baseDir.mkdir(fileName));
|
|
items << KFileItem(KUrl(fileName));
|
|
break;
|
|
case '/':
|
|
items << KFileItem(KUrl("/"));
|
|
break;
|
|
case 'h':
|
|
items << KFileItem(KUrl("http://www.kde.org"));
|
|
break;
|
|
default:
|
|
QVERIFY(false);
|
|
}
|
|
}
|
|
KFileItemListProperties props(items);
|
|
QCOMPARE(props.supportsReading(), expectedReading);
|
|
QCOMPARE(props.supportsDeleting(), expectedDeleting);
|
|
QCOMPARE(props.isLocal(), expectedIsLocal);
|
|
QCOMPARE(props.isDirectory(), expectedIsDirectory);
|
|
QCOMPARE(props.mimeType(), expectedMimeType);
|
|
QCOMPARE(props.mimeGroup(), expectedMimeGroup);
|
|
}
|