blob: 9ef5cf9d3bb3b71c9c3881c1f2b8b9f3fc2e76d6 [file] [log] [blame]
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
import 'package:test/fake.dart';
import 'package:vm_service/vm_service.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
/// [FakePeer] implements the bare minimum of the [Peer] interface needed for
/// [DartDevelopmentService] to establish a connection with a VM service.
///
/// `sendRequest` can be overridden to provide custom handling for VM service
/// RPCs and custom RPCs to control the state of the [FakePeer] instance from a
/// VM service client request routed through a [DartDevelopmentService] instance.
class FakePeer extends Fake implements json_rpc.Peer {
@override
Future<void> get done => doneCompleter.future;
final Completer<void> doneCompleter = Completer<void>();
bool get isClosed => doneCompleter.isCompleted;
@override
Future<void> listen() {
return done;
}
@override
void registerMethod(String name, Function callback) {}
@override
Future<dynamic> sendRequest(String method, [args]) async {
switch (method) {
case 'getVM':
return _buildResponse(VM(
name: 'Test',
architectureBits: 0,
hostCPU: '',
operatingSystem: '',
targetCPU: '',
version: '',
pid: 0,
startTime: 0,
isolates: [],
isolateGroups: [],
systemIsolateGroups: [],
systemIsolates: [],
));
default:
return _buildResponse(Success());
}
}
Map<String, dynamic> _buildResponse(dynamic serviceObject) {
return {
'json_rpc': '2.0',
'id': _idCount++,
...serviceObject.toJson(),
};
}
int _idCount = 0;
}
class FakeWebSocketSink extends Fake implements WebSocketSink {
@override
Future close([int? closeCode, String? closeReason]) {
// Do nothing.
return Future.value();
}
}
/// [FakeWebSocketChannel] implements the bare minimum of the [WebSocket]
/// interface required to finish DDS initialization.
class FakeWebSocketChannel extends Fake implements WebSocketChannel {
@override
WebSocketSink get sink => FakeWebSocketSink();
}