mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
153 lines
4.7 KiB
Dart
153 lines
4.7 KiB
Dart
// Copyright 2014 The Flutter Authors. 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:dds/dap.dart';
|
|
import 'package:flutter_tools/src/base/file_system.dart';
|
|
import 'package:flutter_tools/src/base/platform.dart';
|
|
import 'package:flutter_tools/src/debug_adapters/flutter_adapter.dart';
|
|
import 'package:flutter_tools/src/debug_adapters/flutter_test_adapter.dart';
|
|
|
|
/// A [FlutterDebugAdapter] that captures what process/args will be launched.
|
|
class MockFlutterDebugAdapter extends FlutterDebugAdapter {
|
|
factory MockFlutterDebugAdapter({
|
|
required FileSystem fileSystem,
|
|
required Platform platform,
|
|
bool simulateAppStarted = true,
|
|
}) {
|
|
final StreamController<List<int>> stdinController = StreamController<List<int>>();
|
|
final StreamController<List<int>> stdoutController = StreamController<List<int>>();
|
|
final ByteStreamServerChannel channel = ByteStreamServerChannel(stdinController.stream, stdoutController.sink, null);
|
|
|
|
return MockFlutterDebugAdapter._(
|
|
stdinController.sink,
|
|
stdoutController.stream,
|
|
channel,
|
|
fileSystem: fileSystem,
|
|
platform: platform,
|
|
simulateAppStarted: simulateAppStarted,
|
|
);
|
|
}
|
|
|
|
MockFlutterDebugAdapter._(
|
|
this.stdin,
|
|
this.stdout,
|
|
ByteStreamServerChannel channel, {
|
|
required FileSystem fileSystem,
|
|
required Platform platform,
|
|
this.simulateAppStarted = true,
|
|
}) : super(channel, fileSystem: fileSystem, platform: platform);
|
|
|
|
final StreamSink<List<int>> stdin;
|
|
final Stream<List<int>> stdout;
|
|
final bool simulateAppStarted;
|
|
|
|
late String executable;
|
|
late List<String> processArgs;
|
|
late Map<String, String>? env;
|
|
final List<String> flutterRequests = <String>[];
|
|
|
|
@override
|
|
Future<void> launchAsProcess({
|
|
required String executable,
|
|
required List<String> processArgs,
|
|
required Map<String, String>? env,
|
|
}) async {
|
|
this.executable = executable;
|
|
this.processArgs = processArgs;
|
|
this.env = env;
|
|
|
|
// Pretend we launched the app and got the app.started event so that
|
|
// launchRequest will complete.
|
|
if (simulateAppStarted) {
|
|
appId = 'TEST';
|
|
appStartedCompleter.complete();
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<Object?> sendFlutterRequest(
|
|
String method,
|
|
Map<String, Object?>? params, {
|
|
bool failSilently = true,
|
|
}) {
|
|
flutterRequests.add(method);
|
|
return super.sendFlutterRequest(method, params, failSilently: failSilently);
|
|
}
|
|
|
|
@override
|
|
Future<void> get debuggerInitialized {
|
|
// If we were mocking debug mode, then simulate the debugger initializing.
|
|
return enableDebugger
|
|
? Future<void>.value()
|
|
: throw StateError('Invalid attempt to wait for debuggerInitialized when not debugging');
|
|
}
|
|
}
|
|
|
|
/// A [FlutterTestDebugAdapter] that captures what process/args will be launched.
|
|
class MockFlutterTestDebugAdapter extends FlutterTestDebugAdapter {
|
|
factory MockFlutterTestDebugAdapter({
|
|
required FileSystem fileSystem,
|
|
required Platform platform,
|
|
}) {
|
|
final StreamController<List<int>> stdinController = StreamController<List<int>>();
|
|
final StreamController<List<int>> stdoutController = StreamController<List<int>>();
|
|
final ByteStreamServerChannel channel = ByteStreamServerChannel(stdinController.stream, stdoutController.sink, null);
|
|
|
|
return MockFlutterTestDebugAdapter._(
|
|
stdinController.sink,
|
|
stdoutController.stream,
|
|
channel,
|
|
fileSystem: fileSystem,
|
|
platform: platform,
|
|
);
|
|
}
|
|
|
|
MockFlutterTestDebugAdapter._(
|
|
this.stdin,
|
|
this.stdout,
|
|
ByteStreamServerChannel channel, {
|
|
required FileSystem fileSystem,
|
|
required Platform platform,
|
|
}) : super(channel, fileSystem: fileSystem, platform: platform);
|
|
|
|
final StreamSink<List<int>> stdin;
|
|
final Stream<List<int>> stdout;
|
|
|
|
late String executable;
|
|
late List<String> processArgs;
|
|
late Map<String, String>? env;
|
|
|
|
@override
|
|
Future<void> launchAsProcess({
|
|
required String executable,
|
|
required List<String> processArgs,
|
|
required Map<String, String>? env,
|
|
}) async {
|
|
this.executable = executable;
|
|
this.processArgs = processArgs;
|
|
this.env = env;
|
|
}
|
|
|
|
@override
|
|
Future<void> get debuggerInitialized {
|
|
// If we were mocking debug mode, then simulate the debugger initializing.
|
|
return enableDebugger
|
|
? Future<void>.value()
|
|
: throw StateError('Invalid attempt to wait for debuggerInitialized when not debugging');
|
|
}
|
|
}
|
|
|
|
class MockRequest extends Request {
|
|
MockRequest()
|
|
: super.fromMap(<String, Object?>{
|
|
'command': 'mock_command',
|
|
'type': 'mock_type',
|
|
'seq': _requestId++,
|
|
});
|
|
|
|
static int _requestId = 1;
|
|
}
|