async_mutex_test.dart 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import 'package:flutter_test/flutter_test.dart';
  2. import 'package:immich_mobile/utils/async_mutex.dart';
  3. void main() {
  4. group('Test AsyncMutex grouped', () {
  5. test('test ordered execution', () async {
  6. AsyncMutex lock = AsyncMutex();
  7. List<int> events = [];
  8. expect(0, lock.enqueued);
  9. lock.run(
  10. () => Future.delayed(
  11. const Duration(milliseconds: 10),
  12. () => events.add(1),
  13. ),
  14. );
  15. expect(1, lock.enqueued);
  16. lock.run(
  17. () => Future.delayed(
  18. const Duration(milliseconds: 3),
  19. () => events.add(2),
  20. ),
  21. );
  22. expect(2, lock.enqueued);
  23. lock.run(
  24. () => Future.delayed(
  25. const Duration(milliseconds: 1),
  26. () => events.add(3),
  27. ),
  28. );
  29. expect(3, lock.enqueued);
  30. await lock.run(
  31. () => Future.delayed(
  32. const Duration(milliseconds: 10),
  33. () => events.add(4),
  34. ),
  35. );
  36. expect(0, lock.enqueued);
  37. expect(events, [1, 2, 3, 4]);
  38. });
  39. });
  40. }