diff --git a/autotests/udsentrytest.h b/autotests/udsentrytest.h --- a/autotests/udsentrytest.h +++ b/autotests/udsentrytest.h @@ -29,6 +29,7 @@ private Q_SLOTS: void testSaveLoad(); void testMove(); + void testEquality(); }; #endif diff --git a/autotests/udsentrytest.cpp b/autotests/udsentrytest.cpp --- a/autotests/udsentrytest.cpp +++ b/autotests/udsentrytest.cpp @@ -261,4 +261,74 @@ } } +/** + * Test to verify that equal semantics work. + */ +void UDSEntryTest::testEquality() +{ + KIO::UDSEntry entry; + entry.fastInsert(KIO::UDSEntry::UDS_SIZE, 1); + entry.fastInsert(KIO::UDSEntry::UDS_USER, QStringLiteral("user1")); + entry.fastInsert(KIO::UDSEntry::UDS_GROUP, QStringLiteral("group1")); + entry.fastInsert(KIO::UDSEntry::UDS_NAME, QStringLiteral("filename1")); + entry.fastInsert(KIO::UDSEntry::UDS_MODIFICATION_TIME, 123456); + entry.fastInsert(KIO::UDSEntry::UDS_CREATION_TIME, 12345); + entry.fastInsert(KIO::UDSEntry::UDS_DEVICE_ID, 2); + entry.fastInsert(KIO::UDSEntry::UDS_INODE, 56); + + // Same as entry + KIO::UDSEntry entry2; + entry2.fastInsert(KIO::UDSEntry::UDS_SIZE, 1); + entry2.fastInsert(KIO::UDSEntry::UDS_USER, QStringLiteral("user1")); + entry2.fastInsert(KIO::UDSEntry::UDS_GROUP, QStringLiteral("group1")); + entry2.fastInsert(KIO::UDSEntry::UDS_NAME, QStringLiteral("filename1")); + entry2.fastInsert(KIO::UDSEntry::UDS_MODIFICATION_TIME, 123456); + entry2.fastInsert(KIO::UDSEntry::UDS_CREATION_TIME, 12345); + entry2.fastInsert(KIO::UDSEntry::UDS_DEVICE_ID, 2); + entry2.fastInsert(KIO::UDSEntry::UDS_INODE, 56); + + // 3nd entry: different user. + KIO::UDSEntry entry3; + entry3.fastInsert(KIO::UDSEntry::UDS_SIZE, 1); + entry3.fastInsert(KIO::UDSEntry::UDS_USER, QStringLiteral("other user")); + entry3.fastInsert(KIO::UDSEntry::UDS_GROUP, QStringLiteral("group1")); + entry3.fastInsert(KIO::UDSEntry::UDS_NAME, QStringLiteral("filename1")); + entry3.fastInsert(KIO::UDSEntry::UDS_MODIFICATION_TIME, 123456); + entry3.fastInsert(KIO::UDSEntry::UDS_CREATION_TIME, 12345); + entry3.fastInsert(KIO::UDSEntry::UDS_DEVICE_ID, 2); + entry3.fastInsert(KIO::UDSEntry::UDS_INODE, 56); + + // 4th entry : an additionnal field + KIO::UDSEntry entry4; + entry4.fastInsert(KIO::UDSEntry::UDS_SIZE, 1); + entry4.fastInsert(KIO::UDSEntry::UDS_USER, QStringLiteral("user1")); + entry4.fastInsert(KIO::UDSEntry::UDS_GROUP, QStringLiteral("group1")); + entry4.fastInsert(KIO::UDSEntry::UDS_NAME, QStringLiteral("filename1")); + entry4.fastInsert(KIO::UDSEntry::UDS_ICON_NAME, QStringLiteral("home")); + entry4.fastInsert(KIO::UDSEntry::UDS_MODIFICATION_TIME, 123456); + entry4.fastInsert(KIO::UDSEntry::UDS_CREATION_TIME, 12345); + entry4.fastInsert(KIO::UDSEntry::UDS_DEVICE_ID, 2); + entry2.fastInsert(KIO::UDSEntry::UDS_INODE, 56); + + // == + Q_ASSERT(entry == entry2); + Q_ASSERT(!(entry == entry3)); + Q_ASSERT(!(entry == entry4)); + Q_ASSERT(!(entry2 == entry3)); + + // != + Q_ASSERT(!(entry != entry2)); + Q_ASSERT(entry != entry3); + Q_ASSERT(entry != entry4); + Q_ASSERT(entry2 != entry3); + + // make entry3 == entry + entry3.replace(KIO::UDSEntry::UDS_USER, QStringLiteral("user1")); + + Q_ASSERT(entry == entry3); + Q_ASSERT(entry2 == entry3); + Q_ASSERT(!(entry != entry3)); + Q_ASSERT(!(entry2 != entry3)); +} + QTEST_MAIN(UDSEntryTest) diff --git a/src/core/udsentry.h b/src/core/udsentry.h --- a/src/core/udsentry.h +++ b/src/core/udsentry.h @@ -44,6 +44,18 @@ */ KIOCORE_EXPORT QDebug operator<<(QDebug stream, const KIO::UDSEntry &entry); +/** + * Returns true if the entry contains the same data as the other + * @since 5.62.0 + */ +KIOCORE_EXPORT bool operator== (const KIO::UDSEntry &entry, const KIO::UDSEntry &other); + +/** + * Returns true if the entry does not contain the same data as the other + * @since 5.62.0 + */ +KIOCORE_EXPORT bool operator!= (const KIO::UDSEntry &entry, const KIO::UDSEntry &other); + namespace KIO { class UDSEntryPrivate; @@ -337,6 +349,9 @@ friend KIOCORE_EXPORT QDataStream& ::operator<< (QDataStream &s, const KIO::UDSEntry &a); friend KIOCORE_EXPORT QDataStream& ::operator>> (QDataStream &s, KIO::UDSEntry &a); friend KIOCORE_EXPORT QDebug (::operator<<) (QDebug stream, const KIO::UDSEntry &entry); + friend KIOCORE_EXPORT bool ::operator==(const KIO::UDSEntry &entry, const KIO::UDSEntry &other); + friend KIOCORE_EXPORT bool ::operator!=(const KIO::UDSEntry &entry, const KIO::UDSEntry &other); + public: /** * Replace or insert field with string value diff --git a/src/core/udsentry.cpp b/src/core/udsentry.cpp --- a/src/core/udsentry.cpp +++ b/src/core/udsentry.cpp @@ -463,3 +463,13 @@ a.d->load(s); return s; } + +KIOCORE_EXPORT bool operator==(const KIO::UDSEntry &entry, const KIO::UDSEntry &other) +{ + return entry.d == other.d; +} + +KIOCORE_EXPORT bool operator!=(const KIO::UDSEntry &entry, const KIO::UDSEntry &other) +{ + return entry.d != other.d; +}