import 'package:clide/clide.dart'; import 'package:clide/kernel/kernel.dart'; /// A DaemonClient that doesn't actually open a socket. Use in tests /// that need a connected-state observable but not a real daemon. class FakeDaemonClient extends DaemonClient { FakeDaemonClient({required super.log, required super.events}) : super.unixSocket(socketPath: '/dev/null/fake-clide.sock'); bool _fakeConnected = false; final Map Function(Map)> _stubs = {}; @override bool get isConnected => _fakeConnected; @override Future start() async { // No real socket; tests drive connection-state via [setConnected]. } @override Future stop() async { _fakeConnected = false; notifyListeners(); } @override Future request(String cmd, {Map args = const {}}) async { final stub = _stubs[cmd]; if (stub != null) return stub(args); return IpcResponse.err( id: '', error: IpcError(code: IpcExitCode.notFound, kind: IpcErrorKind.notFound, message: 'no stub for $cmd'), ); } void setConnected(bool v) { if (_fakeConnected == v) return; _fakeConnected = v; notifyListeners(); } void stub(String cmd, Future Function(Map) handler) { _stubs[cmd] = handler; } }