PatrolBinding constructor
PatrolBinding(
- PlatformAutomator platform
Creates a new PatrolBinding.
You most likely don't want to call it yourself.
Implementation
PatrolBinding(PlatformAutomator platform)
: _serviceExtensions = DevtoolsServiceExtensions(platform) {
setUp(() {
if (_isDevelopMode) {
return;
}
if (global_state.currentTestIndividualName == 'patrol_test_explorer') {
return;
}
_currentDartTest = global_state.currentTestFullName;
});
tearDown(() async {
if (_isDevelopMode) {
// Sending results ends the test, which we don't want for Hot Restart
return;
}
final testName = global_state.currentTestIndividualName;
if (testName == 'patrol_test_explorer') {
return;
} else {
logger(
'tearDown(): count: ${_testResults.length}, results: $_testResults',
);
}
final nameOfRequestedTest = await patrolAppService.testExecutionRequested;
if (nameOfRequestedTest == _currentDartTest) {
if (const bool.fromEnvironment('COVERAGE_ENABLED')) {
try {
try {
final serviceInfo = await Service.getInfo();
final serverUri = serviceInfo.serverUri;
if (serverUri != null) {
final infoFile = io.File('/tmp/patrol_vm_service.json');
await infoFile.writeAsString(
jsonEncode({'uri': serverUri.toString()}),
);
logger('Wrote VM service URI to ${infoFile.path}');
}
} catch (e) {
logger('VM service info file write skipped: $e');
}
final testCompleter = Completer<void>();
registerExtension('ext.patrol.coverageReady', (
method,
parameters,
) async {
return ServiceExtensionResponse.result(jsonEncode({
'mainIsolateId': Service.getIsolateId(Isolate.current),
}));
});
registerExtension('ext.patrol.markTestCompleted', (
method,
parameters,
) async {
testCompleter.complete();
return ServiceExtensionResponse.result(jsonEncode({}));
});
await testCompleter.future.timeout(
const Duration(seconds: 10),
onTimeout: () {
logger(
'Coverage collection timed out after 10s — '
'CoverageTool may not be connected. Proceeding.',
);
},
);
} catch (e) {
logger('Coverage protocol unavailable (web?): $e');
}
}
logger(
'finished test $_currentDartTest. Will report its status back to the native side',
);
final passed = global_state.isCurrentTestPassing;
logger(
'tearDown(): test "$testName" in group "$_currentDartTest", passed: $passed',
);
await patrolAppService.markDartTestAsCompleted(
dartFileName: _currentDartTest!,
passed: passed,
details: _testResults[_currentDartTest!] is Failure
? (_testResults[_currentDartTest!] as Failure?)?.details
: null,
);
} else {
logger(
'finished test $_currentDartTest, but it was not requested, so its status will not be reported back to the native side',
);
}
});
}