import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/utils/serial_future_queue.dart'; void main() { test('a failed operation does not poison the next queued operation', () async { final queue = SerialFutureQueue(); await expectLater(queue.run(() async => throw StateError('failed')), throwsStateError); expect(await queue.run(() async => 42), 42); await queue.settled; }); test('operations remain serialized while callers receive their own results', () async { final queue = SerialFutureQueue(); final firstStarted = Completer(); final releaseFirst = Completer(); var secondStarted = false; final first = queue.run(() async { firstStarted.complete(); await releaseFirst.future; return 'first'; }); final second = queue.run(() async { secondStarted = true; return 'second'; }); await firstStarted.future; await Future.delayed(Duration.zero); expect(secondStarted, isFalse); releaseFirst.complete(); expect(await first, 'first'); expect(await second, 'second'); }); }