import 'package:flutter_test/flutter_test.dart'; import 'package:halkyon_app/halkyon_app.dart'; import '../support/eventually.dart'; void main() { late List deleted; late DelayedDeletions deletions; setUp(() { deleted = []; deletions = DelayedDeletions( (id) async => deleted.add(id), undoWindow: const Duration(milliseconds: 10), ); }); tearDown(() => deletions.dispose()); test('a held deletion waits past the time to undo, until it is let go: ' 'then it takes its time to undo', () async { deletions.hold('a'); await Future.delayed(const Duration(milliseconds: 50)); expect(deletions.pending, {'a'}); expect(deleted, isEmpty); deletions.delete('a'); expect(deletions.pending, {'a'}); await eventually(() => deletions.pending.isEmpty); expect(deleted, ['a']); }); test('a held deletion can be undone', () async { deletions ..hold('a') ..undo('a'); expect(deletions.pending, isEmpty); await Future.delayed(const Duration(milliseconds: 50)); expect(deleted, isEmpty); }); test('closing drops a held deletion: the item stays', () async { deletions.hold('a'); await deletions.dispose(); await Future.delayed(const Duration(milliseconds: 50)); expect(deleted, isEmpty); deletions = DelayedDeletions((id) async {}); }); }