@@ -18,6 +18,7 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
18
18
required FileSystem fileSystem,
19
19
required Platform platform,
20
20
bool simulateAppStarted = true ,
21
+ FutureOr <void > Function (MockFlutterDebugAdapter adapter)? preAppStart,
21
22
}) {
22
23
final StreamController <List <int >> stdinController = StreamController <List <int >>();
23
24
final StreamController <List <int >> stdoutController = StreamController <List <int >>();
@@ -30,6 +31,7 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
30
31
fileSystem: fileSystem,
31
32
platform: platform,
32
33
simulateAppStarted: simulateAppStarted,
34
+ preAppStart: preAppStart,
33
35
);
34
36
}
35
37
@@ -39,6 +41,7 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
39
41
required super .fileSystem,
40
42
required super .platform,
41
43
this .simulateAppStarted = true ,
44
+ this .preAppStart,
42
45
}) {
43
46
clientChannel.listen ((ProtocolMessage message) {
44
47
_handleDapToClientMessage (message);
@@ -48,13 +51,24 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
48
51
int _seq = 1 ;
49
52
final ByteStreamServerChannel clientChannel;
50
53
final bool simulateAppStarted;
54
+ final FutureOr <void > Function (MockFlutterDebugAdapter adapter)? preAppStart;
51
55
52
56
late String executable;
53
57
late List <String > processArgs;
54
58
late Map <String , String >? env;
55
59
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
+ }
58
72
59
73
/// A list of all messages sent from the adapter to the `flutter run` processes `stdin` .
60
74
final List <Map <String , Object ?>> dapToFlutterMessages = < Map <String , Object ?>> [];
@@ -79,6 +93,8 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
79
93
this .processArgs = processArgs;
80
94
this .env = env;
81
95
96
+ await preAppStart? .call (this );
97
+
82
98
// Simulate the app starting by triggering handling of events that Flutter
83
99
// would usually write to stdout.
84
100
if (simulateAppStarted) {
@@ -96,7 +112,7 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
96
112
97
113
/// Handles messages sent from the debug adapter back to the client.
98
114
void _handleDapToClientMessage (ProtocolMessage message) {
99
- dapToClientMessages .add (message.toJson ());
115
+ _dapToClientMessagesController .add (message.toJson ());
100
116
101
117
// Pretend to be the client, delegating any reverse-requests to the relevant
102
118
// handler that is provided by the test.
@@ -131,12 +147,22 @@ class MockFlutterDebugAdapter extends FlutterDebugAdapter {
131
147
132
148
/// Simulates a message emitted by the `flutter run` process by directly
133
149
/// calling the debug adapters [handleStdout] method.
150
+ ///
151
+ /// Use [simulateRawStdout] to simulate non-daemon text output.
134
152
void simulateStdoutMessage (Map <String , Object ?> message) {
135
153
// Messages are wrapped in a list because Flutter only processes messages
136
154
// wrapped in brackets.
137
155
handleStdout (jsonEncode (< Object ? > [message]));
138
156
}
139
157
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
+
140
166
@override
141
167
void sendFlutterMessage (Map <String , Object ?> message) {
142
168
dapToFlutterMessages.add (message);
0 commit comments