From 405306f84e0eab5224d79f21a676dc9c2880a31e Mon Sep 17 00:00:00 2001 From: Sorunome Date: Sat, 19 Dec 2020 11:54:06 +0100 Subject: [PATCH] feat: Add == operator to the Receipt, User and Room objects --- lib/src/room.dart | 3 +++ lib/src/user.dart | 6 ++++++ lib/src/utils/receipt.dart | 5 +++++ test/client_test.dart | 30 ++++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+) diff --git a/lib/src/room.dart b/lib/src/room.dart index 2ff25352..2c9b1126 100644 --- a/lib/src/room.dart +++ b/lib/src/room.dart @@ -1730,4 +1730,7 @@ class Room { TombstoneContent get extinctInformations => isExtinct ? getState(EventTypes.RoomTombstone).parsedTombstoneContent : null; + + @override + bool operator ==(dynamic other) => (other is Room && other.id == id); } diff --git a/lib/src/user.dart b/lib/src/user.dart index 04d818dd..f762e4a5 100644 --- a/lib/src/user.dart +++ b/lib/src/user.dart @@ -175,4 +175,10 @@ class User extends Event { /// Please be aware that you can only set the power level to at least your own! bool get canChangePowerLevel => room.canChangePowerLevel && powerLevel < room.ownPowerLevel; + + @override + bool operator ==(dynamic other) => (other is User && + other.id == id && + other.room == room && + other.membership == membership); } diff --git a/lib/src/utils/receipt.dart b/lib/src/utils/receipt.dart index 4f154954..da7fefe8 100644 --- a/lib/src/utils/receipt.dart +++ b/lib/src/utils/receipt.dart @@ -7,4 +7,9 @@ class Receipt { final DateTime time; const Receipt(this.user, this.time); + + @override + bool operator ==(dynamic other) => (other is Receipt && + other.user == user && + other.time.microsecondsSinceEpoch == time.microsecondsSinceEpoch); } diff --git a/test/client_test.dart b/test/client_test.dart index 3a140483..79d2dcdf 100644 --- a/test/client_test.dart +++ b/test/client_test.dart @@ -453,6 +453,36 @@ void main() { await client.dispose(closeDatabase: true); }); + test('object equality', () async { + final time1 = DateTime.fromMillisecondsSinceEpoch(1); + final time2 = DateTime.fromMillisecondsSinceEpoch(0); + final user1 = User('@user1:example.org', room: Room(id: '!room1')); + final user2 = User('@user2:example.org', room: Room(id: '!room1')); + // receipts + expect(Receipt(user1, time1) == Receipt(user1, time1), true); + expect(Receipt(user1, time1) == Receipt(user1, time2), false); + expect(Receipt(user1, time1) == Receipt(user2, time1), false); + // ignore: unrelated_type_equality_checks + expect(Receipt(user1, time1) == 'beep', false); + // users + expect(user1 == user1, true); + expect(user1 == user2, false); + expect( + user1 == User('@user1:example.org', room: Room(id: '!room2')), false); + expect( + user1 == + User('@user1:example.org', + room: Room(id: '!room1'), membership: 'leave'), + false); + // ignore: unrelated_type_equality_checks + expect(user1 == 'beep', false); + // rooms + expect(Room(id: '!room1') == Room(id: '!room1'), true); + expect(Room(id: '!room1') == Room(id: '!room2'), false); + // ignore: unrelated_type_equality_checks + expect(Room(id: '!room1') == 'beep', false); + }); + test('dispose', () async { await matrix.dispose(closeDatabase: true); });