Skip to content

Commit 8775ece

Browse files
committed
address review feedback: clarify comment and fix test file ordering
1 parent 9c1cf10 commit 8775ece

2 files changed

Lines changed: 89 additions & 88 deletions

File tree

packages/devtools_app_shared/lib/src/service/isolate_manager.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,9 @@ final class IsolateManager with DisposerMixin {
181181
(_shouldReselectMainIsolate ||
182182
_selectedIsolate.value == null ||
183183
_selectedIsolate.value == previousMain)) {
184-
// If the previous main exited and returned (hot restart) or we were
185-
// following the previous main, follow the newly computed main isolate.
184+
// If the previous main exited and returned (hot restart), or if the
185+
// selected isolate was previously the main isolate, update selection to
186+
// the newly computed main isolate.
186187
_shouldReselectMainIsolate = false;
187188
_setSelectedIsolate(_mainIsolate.value);
188189
}

packages/devtools_app_shared/test/service/isolate_manager_test.dart

Lines changed: 86 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -8,81 +8,6 @@ import 'package:devtools_app_shared/src/service/isolate_manager.dart';
88
import 'package:flutter_test/flutter_test.dart';
99
import 'package:vm_service/vm_service.dart';
1010

11-
/// Minimal fake VmService for IsolateManager tests.
12-
class _FakeVmService extends Fake implements VmService {
13-
_FakeVmService(this.isolates);
14-
15-
/// Map of isolate id -> Isolate to return from getIsolate().
16-
final Map<String, Isolate> isolates;
17-
18-
final _isolateEventController = StreamController<Event>.broadcast();
19-
20-
@override
21-
Stream<Event> get onIsolateEvent => _isolateEventController.stream;
22-
23-
@override
24-
Stream<Event> get onDebugEvent => const Stream.empty();
25-
26-
@override
27-
Future<Isolate> getIsolate(String isolateId) async {
28-
return isolates[isolateId] ??
29-
Isolate.parse({
30-
'id': isolateId,
31-
'runnable': true,
32-
'extensionRPCs': <String>[],
33-
})!;
34-
}
35-
36-
@override
37-
Future<Success> resume(String isolateId, {String? step, int? frameIndex}) =>
38-
Future.value(Success());
39-
40-
Future<void> emitIsolateStart(IsolateRef isolateRef) async {
41-
_isolateEventController.add(
42-
Event.parse({
43-
'type': 'Event',
44-
'kind': EventKind.kIsolateStart,
45-
'isolate': {
46-
'type': '@Isolate',
47-
'id': isolateRef.id,
48-
'name': isolateRef.name,
49-
'isSystemIsolate': isolateRef.isSystemIsolate,
50-
},
51-
})!,
52-
);
53-
await Future<void>.delayed(Duration.zero);
54-
}
55-
56-
@override
57-
Future<void> dispose() async {
58-
await _isolateEventController.close();
59-
}
60-
}
61-
62-
/// Creates a minimal runnable [Isolate] for a given [IsolateRef].
63-
Isolate _makeIsolate(IsolateRef ref, {String? rootLibraryUri}) {
64-
final json = <String, Object?>{
65-
'id': ref.id,
66-
'name': ref.name,
67-
'type': '@Isolate',
68-
'runnable': true,
69-
'extensionRPCs': <String>[],
70-
if (rootLibraryUri != null)
71-
'rootLib': {
72-
'type': '@Library',
73-
'id': 'libraries/0',
74-
'uri': rootLibraryUri,
75-
},
76-
};
77-
78-
return Isolate.parse(json)!;
79-
}
80-
81-
/// Creates an [IsolateRef] with the given name and id.
82-
IsolateRef _makeRef(String name, String id) {
83-
return IsolateRef.parse({'name': name, 'id': id, 'isSystemIsolate': false})!;
84-
}
85-
8611
void main() {
8712
group('IsolateManager._computeMainIsolate', () {
8813
late IsolateManager manager;
@@ -115,9 +40,9 @@ void main() {
11540
final vmServiceRef = _makeRef('vm-service', 'isolates/3');
11641

11742
final fakeService = _FakeVmService({
118-
'isolates/1': _makeIsolate(testRunnerRef),
119-
'isolates/2': _makeIsolate(testSuiteRef),
120-
'isolates/3': _makeIsolate(vmServiceRef),
43+
testRunnerRef.id!: _makeIsolate(testRunnerRef),
44+
testSuiteRef.id!: _makeIsolate(testSuiteRef),
45+
vmServiceRef.id!: _makeIsolate(vmServiceRef),
12146
});
12247
fakeServices.add(fakeService);
12348

@@ -143,8 +68,8 @@ void main() {
14368
final vmServiceRef = _makeRef('vm-service', 'isolates/2');
14469

14570
final fakeService = _FakeVmService({
146-
'isolates/1': _makeIsolate(mainRef),
147-
'isolates/2': _makeIsolate(vmServiceRef),
71+
mainRef.id!: _makeIsolate(mainRef),
72+
vmServiceRef.id!: _makeIsolate(vmServiceRef),
14873
});
14974
fakeServices.add(fakeService);
15075

@@ -162,7 +87,7 @@ void main() {
16287
final scriptRef = _makeRef('foo.dart:main()', 'isolates/1');
16388

16489
final fakeService = _FakeVmService({
165-
'isolates/1': _makeIsolate(scriptRef),
90+
scriptRef.id!: _makeIsolate(scriptRef),
16691
});
16792
fakeServices.add(fakeService);
16893

@@ -183,15 +108,15 @@ void main() {
183108
final vmServiceRef = _makeRef('vm-service', 'isolates/3');
184109

185110
final fakeService = _FakeVmService({
186-
'isolates/1': _makeIsolate(
111+
testRunnerRef.id!: _makeIsolate(
187112
testRunnerRef,
188113
rootLibraryUri: 'file:///tmp/dart_test.kernel.abcd/test.dart',
189114
),
190-
'isolates/2': _makeIsolate(
115+
userTestRef.id!: _makeIsolate(
191116
userTestRef,
192117
rootLibraryUri: 'package:my_app/foo_test.dart',
193118
),
194-
'isolates/3': _makeIsolate(
119+
vmServiceRef.id!: _makeIsolate(
195120
vmServiceRef,
196121
rootLibraryUri: 'dart:developer',
197122
),
@@ -223,8 +148,8 @@ void main() {
223148
);
224149

225150
final fakeService = _FakeVmService({
226-
'isolates/1': _makeIsolate(testRunnerRef),
227-
'isolates/2': _makeIsolate(testSuiteRef),
151+
testRunnerRef.id!: _makeIsolate(testRunnerRef),
152+
testSuiteRef.id!: _makeIsolate(testSuiteRef),
228153
});
229154
fakeServices.add(fakeService);
230155

@@ -250,3 +175,78 @@ void main() {
250175
);
251176
});
252177
}
178+
179+
/// Minimal fake VmService for IsolateManager tests.
180+
class _FakeVmService extends Fake implements VmService {
181+
_FakeVmService(this.isolates);
182+
183+
/// Map of isolate id -> Isolate to return from getIsolate().
184+
final Map<String, Isolate> isolates;
185+
186+
final _isolateEventController = StreamController<Event>.broadcast();
187+
188+
@override
189+
Stream<Event> get onIsolateEvent => _isolateEventController.stream;
190+
191+
@override
192+
Stream<Event> get onDebugEvent => const Stream.empty();
193+
194+
@override
195+
Future<Isolate> getIsolate(String isolateId) async {
196+
return isolates[isolateId] ??
197+
Isolate.parse({
198+
'id': isolateId,
199+
'runnable': true,
200+
'extensionRPCs': <String>[],
201+
})!;
202+
}
203+
204+
@override
205+
Future<Success> resume(String isolateId, {String? step, int? frameIndex}) =>
206+
Future.value(Success());
207+
208+
Future<void> emitIsolateStart(IsolateRef isolateRef) async {
209+
_isolateEventController.add(
210+
Event.parse({
211+
'type': 'Event',
212+
'kind': EventKind.kIsolateStart,
213+
'isolate': {
214+
'type': '@Isolate',
215+
'id': isolateRef.id,
216+
'name': isolateRef.name,
217+
'isSystemIsolate': isolateRef.isSystemIsolate,
218+
},
219+
})!,
220+
);
221+
await Future<void>.delayed(Duration.zero);
222+
}
223+
224+
@override
225+
Future<void> dispose() async {
226+
await _isolateEventController.close();
227+
}
228+
}
229+
230+
/// Creates a minimal runnable [Isolate] for a given [IsolateRef].
231+
Isolate _makeIsolate(IsolateRef ref, {String? rootLibraryUri}) {
232+
final json = <String, Object?>{
233+
'id': ref.id,
234+
'name': ref.name,
235+
'type': '@Isolate',
236+
'runnable': true,
237+
'extensionRPCs': <String>[],
238+
if (rootLibraryUri != null)
239+
'rootLib': {
240+
'type': '@Library',
241+
'id': 'libraries/0',
242+
'uri': rootLibraryUri,
243+
},
244+
};
245+
246+
return Isolate.parse(json)!;
247+
}
248+
249+
/// Creates an [IsolateRef] with the given name and id.
250+
IsolateRef _makeRef(String name, String id) {
251+
return IsolateRef.parse({'name': name, 'id': id, 'isSystemIsolate': false})!;
252+
}

0 commit comments

Comments
 (0)