summaryrefslogtreecommitdiff
path: root/test/list_key_test.dart
diff options
context:
space:
mode:
Diffstat (limited to 'test/list_key_test.dart')
-rw-r--r--test/list_key_test.dart63
1 files changed, 63 insertions, 0 deletions
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'));
+ });
+ });
+}