File indexing completed on 2024-04-28 15:22:17

0001 /*
0002     SPDX-FileCopyrightText: 2017 James D. Smith <smithjd15@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "usermetadatawritertest.h"
0008 #include "indexerextractortestsconfig.h"
0009 #include "usermetadata.h"
0010 
0011 #include <QTest>
0012 #include <QFile>
0013 
0014 #define TEST_FILENAME "writertest.txt"
0015 #define TEST_SYMLINK "dangling_symlink"
0016 
0017 using namespace KFileMetaData;
0018 
0019 QString UserMetaDataWriterTest::testFilePath(const QString& fileName) const
0020 {
0021     return QLatin1String(INDEXER_TESTS_SAMPLE_FILES_PATH) + QLatin1Char('/') + fileName;
0022 }
0023 
0024 void UserMetaDataWriterTest::initTestCase()
0025 {
0026     QFile testFile(testFilePath("plain_text_file.txt"));
0027     QFile writerTestFile(testFilePath(TEST_FILENAME));
0028     QFile::copy(testFilePath("plain_text_file.txt"), testFilePath(TEST_FILENAME));
0029 
0030     QFile::link(testFilePath("invalid_target"), testFilePath(TEST_SYMLINK));
0031 }
0032 
0033 void UserMetaDataWriterTest::test()
0034 {
0035 
0036     KFileMetaData::UserMetaData md(testFilePath(TEST_FILENAME));
0037     QVERIFY(md.isSupported());
0038 
0039     // Tags
0040     md.setTags(QStringList() << QStringLiteral("this/is/a/test/tag"));
0041     QCOMPARE(md.tags().at(0), QStringLiteral("this/is/a/test/tag"));
0042     QVERIFY(md.queryAttributes(UserMetaData::Attribute::Any) & UserMetaData::Attribute::Tags);
0043     QVERIFY(md.queryAttributes(UserMetaData::Attribute::All) & UserMetaData::Attribute::Tags);
0044     QVERIFY(md.queryAttributes(UserMetaData::Attribute::Tags) & UserMetaData::Attribute::Tags);
0045     QVERIFY(!(md.queryAttributes(UserMetaData::Attribute::Rating) & UserMetaData::Attribute::Tags));
0046     md.setTags(QStringList());
0047     QVERIFY(!md.hasAttribute(QStringLiteral("xdg.tags")));
0048     QVERIFY(!(md.queryAttributes(UserMetaData::Attribute::Tags) & UserMetaData::Attribute::Tags));
0049 
0050     // Rating
0051     md.setRating(3);
0052     QCOMPARE(md.rating(), 3);
0053     QVERIFY(md.queryAttributes(UserMetaData::Attribute::All) & UserMetaData::Attribute::Rating);
0054     QVERIFY(md.queryAttributes(UserMetaData::Attribute::Rating) & UserMetaData::Attribute::Rating);
0055     md.setRating(0);
0056     QVERIFY(!md.hasAttribute(QStringLiteral("baloo.rating")));
0057     QVERIFY(!(md.queryAttributes(UserMetaData::Attribute::All) & UserMetaData::Attribute::Rating));
0058     QVERIFY(!(md.queryAttributes(UserMetaData::Attribute::Rating) & UserMetaData::Attribute::Rating));
0059 
0060     // Comment
0061     md.setUserComment(QStringLiteral("this is a test comment"));
0062     QCOMPARE(md.userComment(), QStringLiteral("this is a test comment"));
0063     md.setUserComment(QString());
0064     QVERIFY(!md.hasAttribute(QStringLiteral("xdg.comment")));
0065 
0066     // Origin url
0067     md.setOriginUrl(QUrl("http://this.is.a.test.website.local"));
0068     QCOMPARE(md.originUrl(), QUrl("http://this.is.a.test.website.local"));
0069     md.setOriginUrl(QUrl());
0070     QVERIFY(!md.hasAttribute(QStringLiteral("xdg.origin.url")));
0071 
0072     // Origin e-mail subject
0073     md.setOriginEmailSubject(QStringLiteral("this is a test e-mail subject"));
0074     QCOMPARE(md.originEmailSubject(), QStringLiteral("this is a test e-mail subject"));
0075     md.setOriginEmailSubject(QString());
0076     QVERIFY(!md.hasAttribute(QStringLiteral("xdg.origin.email.subject")));
0077 
0078     // Origin e-mail sender
0079     md.setOriginEmailSender(QStringLiteral("Blue Bear"));
0080     QCOMPARE(md.originEmailSender(), QStringLiteral("Blue Bear"));
0081     md.setOriginEmailSender(QString());
0082     QVERIFY(!md.hasAttribute(QStringLiteral("xdg.origin.email.sender")));
0083 
0084     // Origin e-mail message id
0085     md.setOriginEmailMessageId(QStringLiteral("19991231235959.52234.24C26516HHBTF1C4"));
0086     QCOMPARE(md.originEmailMessageId(), QStringLiteral("19991231235959.52234.24C26516HHBTF1C4"));
0087     md.setOriginEmailMessageId(QString());
0088     QVERIFY(!md.hasAttribute(QStringLiteral("xdg.origin.email.message-id")));
0089 
0090     // Attribute
0091     md.setAttribute(QStringLiteral("test.attribute"), QStringLiteral("attribute"));
0092     QCOMPARE(md.attribute(QStringLiteral("test.attribute")), QStringLiteral("attribute"));
0093     md.setAttribute(QStringLiteral("test.attribute2"), QStringLiteral("attribute2"));
0094     QCOMPARE(md.attribute(QStringLiteral("test.attribute2")), QStringLiteral("attribute2"));
0095     QVERIFY(md.queryAttributes(UserMetaData::Attribute::All) & UserMetaData::Attribute::Other);
0096     QVERIFY(md.queryAttributes(UserMetaData::Attribute::Other) & UserMetaData::Attribute::Other);
0097     md.setAttribute(QStringLiteral("test.attribute"), QString());
0098     QVERIFY(!md.hasAttribute(QStringLiteral("test.attribute")));
0099     QVERIFY(md.queryAttributes(UserMetaData::Attribute::All) & UserMetaData::Attribute::Other);
0100     QVERIFY(md.queryAttributes(UserMetaData::Attribute::Other) & UserMetaData::Attribute::Other);
0101     md.setAttribute(QStringLiteral("test.attribute2"), QString());
0102     QVERIFY(!md.hasAttribute(QStringLiteral("test.attribute2")));
0103 
0104     // Check for side effects of calling sequence
0105     QVERIFY(!md.hasAttribute(QStringLiteral("test.check_contains")));
0106     md.setAttribute(QStringLiteral("test.check_contains"), QStringLiteral("dummy"));
0107     QVERIFY(md.hasAttribute(QStringLiteral("test.check_contains")));
0108     md.setAttribute(QStringLiteral("test.check_contains"), QString());
0109     QVERIFY(!md.hasAttribute(QStringLiteral("test.check_contains")));
0110 }
0111 
0112 
0113 void UserMetaDataWriterTest::testDanglingSymlink()
0114 {
0115     KFileMetaData::UserMetaData md(testFilePath(TEST_SYMLINK));
0116     QVERIFY(md.queryAttributes(UserMetaData::Attribute::All) == UserMetaData::Attribute::None);
0117 }
0118 
0119 void UserMetaDataWriterTest::cleanupTestCase()
0120 {
0121     QFile::remove(testFilePath(TEST_FILENAME));
0122     QFile::remove(testFilePath(TEST_SYMLINK));
0123 }
0124 
0125 QTEST_GUILESS_MAIN(UserMetaDataWriterTest)
0126 
0127 #include "moc_usermetadatawritertest.cpp"