mirror of
https://gitlab.com/veilid/veilid.git
synced 2025-03-13 01:16:47 -04:00

add subpackage to veilid-flutter with test fixtures for writing veilid integration tests in dart
48 lines
1.1 KiB
Dart
48 lines
1.1 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:async_tools/async_tools.dart';
|
|
|
|
import 'update_processor_fixture.dart';
|
|
|
|
abstract class TickerFixtureTickable {
|
|
Future<void> onTick();
|
|
}
|
|
|
|
class TickerFixture {
|
|
TickerFixture({required this.updateProcessorFixture});
|
|
|
|
static final _fixtureMutex = Mutex();
|
|
|
|
UpdateProcessorFixture updateProcessorFixture;
|
|
Timer? _tickTimer;
|
|
final List<TickerFixtureTickable> _tickables = [];
|
|
|
|
Future<void> setUp() async {
|
|
await _fixtureMutex.acquire();
|
|
_tickTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
|
|
singleFuture(this, _onTick);
|
|
});
|
|
}
|
|
|
|
Future<void> tearDown() async {
|
|
assert(_fixtureMutex.isLocked, 'should not tearDown without setUp');
|
|
final tickTimer = _tickTimer;
|
|
if (tickTimer != null) {
|
|
tickTimer.cancel();
|
|
}
|
|
_fixtureMutex.release();
|
|
}
|
|
|
|
void register(TickerFixtureTickable tickable) {
|
|
_tickables.add(tickable);
|
|
}
|
|
|
|
void unregister(TickerFixtureTickable tickable) {
|
|
_tickables.remove(tickable);
|
|
}
|
|
|
|
Future<void> _onTick() async {
|
|
await _tickables.map((t) => t.onTick()).wait;
|
|
}
|
|
}
|