@@ -18,6 +18,7 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
1818 required FileSystem fileSystem,
1919 required Platform platform,
2020 bool simulateAppStarted = true ,
21+ FutureOr <void > Function (MockFlutterDebugAdapter adapter)? preAppStart,
2122 }) {
2223 final StreamController <List <int >> stdinController = StreamController <List <int >>();
2324 final StreamController <List <int >> stdoutController = StreamController <List <int >>();
@@ -30,6 +31,7 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
3031 fileSystem: fileSystem,
3132 platform: platform,
3233 simulateAppStarted: simulateAppStarted,
34+ preAppStart: preAppStart,
3335 );
3436 }
3537
@@ -39,6 +41,7 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
3941 required super .fileSystem,
4042 required super .platform,
4143 this .simulateAppStarted = true ,
44+ this .preAppStart,
4245 }) {
4346 clientChannel.listen ((ProtocolMessage message) {
4447 _handleDapToClientMessage (message);
@@ -48,13 +51,24 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
4851 int _seq = 1 ;
4952 final ByteStreamServerChannel clientChannel;
5053 final bool simulateAppStarted;
54+ final FutureOr <void > Function (MockFlutterDebugAdapter adapter)? preAppStart;
5155
5256 late String executable;
5357 late List <String > processArgs;
5458 late Map <String , String >? env;
5559
56- /// A list of all messages sent from the adapter back to the client.
57- final List <Map <String , Object ?>> dapToClientMessages = < Map <String , Object ?>> [];
60+ final StreamController <Map <String , Object ?>> _dapToClientMessagesController = StreamController <Map <String , Object ?>>.broadcast ();
61+
62+ /// A stream of all messages sent from the adapter back to the client.
63+ Stream <Map <String , Object ?>> get dapToClientMessages => _dapToClientMessagesController.stream;
64+
65+ /// A stream of all progress events sent from the adapter back to the client.
66+ Stream <Map <String , Object ?>> get dapToClientProgressEvents {
67+ const List <String > progressEventTypes = < String > ['progressStart' , 'progressUpdate' , 'progressEnd' ];
68+
69+ return dapToClientMessages
70+ .where ((Map <String , Object ?> message) => progressEventTypes.contains (message['event' ] as String ? ));
71+ }
5872
5973 /// A list of all messages sent from the adapter to the `flutter run` processes `stdin` .
6074 final List <Map <String , Object ?>> dapToFlutterMessages = < Map <String , Object ?>> [];
@@ -79,6 +93,8 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
7993 this .processArgs = processArgs;
8094 this .env = env;
8195
96+ await preAppStart? .call (this );
97+
8298 // Simulate the app starting by triggering handling of events that Flutter
8399 // would usually write to stdout.
84100 if (simulateAppStarted) {
@@ -96,7 +112,7 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
96112
97113 /// Handles messages sent from the debug adapter back to the client.
98114 void _handleDapToClientMessage (ProtocolMessage message) {
99- dapToClientMessages .add (message.toJson ());
115+ _dapToClientMessagesController .add (message.toJson ());
100116
101117 // Pretend to be the client, delegating any reverse-requests to the relevant
102118 // handler that is provided by the test.
@@ -131,12 +147,22 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
131147
132148 /// Simulates a message emitted by the `flutter run` process by directly
133149 /// calling the debug adapters [handleStdout] method.
150+ ///
151+ /// Use [simulateRawStdout] to simulate non-daemon text output.
134152 void simulateStdoutMessage (Map <String , Object ?> message) {
135153 // Messages are wrapped in a list because Flutter only processes messages
136154 // wrapped in brackets.
137155 handleStdout (jsonEncode (< Object ? > [message]));
138156 }
139157
158+ /// Simulates a string emitted by the `flutter run` process by directly
159+ /// calling the debug adapters [handleStdout] method.
160+ ///
161+ /// Use [simulateStdoutMessage] to simulate a daemon JSON message.
162+ void simulateRawStdout (String output) {
163+ handleStdout (output);
164+ }
165+
140166 @override
141167 void sendFlutterMessage (Map <String , Object ?> message) {
142168 dapToFlutterMessages.add (message);
0 commit comments