From 9d18247793203275f0118b13f8e10d12acfdaf67 Mon Sep 17 00:00:00 2001 From: uvok Date: Sat, 2 Aug 2025 13:55:48 +0200 Subject: Add tests for extension --- test/list_key_test.dart | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 test/list_key_test.dart (limited to 'test/list_key_test.dart') diff --git a/test/list_key_test.dart b/test/list_key_test.dart new file mode 100644 index 0000000..2b4fa6a --- /dev/null +++ b/test/list_key_test.dart @@ -0,0 +1,63 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:uvok_epaper_badge/extensions/list_ext.dart'; + +import 'test_device.dart'; + +void main() { + group('ListExt.addOrReplaceKey with Device', () { + test('adds device when no key matches', () { + final list = [TestDevice(1, 'A'), TestDevice(2, 'B')]; + final newDevice = TestDevice(3, 'C'); + + list.addOrReplaceKey(newDevice, keySelector: (d) => d.id); + + expect(list.length, 3); + expect(list.contains(newDevice), isTrue); + }); + + test('replaces device when key matches and no replaceCondition', () { + final list = [TestDevice(1, 'A'), TestDevice(2, 'B')]; + final replacement = TestDevice(2, 'Z'); + + list.addOrReplaceKey(replacement, keySelector: (d) => d.id); + + expect(list[1], equals(replacement)); + }); + + test('does not replace when replaceCondition is false', () { + final list = [TestDevice(1, 'A'), TestDevice(2, 'B')]; + final attemptedReplace = TestDevice(2, 'Z'); + + list.addOrReplaceKey( + attemptedReplace, + keySelector: (d) => d.id, + replaceCondition: (existing) => false, + ); + + expect(list[1].name, equals('B')); + }); + + test('replaces when replaceCondition is true', () { + final list = [TestDevice(1, 'A'), TestDevice(2, 'B')]; + final attemptedReplace = TestDevice(2, 'Z'); + + list.addOrReplaceKey( + attemptedReplace, + keySelector: (d) => d.id, + replaceCondition: (existing) => true, + ); + + expect(list[1], equals(attemptedReplace)); + }); + + test('replaces only the first matching key', () { + final list = [TestDevice(2, 'B1'), TestDevice(2, 'B2')]; + final newDevice = TestDevice(2, 'B0'); + + list.addOrReplaceKey(newDevice, keySelector: (d) => d.id); + + expect(list[0], equals(newDevice)); + expect(list[1].name, equals('B2')); + }); + }); +} -- cgit v1.2.3