@@ -189,6 +189,33 @@ void main() {
189189 );
190190 });
191191
192+ test ('Refreshes isolate if it is not started for long time' , () async {
193+ fakeIsolate.pauseEvent = vms.Event (kind: vms.EventKind .kNone, timestamp: 0 );
194+ fakeClient.onGetIsolate = changeIsolateEventAfter (
195+ 5 ,
196+ vms.Event (kind: vms.EventKind .kPauseStart, timestamp: 1 ),
197+ );
198+
199+ final FlutterDriver driver = await FlutterDriver .connect (dartVmServiceUrl: '' );
200+ expect (driver, isNotNull);
201+ expect (
202+ fakeClient.connectionLog,
203+ < String > [
204+ 'getIsolate' ,
205+ 'getIsolate' ,
206+ 'getIsolate' ,
207+ 'getIsolate' ,
208+ 'getIsolate' ,
209+ 'setFlag pause_isolates_on_start false' ,
210+ 'resume' ,
211+ 'streamListen Isolate' ,
212+ 'getIsolate' ,
213+ 'onIsolateEvent' ,
214+ 'streamCancel Isolate' ,
215+ ],
216+ );
217+ });
218+
192219 test ('Connects to isolate number' , () async {
193220 fakeIsolate.pauseEvent = vms.Event (kind: vms.EventKind .kPauseStart, timestamp: 0 );
194221 final FlutterDriver driver = await FlutterDriver .connect (dartVmServiceUrl: '' , isolateNumber: int .parse (fakeIsolate.number! ));
@@ -246,6 +273,14 @@ void main() {
246273 expectLogContains ('Isolate is paused mid-flight' );
247274 });
248275
276+ test ('connects to isolate paused mid-flight after request' , () async {
277+ fakeIsolate.pauseEvent = vms.Event (kind: vms.EventKind .kPausePostRequest, timestamp: 0 );
278+
279+ final FlutterDriver driver = await FlutterDriver .connect (dartVmServiceUrl: '' );
280+ expect (driver, isNotNull);
281+ expectLogContains ('Isolate is paused mid-flight' );
282+ });
283+
249284 // This test simulates a situation when we believe that the isolate is
250285 // currently paused, but something else (e.g. a debugger) resumes it before
251286 // we do. There's no need to fail as we should be able to drive the app
@@ -1055,6 +1090,15 @@ vms.Response? makeFakeResponse(
10551090 });
10561091}
10571092
1093+ void Function (vms.Isolate ) changeIsolateEventAfter (int gets, vms.Event nextEvent) {
1094+ return (vms.Isolate i) {
1095+ gets -= 1 ;
1096+ if (gets == 0 ) {
1097+ i.pauseEvent = nextEvent;
1098+ }
1099+ };
1100+ }
1101+
10581102class FakeFlutterWebConnection extends Fake implements FlutterWebConnection {
10591103 @override
10601104 bool supportsTimelineAction = false ;
@@ -1082,6 +1126,7 @@ class FakeVmService extends Fake implements vms.VmService {
10821126 FakeVM ? vm;
10831127 bool failOnSetFlag = false ;
10841128 bool failOnResumeWith101 = false ;
1129+ void Function (vms.Isolate )? onGetIsolate;
10851130
10861131 final List <String > connectionLog = < String > [];
10871132
@@ -1092,6 +1137,7 @@ class FakeVmService extends Fake implements vms.VmService {
10921137 Future <vms.Isolate > getIsolate (String isolateId) async {
10931138 connectionLog.add ('getIsolate' );
10941139 if (isolateId == vm! .isolate! .id) {
1140+ onGetIsolate? .call (vm! .isolate! );
10951141 return vm! .isolate! ;
10961142 }
10971143 throw UnimplementedError ('getIsolate called with unrecognized $isolateId ' );
0 commit comments