fake_services.dart 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import 'dart:async';
  2. import 'dart:typed_data';
  3. import 'package:asr_client/models/websocket_message.dart';
  4. import 'package:asr_client/services/audio_capture_service.dart';
  5. import 'package:asr_client/services/settings_service.dart';
  6. import 'package:asr_client/services/websocket_service.dart' as ws;
  7. class FakeSettingsService implements SettingsService {
  8. @override
  9. Future<String> getHost() async => 'localhost';
  10. @override
  11. Future<int> getPort() async => 8765;
  12. @override
  13. Future<void> setHost(String host) async {}
  14. @override
  15. Future<void> setPort(int port) async {}
  16. @override
  17. String getWebSocketUrl(String host, int port) => 'ws://$host:$port';
  18. }
  19. class FakeWebSocketService implements ws.WebSocketService {
  20. final _messageController = StreamController<ServerMessage>.broadcast();
  21. final _stateController = StreamController<ws.ConnectionState>.broadcast();
  22. var _state = ws.ConnectionState.disconnected;
  23. final _sent = <WebSocketMessage>[];
  24. List<WebSocketMessage> get sentMessages => List.unmodifiable(_sent);
  25. void emit(ServerMessage message) => _messageController.add(message);
  26. @override
  27. Stream<ServerMessage> get messageStream => _messageController.stream;
  28. @override
  29. Stream<ws.ConnectionState> get connectionStateStream =>
  30. _stateController.stream;
  31. @override
  32. ws.ConnectionState get currentState => _state;
  33. @override
  34. Future<void> connect(String url) async {
  35. _state = ws.ConnectionState.connected;
  36. _stateController.add(ws.ConnectionState.connected);
  37. }
  38. @override
  39. void send(WebSocketMessage message) {
  40. _sent.add(message);
  41. }
  42. @override
  43. void sendBinary(List<int> bytes) {
  44. // no-op for tests
  45. }
  46. @override
  47. void disconnect() {
  48. _state = ws.ConnectionState.disconnected;
  49. }
  50. void dispose() {
  51. _messageController.close();
  52. _stateController.close();
  53. }
  54. }
  55. class FakeAudioCaptureService implements AudioCaptureService {
  56. final _levelController = StreamController<double>.broadcast();
  57. var _recording = false;
  58. Uint8List? pendingBytes;
  59. @override
  60. Stream<double> get audioLevelStream => _levelController.stream;
  61. @override
  62. bool get isRecording => _recording;
  63. @override
  64. Future<bool> requestPermission() async => true;
  65. @override
  66. Future<bool> get isPermissionPermanentlyDenied async => false;
  67. @override
  68. Future<void> openSettings() async {}
  69. @override
  70. Future<void> startRecording() async {
  71. _recording = true;
  72. }
  73. @override
  74. Future<void> stopRecording() async {
  75. _recording = false;
  76. }
  77. @override
  78. Uint8List? takeBuffer() {
  79. if (!_recording) return null;
  80. final data = pendingBytes;
  81. pendingBytes = null;
  82. return data;
  83. }
  84. @override
  85. void dispose() {
  86. _levelController.close();
  87. }
  88. }