Files
GitJournal/test_driver/isolates_workaround.dart
Vishesh Handa 36aaabf582 TestDriver: Take some more screenshots
* Add some existing notes
* Screenshot the checklist edit
* Screenshot the folders view
2020-04-16 17:34:38 +02:00

68 lines
1.7 KiB
Dart

import 'dart:async';
import 'package:flutter_driver/flutter_driver.dart';
/// Workaround for bug: https://github.com/flutter/flutter/issues/24703
///
/// USAGE
///
/// ```
/// FlutterDriver driver;
/// IsolatesWorkaround workaround;
///
/// setUpAll(() async {
/// driver = await FlutterDriver.connect();
/// workaround = IsolatesWorkaround(driver);
/// await workaround.resumeIsolates();
/// });
///
/// tearDownAll(() async {
/// if (driver != null) {
/// await driver.close();
/// await workaround.tearDown();
/// }
/// });
/// ```
class IsolatesWorkaround {
IsolatesWorkaround(this._driver, {this.log = false});
final FlutterDriver _driver;
final bool log;
StreamSubscription _streamSubscription;
/// workaround for isolates
/// https://github.com/flutter/flutter/issues/24703
Future<void> resumeIsolates() async {
final vm = await _driver.serviceClient.getVM();
// // unpause any paused isolated
for (final isolateRef in vm.isolates) {
final isolate = await isolateRef.load();
if (isolate.isPaused) {
isolate.resume();
if (log) {
print("Resuming isolate: ${isolate.numberAsString}:${isolate.name}");
}
}
}
if (_streamSubscription != null) {
return;
}
_streamSubscription = _driver.serviceClient.onIsolateRunnable
.asBroadcastStream()
.listen((isolateRef) async {
final isolate = await isolateRef.load();
if (isolate.isPaused) {
isolate.resume();
if (log) {
print("Resuming isolate: ${isolate.numberAsString}:${isolate.name}");
}
}
});
}
Future<void> tearDown() async {
if (_streamSubscription != null) {
await _streamSubscription.cancel();
}
}
}